diff options
author | Diego 'Flameeyes' Pettenò <flameeyes@gmail.com> | 2007-04-03 00:38:22 +0200 |
---|---|---|
committer | Diego 'Flameeyes' Pettenò <flameeyes@gmail.com> | 2007-04-03 00:38:22 +0200 |
commit | 0ed2cd4f34189ec303dfac5a30de0abae0decba8 (patch) | |
tree | 7a8d08d25ca7c81daa9d6cd65fd4f633fd676b41 | |
parent | 6081bc9a06ee97333769f77a9e5c18a15afb29da (diff) | |
parent | 3dd7d925c2feb7868a49e7a1a0b953a5aab233f0 (diff) | |
download | xine-lib-0ed2cd4f34189ec303dfac5a30de0abae0decba8.tar.gz xine-lib-0ed2cd4f34189ec303dfac5a30de0abae0decba8.tar.bz2 |
Merge changes happened in 1.1 development.
424 files changed, 29825 insertions, 8461 deletions
@@ -18,5 +18,5 @@ ltmain.sh missing mkinstalldirs stamp-h1 -*.cache post-install.sh +autom4te.cache diff --git a/.hgtags b/.hgtags new file mode 100644 index 000000000..c504bbbe9 --- /dev/null +++ b/.hgtags @@ -0,0 +1,59 @@ +0315580865123cd22265aecdf5a18f398dbd9692 xine-1-beta6-release +06f9da67d47e60d77437ce14fe5d6eb4e471383d xine-1-rc3b-release +0c06707cc353fd89544c12044bf602ba1ae86b0b xine-0_9_6-release +0caef15bddcefa51b941b3233c59158d64fd740c xine-0_5_1-release +111735d0b1bf71c63fcd73d587ed942b6262e09e xine-1-rc4-release +1dc5aab206ddbe8d77ca8fde54d0def2a01c3381 xine-1-rc5-release +22213499ad56cdebaab0339ccdd1764067bc3741 xine-1-beta12-release **FUNKY** +2899f4f1abdec3eadae9d9739fb36d3faca59807 xine_1-rc3c-release +29315957aa894cfbbe6ef3a7f8d5d9cbae9f4e88 xine_1-rc7-release +2c65ec9c8037a0282433fba4f3fb1f6184dd31e5 xine-1-alpha1-release +3496a6be02bee3f32c5d10b17c54a0971baeea57 xine-1-beta2-release +378fe2fd99b5e31f9a93180859d6b6816fdcac48 xine-0_9_4-release **FUNKY** +3e25fe0cfbba9731b9dd888589668402b359fd69 xine-1-beta5-release +3e7e161d4ee8cce39368f8cf076e7365cae0d3b4 xine-0_9_7-release **FUNKY** +462ca6874836385e719b7da07044b09604385b1a xine-1_1_3-release +4922366db9ebf2e54f8e5828824e266c779daab4 xine-0_5_2-release +4a8d2fe2ff9df78e0341e3466c6ae4b2648b2fa8 xine-0_9_10-release +5ce64126f81231a79a89bdee8c5fde9e2cd8c1b5 xine-0_9_11-release +66c898586866cf123330dcf08e9e82ebbd2f2019 xine-1-beta9-release +6b6e18e988281d38b5a9d4a93bf5d9e410849229 xine_1-rc2-release +6cf80db29dc216d4baf95702538f288e5e4649d2 xine-0_9_3-release +6dcd38bb815a77f1d10d8688822cab033b191493 xine-1-beta8-release **FUNKY** +70dc8b636f983685a031311cb1003946d5849772 xine_1-rc0-release +73a7021e83a96df403a7fc3fbbf65b3e5170d254 xine-lib-1_1_2-release +77a33d365788a22af1cf06e8f32aca82bdae9986 xine-1-beta11-release +78c57d5e78d6fbaaa07694535fe3760c413e69af xine-1-beta7-release +7942b7c8ee6b370d298ec3ba99c78fc04872c8af DXR3_SORTA_OKAY +92f41526811f87d93e64f87c471ad14431fb60fa xine-0_9_9-release +9a23b3c5244c3d47617b4beca6fa32a734c489bb xine-1-rc3-release +9c168852e1cc292c7e1df0e49426d8e0106d1e25 xine-0_9_2-release +9e6a51d993fad6229605a5d86d7e750a638f4f23 xine-1-beta0-release +9fa822c32a4029a1073aa9c8f7e9dc9dc641fd7a xine-1-rc6-release +a7007ee5c2f21e5a5841f505c7b8f9a32174660f xine-1_1_4-release +b2d393b19af6af301c5372739013fd73fe1aa920 xine-0_9_8-release +b458da9319099a13f5107dc058c4de48b7136c84 xine-1-rc4a-release +b66f22564aa439192b3f9aa0f9cb1babda84b4da xine-0_5_0-release +bba445d4d6e6bbc71d83fb5e01e9c3eb3693e826 xine-1-beta1-release +bc6971d3877898e29369f1336c0bdcd86308133a xine_1-rc8-release +bdf384fc9565e02be8566a2679b739bf42c83f79 xine-0_9_0-release +c0124a3f26c40d54f58806175968caacbfafbc95 xine-1-alpha2-release +c03194421e33a817ea3b17398c938fc5ae98943e xine_1_rc1_release **FUNKY** +c0dd293ca501989bbec7c56e18a4a292564d3bd5 xine-1-beta10-release +c4808dda1232c5a5ddb330ef54bd74a502695629 xine-0_9_1-release +c81224c37a55b06a365b184774baab0a5f780e51 xine-0_9_12-release +cb879bf132294eae159fc67148005c338dd12186 xine-1_0-release +ccd00281e7c213ddf8eb47a34b4743c999dd6616 xine-1-beta3-release +ce6d51906ecaac64f0465a79642a592347b64676 xine_0-5-3_release +cf1c786bccc3327e10f56386048d2659210aabbf xine_1-rc0a-release +d164140fb4c3c3a91bc38b6cb39c6e049a6e8262 README +d43bccdfd36162eef7719cf14c9c2e85cbe6d158 xine_1-rc3a-release +e0826840e0b81dfc8a78bae7df21fe0e3bfd9fc1 xine-lib-1_1_1-release +e08fd1b5462bc6b5c7a3f07db9f0551defc67e1f xine-0_9_5-release +e12750bf1fe5f99ba32aa06faa035376b33557e2 xine-0_9_13-release +e795857a490acb12c1f1ebba82f7d6807cdde29f xine-lib-1-rc6a-release +e9550955ba6d47c7e965e117ee6039857095c4c2 xine-1-alpha0-release +eb5fc809821ba1ed65cb9c4345254a69e879e858 xine-0_9_14-norelease +eb7068fcbc340c1074f9ff916d3843ac19ea94fa xine-lib-1_1_0-release +f1a2861399059cba07e916afee432bbb31df4249 xine-1-beta4-release +fd12068ebd3fab2438f77b06e312c4244e97950a DXR3_095 @@ -565,4 +565,10 @@ Maximilian Schwerin <mschwerin@users.sourceforge.net> Chris Cannam <chris.cannam@ferventsoftware.com> JACK audio driver +Christoph Pfister <christophpfister@gmail.com> + XCB output plugins + +Albert Lee <trisk+xine@acm.jhu.edu> + Solaris portability fixes (and other miscellaneous fixes) + (let us know if we've forgotten anyone) diff --git a/COPYING.LIB b/COPYING.LIB new file mode 100644 index 000000000..eb685a5ec --- /dev/null +++ b/COPYING.LIB @@ -0,0 +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! @@ -12,7 +12,7 @@ updates (the word 'maintainer' is intentionally avoided here). project version mediator ----------------------------------------------------------------------- -ffmpeg 51.11.0 Mike Melanson +ffmpeg 51.29.0 Mike Melanson goom 2k4-0 gsm610 1.0.10 Mike Melanson liba52 0.7.4 @@ -1,3 +1,122 @@ +xine-lib (1.1.5) (Unreleased) + * Security fixes: + - Fix heap overflow in DMO loader. (CVE-2007-1246) [bug #1676925] + Thanks to Kees Cook for reporting. + * Improved PulseAudio plugin, now only one connection per instance is opened + and the mainloop is threaded to reduce latency during playback. + * Added XCB-based output plugins (Xv and XShm), to use in software using + XCB to talk with the server rather than libX11 (like new Kaffeine). + The plugins are contributed by Christoph Pfister with the help of + Vincent Torri, Jamey Sharp and Christophe Thommeret. + * Fix race condition in alsa audio out driver. + * Fixed a crash in the eq2 plugin. [Bug 1644312] + * Fixed content type detection for AAC (seekable) streams with ID3v2 + tags prefixed clobbering the preview buffer, by skipping over the tag. + * Parse ID3v2 tags on AAC and FLAC files, as well as mp3 files. + * Priority of the AAC encoder is now lower than anything else, so + it's not going to crash xine down if you try to run an mp3 stream + on FAAD2. + * Relicense the xine-lib XML parser under the GNU LGPL, for use in other + projects. + * Improvement in portability to Solaris and NetBSD, thanks to Albert Lee and + Sergey Svishchev respectively. + * Spanish translation updated by Carlos E. Robinson M. + * Don't leave libstk support to be detected automagically; also made it + disabled by default as upstream is dead and a different libstk is found + on Debian. + * Improvement in portability to FreeBSD, merged some patches (with changes) + from the ports. + * Cleaned up Real binary codecs support, adding support for FreeBSD (still + to be completely cleaned up though), and to 64-bit platforms. Also add + two new configure option, one to enable or disable building of Real binary + support altogether and one to choose the path where to look for the codecs + by default (it can, and probably should) be different from the Win32 + codecs path. + * Avoid a possible floating-point exception when starting stream playback. + * Now xine can play correctly media on HTTP servers reporting status codes + but no status message. + * Wave files with 24-bit integer PCM streams now should play correctly + (downplayed to 16-bit). + * Added centre-cutout (4:3 in 16:9) to the expand plugin. + Patch by Reinhard Nissl. + * Fix support of block devices for AC3 and DTS demuxers. Thanks to Matthias + Kretz for the original patch. + * Portability fixes for Mac OS X, in particular Mac OS X on the new Intel + Macs. Thanks to Martin Aumueller, Emanuele Giaquinta and Matt Messier. + * Fix amp muting when level is still at 100. Patch by Reinhard Nissl. + * Create at least a 1×1 shared image when the first frame is skipped (and + thus reported as 0×0), to avoid disabling shared memory for all others. + Patch by Reinhard Nissl. + * Send an event when the amp level is modified. Patch by Reinhard Nissl. + * Add support for H.264 video stream in PES packets. Patch by Reinhard Nissl. + * Support multiple audio PID in MPEG TS. Patch by Julian Scheel. + +xine-lib (1.1.4) + * Mark string-type configuration items according to whether they're plain + strings or names of files, device nodes or directories. This information + is available to front ends (via .num_value) so that they can present + file/dir-open dialogue boxes if they so choose. + Subtitle font selection is split up due to this. + * Applied the patch to fix text relocation, provided by PaX Team for Gentoo + and previously applied by other distributions as well. Fixes the non-PIC + code being generated. Note: patch reverted for tomsmocomp (segfault). + * Fix race condition in audio_out by using a recursive mutex; patch by + Reinhard Nissl. [bug #1551911] + * Allow building with Sun CC by fixing the lprintf variadic macro; patch by + Taso N. Devetzis. [bug #1614406] + * Fix disposing of image buffers in video_out_xv when SHM get disabled by + exhaustion of memory; patch by Matthias Drochner. [bug #1620339] + * Fix invalid memory access in Real Media ASM parser; reported by Roland + Kay. [bug #1603503] + * Fix program termination due to invalid Real Media SDP; reported by Roland + Kay. [bug #1602663] + * Fix invalid memory access in Real Media SDP with tailored stream; reported + by Roland Kay. [bug #1602631] + * Don't check for libpostproc version and assume that if libavcodec is found + correctly, libpostproc is of the same version, too. Reported by Ville + Skyttä. [bug #1617344] + * Fix Shorten demuxer: the whole "ajkg" signature has to be found, not only + one character of it. [bug #1601134] + * Implement at least a partial content-based detection of ModPlug-decoded + module files, using the magic numbers from GNU file. This allows to open + module files based on content rather than on their extension only. + [bug #1445746] + * Make the libFLAC-based decoder and demuxer for FLAC files work with recent + FLAC release 1.1.3. + * Replace --enable-flac configure option with --with-libflac, as the FLAC + support is always built-in through the audio demuxer plugin and the FFmpeg + decoder plugin, the option only controls the extra FLAC plugin that uses + libFLAC both for demuxing and decoding. + * Implement a True Audio files demuxer. [bug #1586381] + * Allow decoding of MusePack SV 7.x files (7.1 files at least play fine). + * Fix demuxing of uncompressed VobSub subtitles in Matroska files + * ffmpeg update to 51.29.0 + * Workaround ffmpeg buggy codecs that don't release their DR1 frames. + [bugs #1599975, #1601299, #1319154] + * Fix several segfaults and freezing problem with H264 streams that use a lot + of reference frames (eg. 15) [bugs #1603305, #1576588, #1267713] + * Fix mpeg4 artifacts introduced in cvs (not present in 1.1.3) [#1625911] + * Initial support to enable/disable ffmpeg codecs. Codecs may be disabled in + groups by --disable-ffmpeg-uncommon-codecs/--disable-ffmpeg-popular-codecs + Think of "uncommon" codecs what people would never want to play with their + PDAs (they will save memory by removing them). + Note: currently both uncommon/popular codecs are _build_ but disabled. + that is, build system still need some improvements to really save memory. + * Fix possible division by zero when pausing (video_out.c). + * Allow disabling build of musepack decoder through a ./configure parameter + (--disable-musepack). + * Allow using external libmpcdec for MusePack decoding rather than the + internal copy of an old libmusepack, through a ./configure parameter + (--with-external-libmpcdec). + * Add support for WavPack files, with both a demuxer and a decoder using + WavPack library. As an alternative, FFmpeg's audio decoder can be used + to decode WavPack files. + * Don't crash when caching a file opened through Samba plugin, thanks to + Timothy Redaelli from Gentoo. + * Fix audio/video sync problem with NTSC DVDs (introduced in 1.1.2). + [bugs #1544349 and #1589644] + + xine-lib (1.1.3) * Security fixes: - Heap overflow in libmms (related to CVE-2006-2200) @@ -1200,7 +1319,7 @@ xine (0.5.0) unstable; urgency=low * artsd support * dxr3/h+ support now finally in the official tree * 4/5/5.1 audio channel output (OSS/ ALSA?) - * a new default skin by Jérôme Villette + * a new default skin by Jérôme Villette -- Guenter Bartsch <guenter@users.sourceforge.net> Sun, 22 Jul 2001 13:10:52 +0200 diff --git a/Makefile.am b/Makefile.am index 7e9036b8a..f41b34b2c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2,7 +2,7 @@ ## Process this file with automake to produce Makefile.in ## -AUTOMAKE_OPTIONS = 1.3 +AUTOMAKE_OPTIONS = 1.8 no-dist-gzip dist-bzip2 ACLOCAL_AMFLAGS = -I m4 @@ -78,6 +78,18 @@ slackbuild: PREFIX="/usr" misc/SlackBuild +install-exec-hook: + find $(top_builddir) -name \*.so | \ + xargs $(STRINGS) -a | \ + $(EGREP) '^([-a-z]+/[-+.a-z0-9]+:[^:]+:[^;]+;[ \t]*)+' | \ + sed -e 's/:[^;]\+;/\n/g' | \ + sort -u | \ + sed -e '1 d' >$(DESTDIR)$(XINE_PLUGINDIR)/mime.types + +uninstall-hook: + rm -f $(DESTDIR)$(XINE_PLUGINDIR)/mime.types + + install-data-hook: @rm -f $(DESTDIR)$(XINE_PLUGINDIR)/*.la @rm -f $(DESTDIR)$(XINE_PLUGINDIR)/*/*.la @@ -6,7 +6,8 @@ free multimedia -xine-lib is a free multimedia engine, released under the GPL. +xine-lib is a free multimedia engine, released under the GNU GPL. See COPYING +for details. see the doc/ directory for more information about xine-lib. You will find various README files, FAQ and developer documentation (xine hacker's guide) @@ -19,3 +20,8 @@ additional documentation in their packages. For more information on xine features (supported multimedia formats etc.) see the xine homepage, located at http://xinehq.de/ + +The xine-lib XML parser (src/xine-utils/xmlparser.[ch] and +src/xine-utils/xmllexer.[ch]) is released under the GNU LGPL, see COPYING.LIB +for details. + diff --git a/autogen.sh b/autogen.sh index 6c8706b81..580ed39de 100755 --- a/autogen.sh +++ b/autogen.sh @@ -18,7 +18,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA # -# $Id: autogen.sh,v 1.19 2006/10/01 09:04:45 klan Exp $ +# $Id: autogen.sh,v 1.20 2007/03/26 12:52:05 dgp85 Exp $ # # Maintained by Stephen Torri <storri@users.sourceforge.net> # @@ -30,7 +30,7 @@ PROG=xine-lib WANT_AUTOMAKE_1_8=1 export WANT_AUTOMAKE_1_8 WANT_AUTOMAKE=1.8 export WANT_AUTOMAKE AUTOMAKE_MIN=1.8.0 -AUTOCONF_MIN=2.53 +AUTOCONF_MIN=2.59 LIBTOOL_MIN=1.4.0 # Check how echo works in this /bin/sh diff --git a/configure.ac b/configure.ac index 06ef24d84..97702dd5f 100644 --- a/configure.ac +++ b/configure.ac @@ -7,16 +7,16 @@ AC_CONFIG_SRCDIR([src/xine-engine/xine.c]) AC_CONFIG_LIBOBJ_DIR([lib]) dnl -dnl Require autoconf version 2.53 +dnl Require autoconf version 2.60 dnl -AC_PREREQ(2.53) +AC_PREREQ(2.59) dnl Making releases: dnl XINE_SUB += 1; continue with XINE_LT_* values below dnl XINE_MAJOR=1 XINE_MINOR=1 -XINE_SUB=3 +XINE_SUB=5 #if test $XINE_SUB -eq 0 ; then # XINE_SUBPART=""; @@ -49,9 +49,9 @@ dnl are platform dependent dnl * in Linux, the library will be named dnl libname.so.(XINE_LT_CURRENT - XINE_LT_AGE).XINE_LT_AGE.XINE_LT_REVISION -XINE_LT_CURRENT=16 +XINE_LT_CURRENT=18 XINE_LT_REVISION=0 -XINE_LT_AGE=15 +XINE_LT_AGE=17 dnl for a release tarball do "rm .cvsversion" before "make dist" if test -f "${src_dir}/.cvsversion"; then @@ -92,52 +92,52 @@ AM_INIT_AUTOMAKE("xine-lib", $SPEC_VERSION) dnl AM_INIT_AUTOMAKE("xine-lib", $XINE_MAJOR-$XINE_PRE) dnl --------------------------------------------- -dnl Requirements for macros whose first invocations are conditional -dnl --------------------------------------------- - -PKG_PROG_PKG_CONFIG - - -dnl --------------------------------------------- dnl Made possible to build for another arch. dnl --------------------------------------------- -if test x$XINE_BUILD != "x"; then - AC_MSG_RESULT([*** build forced to $XINE_BUILD ***]) - build=$XINE_BUILD - host=$XINE_BUILD -else - check_athlon=yes -fi +AC_CANONICAL_HOST +AC_CANONICAL_BUILD + +test "$host" == "$build" && check_athlon=yes -AM_CONFIG_HEADER(config.h) +AC_CONFIG_HEADERS([config.h]) dnl --------------------------------------------- dnl Check for programs. dnl --------------------------------------------- +AC_PROG_CC +AM_PROG_AS + +case "$host_os" in + *darwin*) + m4_ifdef([AC_PROG_OBJC], + [AC_PROG_OBJC], + [AC_CHECK_TOOL([OBJC], [gcc]) + AC_SUBST([OBJC]) + AC_SUBST([OBJCFLAGS]) + ]) + CPPFLAGS="$CPPFLAGS -DCONFIG_DARWIN" + ;; +esac + +AC_GNU_SOURCE dnl Save CFLAGS, AC_ISC_POSIX set some unwanted default CFLAGS saved_CFLAGS="$CFLAGS" AC_ISC_POSIX AC_PATH_MAGIC CFLAGS="$saved_CFLAGS" -AC_PROG_CC AC_HEADER_STDC + AC_PROG_MAKE_SET -dnl AC_PROG_EGREP needs autoconf 2.54, just hardcode for "egrep" +AC_PROG_EGREP AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_AWK AC_C_INLINE - -dnl --------------------------------------------- -dnl Check for assembler (ffmpeg need it), don't call this before LIBTOOL -dnl --------------------------------------------- - -AM_PROG_AS_MOD - +AC_CHECK_TOOL([STRINGS], [strings], [false]) dnl --------------------------------------------- dnl Libtool @@ -161,6 +161,13 @@ AC_SUBST(STATIC) dnl --------------------------------------------- +dnl Requirements for macros whose first invocations are conditional +dnl --------------------------------------------- + +PKG_PROG_PKG_CONFIG +CC_CHECK_WERROR + +dnl --------------------------------------------- dnl NLS Support dnl --------------------------------------------- @@ -168,8 +175,8 @@ dnl ALL_LINGUAS="cs da de el en@quot en@boldquot es et fr gl id it ja ko nl nn n AM_ICONV AC_ARG_ENABLE([iconvtest], AS_HELP_STRING([--disable-iconvtest], [don't require iconv library])) -if test x$enable_iconvtest != xno; then - if test x"$am_cv_func_iconv" != xyes; then +if test "x$enable_iconvtest" != xno; then + if test "x$am_cv_func_iconv" != xyes; then AC_MSG_ERROR([ **************************************************************** * iconv library not found. It's necessary for proper * @@ -195,8 +202,6 @@ dnl Checks for typedefs, structures, and compiler characteristics. dnl --------------------------------------------- AC_C_BIGENDIAN -dnl AC_C_BIGENDIAN triggers an AC_TRY_RUN warning; we can't cross compile -dnl xine (oh, well) AC_C_CONST dnl AC_C_ALWAYS_INLINE removal allows ffmpeg to be more widely buildable AC_TYPE_OFF_T @@ -205,69 +210,20 @@ AC_CHECK_SIZEOF(long) dnl AC_CHECK_TYPES([ptrdiff_t]) dnl For systems without inttypes.h would be needed extend generated replacement. AC_CHECK_GENERATE_INTTYPES([include]) -AM_CONDITIONAL(GENERATED_INTTYPES_H, test x"$ac_cv_header_inttypes_h" != x"yes") +AM_CONDITIONAL(GENERATED_INTTYPES_H, test "x$ac_cv_header_inttypes_h" != x"yes") AC_CHECK_TYPE(ssize_t, :, AC_DEFINE(ssize_t, __int64, [define ssize_t to __int64 if it's missing in default includes])) - dnl --------------------------------------------- dnl threads and OS specific stuff dnl --------------------------------------------- -AC_ARG_WITH(pthread-prefix, - AC_HELP_STRING( - [--with-pthread-prefix=PREFIX], - [path to pthread library]), - [pthread_prefix="$withval"], - [pthread_prefix="no"]) - -case "$host" in - *-*-freebsd*) - if test x"$pthread_prefix" = "xno"; then - pthread_prefix="/usr/local" - fi - THREAD_LIBS="-L$pthread_prefix/lib -pthread" - THREAD_CPPFLAGS="-I$pthread_prefix/include" - CPPFLAGS="$CPPFLAGS $THREAD_CPPFLAGS -D_THREAD_SAFE" - have_pthread=yes - ;; - - *-*-hpux11*) - THREAD_LIBS="-lpthread" - have_pthread=yes - - ;; - - *) - if test x"$pthread_prefix" = "xno"; then - THREAD_LIBS="-lpthread" - else - THREAD_LIBS="-L$pthread_prefix/lib -lpthread" - THREAD_CPPFLAGS="-I$pthread_prefix/include" - fi - CPPFLAGS="$CPPFLAGS $THREAD_CPPFLAGS" - - ac_save_LIBS="$LIBS" - LIBS="$LIBS $THREAD_LIBS" - - AC_CHECK_LIB(pthread, pthread_create, have_pthread=yes) - - LIBS="$ac_save_LIBS" - ;; -esac - -if test x"$have_pthread" != "xyes"; then - AC_MSG_ERROR(pthread needed) -fi - -AC_SUBST(THREAD_CPPFLAGS) -AC_SUBST(THREAD_LIBS) +CC_PTHREAD_FLAGS(, [AC_MSG_ERROR([Pthread support is needed])]) dnl AC_MSG_CHECKING(for recursive mutex support in pthread) ac_save_LIBS="$LIBS" -LIBS="$LIBS $THREAD_LIBS" +LIBS="$LIBS $PTHREAD_LIBS" -AC_DEFINE(_GNU_SOURCE) have_recursive_mutex=no AC_COMPILE_IFELSE(AC_LANG_SOURCE([#include <pthread.h> @@ -285,6 +241,11 @@ LIBS="$ac_save_LIBS" AC_MSG_RESULT($have_recursive_mutex) +AC_CHECK_DECL(sysi86,[ + AC_DEFINE(HAVE_SYSI86,1,[Define this if the 'sysi86' function is declared in sys/sysi86.h]) + ],,[ +#include <sys/sysi86.h> +]) dnl --------------------------------------------- dnl Windows ports checks @@ -316,7 +277,7 @@ case "$host" in esac AC_SUBST(GOOM_LIBS) AC_SUBST(WIN32_CPPFLAGS) -AM_CONDITIONAL(WIN32, test x$SYS = "xmingw32") +AM_CONDITIONAL(WIN32, test "x$SYS" = "xmingw32") dnl --------------------------------------------- @@ -363,11 +324,20 @@ dnl --------------------------------------------- AC_SUBST(LIBMPEG2_CFLAGS) -AC_ARG_WITH([external-ffmpeg], AC_HELP_STRING([--with-external-ffmpeg], [use external ffmpeg library])) - +AC_ARG_WITH([external-ffmpeg], AS_HELP_STRING([--with-external-ffmpeg], [use external ffmpeg library])) + +case "x$with_external_ffmpeg" in + xyes) + PKG_CHECK_MODULES([FFMPEG], [libavcodec >= 51.20.0]) + ;; + xsoft) + with_external_ffmpeg=yes + PKG_CHECK_MODULES([FFMPEG], [libavcodec >= 51.20.0], [], + [AC_MSG_RESULT(no); with_external_ffmpeg=no]) + ;; +esac if test "x$with_external_ffmpeg" = "xyes"; then - PKG_CHECK_MODULES([FFMPEG], [libavcodec >= 51.11.0]) - PKG_CHECK_MODULES([FFMPEG_POSTPROC], [libpostproc >= 51.11.0]) + PKG_CHECK_MODULES([FFMPEG_POSTPROC], [libpostproc]) AC_SUBST([FFMPEG_CFLAGS]) AC_SUBST([FFMPEG_LIBS]) AC_SUBST([FFMPEG_POSTPROC_CFLAGS]) @@ -384,13 +354,79 @@ use internal ffmpeg. *********************************************************************]) else AC_MSG_RESULT([using included ffmpeg]) - LIBFFMPEG_CPPFLAGS="-DSIMPLE_IDCT -DHAVE_AV_CONFIG_H -DRUNTIME_CPUDETECT -DCONFIG_RISKY -DCONFIG_DECODERS -DXINE_MPEG_ENCODER -DCONFIG_ZLIB -DCONFIG_GPL" - AC_SUBST([LIBFFMPEG_CPPFLAGS]) - + LIBFFMPEG_CPPFLAGS="-DHAVE_AV_CONFIG_H -DRUNTIME_CPUDETECT -DXINE_MPEG_ENCODER -D_ISOC9X_SOURCE -DCONFIG_DECODERS" AC_CHECK_TYPES(int_fast8_t, [], [LIBFFMPEG_CPPFLAGS="$LIBFFMPEG_CPPFLAGS -DEMULATE_FAST_INT"]) + AC_SUBST([LIBFFMPEG_CPPFLAGS]) fi AM_CONDITIONAL(HAVE_FFMPEG, test "x$with_external_ffmpeg" = "xyes") + +AC_ARG_ENABLE([ffmpeg_uncommon_codecs], + AS_HELP_STRING([--disable-ffmpeg-uncommon-codecs], [don't build uncommon ffmpeg codecs])) + +AC_ARG_ENABLE([ffmpeg_popular_codecs], + AS_HELP_STRING([--disable-ffmpeg-popular-codecs], [don't build popular ffmpeg codecs])) + +AS_MKDIR_P(src/libffmpeg) +ffmpeg_config_h=src/libffmpeg/ffmpeg_config.h +echo "/* Automatically generated */" > $ffmpeg_config_h + +dnl uncommon ffmpeg codecs +ffmpeg_uncommon_codecs="AASC ASV1 ASV2 AVS CSCD CYUV DVVIDEO EIGHTBPS FLIC FLV FOURXM FRAPS HUFFYUV IDCIN INTERPLAY_VIDEO KMVC LOCO MMVIDEO NUV QDRAW QPEG ROQ RPZA SMACKER SMC SNOW TRUEMOTION1 TRUEMOTION2 TSCC ULTI VCR1 VMDVIDEO WNV1 XAN_WC3 XL ZMBV ALAC AMR_NB AMR_WB LIBGSM MACE3 MACE6 SHORTEN SMACKAUD TRUESPEECH TTA VMDAUDIO PCM_ALAW PCM_MULAW PCM_S8 PCM_S16BE PCM_S16LE PCM_S24BE PCM_S24DAUD PCM_S24LE PCM_S32BE PCM_S32LE PCM_U8 PCM_U16BE PCM_U16LE PCM_U24BE PCM_U24LE PCM_U32BE PCM_U32LE INTERPLAY_DPCM ROQ_DPCM SOL_DPCM VQA XAN_DPCM ADPCM_4XM ADPCM_CT ADPCM_EA ADPCM_IMA_DK3 ADPCM_IMA_DK4 ADPCM_IMA_QT ADPCM_IMA_SMJPEG ADPCM_IMA_WAV ADPCM_IMA_WS ADPCM_MS ADPCM_SBPRO_2 ADPCM_SBPRO_3 ADPCM_SBPRO_4 ADPCM_XA ADPCM_YAMAHA" +for ucname in $ffmpeg_uncommon_codecs; do + config_name="CONFIG_${ucname}_DECODER" + enabled_name="ENABLE_${ucname}_DECODER" + + if test "x$enable_ffmpeg_uncommon_codecs" != xno; then + echo "#define $config_name 1" >> $ffmpeg_config_h + echo "#define $enabled_name 1" >> $ffmpeg_config_h + else + echo "#define $enabled_name 0" >> $ffmpeg_config_h + fi +done + +dnl popular ffmpeg codecs +ffmpeg_popular_codecs="CINEPAK FLASHSV H261 H263 H263I H264 INDEO2 INDEO3 MJPEG MJPEGB MPEG1VIDEO MPEG2VIDEO MPEG4 MPEGVIDEO MSMPEG4V1 MSMPEG4V2 MSMPEG4V3 MSRLE MSVIDEO1 QTRLE RV10 RV20 SVQ1 SVQ3 VC1 VP3 VP5 VP6 VP6F WMV1 WMV2 WMV3 COOK DTS FLAC MP2 MP3 QDM2 RA_144 RA_288 WAVPACK WMAV1 WMAV2 ADPCM_SWF" + +for ucname in $ffmpeg_popular_codecs; do + config_name="CONFIG_${ucname}_DECODER" + enabled_name="ENABLE_${ucname}_DECODER" + + if test "x$enable_ffmpeg_popular_codecs" != xno; then + echo "#define $config_name 1" >> $ffmpeg_config_h + echo "#define $enabled_name 1" >> $ffmpeg_config_h + else + echo "#define $enabled_name 0" >> $ffmpeg_config_h + fi +done + +dnl disabled ffmpeg codecs +ffmpeg_disabled_codecs="BMP CAVS CLJR DSICINVIDEO FFV1 FFVHUFF GIF MDEC MPEG_XVMC MSZH PNG RAWVIDEO SP5X TARGA TIERTEXSEQVIDEO TIFF VMNC ZLIB DSICINAUDIO IMC MP3ADU MP3ON4 MPC7 SONIC WS_SND1 ADPCM_ADX ADPCM_G726 DVBSUB DVDSUB THEORA AAC MPEG4AAC AC3 VORBIS" +for ucname in $ffmpeg_disabled_codecs; do + config_name="CONFIG_${ucname}_DECODER" + enabled_name="ENABLE_${ucname}_DECODER" + + echo "#define $enabled_name 0" >> $ffmpeg_config_h +done + +dnl disabled ffmpeg encoders +ffmpeg_extra_encoders="H263P JPEGLS LJPEG PAM PBM PGM PGMYUV PPM SONIC_LS" +for ucname in $ffmpeg_uncommon_codecs $ffmpeg_popular_codecs $ffmpeg_disabled_codecs $ffmpeg_extra_encoders; do + config_name="CONFIG_${ucname}_ENCODER" + enabled_name="ENABLE_${ucname}_ENCODER" + + echo "#define $enabled_name 0" >> $ffmpeg_config_h +done + +dnl disabled parsers +ffmpeg_parsers="AAC AC3 CAVSVIDEO DVBSUB DVDSUB H261 H263 H264 MJPEG MPEG4VIDEO MPEGAUDIO MPEGVIDEO PNM" +for ucname in $ffmpeg_parsers; do + config_name="CONFIG_${ucname}_PARSER" + enabled_name="ENABLE_${ucname}_PARSER" + + echo "#define $enabled_name 0" >> $ffmpeg_config_h +done + LIBMPEG2_CFLAGS="" AC_CHECK_DECL(lrintf,[ @@ -406,6 +442,8 @@ AC_CHECK_DECL(rintf,[ #include <math.h> ]) +AC_CHECK_FUNCS(memalign) + AC_ARG_ENABLE([altivec], AS_HELP_STRING([--disable-altivec], [do not use assembly codes for Motorola 74xx CPUs])) @@ -418,8 +456,8 @@ AC_ARG_ENABLE([mlib], AC_ARG_ENABLE([mlib-lazyload], AS_HELP_STRING([--enable-mlib-lazyload], [check for Sun mediaLib at runtime])) -if test x$enable_mlib != xno; then - if test x"$MLIBHOME" = x; then +if test "x$enable_mlib" != xno; then + if test "x$MLIBHOME" = x; then mlibhome=/opt/SUNWmlib else mlibhome="$MLIBHOME" @@ -429,7 +467,7 @@ if test x$enable_mlib != xno; then [ saved_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I$mlibhome/include" AC_CHECK_HEADER(mlib_video.h, - [ if test x$enable_mlib_lazyload = xyes; then + [ if test "x$enable_mlib_lazyload" = xyes; then if test "$GCC" = yes; then MLIB_LIBS="-L$mlibhome/lib -Wl,-z,lazyload,-lmlib,-z,nolazyload" else @@ -449,7 +487,7 @@ if test x$enable_mlib != xno; then CPPFLAGS="$saved_CPPFLAGS" ], , -L$mlibhome/lib) fi -AM_CONDITIONAL(HAVE_MLIB, test x$ac_have_mlib = "xyes") +AM_CONDITIONAL(HAVE_MLIB, test "x$ac_have_mlib" = "xyes") AC_SUBST(MLIB_LIBS) AC_SUBST(MLIB_CFLAGS) @@ -458,29 +496,32 @@ dnl Checks for X11 dnl --------------------------------------------- if test "x$with_x" != "xno"; then - PKG_CHECK_MODULES([X11], [x11], , [ + PKG_CHECK_MODULES([X], [x11 xext], , [ AC_PATH_XTRA dnl ---------------------------------------------- dnl Check for XShm support (required with X) dnl ---------------------------------------------- - if test x"$no_x" != "xyes"; then + if test "x$no_x" != "xyes"; then ac_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $X_CFLAGS" - AC_CHECK_HEADERS([X11/extensions/XShm.h], [], + AC_CHECK_HEADERS([X11/extensions/XShm.h], [true], [AC_MSG_ERROR([XShm extension is required])]) + AC_CHECK_LIB([Xext], [main], [true], + [AC_MSG_ERROR([libXext is required])], [$X_LIBS]) CPPFLAGS="$ac_save_CPPFLAGS" + X_LIBS="$X_LIBS $X_PRE_LIBS -lX11 -lXext" fi ]) else no_x="yes" fi -if test x"$no_x" != "xyes"; then +if test "x$no_x" != "xyes"; then AC_DEFINE(HAVE_X11,1,[Define this if you have X11R6 installed]) fi -AM_CONDITIONAL(HAVE_X11, [test x"$no_x" != "xyes"]) +AM_CONDITIONAL(HAVE_X11, [test "x$no_x" != "xyes"]) dnl --------------------------------------------- @@ -531,13 +572,13 @@ dnl zlib dnl --------------------------------------------- AC_ARG_WITH(zlib-prefix, - AC_HELP_STRING( + AS_HELP_STRING( [--with-zlib-prefix=PREFIX], [path to zlib compression library]), [zlib_prefix="$withval"], [zlib_prefix="no"]) -if test x"$zlib_prefix" = "xno"; then +if test "x$zlib_prefix" = "xno"; then ZLIB_LIBS="-lz" else ZLIB_CPPFLAGS="-I$zlib_prefix/include" @@ -586,7 +627,7 @@ dnl Check for platform which supports syncfb dnl --------------------------------------------- AC_ARG_ENABLE([syncfb], - AC_HELP_STRING([--disable-syncfb], [do not build syncfb plugin])) + AS_HELP_STRING([--disable-syncfb], [do not build syncfb plugin])) case "$host_os" in *linux*) ;; @@ -597,14 +638,14 @@ case "$host_os" in enable_syncfb=no ;; esac -AM_CONDITIONAL(HAVE_SYNCFB, test x"$enable_syncfb" != "xno") +AM_CONDITIONAL(HAVE_SYNCFB, test "x$enable_syncfb" != "xno") dnl ---------------------------------------------- dnl Check for usable video-for-linux (v4l) support dnl ---------------------------------------------- AC_ARG_ENABLE([v4l], - AC_HELP_STRING([--disable-v4l], [do not build Video4Linux input plugin])) + AS_HELP_STRING([--disable-v4l], [do not build Video4Linux input plugin])) if test "x$enable_v4l" != "xno"; then AC_CHECK_HEADERS([linux/videodev.h], [have_v4l=yes], [have_v4l=no]) @@ -614,7 +655,7 @@ if test "x$enable_v4l" != "xno"; then fi fi -AM_CONDITIONAL(HAVE_V4L, [test x"$have_v4l" = "xyes"]) +AM_CONDITIONAL(HAVE_V4L, [test "x$have_v4l" = "xyes"]) dnl ---------------------------------------------- dnl Check for Xv and XvMC support @@ -623,11 +664,11 @@ dnl ---------------------------------------------- dnl With recent XFree86 or Xorg, dynamic linking is preferred! dnl Only dynamic linking is possible when using libtool < 1.4.0 -AC_ARG_WITH(xv-path, AC_HELP_STRING([--with-xv-path=path], [where libXv is installed]), +AC_ARG_WITH(xv-path, AS_HELP_STRING([--with-xv-path=path], [where libXv is installed]), xv_path="$withval",) AC_ARG_ENABLE([static-xv], - AC_HELP_STRING([--enable-static-xv],[Enable this to force linking against libXv.a])) + AS_HELP_STRING([--enable-static-xv],[Enable this to force linking against libXv.a])) if test "x$enable_static_xv" = "xyes"; then xv_prefer_shared="no" @@ -635,13 +676,13 @@ else xv_prefer_shared="yes" fi -if test x"$no_x" != "xyes"; then +if test "x$no_x" != "xyes"; then PKG_CHECK_MODULES([XV], [xv], [ ac_have_xv="yes" AC_DEFINE([HAVE_XV], [1], [Define this if you have libXv installed]) ], [AC_FIND_LIBXV]) fi -AM_CONDITIONAL(HAVE_XV, test x$ac_have_xv = "xyes") +AM_CONDITIONAL(HAVE_XV, test "x$ac_have_xv" = "xyes") host_or_hostalias="$host" @@ -657,7 +698,7 @@ fi case "$host_or_hostalias" in hppa*) - if test x$ac_have_xv_static = "xyes"; then + if test "x$ac_have_xv_static" = "xyes"; then echo "warning: hppa linker - disabling static libXv" XV_LIBS="libXv.so" fi @@ -670,7 +711,7 @@ case "$host_or_hostalias" in *) ;; esac -AM_CONDITIONAL(PPC_ARCH, test x$ppc_arch = "xyes") +AM_CONDITIONAL(PPC_ARCH, test "x$ppc_arch" = "xyes") dnl dnl Check if we can enable the xxmc plugin. @@ -679,18 +720,18 @@ dnl AC_ARG_ENABLE([xvmc], AS_HELP_STRING([--disable-xvmc], [Disable XxMC and XvMC outplut plugins]) ) -if test x$no_x = "x" && test "x$enable_xvmc" != "xno"; then +if test "x$no_x" = "x" && test "x$enable_xvmc" != "xno"; then -AC_ARG_WITH(xxmc-path, AC_HELP_STRING([--with-xxmc-path=path], [where libXvMC libraries for the +AC_ARG_WITH(xxmc-path, AS_HELP_STRING([--with-xxmc-path=path], [where libXvMC libraries for the xxmc plugin are installed. Defalts to the default X library path.]), xxmc_path="$withval", xxmc_path="$x_libraries") -AC_ARG_WITH(xxmc-lib, AC_HELP_STRING([--with-xxmc-lib=XXXX], [The name of the XvMC library +AC_ARG_WITH(xxmc-lib, AS_HELP_STRING([--with-xxmc-lib=XXXX], [The name of the XvMC library libXXXX.so for the xxmc plugin.]),xxmc_stub="$withval", xxmc_stub="XvMCW") saved_libs="$LIBS" saved_CPPFLAGS="$CPPFLAGS" -if test x$x_includes != "x"; then +if test "x$x_includes" != "x"; then CPPFLAGS="$CPPFLAGS -I$x_includes" fi @@ -698,14 +739,14 @@ XXMC_LIBS="-L$xxmc_path -l$xxmc_stub" AC_MSG_CHECKING(whether to enable the xxmc plugin with vld extensions) AC_MSG_RESULT() dnl Check if vld "extended" XvMC is available -if test x$xxmc_stub == "xXvMCW" && test x$ac_have_xv == "xyes"; then +if test "x$xxmc_stub" == "xXvMCW" && test "x$ac_have_xv" == "xyes"; then AC_CHECK_LIB($xxmc_stub, XvMCPutSlice, ac_have_xxmc="yes", [ac_have_xxmc="no" AC_MSG_RESULT([*** Could not link with -l$xxmc_stub for vld extensions.])], [-L$xxmc_path $X_LIBS $X_PRE_LIBS $XV_LIBS -lXext $X_EXTRA_LIBS]) else - if test x$ac_have_xv = "xyes"; then + if test "x$ac_have_xv" = "xyes"; then AC_CHECK_LIB($xxmc_stub, XvMCPutSlice, [ac_have_xxmc="yes" XXMC_LIBS="$XXMC_LIBS -lXvMC"], @@ -717,7 +758,7 @@ else fi fi -if test x$ac_have_xxmc = "xyes"; then +if test "x$ac_have_xxmc" = "xyes"; then AC_CHECK_HEADERS(X11/extensions/vldXvMC.h, [ac_have_vldxvmc_h="yes"], ac_have_vldxvmc="no",) @@ -727,15 +768,15 @@ if test x$ac_have_xxmc = "xyes"; then fi fi dnl Try fallback to standard XvMC if vld failed -if test x$ac_have_xxmc = "xno"; then - if test x$xxmc_stub == "xXvMCW"; then +if test "x$ac_have_xxmc" = "xno"; then + if test "x$xxmc_stub" == "xXvMCW"; then AC_CHECK_LIB($xxmc_stub, XvMCCreateContext, ac_have_xxmc="yes", [ac_have_xxmc="no" AC_MSG_RESULT([*** Could not link with -l$xxmc_stub for standard XvMC.])], [-L$xxmc_path $X_LIBS $X_PRE_LIBS $XV_LIBS -lXext $X_EXTRA_LIBS]) else - if test x$ac_have_xv = "xyes"; then + if test "x$ac_have_xv" = "xyes"; then AC_CHECK_LIB($xxmc_stub, XvMCCreateContext, [ac_have_xxmc="yes" XXMC_LIBS="$XXMC_LIBS -lXvMC"], @@ -747,11 +788,11 @@ if test x$ac_have_xxmc = "xno"; then fi fi fi -if test x$ac_have_xxmc = "xyes"; then +if test "x$ac_have_xxmc" = "xyes"; then AC_CHECK_HEADERS(X11/extensions/XvMC.h,, ac_have_xxmc="no",) fi -if test x$ac_have_xxmc = "xyes"; then +if test "x$ac_have_xxmc" = "xyes"; then AC_DEFINE(HAVE_XXMC,1,[Define this to compile the xxmc plugin.]) if test "x$ac_have_vldxvmc_h" = "xyes"; then AC_MSG_RESULT([*** Enabling xxmc plugin with vld extensions.]) @@ -763,33 +804,33 @@ else fi LIBS="$saved_libs" fi -AM_CONDITIONAL(HAVE_VLDXVMC, test x$ac_have_vldxvmc_h = "xyes") -AM_CONDITIONAL(HAVE_XXMC, test x$ac_have_xxmc = "xyes") +AM_CONDITIONAL(HAVE_VLDXVMC, test "x$ac_have_vldxvmc_h" = "xyes") +AM_CONDITIONAL(HAVE_XXMC, test "x$ac_have_xxmc" = "xyes") AC_SUBST(XXMC_LIBS) dnl dnl Check if we can enable the xvmc plugin. dnl -if test x$no_x = "x" && test "x$enable_xvmc" != "xno"; then +if test "x$no_x" = "x" && test "x$enable_xvmc" != "xno"; then -AC_ARG_WITH(xvmc-path, AC_HELP_STRING([--with-xvmc-path=path], [where libXvMC libraries for the +AC_ARG_WITH(xvmc-path, AS_HELP_STRING([--with-xvmc-path=path], [where libXvMC libraries for the xvmc plugin are installed. Defalts to the default X library path.]), xvmc_path="$withval", xvmc_path="$x_libraries") -AC_ARG_WITH(xvmc-lib, AC_HELP_STRING([--with-xvmc-lib=XXXX], [The name of the XvMC library +AC_ARG_WITH(xvmc-lib, AS_HELP_STRING([--with-xvmc-lib=XXXX], [The name of the XvMC library libXXXX.so for the xvmc plugin.]),xvmc_stub="$withval", xvmc_stub="XvMCW") saved_libs="$LIBS" XVMC_LIBS="-L$xvmc_path -l$xvmc_stub" AC_MSG_CHECKING(whether to enable the xvmc plugin) AC_MSG_RESULT() -if test x$xvmc_stub == "xXvMCW"; then +if test "x$xvmc_stub" == "xXvMCW"; then AC_CHECK_LIB($xvmc_stub, XvMCCreateContext, ac_have_xvmc="yes", [ac_have_xvmc="no" AC_MSG_RESULT([*** Could not link with -l$xvmc_stub.])], [-L$xvmc_path $X_LIBS $X_PRE_LIBS $XV_LIBS -lXext $X_EXTRA_LIBS]) else - if test x$ac_have_xv = "xyes"; then + if test "x$ac_have_xv" = "xyes"; then AC_CHECK_LIB($xvmc_stub, XvMCCreateContext, [ac_have_xvmc="yes" XVMC_LIBS="$XVMC_LIBS -lXvMC"], @@ -800,11 +841,11 @@ else ac_have_xvmc="no", fi fi -if test x$ac_have_xvmc = "xyes"; then +if test "x$ac_have_xvmc" = "xyes"; then AC_CHECK_HEADERS(X11/extensions/XvMC.h,, ac_have_xvmc="no",) fi -if test x$ac_have_xvmc = "xyes"; then +if test "x$ac_have_xvmc" = "xyes"; then AC_DEFINE(HAVE_XVMC,1,[Define this if you have an XvMC library and XvMC.h installed.]) AC_MSG_RESULT([*** Enabling old xvmc plugin.]) else @@ -813,16 +854,56 @@ fi CPPFLAGS="$saved_CPPFLAGS" LIBS="$saved_libs" fi -AM_CONDITIONAL(HAVE_XVMC, test x$ac_have_xvmc = "xyes") +AM_CONDITIONAL(HAVE_XVMC, test "x$ac_have_xvmc" = "xyes") AC_SUBST(XVMC_LIBS) dnl --------------------------------------------- +dnl Check for xcb +dnl --------------------------------------------- +AC_ARG_WITH([xcb], AS_HELP_STRING([--without-xcb], [Doesn't build XCB video out plugins])) + +if test "x$with_xcb" != "xno"; then + PKG_CHECK_MODULES([XCB], [xcb-shape >= 1.0], [have_xcb="yes"], [have_xcb="no"]) +fi + +AC_SUBST(XCB_CFLAGS) +AC_SUBST(XCB_LIBS) +AM_CONDITIONAL(HAVE_XCB, test "x$have_xcb" = "xyes" ) + + +dnl --------------------------------------------- +dnl Check for xcb-shm +dnl --------------------------------------------- + +if test "x$have_xcb" = "xyes"; then + PKG_CHECK_MODULES([XCBSHM], [xcb-shm], [have_xcbshm="yes"], [have_xcbshm="no"]) +fi + +AC_SUBST(XCBSHM_CFLAGS) +AC_SUBST(XCBSHM_LIBS) +AM_CONDITIONAL(HAVE_XCBSHM, test "x$have_xcbshm" = "xyes" ) + + +dnl --------------------------------------------- +dnl Check for xcb-xv +dnl --------------------------------------------- + +if test "x$have_xcb" = "xyes"; then + PKG_CHECK_MODULES([XCBXV], [xcb-xv], [have_xcbxv="yes"], [have_xcbxv="no"]) +fi + +AC_SUBST(XCBXV_CFLAGS) +AC_SUBST(XCBXV_LIBS) +AM_CONDITIONAL(HAVE_XCBXV, test "x$have_xcbxv" = "xyes" ) + + +dnl --------------------------------------------- dnl Checks for Xinerama extension dnl --------------------------------------------- AC_ARG_ENABLE([xinerama], - AC_HELP_STRING([--disable-xinerama], [do not build Xinerama support])) + AS_HELP_STRING([--disable-xinerama], [do not build Xinerama support])) if test "x$enable_xinerama" != "xno"; then PKG_CHECK_MODULES([XINERAMA], [xinerama], [ac_have_xinerama=yes], [ @@ -838,7 +919,7 @@ if test "x$enable_xinerama" != "xno"; then else ac_have_xinerama=no fi -dnl AM_CONDITIONAL(HAVE_XINERAMA, test x$ac_have_xinerama = "xyes") +dnl AM_CONDITIONAL(HAVE_XINERAMA, test "x$ac_have_xinerama" = "xyes") dnl --------------------------------------------- @@ -846,7 +927,7 @@ dnl Checks for Ascii-Art library dnl --------------------------------------------- AC_ARG_ENABLE([aalib], - AC_HELP_STRING([--disable-aalib], [do not build AALIB support]), + AS_HELP_STRING([--disable-aalib], [do not build AALIB support]), [with_aalib=$enableval], [with_aalib=yes]) if test "x$with_aalib" = "xyes"; then @@ -855,7 +936,7 @@ else no_aalib=yes fi -AM_CONDITIONAL(HAVE_AA, test x$no_aalib != "xyes") +AM_CONDITIONAL(HAVE_AA, test "x$no_aalib" != "xyes") dnl --------------------------------------------- dnl Checks for Color AsCii Art library @@ -878,7 +959,7 @@ dnl Check solaris framebuffer device support dnl --------------------------------------------- AC_CHECK_HEADER(sys/fbio.h, ac_have_sunfb=yes,) -AM_CONDITIONAL(HAVE_SUNFB, [test x"$ac_have_sunfb" = "xyes"]) +AM_CONDITIONAL(HAVE_SUNFB, [test "x$ac_have_sunfb" = "xyes"]) dnl --------------------------------------------- @@ -898,7 +979,7 @@ AC_CHECK_LIB(dga, XDgaGrabDrawable, [ ]) LDFLAGS="$saved_LDFLAGS" CPPFLAGS="$saved_CPPFLAGS" -AM_CONDITIONAL(HAVE_SUNDGA, [test x"$ac_have_sundga" = "xyes"]) +AM_CONDITIONAL(HAVE_SUNDGA, [test "x$ac_have_sundga" = "xyes"]) AC_SUBST(SUNDGA_CFLAGS) AC_SUBST(SUNDGA_LIBS) @@ -910,44 +991,44 @@ dnl --------------------------------------------- AC_CHECK_HEADER(linux/fb.h, [AC_DEFINE(HAVE_FB,1,[Define this if you have linux framebuffer support]) have_fb=yes],) -AC_ARG_ENABLE(fb, AC_HELP_STRING([--disable-fb], [do not build linux framebuffer support]), +AC_ARG_ENABLE(fb, AS_HELP_STRING([--disable-fb], [do not build linux framebuffer support]), have_fb=$enableval) -AM_CONDITIONAL(HAVE_FB, [test x"$have_fb" = "xyes"]) +AM_CONDITIONAL(HAVE_FB, [test "x$have_fb" = "xyes"]) dnl --------------------------------------------- dnl Check whether to build Mac OS X video output driver dnl --------------------------------------------- -AC_ARG_ENABLE(macosx_video, AC_HELP_STRING([--enable-macosx-video], [enable support for Mac OS X OpenGL video output]), +AC_ARG_ENABLE(macosx_video, AS_HELP_STRING([--enable-macosx-video], [enable support for Mac OS X OpenGL video output]), have_macosx_video=$enableval) -AM_CONDITIONAL(HAVE_MACOSX_VIDEO, [test x"$have_macosx_video" = "xyes"]) +AM_CONDITIONAL(HAVE_MACOSX_VIDEO, [test "x$have_macosx_video" = "xyes"]) dnl --------------------------------------------- dnl Check whether to build Mac OS X audio output driver dnl --------------------------------------------- -AC_ARG_ENABLE(coreaudio, AC_HELP_STRING([--enable-coreaudio], [enable support for Mac OS X Coreaudio output]), +AC_ARG_ENABLE(coreaudio, AS_HELP_STRING([--enable-coreaudio], [enable support for Mac OS X Coreaudio output]), have_coreaudio=$enableval) -AM_CONDITIONAL(HAVE_COREAUDIO, [test x"$have_coreaudio" = "xyes"]) +AM_CONDITIONAL(HAVE_COREAUDIO, [test "x$have_coreaudio" = "xyes"]) dnl --------------------------------------------- dnl Check for DirectFB dnl --------------------------------------------- AC_ARG_ENABLE(directfb, - AC_HELP_STRING([--enable-directfb], [enable use of DirectFB]), + AS_HELP_STRING([--enable-directfb], [enable use of DirectFB]), enable_directfb=$enableval, enable_directfb=no) -if test x$enable_directfb = "xyes"; then +if test "x$enable_directfb" = "xyes"; then PKG_CHECK_MODULES([DIRECTFB], [directfb >= 0.9.22], [have_directfb="yes"], [have_directfb="no"]) fi AC_SUBST(DIRECTFB_CFLAGS) AC_SUBST(DIRECTFB_LIBS) -AM_CONDITIONAL(HAVE_DIRECTFB, test x$have_directfb = "xyes" ) +AM_CONDITIONAL(HAVE_DIRECTFB, test "x$have_directfb" = "xyes" ) dnl --------------------------------------------- @@ -975,27 +1056,17 @@ dnl --------------------------------------------- dnl check for Libstk dnl --------------------------------------------- -AC_MSG_CHECKING(for Libstk) -dnl do some actual testing here -if test x$PKG_CONFIG = xno ; then - AC_MSG_RESULT(no) - echo "*** pkg-config not found. See http://pkgconfig.sourceforge.net" - echo "*** All of LIBSTK dependent parts will be disabled" -else - LIBSTK_REQUIRED_VERSION=0.2.0 - if $PKG_CONFIG --atleast-version $LIBSTK_REQUIRED_VERSION libstk ; then - LIBSTK_CFLAGS=`$PKG_CONFIG --cflags libstk` - LIBSTK_LIBS=`$PKG_CONFIG --libs libstk` - have_stk="yes" - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) - AC_MSG_RESULT([*** All of Libstk dependent parts will be disabled ***]) - fi +AC_ARG_WITH([libstk], + AS_HELP_STRING([--with-libstk], [Build with STK surface video driver])) + +if test "x$with_libstk" = "xyes"; then + PKG_CHECK_MODULES([LIBSTK], [libstk >= 0.2.0], [have_libstk=yes], [have_libstk=no]) + if test "x$with_libstk" = "xyes" && test "x$have_libstk" = "xno"; then + AC_MSG_ERROR([libstk support requested, but libstk not found]) + fi fi -AC_SUBST(LIBSTK_CFLAGS) -AC_SUBST(LIBSTK_LIBS) -AM_CONDITIONAL(HAVE_STK, [test x"$have_stk" = x"yes"]) + +AM_CONDITIONAL([HAVE_STK], [test "x$have_libstk" = "xyes"]) dnl --------------------------------------------- dnl check for pulseaudio @@ -1007,7 +1078,7 @@ AC_ARG_WITH([pulseaudio], if test "x$with_pulseaudio" != "xno"; then PKG_CHECK_MODULES([PULSEAUDIO], [libpulse], [have_pulseaudio="yes"], [have_pulseaudio="no"]) fi -AM_CONDITIONAL(HAVE_PULSEAUDIO, [test x"$have_pulseaudio" = x"yes"]) +AM_CONDITIONAL(HAVE_PULSEAUDIO, [test "x$have_pulseaudio" = x"yes"]) dnl --------------------------------------------- dnl check for DirectX @@ -1023,12 +1094,12 @@ dnl --------------------------------------------- case "$host_or_hostalias" in *-linux*) AC_CHECK_DXR3() - if test x"$have_libfame" = "xyes" ; then + if test "x$have_libfame" = "xyes" ; then AC_DEFINE_UNQUOTED(HAVE_LIBFAME,1,[Define this if you have libfame mpeg encoder installed (fame.sf.net)]) AM_PATH_LIBFAME(0.8.10, AC_DEFINE(HAVE_NEW_LIBFAME,1,[Define this if you have libfame 0.8.10 or above])) fi - if test x"$have_librte" = "xyes" ; then + if test "x$have_librte" = "xyes" ; then AC_DEFINE_UNQUOTED(HAVE_LIBRTE,1,[Define this if you have librte mpeg encoder installed (zapping.sf.net)]) fi ;; @@ -1039,9 +1110,9 @@ case "$host_or_hostalias" in have_encoder="no" ;; esac -AM_CONDITIONAL(HAVE_DXR3, test x"$have_dxr3" = "xyes") -AM_CONDITIONAL(HAVE_LIBFAME, test x"$have_libfame" = "xyes") -AM_CONDITIONAL(HAVE_LIBRTE, test x"$have_librte" = "xyes") +AM_CONDITIONAL(HAVE_DXR3, test "x$have_dxr3" = "xyes") +AM_CONDITIONAL(HAVE_LIBFAME, test "x$have_libfame" = "xyes") +AM_CONDITIONAL(HAVE_LIBRTE, test "x$have_librte" = "xyes") dnl --------------------------------------------- @@ -1051,16 +1122,16 @@ dnl --------------------------------------------- AC_LINUX_PATH(/usr/src/linux) AC_SUBST([LINUX_INCLUDE]) -AC_ARG_ENABLE(vidix, AC_HELP_STRING([--disable-vidix], [do not build vidix support]), +AC_ARG_ENABLE(vidix, AS_HELP_STRING([--disable-vidix], [do not build vidix support]), check_vidix=$enableval, check_vidix=yes) -AC_ARG_ENABLE(dha-kmod, AC_HELP_STRING([--enable-dha-kmod], [build DHA kernel module]), +AC_ARG_ENABLE(dha-kmod, AS_HELP_STRING([--enable-dha-kmod], [build DHA kernel module]), enable_dha_kmod=$enableval,enable_dha_kmod=no) enable_vidix="no" AC_MSG_CHECKING(for vidix support) -if test x"$check_vidix" = "xyes" -a x"$ac_cv_prog_AWK" != "xno"; then - if test x"$no_x" != "xyes" -o x"$have_fb" = "xyes"; then +if test "x$check_vidix" = "xyes" -a "x$ac_cv_prog_AWK" != "xno"; then + if test "x$no_x" != "xyes" -o "x$have_fb" = "xyes"; then case "$host_or_hostalias" in i?86-*-linux* | k?-*-linux* | athlon-*-linux*) enable_vidix="yes" @@ -1080,17 +1151,17 @@ fi AC_MSG_RESULT($enable_vidix) AC_MSG_CHECKING(for DHA linux kernel module build) -if test x"$enable_dha_kmod" = "xyes"; then +if test "x$enable_dha_kmod" = "xyes"; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi -AM_CONDITIONAL(HAVE_VIDIX, test x"$enable_vidix" = "xyes") -AM_CONDITIONAL(HAVE_LINUX, test x"$enable_linux" = "xyes") -AM_CONDITIONAL(BUILD_DHA_KMOD, test x"$enable_dha_kmod" = "xyes") +AM_CONDITIONAL(HAVE_VIDIX, test "x$enable_vidix" = "xyes") +AM_CONDITIONAL(HAVE_LINUX, test "x$enable_linux" = "xyes") +AM_CONDITIONAL(BUILD_DHA_KMOD, test "x$enable_dha_kmod" = "xyes") AC_CHECK_PROG(MKNOD, mknod, mknod, no) -AC_CHECK_PROG(DEPMOD, depmod, depmod, no, $PATH:/sbin) +AC_CHECK_PROG(DEPMOD, depmod, depmod, no, "$PATH:/sbin") dnl --------------------------------------------- @@ -1154,32 +1225,30 @@ dnl --------------------------------------------- dnl check for libFLAC dnl --------------------------------------------- -AC_ARG_ENABLE([flac], - AC_HELP_STRING([--disable-flac], [do not build flac support]), - [with_flac=$enableval], [with_flac=yes]) +AC_ARG_WITH([libflac], + AS_HELP_STRING([--with-libflac], [build libFLAC-based decoder and demuxer])) -if test "x$with_flac" = "xyes"; then - AM_PATH_LIBFLAC([], - AC_MSG_RESULT([*** All FLAC dependent parts will be disabled ***])) -else - no_libFLAC=yes +have_libflac="no" +if test "x$with_libflac" = "xyes"; then + AM_PATH_LIBFLAC([have_libflac="yes"]) fi -AM_CONDITIONAL(HAVE_FLAC, [test x"$no_libFLAC" != "xyes"]) + +AM_CONDITIONAL([HAVE_LIBFLAC], [test "x$have_libflac" = "xyes"]) dnl --------------------------------------------- dnl External version of a52dec dnl --------------------------------------------- -AC_ARG_ENABLE(a52dec, AC_HELP_STRING([--disable-a52dec], [Disable support for a52dec decoding library (default: enabled)]), +AC_ARG_ENABLE(a52dec, AS_HELP_STRING([--disable-a52dec], [Disable support for a52dec decoding library (default: enabled)]), [enable_a52dec="$enableval"], [enable_a52dec="yes"]) -AC_ARG_WITH(external-a52dec, AC_HELP_STRING([--with-external-a52dec], [use external a52dec library (not recommended)]), +AC_ARG_WITH(external-a52dec, AS_HELP_STRING([--with-external-a52dec], [use external a52dec library (not recommended)]), [external_a52dec="$withval"], [external_a52dec="no"]) have_a52="no" -if test x"$enable_a52dec" = "xno"; then +if test "x$enable_a52dec" = "xno"; then AC_MSG_RESULT([a52dec support disabled]) -elif test x"$external_a52dec" = "xyes"; then +elif test "x$external_a52dec" = "xyes"; then have_a52="yes" AC_CHECK_HEADERS([a52dec/a52.h a52dec/a52_internal.h],, have_a52="no", [ @@ -1206,23 +1275,23 @@ else AC_MSG_RESULT([Use included a52dec support]) fi -AM_CONDITIONAL(A52, test x"$enable_a52dec" = "xyes") -AM_CONDITIONAL(EXTERNAL_A52DEC, test x"$have_a52" = "xyes") +AM_CONDITIONAL(A52, test "x$enable_a52dec" = "xyes") +AM_CONDITIONAL(EXTERNAL_A52DEC, test "x$have_a52" = "xyes") dnl --------------------------------------------- dnl External version of libmad dnl --------------------------------------------- -AC_ARG_ENABLE(mad, AC_HELP_STRING([--disable-mad], [Disable support for MAD decoding library (default: enabled)]), +AC_ARG_ENABLE(mad, AS_HELP_STRING([--disable-mad], [Disable support for MAD decoding library (default: enabled)]), [enable_libmad="$enableval"], [enable_libmad="yes"]) -AC_ARG_WITH(external-libmad, AC_HELP_STRING([--with-external-libmad], [use external libmad library (not recommended)]), +AC_ARG_WITH(external-libmad, AS_HELP_STRING([--with-external-libmad], [use external libmad library (not recommended)]), [external_libmad="$withval"], [external_libmad="no"]) have_mad="no" if test "x$enable_libmad" = "xno"; then AC_MSG_RESULT([libmad support disabled]) -elif test x"$external_libmad" = "xyes"; then +elif test "x$external_libmad" = "xyes"; then PKG_CHECK_MODULES(LIBMAD, [mad], have_mad=yes, have_mad=no) AC_CHECK_HEADERS([mad.h]) AC_SUBST(LIBMAD_LIBS) @@ -1235,14 +1304,37 @@ else fi AM_CONDITIONAL(MAD, test "x$enable_libmad" = "xyes") -AM_CONDITIONAL(EXTERNAL_LIBMAD, test x"$have_mad" = "xyes") +AM_CONDITIONAL(EXTERNAL_LIBMAD, test "x$have_mad" = "xyes") + +dnl --------------------------------------------- +dnl External libmpcdec support +dnl --------------------------------------------- + +AC_ARG_ENABLE([musepack], AS_HELP_STRING([--disable-musepack], [Disable support for MusePack decoding (default: enabled)])) +AC_ARG_WITH([external-libmpcdec], AS_HELP_STRING([--with-external-libmpcdec], [Use external libmpc library])) + +if test "x$enable_musepack" = "xno"; then + AC_MSG_RESULT([musepack support disabled]) +elif test "x$with_external_libmpcdec" = "xyes"; then + AC_CHECK_LIB([mpcdec], [mpc_decoder_decode], [have_mpcdec=yes]) + AC_CHECK_HEADERS([mpcdec/mpcdec.h], , [have_mpcdec=no]) + if test "x$have_mpcdec" != "xyes"; then + AC_MSG_ERROR([Unable to find mpcdec]) + fi + AC_DEFINE([HAVE_LIBMPC], [1], [Define if external libmpc is used]) +else + AC_MSG_RESULT([Use included libmusepack]) +fi + +AM_CONDITIONAL([MUSEPACK], [test "x$enable_musepack" != "xno"]) +AM_CONDITIONAL([EXTERNAL_MPCDEC], [test "x$have_mpcdec" = "xyes"]) dnl --------------------------------------------- dnl MNG libs. dnl --------------------------------------------- AC_ARG_ENABLE([mng], - AC_HELP_STRING([--disable-mng], [do not build mng support]), + AS_HELP_STRING([--disable-mng], [do not build mng support]), [with_mng=$enableval], [with_mng=yes]) if test "x$with_mng" = "xyes"; then @@ -1256,7 +1348,7 @@ if test "x$with_mng" = "xyes"; then else have_libmng=no fi -AM_CONDITIONAL(HAVE_LIBMNG, test x"$have_libmng" = "xyes") +AM_CONDITIONAL(HAVE_LIBMNG, test "x$have_libmng" = "xyes") dnl --------------------------------------------- dnl MagickWand API of Imagemagick. @@ -1274,7 +1366,7 @@ if test "x$with_imagemagick" != "xno"; then fi fi -AM_CONDITIONAL([HAVE_WAND], [test x"$have_imagemagick" = "xyes"]) +AM_CONDITIONAL([HAVE_WAND], [test "x$have_imagemagick" = "xyes"]) AC_SUBST(WAND_CFLAGS) AC_SUBST(WAND_LIBS) @@ -1321,28 +1413,26 @@ dnl --------------------------------------------- dnl OSS style audio interface dnl --------------------------------------------- AC_ARG_ENABLE([oss], - AC_HELP_STRING([--disable-oss], [do not build OSS support]), - [with_oss=$enableval], [with_oss=yes]) - -if test "x$with_oss" = "xyes"; then - AC_MSG_CHECKING(for OSS audio support) - have_ossaudio=no - AC_TRY_COMPILE([ - #ifdef __NetBSD__ - #include <soundcard.h> - #else - #include <sys/soundcard.h> - #endif - ],[ - int arg = SNDCTL_DSP_SETFRAGMENT; - ],[ - have_ossaudio=yes - ]) - AC_MSG_RESULT($have_ossaudio) -else - have_ossaudio=no + AS_HELP_STRING([--disable-oss], [Do not build OSS audio output support])) + +if test "x$enable_oss" != "xno"; then + AC_CHECK_HEADERS([sys/soundcard.h machine/soundcard.h soundcard.h], [break]) + AC_CHECK_DECL([SNDCTL_DSP_SETFRAGMENT], [have_ossaudio=yes], [], [ + #ifdef HAVE_SYS_SOUNDCARD_H + # include <sys/soundcard.h> + #endif + #ifdef HAVE_MACHINE_SOUNDCARD_H + # include <sys/soundcard.h> + #endif + #ifdef HAVE_SOUNDCARD_H + # include <soundcard.h> + #endif + ]) + + AC_IOCTL_REQUEST fi -AM_CONDITIONAL(HAVE_OSS, test x"$have_ossaudio" = "xyes") + +AM_CONDITIONAL(HAVE_OSS, test "x$have_ossaudio" = "xyes") dnl --------------------------------------------- @@ -1392,7 +1482,7 @@ dnl ARTS support dnl --------------------------------------------- AC_ARG_WITH([arts], - AC_HELP_STRING([--without-arts], [Build without ARTS audio output]), + AS_HELP_STRING([--without-arts], [Build without ARTS audio output]), [with_arts=$withval], [with_arts=yes]) if test "x$with_arts" = "xyes"; then @@ -1402,7 +1492,7 @@ if test "x$with_arts" = "xyes"; then else no_arts=yes fi -AM_CONDITIONAL(HAVE_ARTS, test x"$no_arts" != "xyes") +AM_CONDITIONAL(HAVE_ARTS, test "x$no_arts" != "xyes") dnl --------------------------------------------- @@ -1410,7 +1500,7 @@ dnl FusionSound support dnl --------------------------------------------- AC_ARG_WITH([fusionsound], - AC_HELP_STRING([--with-fusionsound], [Build with FunsionSound audio output]), + AS_HELP_STRING([--with-fusionsound], [Build with FunsionSound audio output]), [with_fusionsound=$withval], [with_fusionsound=no]) if test "x$with_fusionsound" = "xyes"; then @@ -1422,41 +1512,25 @@ if test "x$with_fusionsound" = "xyes"; then else no_fusionsound=yes fi -AM_CONDITIONAL(HAVE_FUSIONSOUND, test x"$no_fusionsound" != "xyes") +AM_CONDITIONAL(HAVE_FUSIONSOUND, test "x$no_fusionsound" != "xyes") dnl --------------------------------------------- dnl JACK support dnl --------------------------------------------- -AC_ARG_ENABLE([jack], - AC_HELP_STRING([--disable-jack], [Disable optional JACK support]), - [ - case "${enableval}" in - yes) jack=yes ;; - no) jack=no ;; - *) AC_MSG_ERROR(bad value ${enableval} for --disable-jack) ;; - esac - ], - [jack=auto]) - -if test "x${jack}" != xno ; then - PKG_CHECK_MODULES(JACK, [ jack >= 0.100 ], - HAVE_JACK=1, - [ - HAVE_JACK=0 - if test "x$jack" = xyes ; then - AC_MSG_ERROR([*** JACK support not found]) - fi - ]) -else - HAVE_JACK=0 +AC_ARG_WITH([jack], + AS_HELP_STRING([--without-jack], [Build without Jack support])) + +if test "x$with_jack" != "xno"; then + PKG_CHECK_MODULES([JACK], [jack >= 0.100], [have_jack=yes], [have_jack=no]) + + if test "x$with_jack" = "xyes" && test "x$have_jack" = "xno"; then + AC_MSG_ERROR([Jack support requested, but Jack not found]) + fi fi -AC_SUBST(JACK_CFLAGS) -AC_SUBST(JACK_LIBS) -AC_SUBST(HAVE_JACK) -AM_CONDITIONAL([HAVE_JACK], [test "x$HAVE_JACK" = x1]) +AM_CONDITIONAL([HAVE_JACK], [test "x$have_jack" = "xyes"]) dnl --------------------------------------------- @@ -1464,7 +1538,7 @@ dnl gnome-vfs support dnl --------------------------------------------- AC_ARG_ENABLE([gnomevfs], - AC_HELP_STRING([--disable-gnomevfs], [do not build gnome-vfs support]), + AS_HELP_STRING([--disable-gnomevfs], [do not build gnome-vfs support]), [with_gnome_vfs=$enableval], [with_gnome_vfs=yes]) if test "x$with_gnome_vfs" = "xyes"; then @@ -1473,7 +1547,7 @@ if test "x$with_gnome_vfs" = "xyes"; then no_gnome_vfs=yes) AC_SUBST(GNOME_VFS_CFLAGS) AC_SUBST(GNOME_VFS_LIBS) - if test x"$no_gnome_vfs" != "xyes"; then + if test "x$no_gnome_vfs" != "xyes"; then AC_DEFINE(HAVE_GNOME_VFS,1,[Define this if you have gnome-vfs installed]) else AC_MSG_RESULT(*** All of the gnome-vfs dependent parts will be disabled ***) @@ -1481,7 +1555,7 @@ if test "x$with_gnome_vfs" = "xyes"; then else no_gnome_vfs=yes fi -AM_CONDITIONAL(HAVE_GNOME_VFS, test x"$no_gnome_vfs" != "xyes") +AM_CONDITIONAL(HAVE_GNOME_VFS, test "x$no_gnome_vfs" != "xyes") dnl --------------------------------------------- dnl gdk-pixbuf support @@ -1496,7 +1570,7 @@ if test "x$enable_gdkpixbuf" != "xno"; then no_gdkpixbuf=yes) AC_SUBST(GDK_PIXBUF_CFLAGS) AC_SUBST(GDK_PIXBUF_LIBS) - if test x"$no_gdkpixbuf" != "xyes"; then + if test "x$no_gdkpixbuf" != "xyes"; then AC_DEFINE(HAVE_GDK_PIXBUF,1,[Define this if you have gdk-pixbuf installed]) else AC_MSG_RESULT(*** All of the gdk-pixbuf dependent parts will be disabled ***) @@ -1504,14 +1578,14 @@ if test "x$enable_gdkpixbuf" != "xno"; then else no_gdkpixbuf=yes fi -AM_CONDITIONAL(HAVE_GDK_PIXBUF, test x"$no_gdkpixbuf" != "xyes") +AM_CONDITIONAL(HAVE_GDK_PIXBUF, test "x$no_gdkpixbuf" != "xyes") dnl --------------------------------------------- dnl libsmbclient support dnl --------------------------------------------- AC_ARG_ENABLE([samba], - AC_HELP_STRING([--disable-samba], [do not build Samba support]), + AS_HELP_STRING([--disable-samba], [do not build Samba support]), [with_samba=$enableval], [with_samba=yes]) if test "x$with_samba" = "xyes"; then @@ -1523,7 +1597,7 @@ if test "x$with_samba" = "xyes"; then AC_MSG_RESULT([*** All libsmbclient dependent parts will be disabled ***])) AC_SUBST(LIBSMBCLIENT_LIBS) fi -AM_CONDITIONAL(HAVE_LIBSMBCLIENT, test x"$have_libsmbclient" = "xyes") +AM_CONDITIONAL(HAVE_LIBSMBCLIENT, test "x$have_libsmbclient" = "xyes") dnl --------------------------------------------- @@ -1532,17 +1606,17 @@ dnl --------------------------------------------- AC_MSG_CHECKING(for Sun audio support) have_sunaudio=no -AC_TRY_COMPILE([ +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/audioio.h> - ],[ + ]], [[ audio_info_t audio_info; AUDIO_INITINFO(&audio_info); - ],[ + ]])],[ have_sunaudio=yes - ]) + ],[]) AC_MSG_RESULT($have_sunaudio) -AM_CONDITIONAL(HAVE_SUNAUDIO, test x"$have_sunaudio" = "xyes") +AM_CONDITIONAL(HAVE_SUNAUDIO, test "x$have_sunaudio" = "xyes") dnl --------------------------------------------- @@ -1573,17 +1647,17 @@ AC_CHECK_HEADERS(sys/cdio.h linux/cdrom.h) AM_CHECK_CDROM_IOCTLS( [AC_DEFINE(HAVE_CDROM_IOCTLS,1,[Define this if you have CDROM ioctls])], [AC_MSG_RESULT([*** (S)VCD support will be disabled ***])]) -AM_CONDITIONAL(HAVE_CDROM_IOCTLS, [test x"$have_cdrom_ioctls" = "xyes"]) +AM_CONDITIONAL(HAVE_CDROM_IOCTLS, [test "x$have_cdrom_ioctls" = "xyes"]) dnl --------------------------------------------- dnl check for a usable version of libdvdnav dnl --------------------------------------------- -AC_ARG_WITH(external-dvdnav, AC_HELP_STRING([--with-external-dvdnav], [use external dvdnav library (not recommended)]), +AC_ARG_WITH(external-dvdnav, AS_HELP_STRING([--with-external-dvdnav], [use external dvdnav library (not recommended)]), [external_dvdnav="$withval"], [no_dvdnav="yes"; external_dvdnav="no"]) -if test x"$external_dvdnav" = "xyes"; then +if test "x$external_dvdnav" = "xyes"; then AM_PATH_DVDNAV(0.1.9, AC_DEFINE(HAVE_DVDNAV,1,[Define this if you have a suitable version of libdvdnav]), [AC_MSG_RESULT([*** no usable version of libdvdnav found, using internal copy ***])]) @@ -1591,34 +1665,34 @@ else AC_MSG_RESULT([Use included DVDNAV support]) fi -AM_CONDITIONAL(HAVE_DVDNAV, [test x"$no_dvdnav" != "xyes"]) +AM_CONDITIONAL(HAVE_DVDNAV, [test "x$no_dvdnav" != "xyes"]) dnl --------------------------------------------- dnl Video CD dnl --------------------------------------------- -AC_ARG_ENABLE(vcd, AC_HELP_STRING([--disable-vcd], [do not compile VCD plugin]), +AC_ARG_ENABLE(vcd, AS_HELP_STRING([--disable-vcd], [do not compile VCD plugin]), enable_vcd=$enableval, enable_vcd=yes) dnl Force build of both vcd plugins, for now. -dnl AC_ARG_ENABLE(vcdo, AC_HELP_STRING([--disable-vcdo], [do not compile old VCD plugin]), +dnl AC_ARG_ENABLE(vcdo, AS_HELP_STRING([--disable-vcdo], [do not compile old VCD plugin]), dnl enable_vcdo=$enableval, enable_vcdo=yes) dnl enable_vcdo="yes" -AC_ARG_WITH(internal-vcdlibs, AC_HELP_STRING([--with-internal-vcdlibs], [force using internal libcdio/libvcd/libvcdinfo]), +AC_ARG_WITH(internal-vcdlibs, AS_HELP_STRING([--with-internal-vcdlibs], [force using internal libcdio/libvcd/libvcdinfo]), [internal_vcdnav="$withval"], [internal_vcdnav="no"]) -if test x"$enable_vcd" = "xyes"; then +if test "x$enable_vcd" = "xyes"; then dnl empty_array_size AC_MSG_CHECKING([how to create empty arrays]) empty_array_size="xxx" - AC_TRY_COMPILE([],[struct { int foo; int bar[]; } doo;], empty_array_size="") + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[struct { int foo; int bar[]; } doo;]])],[empty_array_size=""],[]) if test "x$empty_array_size" = "xxxx";then - AC_TRY_COMPILE([],[struct { int foo; int bar[0]; } doo;], empty_array_size="0") + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[struct { int foo; int bar[0]; } doo;]])],[empty_array_size="0"],[]) fi if test "x$empty_array_size" = "xxxx" @@ -1634,40 +1708,22 @@ if test x"$enable_vcd" = "xyes"; then fi dnl empty_array_size - if test x"$internal_vcdnav" = "xno" && test x"$PKG_CONFIG" != "xno" ; then - AC_MSG_CHECKING(for libcdio) - if $PKG_CONFIG --atleast-version 0.71 libcdio; then - AC_MSG_RESULT(found) - LIBCDIO_CFLAGS=`$PKG_CONFIG --cflags libcdio` - LIBCDIO_LIBS=`$PKG_CONFIG --libs libcdio` - - AC_MSG_CHECKING(for libvcdinfo) - if $PKG_CONFIG --atleast-version 0.7.23 libvcdinfo; then - AC_MSG_RESULT(found) - LIBVCDINFO_CFLAGS=`$PKG_CONFIG --cflags libvcdinfo` - LIBVCDINFO_LIBS=`$PKG_CONFIG --libs libvcdinfo` - AC_DEFINE(HAVE_VCDNAV,1,[Define this if you have a suitable version of libcdio/libvcd]) - else - AC_MSG_RESULT([Use included libcdio/libvcdinfo support]) - internal_vcdnav="yes" - fi - - else - AC_MSG_RESULT([Use included libcdio/libvcdinfo support]) - internal_vcdnav="yes" + if test "x$internal_vcdnav" = "xno" ; then + PKG_CHECK_MODULES([LIBCDIO], [libcdio >= 0.71], [], [internal_vcdnav=yes]) + PKG_CHECK_MODULES([LIBVCDINFO], [libvcdinfo >= 0.7.23], [], [internal_vcdnav=yes]) + if test "x$internal_vcdnav" = "xyes"; then + AC_MSG_RESULT([Use included libcdio/libvcdinfo support]) fi - else - AC_MSG_RESULT([Use included libcdio/libvcdinfo support]) - internal_vcdnav="yes" fi dnl check twice, fallback is internal copy - if test x"$internal_vcdnav" = "xyes"; then + if test "x$internal_vcdnav" = "xno"; then + AC_DEFINE([HAVE_VCDNAV], [1], [Define this if you use external libcdio/libvcdinfo]) + else AC_DEFINE_UNQUOTED(HOST_ARCH, "$host_os/$host_cpu", [host os/cpu identifier]) AC_DEFINE(_DEVELOPMENT_, [], enable warnings about being development release) - AC_DEFINE(_GNU_SOURCE, [], enable GNU libc extension) - AC_STDC_HEADERS + AC_HEADER_STDC AC_CHECK_HEADERS(sys/stat.h stdint.h glob.h inttypes.h stdbool.h) if test "x$ac_cv_header_stdint_h" != "xyes" @@ -1679,10 +1735,10 @@ if test x"$enable_vcd" = "xyes"; then dnl ISOC99_PRAGMA AC_MSG_CHECKING([whether $CC supports ISOC99 _Pragma()]) - AC_TRY_COMPILE([],[_Pragma("pack(1)")], [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[_Pragma("pack(1)")]])],[ ISOC99_PRAGMA=yes AC_DEFINE(HAVE_ISOC99_PRAGMA, [], [Supports ISO _Pragma() macro]) - ],ISOC99_PRAGMA=no) + ],[ISOC99_PRAGMA=no]) AC_MSG_RESULT($ISOC99_PRAGMA) dnl @@ -1755,10 +1811,10 @@ Because it's needed for VCD plugin, disable VCD by configure option AC_MSG_RESULT(MSBF${TEXT}) fi - AC_HAVE_HEADERS( errno.h fcntl.h \ + AC_CHECK_HEADERS([errno.h fcntl.h \ stdbool.h stdlib.h stdint.h stdio.h string.h \ strings.h linux/version.h sys/cdio.h sys/stat.h \ - sys/types.h ) + sys/types.h ]) LIBCDIO_CFLAGS='-I$(top_srcdir)/src/input/vcd/libcdio' LIBCDIO_LIBS='$(top_builddir)/src/input/vcd/libcdio/libcdio.la' @@ -1780,12 +1836,12 @@ Because it's needed for VCD plugin, disable VCD by configure option AC_CHECK_HEADERS(linux/version.h) AC_CHECK_HEADERS(linux/cdrom.h, [have_linux_cdrom_h="yes"]) if test "x$have_linux_cdrom_h" = "xyes" ; then - AC_TRY_COMPILE(,[ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ #include <linux/cdrom.h> struct cdrom_generic_command test; -int has_timeout=sizeof(test.timeout);], +int has_timeout=sizeof(test.timeout);]])], [AC_DEFINE([HAVE_LINUX_CDROM_TIMEOUT], [1], - [Define 1 if timeout is in cdrom_generic_command struct])]) + [Define 1 if timeout is in cdrom_generic_command struct])],[]) AC_DEFINE([HAVE_LINUX_CDROM], [1], [Define 1 if you have Linux-type CD-ROM support]) fi @@ -1853,8 +1909,8 @@ AC_SUBST(LIBISO9660_LIBS) AC_SUBST(LIBVCD_CFLAGS) AC_SUBST(LIBVCD_LIBS) AC_SUBST(LIBVCDINFO_LIBS) -AM_CONDITIONAL(HAVE_VCDNAV, [test x"$internal_vcdnav" = "xno"]) -AM_CONDITIONAL(ENABLE_VCD, [test x"$enable_vcd" = "xyes"]) +AM_CONDITIONAL(HAVE_VCDNAV, [test "x$internal_vcdnav" = "xno"]) +AM_CONDITIONAL(ENABLE_VCD, [test "x$enable_vcd" = "xyes"]) dnl --------------------------------------------- @@ -1862,7 +1918,7 @@ dnl ASF build can be optional dnl --------------------------------------------- AC_ARG_ENABLE([asf], AS_HELP_STRING([--disable-asf], [do not build ASF demuxer])) -AM_CONDITIONAL(BUILD_ASF, test x"$enable_asf" != "xno") +AM_CONDITIONAL(BUILD_ASF, test "x$enable_asf" != "xno") dnl --------------------------------------------- @@ -1870,22 +1926,22 @@ dnl FAAD build can be optional dnl --------------------------------------------- AC_ARG_ENABLE([faad], AS_HELP_STRING([--disable-faad], [do not build FAAD decoder])) -AM_CONDITIONAL(BUILD_FAAD, test x"$enable_faad" != "xno") +AM_CONDITIONAL(BUILD_FAAD, test "x$enable_faad" != "xno") dnl --------------------------------------------- dnl Optional and external libdts dnl --------------------------------------------- -AC_ARG_ENABLE(dts, AC_HELP_STRING([--disable-dts], [Disable support for DTS decoding library (default: enabled)]), +AC_ARG_ENABLE(dts, AS_HELP_STRING([--disable-dts], [Disable support for DTS decoding library (default: enabled)]), [enable_libdts="$enableval"], [enable_libdts="yes"]) -AC_ARG_WITH(external-libdts, AC_HELP_STRING([--with-external-libdts], [use external libdts library (not recommended)]), +AC_ARG_WITH(external-libdts, AS_HELP_STRING([--with-external-libdts], [use external libdts library (not recommended)]), [external_libdts="$withval"], [external_libdts="no"]) have_dts="no" if test "x$enable_libdts" = "xno"; then AC_MSG_RESULT([libdts support disabled]) -elif test x"$external_libdts" = "xyes"; then +elif test "x$external_libdts" = "xyes"; then PKG_CHECK_MODULES(LIBDTS, [libdts], have_dts=yes, have_dts=no) AC_CHECK_HEADERS([dts.h]) AC_SUBST(LIBDTS_LIBS) @@ -1898,13 +1954,13 @@ else fi AM_CONDITIONAL(DTS, test "x$enable_libdts" = "xyes") -AM_CONDITIONAL(EXTERNAL_LIBDTS, test x"$have_dts" = "xyes") +AM_CONDITIONAL(EXTERNAL_LIBDTS, test "x$have_dts" = "xyes") dnl --------------------------------------------- dnl libmodplug support dnl --------------------------------------------- AC_ARG_ENABLE([modplug], - AS_HELP_STRING([--enable-modplug], [Enable modplub support]) ) + AS_HELP_STRING([--enable-modplug], [Enable modplug support]) ) if test "x$enable_modplug" != "xno"; then PKG_CHECK_MODULES([LIBMODPLUG], [libmodplug >= 0.7], @@ -1914,34 +1970,52 @@ fi AC_SUBST(LIBMODPLUG_CFLAGS) AC_SUBST(LIBMODPLUG_LIBS) -dnl AM_CONDITIONAL(HAVE_MODPLUG, [test x"$have_modplug" = x"yes"]) - +dnl AM_CONDITIONAL(HAVE_MODPLUG, [test "x$have_modplug" = x"yes"]) dnl --------------------------------------------- -dnl Win32 DLL codecs +dnl Wavpack library dnl --------------------------------------------- -AC_ARG_ENABLE([w32dll], - AC_HELP_STRING([--disable-w32dll], [Disable Win32 DLL support]), - enable_w32dll=$enableval, [ - AC_MSG_CHECKING([whether to enable Win32 DLL support]) - case "$host_or_hostalias" in - *-mingw* | *-cygwin) - enable_w32dll="no" - ;; - i?86-* | k?-* | athlon-* | pentium*-) - enable_w32dll="yes" - ;; - *) - enable_w32dll="no" - esac - AC_MSG_RESULT([$enable_w32dll])]) -AM_CONDITIONAL(HAVE_W32DLL, test x"$enable_w32dll" = "xyes") -if test x"$enable_w32dll" = "xyes"; then - W32DLL_DEP="" -else - W32DLL_DEP="#" +AC_ARG_WITH([wavpack], + AS_HELP_STRING([--with-wavpack], [Enable Wavpack decoder (requires libwavpack)]) ) + +if test "x$with_wavpack" = "xyes"; then + PKG_CHECK_MODULES([WAVPACK], [wavpack], [have_wavpack=yes]) +fi + +AM_CONDITIONAL([HAVE_WAVPACK], [test "x$have_wavpack" = "xyes"]) + + +dnl -------------------------------------------- +dnl Real binary codecs support +dnl -------------------------------------------- + +AC_ARG_ENABLE([real-codecs], + AS_HELP_STRING([--disable-real-codecs], [Disable Real binary codecs support])) +AC_ARG_WITH([real-codecs-path], + AS_HELP_STRING([--with-real-codecs-path=dir], [Specify directory for Real binary codecs]), [ + AC_DEFINE_UNQUOTED([REAL_CODEC_PATH], ["$withval"], [Specified path for Real binary codecs]) + ]) + +dnl On some systems, we cannot enable Real codecs support to begin with. +dnl This includes Darwin, that uses Mach-O rather than ELF. +case $host in + *-darwin*) enable_real_codecs="no" ;; +esac + +if test "x$enable_real_codecs" != "xno"; then + dnl For those that have a replacement, break at the first one found + AC_CHECK_SYMBOLS([__environ _environ environ], [break], [need_weak_aliases=yes]) + AC_CHECK_SYMBOLS([stderr __stderrp], [break], [need_weak_aliases=yes]) + + dnl For these there are no replacements + AC_CHECK_SYMBOLS([___brk_addr __ctype_b]) + + if test "x$need_weak_aliases" = "xyes"; then + CC_ATTRIBUTE_ALIAS(, [AC_MSG_ERROR([You need weak aliases support for Real codecs on your platform])]) + fi fi -AC_SUBST(W32DLL_DEP) + +AM_CONDITIONAL([ENABLE_REAL], [test "x$enable_real_codecs" != "xno"]) dnl -------------------------------------------- dnl mmap() support @@ -1955,14 +2029,53 @@ if test "x$enable_mmap" = "xyes"; then fi dnl --------------------------------------------- +dnl antialising support +dnl --------------------------------------------- + +AC_ARG_ENABLE([antialiasing], + AS_HELP_STRING([--enable-antialiasing], [enable font antialiasing])) + +if test "x$enable_antialiasing" = "xyes"; then + AC_DEFINE(ENABLE_ANTIALIASING,1,[Define this to 1 to enable font antialising.]) +fi + +dnl --------------------------------------------- dnl ip_mreqn dnl --------------------------------------------- AC_CHECK_IP_MREQN -if test x"$have_ip_mreqn" = "xyes"; then +if test "x$have_ip_mreqn" = "xyes"; then AC_DEFINE(HAVE_IP_MREQN,1,[Define this if you have ip_mreqn in netinet/in.h]) fi +dnl --------------------------------------------- +dnl restrict keyword finding (from gstreamer) +dnl --------------------------------------------- +restrict="" +for restrict_keyword in restrict __restrict__ __restrict; do + AC_MSG_CHECKING(for restrict keyword $restrict_keyword) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ void foo(char * $restrict_keyword p); ]])],[ + KEYWORD_FOUND=yes && AC_MSG_RESULT(yes) ],[ + KEYWORD_FOUND=no && AC_MSG_RESULT(no) ]) + if test "x$KEYWORD_FOUND" = xyes; then + restrict="$restrict_keyword" + break + fi +done +if test "x$restrict" = x; then + AC_MSG_ERROR(No restrict keyword found) +fi +AC_DEFINE_UNQUOTED(restrict, $restrict, [restrict keyword]) + +dnl --------------------------------------------- +dnl ASM ALIGN is power of two ? +dnl Used by internal FFmpeg and Planar postprocess +dnl --------------------------------------------- +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[ asm (".align 3"); ]])],[ + AC_DEFINE([ASMALIGN(ZEROBITS)], [".align " #ZEROBITS "\n\t"], "asmalign power of two") +],[ + AC_DEFINE([ASMALIGN(ZEROBITS)], [".align 1<<" #ZEROBITS "\n\t"], "asmalign power of two") +]) dnl --------------------------------------------- dnl Some extra checks. @@ -1971,10 +2084,10 @@ dnl --------------------------------------------- AC_SYS_LARGEFILE AC_CHECK_LIB(posix4, sched_get_priority_min) AC_CHECK_FUNCS([vsscanf sigaction sigset getpwuid_r nanosleep lstat memset readlink strchr va_copy]) -AC_CHECK_FUNCS([_snprintf snprintf], [some_snprintf="yes"]) -AC_CHECK_FUNCS([_vsnprintf vsnprintf], [some_vsnprintf="yes"]) -AC_CHECK_FUNCS([_stricmp strcasecmp], [some_strcasecmp="yes"]) -AC_CHECK_FUNCS([_strnicmp strncasecmp], [some_strncasecmp="yes"]) +AC_CHECK_FUNCS([snprintf _snprintf], [some_snprintf="yes"; break]) +AC_CHECK_FUNCS([vsnprintf _vsnprintf], [some_vsnprintf="yes"; break]) +AC_CHECK_FUNCS([strcasecmp _stricmp], [some_strcasecmp="yes"; break]) +AC_CHECK_FUNCS([strncasecmp _strnicmp], [some_strncasecmp="yes"; break]) if test "x$some_snprintf" != "xyes" -o \ "x$some_vsnprintf" != "xyes" -o \ "x$some_strcasecmp" != "xyes" -o \ @@ -1982,8 +2095,7 @@ if test "x$some_snprintf" != "xyes" -o \ AC_MSG_ERROR([required function not found]) fi AC_FUNC_FSEEKO -AC_DEFINE(_GNU_SOURCE) -AC_CHECK_HEADERS(assert.h byteswap.h malloc.h execinfo.h ucontext.h sys/mman.h sys/mixer.h libgen.h netdb.h dirent.h sys/times.h sys/ioctl.h sys/param.h) +AC_CHECK_HEADERS(assert.h byteswap.h malloc.h execinfo.h ucontext.h sys/mman.h sys/mixer.h libgen.h netdb.h dirent.h sys/times.h sys/ioctl.h sys/param.h alloca.h) AC_REPLACE_FUNCS(asprintf basename gettimeofday setenv strndup strpbrk strsep strtok_r timegm unsetenv) AC_LIBSOURCE(hstrerror.c) @@ -1991,9 +2103,14 @@ AC_LINK_IFELSE([#include <netdb.h> int main(void) { hstrerror(0); }], ac_cv_function_system_hstrerror="yes") -AC_CHECK_LIB([resolv], [hstrerror], [ac_cv_function_system_hstrerror="yes"]) -if test x"$ac_cv_function_system_hstrerror" = "xyes"; then +AC_CHECK_LIB([resolv], [hstrerror], [ + ac_cv_function_system_hstrerror="yes" + NET_LIBS="-lresolv $NET_LIBS" +]) +AC_SUBST(NET_LIBS) +if test "x$ac_cv_function_system_hstrerror" = "xyes"; then AC_DEFINE(HAVE_HSTRERROR, 1, [Define to 1 if you have 'hstrerror' in <netdb.h>]) + else AC_LIBOBJ(hstrerror) fi @@ -2001,7 +2118,7 @@ fi AC_LIBSOURCE(dirent_msvc.c) AC_CHECK_FUNC(opendir, [AC_DEFINE(HAVE_OPENDIR, 1, [Define to 1 if you have 'opendir' function])], - [if test x"$SYS" = "xmingw32"; then + [if test "x$SYS" = "xmingw32"; then AC_LIBOBJ(dirent_msvc) else AC_MSG_ERROR([dirent is needed (opendir, readdir, ...)]) @@ -2022,32 +2139,34 @@ dnl dummy ASFLAGS="$ASFLAGS" AC_SUBST(ASFLAGS) -dnl check for __attribute__ ((aligned ())) -dnl WARNING! Do not move this check behind the $(MULTIPASS_CFLAGS)! -dnl (the alignment test macro does not like variables in the CFLAGS) -AC_C_ATTRIBUTE_ALIGNED - -CC_ATTRIBUTE_VISIBILITY -CC_FLAG_VISIBILITY([ - AC_DEFINE([EXPORTED], - [__attribute__((visibility("default")))], - [Mark a symbol as being exported if visibility is changed]) - VISIBILITY_FLAG="-fvisibility=hidden" - ], [ - AC_DEFINE([EXPORTED], [], [Dummy mark as being exported]) - ]) +dnl --------------------------------------------- +dnl Check for some __attribute__ support needed +dnl --------------------------------------------- + +CC_ATTRIBUTE_ALIGNED + +CC_ATTRIBUTE_VISIBILITY([protected], [visibility_export="protected"], + [CC_ATTRIBUTE_VISIBILITY([default], [visibility_export="default"])] +) + +if test "x$visibility_export" != "x"; then + CC_FLAG_VISIBILITY([ + AC_DEFINE([EXPORTED], [__attribute__((visibility("default")))], + [Mark a symbol as being exported if visibility is changed]) + VISIBILITY_FLAG="-fvisibility=hidden" + ], [AC_DEFINE([EXPORTED], [], [Dummy mark as being exported]) + ]) +else + AC_DEFINE([EXPORTED], [], [Dummy mark as being exported]) +fi AC_SUBST([VISIBILITY_FLAG]) CC_ATTRIBUTE_SENTINEL -dnl Common cflags for all platforms -CFLAGS="-DNDEBUG -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DXINE_COMPILE \$(MULTIPASS_CFLAGS) $CFLAGS" -DEBUG_CFLAGS="-D_REENTRANT -D_FILE_OFFSET_BITS=64 -DXINE_COMPILE $DEBUG_CFLAGS" - AC_OPTIMIZATIONS -enable_ffmmx="no" +arch_x86="no" enable_armv4l="no" case "$host_or_hostalias" in @@ -2058,9 +2177,9 @@ case "$host_or_hostalias" in dnl like the extended asm() or __attribute(__cdecl__), or other direct dnl mmx/sse/3dnow assembler instructions. dnl - AC_DEFINE_UNQUOTED(ARCH_X86,,[Define this if you're running x86 architecture]) + AC_DEFINE_UNQUOTED(ARCH_X86_32,,[Define this if you're running x86 architecture 32 bits]) AC_DEFINE(FPM_INTEL,1,[Define to select libmad fixed point arithmetic implementation]) - enable_ffmmx="yes" + arch_x86="yes" enable_impure_text="yes" case "$host_or_hostalias" in @@ -2070,9 +2189,9 @@ case "$host_or_hostalias" in esac ;; x86_64-*) - AC_DEFINE_UNQUOTED(ARCH_X86_64,,[Define this if you're running x86 architecture]) + AC_DEFINE_UNQUOTED(ARCH_X86_64,,[Define this if you're running x86 architecture 64 bits]) AC_DEFINE(FPM_64BIT,1,[Define to select libmad fixed point arithmetic implementation]) - enable_ffmmx="yes" + arch_x86="yes" ;; powerpc-*-darwin*) dnl avoid ppc compilation crash @@ -2082,7 +2201,7 @@ case "$host_or_hostalias" in AC_CHECK_HEADER([altivec.h], , enable_altivec=no) - if test x$enable_altivec != xno; then + if test "x$enable_altivec" != xno; then AC_DEFINE_UNQUOTED(ENABLE_ALTIVEC,,[Define this if you want to use altivec on PowerPC CPUs]) CFLAGS="$CFLAGS -faltivec -maltivec" LIBMPEG2_CFLAGS="$LIBMPEG2_CFLAGS -force_cpusubtype_ALL -faltivec -maltivec" @@ -2096,14 +2215,14 @@ case "$host_or_hostalias" in AC_CHECK_HEADER([altivec.h], , enable_altivec=no) - if test x$enable_altivec != xno; then + if test "x$enable_altivec" != xno; then AC_DEFINE_UNQUOTED(ENABLE_ALTIVEC,,[Define this if you have a Motorola 74xx CPU]) CFLAGS="$CFLAGS -maltivec" LIBMPEG2_CFLAGS="$LIBMPEG2_CFLAGS -maltivec" fi ;; sparc*-*-linux*) - if test x$enable_vis != xno; then + if test "x$enable_vis" != xno; then has_vis=yes fi @@ -2115,7 +2234,7 @@ case "$host_or_hostalias" in case `$CC --version 2>/dev/null` in 1.*|2.*) ;; *) - if test x$enable_vis != xno; then + if test "x$enable_vis" != xno; then has_vis=yes fi ;; @@ -2144,39 +2263,35 @@ esac if test "x$has_vis" = "xyes"; then AC_DEFINE_UNQUOTED(ENABLE_VIS,,[Define this if you have Sun UltraSPARC CPU]) - case $CFLAGS in + case "$CFLAGS" in *-mcpu=*) ;; *) CFLAGS="$CFLAGS -mcpu=v9" ;; esac fi -AM_CONDITIONAL(ENABLE_VIS, test x"$has_vis" = "xyes") +AM_CONDITIONAL(ENABLE_VIS, test "x$has_vis" = "xyes") -AM_CONDITIONAL(HAVE_FFMMX, test x"$enable_ffmmx" = "xyes") +if test "x$arch_x86" = "xyes"; then + AC_DEFINE_UNQUOTED(ARCH_X86,,[Define this if you're running x86 architecture]) + AC_DEFINE_UNQUOTED(HAVE_MMX,,[Define this if you can compile MMX asm instructions]) +fi +AM_CONDITIONAL(ARCH_X86, test "x$arch_x86" = "xyes") +AM_CONDITIONAL(HAVE_MMX, test "x$arch_x86" = "xyes") case $host_os in darwin*) HOST_OS_DARWIN=1 AC_DEFINE_UNQUOTED(HOST_OS_DARWIN, 1, [Define this if built on Mac OS X/Darwin]) - OBJC=${CC:-gcc} - AC_SUBST(OBJC) - OBJCFLAGS="-D_INTL_REDIRECT_MACROS $CFLAGS $OBJCFLAGS" - AC_SUBST(OBJCFLAGS) - OBJCDEPMODE="depmode=gcc3" - dnl Do not use AC_SUBST(OBJCDEPMODE): we don't need it as long we use - dnl _AM_DEPENDENCIES (below), and doing the AC_SUBST elicits a warning - dnl from automake 1.6. + OBJCFLAGS="-D_INTL_REDIRECT_MACROS $OBJCFLAGS" ;; - *) - ;; esac -AM_CONDITIONAL(HOST_OS_DARWIN, test x"$HOST_OS_DARWIN" = "x1") +AM_CONDITIONAL(HOST_OS_DARWIN, test "x$HOST_OS_DARWIN" = "x1") dnl --------------------------------------------- dnl Set IMPURE_TEXT_LDFLAGS dnl --------------------------------------------- IMPURE_TEXT_LDFLAGS="" -if test x"$enable_impure_text" = xyes; then +if test "x$enable_impure_text" = xyes; then case "$host_or_hostalias" in *solaris*) if test "$GCC" = yes; then @@ -2185,6 +2300,9 @@ if test x"$enable_impure_text" = xyes; then IMPURE_TEXT_LDFLAGS="-z textoff" fi ;; + *-darwin*) + IMPURE_TEXT_LDFLAGS="-Wl,-read_only_relocs,warning" + ;; esac fi AC_SUBST(IMPURE_TEXT_LDFLAGS) @@ -2193,8 +2311,28 @@ dnl --------------------------------------------- dnl HAVE_ARMV4L is currently used in libavcodec makefile.am dnl --------------------------------------------- -AM_CONDITIONAL(HAVE_ARMV4L, test x"$enable_armv4l" = "xyes") +AM_CONDITIONAL(HAVE_ARMV4L, test "x$enable_armv4l" = "xyes") + + +dnl --------------------------------------------- +dnl Use features of autoconf 2.61, but stay compatible +dnl with older versions. +dnl --------------------------------------------- + +if test "x$datarootdir" = "x"; then + datarootdir='${datadir}' + AC_SUBST(datarootdir) +fi + +if test "x$docdir" = "x"; then + docdir='${datarootdir}/doc/${PACKAGE}' + AC_SUBST(docdir) +fi +if test "x$htmldir" = "x"; then + htmldir='${docdir}' + AC_SUBST(htmldir) +fi dnl --------------------------------------------- dnl XINE_ROOTDIR does not work if architecture independent files are @@ -2231,7 +2369,7 @@ XINE_REL_PLUGINDIR="`makeexpand "$XINE_PLUGINDIR"`" XINE_REL_PLUGINDIR="`makeexpand "$XINE_REL_PLUGINDIR" | sed -e "s,^${prefix}/,,"`" XINE_REL_FONTDIR="`makeexpand "$XINE_FONTDIR" | sed -e "s,^${prefix}/,,"`" XINE_REL_LOCALEDIR="`makeexpand "$XINE_LOCALEDIR" | sed -e "s,^${prefix}/,,"`" -if test x"$SYS" = "xmingw32" -o x"$SYS" = "xcygwin"; then +if test "x$SYS" = "xmingw32" -o "x$SYS" = "xcygwin"; then dnl polish paths (MinGW runtime accepts both \ and / anyway) XINE_REL_PLUGINDIR="`echo "$XINE_REL_PLUGINDIR" | sed -e 's/\\//\\\\\\\\/g'`" XINE_REL_FONTDIR="`echo "$XINE_REL_FONTDIR" | sed -e 's/\\//\\\\\\\\/g'`" @@ -2270,12 +2408,12 @@ AC_SUBST(XINE_FONTDIR) AC_SUBST(XINE_LOCALEDIR) dnl Where aclocal m4 files should be installed -XINE_ACFLAGS="-I `makeexpand "${datarootdir:-${datadir}}/aclocal"`" +XINE_ACFLAGS="-I `makeexpand "${datarootdir}/aclocal"`" AC_DEFINE_UNQUOTED(XINE_ACFLAGS, "$XINE_ACFLAGS", [Path where aclocal m4 files will be.]) AC_SUBST(XINE_ACFLAGS) dnl Where architecture independent data (e.g. logo) will/should be installed -XINE_DATADIR="`makeexpand "${datarootdir:-${datadir}}/xine"`" +XINE_DATADIR="`makeexpand "${datarootdir}/xine"`" AC_SUBST(XINE_DATADIR) dnl Where scripts will/should be installed. @@ -2287,7 +2425,7 @@ dnl --------------------------------------------- dnl Some informations about xine-lib compilation dnl --------------------------------------------- -XINE_BUILD_CC="`$CC -v 2>&1 | tail -n 1`" +XINE_BUILD_CC="`$CC -v 2>&1 | tail -1 2>/dev/null`" XINE_BUILD_OS="`uname -s -r -m`" XINE_BUILD_DATE="`date \"+%a %d %b %Y %T\"`" AC_SUBST(XINE_BUILD_CC) @@ -2299,10 +2437,37 @@ dnl --------------------------------------------- dnl For win32 libraries location, needed by libw32dll. dnl --------------------------------------------- -AC_ARG_WITH(w32-path, AC_HELP_STRING([--with-w32-path=path], [location of WIN32 libraries]), - w32_path="$withval", w32_path="/usr/lib/codecs") +AC_ARG_WITH([w32-path], + AS_HELP_STRING([--with-w32-path=path], [location of Win32 binary codecs]), + [w32_path="$withval"], [w32_path="/usr/lib/codecs"]) AC_SUBST(w32_path) +AC_ARG_ENABLE([w32dll], + AS_HELP_STRING([--disable-w32dll], [Disable Win32 DLL support]), + , [enable_w32dll=$with_gnu_as]) + +case $host in + *-mingw* | *-cygwin) + enable_w32dll="no" ;; + i?86-* | k?-* | athlon-* | pentium*-) + if test "x$enable_w32dll" != "xno"; then + CC_PROG_AS + fi + test "x$enable_w32dll" = "x" && \ + enable_w32dll="$with_gnu_as" + ;; + *) + enable_w32dll="no" ;; +esac + +if test "x$enable_w32dll" = "xyes" && \ + test "x$with_gnu_as" = "xno"; then + + AC_MSG_ERROR([You need GNU as to enable Win32 codecs support]) +fi + +AM_CONDITIONAL(HAVE_W32DLL, test "x$enable_w32dll" != "xno") + dnl --------------------------------------------- dnl some include paths ( !!! DO NOT REMOVE !!! ) @@ -2316,7 +2481,7 @@ dnl --------------------------------------------- dnl Get where .m4 should be installed. dnl --------------------------------------------- -dnl if test x"${ACLOCAL_DIR+set}" != xset; then +dnl if test "x${ACLOCAL_DIR+set}" != xset; then dnl case "`id`" in dnl uid=0\(* ) dnl AC_MSG_CHECKING(for aclocal directory) @@ -2333,7 +2498,7 @@ dnl ;; dnl esac dnl fi AC_SUBST(ACLOCAL_DIR) -AM_CONDITIONAL([INSTALL_M4],[test x"$ACLOCAL_DIR" != "x"]) +AM_CONDITIONAL([INSTALL_M4],[test "x$ACLOCAL_DIR" != "x"]) dnl --------------------------------------------- @@ -2376,22 +2541,40 @@ dnl as long as neither autoconf nor automake offer an A[CM]_PROG_OBJC dnl check we will have to call it _AM_DEPENDENCIES([OBJC]) -AM_CONDITIONAL([BUILD_DMX_IMAGE], [test x"$have_imagemagick" = "xyes" -o x"$no_gdkpixbuf" != "xyes"]) +AM_CONDITIONAL([BUILD_DMX_IMAGE], [test "x$have_imagemagick" = "xyes" -o "x$no_gdkpixbuf" != "xyes"]) dnl Important warnings we _don't_ want to skip dnl Don't put these under conditional for optimisations, because these dnl need always to be enabled. -AC_TRY_CFLAGS("-Wformat", wformat="-Wformat") -AC_TRY_CFLAGS("-Wformat=2", wformat="-Wformat=2") -if test "x$wformat" != "x"; then - AC_TRY_CFLAGS("-Wno-format-zero-length", wformat="$wformat -Wno-format-zero-length") -fi -AC_TRY_CFLAGS("-Wmissing-format-attribute", wformat="$wformat -Wmissing-format-attribute") -CFLAGS="$CFLAGS $wformat" +CC_CHECK_CFLAGS([-Wformat=2], [wformat="-Wformat=2"], + [CC_CHECK_CFLAGS([-Wformat], [wformat="-Wformat"])]) + +test "x$wformat" != "x" && \ + CC_CHECK_CFLAGS([-Wno-format-zero-length], [wformat="$wformat -Wno-format-zero-length"]) + +CC_CHECK_CFLAGS([-Wmissing-format-attribute], [wformat="$wformat -Wmissing-format-attribute"]) +warnflags="$warnflags $wformat" -AC_TRY_CFLAGS("-Wstrict-aliasing", wsa="-Wstrict-aliasing") -AC_TRY_CFLAGS("-Wstrict-aliasing=2", wsa="-Wstrict-aliasing=2") -CFLAGS="$CFLAGS $wsa" +dnl This *has* to stay at the end as it can break some autoconf tests. +CC_CHECK_CFLAGS([-Werror-implicit-function-declaration], [warnflags="$warnflags -Werror-implicit-function-declaration"]) + +CC_CHECK_CFLAGS([-Wstrict-aliasing=2], [warnflags="$warnflags -Wstrict-aliasing=2"], + [CC_CHECK_CFLAGS([-Wstrict-aliasing], [warnflags="$warnflags -Wstrict-aliasing"])]) + +case $host in + dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads + dnl are requested, as different implementations are present; to avoid problems + dnl use -Wl,-z,defs only for those platform not behaving this way. + *-freebsd*) ;; + *) + AC_TRY_LDFLAGS([-Wl,-z,defs], [NOUNDEF="-Wl,-z,defs"]) + ;; +esac +AC_SUBST([NOUNDEF]) + +dnl Common cflags for all platforms +CFLAGS="-DNDEBUG -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DXINE_COMPILE \$(MULTIPASS_CFLAGS) $warnflags $CFLAGS" +DEBUG_CFLAGS="-D_REENTRANT -D_FILE_OFFSET_BITS=64 -DXINE_COMPILE $DEBUG_CFLAGS" dnl --------------------------------------------- dnl Output configuration files @@ -2421,6 +2604,7 @@ misc/xine-lib.spec po/Makefile.in src/Makefile src/audio_out/Makefile +src/combined/Makefile src/demuxers/Makefile src/dxr3/Makefile src/input/Makefile @@ -2520,14 +2704,14 @@ echo " - stdin_fifo - rtp" echo " - http - mms" echo " - pnm - rtsp" echo " - dvb" -if test x"$external_dvdnav" = "xyes"; then +if test "x$external_dvdnav" = "xyes"; then echo " - dvd (external libs)" else echo " - dvd (internal libs)" fi -if test x"$have_cdrom_ioctls" = "xyes"; then - if test x"$enable_vcd" = "xyes"; then - if test x"$internal_vcdnav" = "xno"; then +if test "x$have_cdrom_ioctls" = "xyes"; then + if test "x$enable_vcd" = "xyes"; then + if test "x$internal_vcdnav" = "xno"; then echo " - vcd (external libs)" else echo " - vcd (internal libs)" @@ -2536,13 +2720,13 @@ if test x"$have_cdrom_ioctls" = "xyes"; then echo " - vcdo" echo " - cdda" fi -if test x"$no_gnome_vfs" = "xno"; then +if test "x$no_gnome_vfs" = "xno"; then echo " - gnome-vfs" fi -if test x"$have_v4l" = "xyes"; then +if test "x$have_v4l" = "xyes"; then echo " - v4l" fi -if test x"$have_libsmbclient" = "xyes"; then +if test "x$have_libsmbclient" = "xyes"; then echo " - smbclient" fi echo "" @@ -2565,23 +2749,29 @@ echo " - interplay mve - psx str" echo " - ws aud - pva" echo " - vox - nsf" echo " - nsv - 4xm" -echo " - aac" +echo " - FLAC - aac" echo " - iff - matroska" echo " - vmd - flv" -if test x"$enable_asf" = "xyes"; then +if test "x$enable_asf" = "xyes"; then echo " - asf" fi if test "x$have_vorbis" = "xyes"; then echo " - ogg" fi -if test x"$have_libmng" = "xyes"; then +if test "x$have_libmng" = "xyes"; then echo " - mng" fi -if test x"$enable_modplug" != x"no"; then +if test "x$enable_modplug" != x"no"; then echo " - mod" fi -if test x"$enable_a52dec" = "xyes"; then - if test x"$have_a52" = "xyes"; then +if test "x$have_libflac" = "xyes"; then + echo " - FLAC (with libFLAC)" +fi +if test "x$have_wavpack" = "xyes"; then + echo " - WavPack" +fi +if test "x$enable_a52dec" = "xyes"; then + if test "x$have_a52" = "xyes"; then echo " - ac3 (external library)" else echo " - ac3 (internal library)" @@ -2615,13 +2805,13 @@ echo " - On2 VP3 - DV" echo " - 8BPS - Duck TrueMotion v1" echo " - ATI VCR1 - Flash Video" echo " - ZLIB - MSZH" -if test x"$have_dxr3" = "xyes"; then +if test "x$have_dxr3" = "xyes"; then echo " - dxr3_video" fi -if test x"$enable_w32dll" = "xyes"; then +if test "x$enable_w32dll" = "xyes"; then echo " - w32dll" fi -if test x"$have_imagemagick" = "xyes"; then +if test "x$have_imagemagick" = "xyes"; then echo " - image" fi if test x"no_gdkpixbuf" != "xyes"; then @@ -2647,8 +2837,9 @@ echo " - 14k4 - 28k8" echo " - MS ADPCM - IMA ADPCM" echo " - XA ADPCM - Game DPCM/ADPCM" echo " - Mace 3:13 - Mace 6:1" -if test x"no_libFLAC" != "xyes"; then - echo " - FLAC" +echo " - FLAC" +if test "x$have_libflac" = "xyes"; then + echo " - FLAC (with libFLAC)" fi if test "x$have_vorbis" = "xyes"; then echo " - vorbis" @@ -2656,33 +2847,46 @@ fi if test "x$have_speex" = "xyes"; then echo " - speex" fi -if test x"$enable_w32dll" = "xyes"; then +if test "x$enable_w32dll" = "xyes"; then echo " - w32dll" fi -if test x"$enable_faad" = "xyes"; then +if test "x$enable_faad" = "xyes"; then echo " - faad" fi -if test x"$enable_libmad" = "xyes"; then - if test x"$have_mad" = "xyes"; then +if test "x$enable_libmad" = "xyes"; then + if test "x$have_mad" = "xyes"; then echo " - MAD (MPG 1/2/3) (external library)" else echo " - MAD (MPG 1/2/3) (internal library)" fi fi -if test x"$enable_libdts" = "xyes"; then - if test x"$have_dts" = "xyes"; then +if test "x$have_wavpack" = "xyes"; then + echo " - wavpack" +fi +if test "x$enable_libdts" = "xyes"; then + if test "x$have_dts" = "xyes"; then echo " - DTS (external library)" else echo " - DTS (internal library)" fi fi -if test x"$enable_a52dec" = "xyes"; then - if test x"$have_a52" = "xyes"; then +if test "x$enable_a52dec" = "xyes"; then + if test "x$have_a52" = "xyes"; then echo " - A52/ra-dnet (external library)" else echo " - A52/ra-dnet (internal library)" fi fi +if test "x$enable_musepack" != "xno"; then + if test "x$have_mpcdec" = "xyes"; then + echo " - MusePack (external library)" + else + echo " - MusePack (internal library)" + fi +fi +if test "x$have_wavpack" = "xyes"; then + echo " - WavPack" +fi echo "" dnl spu decoders @@ -2690,7 +2894,7 @@ echo " * subtitle decoder plugins:" echo " - spu - spucc" echo " - spucmml - sputext" echo " - spudvb" -if test x"$have_dxr3" = "xyes"; then +if test "x$have_dxr3" = "xyes"; then echo " - dxr3_spu" fi echo "" @@ -2709,22 +2913,22 @@ echo "" dnl Video plugins echo " * video driver plugins:" -if test x"$no_x" != "xyes"; then +if test "x$no_x" != "xyes"; then echo " - XShm (X11 shared memory)" dnl synfb - if test x$enable_syncfb != "xno"; then + if test "x$enable_syncfb" != "xno"; then echo " - SyncFB (for Matrox G200/G400 cards)" fi dnl Xv - if test x$ac_have_xv = "xyes"; then - if test x$ac_have_xv_static = "xyes"; then + if test "x$ac_have_xv" = "xyes"; then + if test "x$ac_have_xv_static" = "xyes"; then echo " - Xv (XVideo *static*)" else echo " - Xv (XVideo *shared*)" fi fi dnl XxMC - if test x$ac_have_xxmc = "xyes"; then + if test "x$ac_have_xxmc" = "xyes"; then if test "x$ac_have_vldxvmc_h" = "xyes"; then echo " - XxMC (XVideo extended motion compensation)" else @@ -2732,71 +2936,81 @@ if test x"$no_x" != "xyes"; then fi fi dnl XvMC - if test x$ac_have_xvmc = "xyes"; then + if test "x$ac_have_xvmc" = "xyes"; then echo " - XvMC (XVideo motion compensation)" fi - if test x$ac_have_opengl = "xyes" -a x$ac_have_glut="xyes" -o \ - x$ac_have_opengl = "xyes" -a x$ac_have_glu="xyes"; then + if test "x$ac_have_opengl" = "xyes" -a "x$ac_have_glut" = "xyes" -o \ + x$"ac_have_opengl" = "xyes" -a "x$ac_have_glu" = "xyes"; then echo " - OpenGL" fi - if test x$ac_have_sunfb = "xyes"; then - if test x$ac_have_sundga = "xyes"; then + if test "x$ac_have_sunfb" = "xyes"; then + if test "x$ac_have_sundga" = "xyes"; then echo " - PGX64 (for Sun XVR100/PGX64/PGX24 cards)" echo " - PGX32 (for Sun PGX32 cards)" fi fi fi -if test x$no_aalib != "xyes"; then +if test "x$have_xcb" = "xyes"; then + dnl xcb-shm + if test "x$have_xcbshm" = "xyes"; then + echo " - xcb-shm (X shared memory using XCB)" + fi + dnl xcb-xv + if test "x$have_xcbxv" = "xyes"; then + echo " - xcb-xv (XVideo using XCB)" + fi +fi +if test "x$no_aalib" != "xyes"; then echo " - aa (Ascii ART)" fi if test "x$have_caca" = "xyes"; then echo " - caca (Color AsCii Art)" fi -if test x$have_fb = "xyes"; then +if test "x$have_fb" = "xyes"; then echo " - fb (Linux framebuffer device)" fi if test "x$have_sdl" = "xyes"; then echo " - sdl (Simple DirectMedia Layer)" fi -if test x"$have_stk" = "xyes"; then +if test "x$have_libstk" = "xyes"; then echo " - stk (Libstk Set-top Toolkit)" fi -if test x"$have_directfb" = "xyes"; then +if test "x$have_directfb" = "xyes"; then echo " - directfb (DirectFB driver)" fi -if test x"$have_dxr3" = "xyes"; then - if test x"$have_encoder" = "xyes"; then +if test "x$have_dxr3" = "xyes"; then + if test "x$have_encoder" = "xyes"; then echo " - dxr3 (Hollywood+ and Creative dxr3, both mpeg and non-mpeg video)" else echo " - dxr3 (Hollywood+ and Creative dxr3, mpeg video only)" fi fi -if test x"$enable_vidix" = "xyes"; then +if test "x$enable_vidix" = "xyes"; then echo $ECHO_N " - vidix (" - if test x"$no_x" != "xyes"; then + if test "x$no_x" != "xyes"; then echo $ECHO_N "X11" - if test x"$have_fb" = "xyes"; then + if test "x$have_fb" = "xyes"; then echo $ECHO_N " and " fi fi - if test x"$have_fb" = "xyes"; then + if test "x$have_fb" = "xyes"; then echo $ECHO_N "framebuffer" fi echo $ECHO_N " support" - if test x"$enable_dha_kmod" = "xyes"; then + if test "x$enable_dha_kmod" = "xyes"; then echo " with dhahelper)" else echo ")" fi fi -if test x"$have_directx" = "xyes"; then +if test "x$have_directx" = "xyes"; then echo " - directx (DirectX video driver)" fi -if test x"$have_macosx_video" = "xyes"; then +if test "x$have_macosx_video" = "xyes"; then echo " - Mac OS X OpenGL" fi @@ -2804,7 +3018,7 @@ echo "" dnl Audio plugins echo " * audio driver plugins:" -if test x"$have_ossaudio" = "xyes"; then +if test "x$have_ossaudio" = "xyes"; then echo " - oss (Open Sound System)" fi if test "x$have_alsa" = "xyes"; then @@ -2813,27 +3027,30 @@ fi if test "x$have_esound" = "xyes"; then echo " - esd (Enlightened Sound Daemon)" fi -if test x"$no_arts" != "xyes"; then +if test "x$no_arts" != "xyes"; then echo " - arts (aRts - KDE soundserver)" fi -if test x"$no_fusionsound" != "xyes"; then +if test "x$no_fusionsound" != "xyes"; then echo " - fusionsound (FusionSound driver)" fi -if test x"$have_sunaudio" = "xyes"; then +if test "x$have_sunaudio" = "xyes"; then echo " - sun ()" fi if test "x$am_cv_have_irixal" = xyes; then echo " - irixal (Irix audio library)" fi -if test x"$have_directx" = "xyes"; then +if test "x$have_directx" = "xyes"; then echo " - directx (DirectX audio driver)" fi -if test x"$have_coreaudio" = "xyes"; then +if test "x$have_coreaudio" = "xyes"; then echo " - CoreAudio (Mac OS X audio driver)" fi if test "x$have_pulseaudio" = "xyes"; then echo " - pulseaudio sound server" fi +if test "x$have_jack" = "xyes"; then + echo " - Jack" +fi echo "---" @@ -2847,7 +3064,7 @@ final_bindir="`eval eval eval eval echo $bindir`" if test -r /etc/ld.so.conf && ! grep -x "$final_libdir" /etc/ld.so.conf >/dev/null ; then if test "$final_libdir" != "/lib" -a "$final_libdir" != "/usr/lib" ; then - if ! echo $LD_LIBRARY_PATH | egrep "(:|^)$final_libdir(/?:|/?$)" >/dev/null ; then + if ! echo "$LD_LIBRARY_PATH" | egrep "(:|^)$final_libdir(/?:|/?$)" >/dev/null ; then echo echo "****************************************************************" echo "xine-lib will be installed to $final_libdir" @@ -2868,7 +3085,7 @@ if test -r /etc/ld.so.conf && ! grep -x "$final_libdir" /etc/ld.so.conf >/dev/nu fi fi -if ! echo $PATH | egrep "(:|^)$final_bindir(/?:|/?$)" >/dev/null ; then +if ! echo "$PATH" | egrep "(:|^)$final_bindir(/?:|/?$)" >/dev/null ; then echo echo "****************************************************************" echo "xine-config will be installed to $final_bindir" @@ -2889,20 +3106,25 @@ if ! echo $PATH | egrep "(:|^)$final_bindir(/?:|/?$)" >/dev/null ; then fi dnl warn if no X11 plugins will be built -if test x"$no_x" = "xyes" \ - -a x$SYS != "xmingw32" -a x$SYS != "xcygwin" ; then - echo - echo "****************************************************************" - echo "WARNING! No X11 output plugins will be built." - echo - echo "For some reason, the requirements for building the X11 video" - echo "output plugins are not met. That means, that you will NOT be" - echo "able to use the resulting xine-lib to watch videos in a window" - echo "on any X11-based display (e.g. your desktop)." - echo - echo "If this is not what you want, provide the necessary X11 build" - echo "dependencies (usually done by installing a package called" - echo "XFree86-devel or similar) and run configure again." - echo "****************************************************************" - echo +if test "x$no_x" = "xyes"; then + case $host in + *mingw*|*-cygwin) ;; + *-darwin*) ;; + *) + echo + echo "****************************************************************" + echo "WARNING! No X11 output plugins will be built." + echo + echo "For some reason, the requirements for building the X11 video" + echo "output plugins are not met. That means, that you will NOT be" + echo "able to use the resulting xine-lib to watch videos in a window" + echo "on any X11-based display (e.g. your desktop)." + echo + echo "If this is not what you want, provide the necessary X11 build" + echo "dependencies (usually done by installing a package called" + echo "XFree86-devel or similar) and run configure again." + echo "****************************************************************" + echo + ;; + esac fi diff --git a/debian/changelog b/debian/changelog index f8aabe6b9..e3fcde9a3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,21 +1,150 @@ -xine-lib (1.1.2-3) UNRELEASED; urgency=low +xine-lib (1.1.5~cvs-0) unstable; urgency=low - -- Reinhard Tartler <siretart@tauware.de> Thu, 10 Aug 2006 23:47:58 +0100 + * CVS snapshot. -xine-lib (1.1.2-2) unstable; urgency=low + [Darren Salt] + * Resync build deps with 1.1.4-2. + * Add or update some minimum version numbers. + * Add a build dependency on libdirectfb-dev. + + -- Darren Salt <linux@youmustbejoking.demon.co.uk> Fri, 16 Mar 2007 01:33:24 +0000 + +xine-lib (1.1.3-0) unstable; urgency=medium + + * New upstream release. + + [Darren Salt] + * debian/rules: work around version number breakage in libavcodec.pc. + + -- Darren Salt <linux@youmustbejoking.demon.co.uk> Thu, 28 Dec 2006 00:16:11 +0000 + +xine-lib (1.1.2+dfsg-2) unstable; urgency=medium + + * Bug fix: "CVE-2006-6172: xine-lib libreal Buffer Overflow + Vulnerabilities", thanks to Stefan Fritsch (Closes: #401740). + + -- Reinhard Tartler <siretart@tauware.de> Wed, 6 Dec 2006 22:15:11 +0100 + +xine-lib (1.1.2+dfsg-1) unstable; urgency=medium + + * Urgency medium for fixing release critical bug + * replace cetus.ttf with a new one based on FreeSans.ttf. Many thanks go + to Sune Vuorela for creating this! (Closes: #393677) + * apply patch from http://bugzilla.gnome.org/show_bug.cgi?id=344592 to + fix title menu if there is no DVD menu. (Closes: #369319) + * rename to XS-X-Vcs-Bzr field + + -- Reinhard Tartler <siretart@tauware.de> Thu, 26 Oct 2006 23:16:12 +0200 + +xine-lib (1.1.2-6) unstable; urgency=low + + * change override for -dbg package to extra + * added X-Vcs-Bzr tag to the source package + * revert the following commit from upstream, because it causes FTBFS on + many arches: + - [xine-lib @ 2006-07-12 21:08:46 by dsalt] + Tidy up the formatting of tvtime method help texts to allow better wrapping + by the front end. + + -- Reinhard Tartler <siretart@tauware.de> Fri, 22 Sep 2006 21:49:56 +0200 + +xine-lib (1.1.2-5) unstable; urgency=low + + * Urgency kept low despite RC bug. (only FTBFS bug, does not affect testing) + * fetched patches from 1.1.3 branch: + - [xine-lib @ 2006-07-12 21:08:46 by dsalt] + Tidy up the formatting of tvtime method help texts to allow better wrapping + by the front end. + - [xine-lib @ 2006-07-21 03:31:42 by dgp85] + Fix building with LOG enabled. + - [xine-lib @ 2006-07-21 04:47:17 by dgp85] + When trying to get the langinfo code, first of all, set the locale, + or you'll always get ANSI/ASCII. + - [xine-lib @ 2006-08-05 13:31:13 by hadess] + use the gdkpixbuf loader to handle JPEG stills in Quicktime movies, as + the ffmpeg MJPEG decoder isn't appropriate + - [xine-lib @ 2006-08-05 13:34:42 by hadess] + avoid crashing when the FLAC file is broken + - [xine-lib @ 2006-08-08 03:15:02 by miguelfreitas] + patch by Chris Brien + 1) Return the stream length correctly. This fixes a FIXME. + 2) Set the width and height metadata. + 3) Reset the demuxer status to DEMUX_OK on seek. + (in src/demuxers/demux_rawdv.c) + - [xine-lib @ 2006-08-08 03:34:15 by miguelfreitas] + video/x-ms-wma -> audio/x-ms-wma + (in src/demuxers/demux_asf.c) + Update API for libcaca 0.99. Patch by cjacker huang. + Update libcaca check to use the pkg-config file shipped with libcaca + 0.99, and change --disable-caca to --without-caca (to conform with + other external libraries). + Remove reference to removed caca.m4 (libcaca 0.99 will use + pkg-config). + Removed m4/caca.m4 (Closes: #386745) + * Dropped Replaces on xine-dvdnav (only in woody) and xine (only in + potato!) + * Dropping Conflicts on sinek and xine-ui (<< 0.9.10) (all only woody) + * cleaning m4/caca.m4, no longer used + * removing doc/faq/faq.html doc/faq/faq.txt doc/hackersguide/hackersguide.html + on clean, missed by build system + * include some targets to build 'orig' tarballs from the current branch. + This mainly for my convinience for bootstrapping cvs versions of xine and + preparing tarballs for the 'main' section of ubuntu, which I carry here in + order to minimize divergence + + -- Reinhard Tartler <siretart@tauware.de> Thu, 14 Sep 2006 21:27:27 +0200 + +xine-lib (1.1.2-4) unstable; urgency=low + + * build against external liba52 + * Bug fix: "libxine1: Please use the Debian ffmpeg version", thanks to + Josselin Mouette. Please note that the ffmpeg version used has WMV3 + support. Unfortunately, this version of xine cannot use that support + yet. This is 1.1.3 stuff. (Closes: #367095). + * Bug fix: "libxine1: Please support m4b files", thanks to Johannes + Adams. Bugfix by copying src/demuxers/demux_qt.c from CVS + version. (Closes: #384435). + * Build against internal libvcdinfo for now and add libvcdinfo-dev to + build-conflicts. This is a workaround for Bug: #364837, using internal + libvcdinfo makes the segfault go away. + * install a note for reportbug users + * cleanup (actually remove) confusing and unnecessary documentation. + * fetch bug from upstream cvs to fix bug where incorrect aspect ratio was + being passed to post plugins up (src/post/planar/expand.c, rev 1.16) + * add build dependency on sgmltools-lite to build faq + * add build dependencies transfig and gs to correctly build the + hackersguide + * bump shlibs to this revision because of changes in libcaca output plugin + + -- Reinhard Tartler <siretart@tauware.de> Sun, 27 Aug 2006 21:41:58 +0200 + +xine-lib (1.1.2-3) unstable; urgency=low + + * backport fix for cdda:/ MRL from upstream (Closes: #276728) + * add note from darren to xine(5) as well + * fix totem-xine crashing when started with no argument (closes: #370283) + (patch taken from upstream) + + -- Reinhard Tartler <siretart@tauware.de> Sat, 12 Aug 2006 00:27:15 +0200 + +xine-lib (1.1.2-2) unstable; urgency=high + + Urgency high because of security related upload * readd debian/watch file * update debian/rules from CVS. more complete handling of noauto flag to prevent running auto* tools. * disable AC_C_ALWAYS_INLINE from configure.ac. Should fix FTBFS on a - number of architectures. + number of architectures. (Closes: #378043) * added patch from Darren Salt to fix build with -O0 on at least amd64 in src/libffmpeg/libavcodec/i386/Makefile.am - - [Darren Salt] - * Updated the watch file - should work regardless of changes at Souceforge. - - -- Reinhard Tartler <siretart@tauware.de> Thu, 13 Jul 2006 11:18:10 +0200 + * Imported further fixes from upstream CVS: + + src/input/input_dvb.c + + src/xine-utils/xine_mutex.c + * Imported security fix for included copy of libmms from upstream CVS, + (e.g. USN-315-1) + + -- Reinhard Tartler <siretart@tauware.de> Thu, 13 Jul 2006 21:51:46 +0200 xine-lib (1.1.2-1) unstable; urgency=low diff --git a/debian/control b/debian/control index d9f0ce15f..6a72f689d 100644 --- a/debian/control +++ b/debian/control @@ -3,8 +3,22 @@ Section: libs Priority: optional Maintainer: Siggi Langauf <siggi@debian.org> Uploaders: Philipp Matthias Hahn <pmhahn@debian.org>, Reinhard Tartler <siretart@tauware.de> -Build-Depends: debhelper (>= 4.0.4), binutils (>= 2.12.90.0.9), libaa1-dev | aalib1-dev (>= 1.4p5-2), libcaca-dev, libxinerama-dev | xlibs-static-dev (<< 6.8.0), libxv-dev | xlibs-static-dev (<< 6.8.0), libesd0-dev, zlib1g-dev | libz-dev, libartsc0-dev (>>1.1.0), liblircclient-dev, libogg-dev, libvorbis-dev, libtheora-dev, libasound2-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386], libflac-dev (>>1.1.0), libmodplug-dev, libgnomevfs2-dev, libsmbclient-dev, libspeex-dev, libmng-dev, libpng12-dev | libpng-dev, libfreetype6-dev, libsdl1.2-dev (>=1.1.5), libvcdinfo-dev, libmad0-dev, libxvmc-dev | xlibs-dev (<< 6.8.0), w3m, automake1.9, autoconf, libtool, libcdio-dev (>= 0.76-1) -Build-Conflicts: libdvdnav-dev +Build-Depends: debhelper (>= 4.0.4), binutils (>= 2.12.90.0.9), pkg-config, + automake1.9, autoconf, libtool, + libxinerama-dev, libxv-dev, libxvmc-dev, libxt-dev, + libdirectfb-dev (>= 0.9.22), + libasound2-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386], + libaa1-dev, libcaca-dev (>= 0.99.beta4-1), libmodplug-dev, + libmagick9-dev, libpng12-dev, libfreetype6-dev, + libogg-dev, libvorbis-dev, libtheora-dev, + libesd0-dev, libgnomevfs2-dev, + zlib1g-dev, libartsc0-dev (>>1.1.0), + liblircclient-dev, + libflac-dev (>>1.1.0), libpulse-dev, libsdl1.2-dev (>=1.2.11), + libsmbclient-dev, libspeex-dev, libmng-dev, + libmad0-dev, libcdio-dev (>= 0.76-1), + w3m, transfig, gs, sgmltools-lite +Build-Conflicts: libdvdnav-dev, libvcdinfo-dev Standards-Version: 3.7.2 Package: libxine-dev @@ -32,8 +46,6 @@ Architecture: any Depends: ${shlibs:Depends} Recommends: ${shlibs:Recommends} Suggests: ${shlibs:Suggests}, libartsc0 -Conflicts: sinek(<<0.7), xine-ui (<< 0.9.10), xine -Replaces: xine-dvdnav, xine Description: the xine video/media player library, binary files This is the xine media player library (libxine). . @@ -49,6 +61,7 @@ Description: the xine video/media player library, binary files you can just start watching your VCDs ;-) Package: libxine1-dbg +Priority: extra Architecture: any Depends: libxine1 (= ${Source-Version}) Description: the xine video/media player library, debug data diff --git a/debian/libxine1.install b/debian/libxine1.install index b403be7fb..1efbabbea 100644 --- a/debian/libxine1.install +++ b/debian/libxine1.install @@ -7,3 +7,5 @@ usr/share/xine usr/share/man/man5/xine.5 usr/share/doc/libxine1/faq/* usr/share/doc/libxine1/README* +usr/share/doc/libxine1/hackersguide/* +usr/share/bug/libxine1/presubj diff --git a/debian/rules b/debian/rules index a6751c047..ef1347e49 100755 --- a/debian/rules +++ b/debian/rules @@ -62,7 +62,13 @@ endif CONFIGURE_FLAGS := --prefix=/usr \ --mandir=\$${prefix}/share/man \ --with-external-libmad \ + --with-external-ffmpeg \ + --with-external-a52dec \ + --with-external-libdts \ + --disable-cacatest \ $(DEB_BUILD_CONFIG_OPTIONS) \ + FFMPEG_CFLAGS="`pkg-config --cflags libavcodec`" \ + FFMPEG_LIBS="`pkg-config --libs libavcodec`" \ CFLAGS="$(CFLAGS)" configure: configure-stamp @@ -97,8 +103,9 @@ clean: rm -f build-stamp configure-stamp po/*.gmo po/stamp-po -$(MAKE) distclean # remove more cruft leftover by autohell + rm -f doc/faq/faq.html doc/faq/faq.txt doc/hackersguide/hackersguide.html m4/caca.m4 -test -f .noauto || find . -name Makefile.in -print | xargs rm - test -f .noauto || rm -rf compile config.guess configure depcomp install-sh ltmain.sh missing + test -f .noauto || rm -rf compile config.guess configure depcomp install-sh ltmain.sh missing aclocal.m4 config.h.in dh_clean install: build @@ -116,10 +123,11 @@ binary-indep: build install binary-arch: build install dh_testdir dh_testroot - # - #ugly hack, documentation should never have been in /u/s/d/xine/... + mkdir -p debian/tmp/usr/share/bug/libxine${major}/ + cp debian/reportbug.presubj debian/tmp/usr/share/bug/libxine${major}/presubj +# ugly hack, documentation should never have been in /u/s/d/xine/... mv debian/tmp/usr/share/doc/xine debian/tmp/usr/share/doc/libxine${major} - # build libxine${major} package by moving files from libxine-dev +# build libxine${major} package by moving files from libxine-dev dh_install --autodest --sourcedir=debian/tmp --list-missing dh_installdocs dh_installchangelogs -k ChangeLog @@ -127,7 +135,7 @@ binary-arch: build install dh_strip --dbg-package=libxine1 dh_compress dh_fixperms - dh_makeshlibs -V 'libxine1 (>= 1.1.1+cvs20060621-1)' + dh_makeshlibs -V 'libxine1 (>= 1.1.2-5)' dh_installdeb chmod +x debian/shlibdeps.sh debian/shlibdeps.sh libxine${major} @@ -137,3 +145,42 @@ binary-arch: build install binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install configure + +# this target is used to strip out libffmpeg, libfaad & libmad +# Canonical has concerns distributing them on the live/desktop cd +strip-non-main-stuff: clean + rm -rf src/libffmpeg + rm -rf src/libfaad + rm -rf src/libmad + cat configure.ac \ + | grep -v "^src/libffmpeg" \ + | grep -v "^src/libfaad" \ + | grep -v "^src/libmad" \ + > configure.ac.bak + mv configure.ac.bak configure.ac + cat src/Makefile.am \ + | grep -v "ffmpeg" \ + | grep -v "libmad" \ + | grep -v "faad" \ + > src/Makefile.am.bak + mv src/Makefile.am.bak src/Makefile.am + @echo stripped things unsuitable for ubuntu/main + @echo make sure that the tree still builds + +# use this target on an ``unstripped'' xine-lib tarball +# to generate an orig.tar.gz suitable for ubuntu-main: + +# be sure to increase the 'repacked' level in debian/changelog + +UPSTREAM_VERSION=$(shell dpkg-parsechangelog | grep ^Version | sed "s/Version: //" | sed "s/-.$$//") +get-orig-source: +# this monstrum works for me, please double check it before using! + current_dir=$(shell basename $(PWD)) ; cd .. ; \ + tar cz --exclude .bzr --exclude debian \ + -f xine-lib_$(UPSTREAM_VERSION).orig.tar.gz \ + $$current_dir + +get-ubuntu-orig-source: strip-non-main-stuff get-orig-source +get-cvs-orig-source: get-cvs-orig-source + +.PHONY: strip-non-main-stuff get-ubuntu-orig-source get-cvs-orig-source get-orig-source diff --git a/debian/shlibdeps.sh b/debian/shlibdeps.sh index c69e5b975..ea3d8fac1 100755 --- a/debian/shlibdeps.sh +++ b/debian/shlibdeps.sh @@ -14,7 +14,6 @@ OPTIONAL="$installdir/usr/lib/xine/plugins/$ver/xineplug_ao_out_alsa.so $installdir/usr/lib/xine/plugins/$ver/xineplug_ao_out_arts.so $installdir/usr/lib/xine/plugins/$ver/xineplug_ao_out_esd.so $installdir/usr/lib/xine/plugins/$ver/xineplug_vo_out_aa.so - $installdir/usr/lib/xine/plugins/$ver/xineplug_vo_out_syncfb.so $installdir/usr/lib/xine/plugins/$ver/xineplug_vo_out_sdl.so $installdir/usr/lib/xine/plugins/$ver/xineplug_flac.so $installdir/usr/lib/xine/plugins/$ver/xineplug_inp_gnome_vfs.so diff --git a/debian/watch b/debian/watch index 1874cb9e0..c82dbbc10 100644 --- a/debian/watch +++ b/debian/watch @@ -1,3 +1,4 @@ version=3 -opts="uversionmangle=s/\.(gz|bz2)$//" \ -http://qa.debian.org/watch/sf.php?project=xine xine-lib-([\d\.]*)\.tar\.(gz|bz2) debian uupdate +http://xinehq.de/index.php/releases \ + (?:.*/)?xine/xine-lib-([\d\.]*).tar.gz \ + debian uupdate diff --git a/doc/.cvsignore b/doc/.hgignore index 282522db0..282522db0 100644 --- a/doc/.cvsignore +++ b/doc/.hgignore diff --git a/doc/Makefile.am b/doc/Makefile.am index af97e86b2..1a757a4ca 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -2,14 +2,12 @@ include $(top_srcdir)/misc/Makefile.common SUBDIRS = man hackersguide faq -docs_DATA = README README.dvb README.dxr3 \ +doc_DATA = README README.dvb README.dxr3 \ README.freebsd README.irix README.network_dvd README.opengl \ README.solaris README.syncfb README_xxmc.html README.MINGWCROSS \ README.WIN32 -EXTRA_DIST = $(docs_DATA) - -docsdir = $(prefix)/share/doc/xine +EXTRA_DIST = $(doc_DATA) docs clean-docs: @cd faq && $(MAKE) $@ diff --git a/doc/faq/.cvsignore b/doc/faq/.hgignore index 647d53c1d..647d53c1d 100644 --- a/doc/faq/.cvsignore +++ b/doc/faq/.hgignore diff --git a/doc/faq/Makefile.am b/doc/faq/Makefile.am index 3dcbe44e5..6090fd272 100644 --- a/doc/faq/Makefile.am +++ b/doc/faq/Makefile.am @@ -1,12 +1,11 @@ include $(top_srcdir)/misc/Makefile.common -docs_DATA = faq.html faq.txt +doc_DATA = faq.txt +html_DATA = faq.html -EXTRA_DIST = README faq.sgml $(docs_DATA) +EXTRA_DIST = README faq.sgml $(doc_DATA) $(html_DATA) -docsdir = $(prefix)/share/doc/xine/faq - -docs: $(docs_DATA) +docs: $(doc_DATA) $(html_DATA) distclean-local: clean-docs @@ -16,7 +15,7 @@ docs-prepare: $(srcdir)/faq.sgml fi clean-docs: - rm -f $(docs_DATA) + rm -f $(doc_DATA) $(html_DATA) test "x$(srcdir)" = x. || rm -f faq.sgml dist-hook: diff --git a/doc/hackersguide/.cvsignore b/doc/hackersguide/.hgignore index 28b4cdaa4..28b4cdaa4 100644 --- a/doc/hackersguide/.cvsignore +++ b/doc/hackersguide/.hgignore diff --git a/doc/hackersguide/Makefile.am b/doc/hackersguide/Makefile.am index 086b7a67a..02a433299 100644 --- a/doc/hackersguide/Makefile.am +++ b/doc/hackersguide/Makefile.am @@ -12,15 +12,15 @@ hackersguide_fig = architecture.fig \ overlays.fig \ post_frame.fig -docs_DATA = hackersguide.html \ +hackersguide_DATA = hackersguide.html \ architecture.png library.png overlays.png post_frame.png EXTRA_DIST = README $(hackersguide_sgml) $(hackersguide_fig) \ - $(docs_DATA) + $(hackersguide_DATA) -docsdir = $(prefix)/share/doc/xine/hackersguide +hackersguidedir = $(htmldir)/hackersguide -docs: $(docs_DATA) +docs: $(hackersguide_DATA) distclean-local: clean-docs @@ -32,7 +32,7 @@ docs-prepare: $(addprefix $(srcdir)/, $(hackersguide_sgml)) fi clean-docs: - rm -f $(docs_DATA) + rm -f $(hackersguide_DATA) test "x$(srcdir)" = x. || rm -f $(hackersguide_sgml) *.fig dist-hook: diff --git a/doc/man/.cvsignore b/doc/man/.hgignore index 282522db0..282522db0 100644 --- a/doc/man/.cvsignore +++ b/doc/man/.hgignore diff --git a/doc/man/en/.cvsignore b/doc/man/en/.hgignore index 282522db0..282522db0 100644 --- a/doc/man/en/.cvsignore +++ b/doc/man/en/.hgignore diff --git a/doc/man/en/xine.5 b/doc/man/en/xine.5 index 817ca120b..0c4cedc12 100644 --- a/doc/man/en/xine.5 +++ b/doc/man/en/xine.5 @@ -31,7 +31,7 @@ to read from. Valid MRLs may be plain file names or one of the following: .TP \(bu CD and DVD: .br -.BI dvd:/[<DVD_image>|<device_name>][/<title>.<part>] +.BI dvd:/[<DVD_image>|<DVD_directory>|<device_name>][/<title>.<part>] .br .BI vcd://[<CD_image>|<device_name>][@[letter]<number>] .br @@ -52,7 +52,7 @@ to read from. Valid MRLs may be plain file names or one of the following: .br .BI dvbt://<channel_name>:<tuning_parameters> .br -.BI pvr://... "for WinTV PVR 250 and 350)" +.BR pvr:/<tmp_files_path>!<saved_files_path>!<max_page_age> " (for WinTV PVR 250 and 350)" .LP .TP \(bu Network: diff --git a/include/.cvsignore b/include/.hgignore index dac399d97..dac399d97 100644 --- a/include/.cvsignore +++ b/include/.hgignore diff --git a/include/xine.h.in b/include/xine.h.in index 2352cb2a9..e4210d314 100644 --- a/include/xine.h.in +++ b/include/xine.h.in @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine.h.in,v 1.160 2006/10/28 18:51:08 miguelfreitas Exp $ + * $Id: xine.h.in,v 1.168 2007/03/26 11:48:01 dgp85 Exp $ * * public xine-lib (libxine) interface and documentation * @@ -176,6 +176,7 @@ void xine_close_video_driver (xine_t *self, xine_video_port_t *driver) XINE_PRO #define XINE_VISUAL_TYPE_DIRECTX 7 /* used by the win32/msvc port */ #define XINE_VISUAL_TYPE_CACA 8 #define XINE_VISUAL_TYPE_MACOSX 9 +#define XINE_VISUAL_TYPE_XCB 11 /* * free all resources, close all plugins, close engine. @@ -804,7 +805,7 @@ void xine_vlog(xine_t *self, int buf, #endif /* get log messages of specified section */ -const char *const *xine_get_log (xine_t *self, int buf) XINE_PROTECTED; +char *const *xine_get_log (xine_t *self, int buf) XINE_PROTECTED; /* log callback will be called whenever something is logged */ typedef void (*xine_log_cb_t) (void *user_data, int section); @@ -843,6 +844,8 @@ int xine_get_status (xine_stream_t *stream) XINE_PROTECTED; * try to find out audio/spu language of given channel * (use -1 for current channel) * + * lang must point to a buffer of at least XINE_LANG_MAX bytes + * * returns 1 on success, 0 on failure */ int xine_get_audio_lang (xine_stream_t *stream, int channel, @@ -1192,6 +1195,82 @@ typedef struct { } x11_visual_t; /* + * this is the visual data struct any xcb gui + * must supply to the xine_open_video_driver call + * ("data" parameter) + */ +typedef struct { + + /* some information about the display */ + void *connection; /* xcb_connection_t */ + void *screen; /* xcb_screen_t */ + + /* window to display the video in / on */ + unsigned int window; /* xcb_window_t */ + + void *user_data; + + /* + * dest size callback + * + * this will be called by the video driver to find out + * how big the video output area size will be for a + * given video size. The ui should _not_ adjust it's + * video out area, just do some calculations and return + * the size. This will be called for every frame, ui + * implementation should be fast. + * dest_pixel_aspect should be set to the used display pixel aspect. + * NOTE: Semantics has changed: video_width and video_height + * are no longer pixel aspect corrected. Get the old semantics + * in the UI with + * *dest_pixel_aspect = display_pixel_aspect; + * if (video_pixel_aspect >= display_pixel_aspect) + * video_width = video_width * video_pixel_aspect / display_pixel_aspect + .5; + * else + * video_height = video_height * display_pixel_aspect / video_pixel_aspect + .5; + */ + void (*dest_size_cb) (void *user_data, + int video_width, int video_height, + double video_pixel_aspect, + int *dest_width, int *dest_height, + double *dest_pixel_aspect); + + /* + * frame output callback + * + * this will be called by the video driver for every frame + * it's about to draw. ui can adapt it's size if necessary + * here. + * note: the ui doesn't have to adjust itself to this + * size, this is just to be taken as a hint. + * ui must return the actual size of the video output + * area and the video output driver will do it's best + * to adjust the video frames to that size (while + * preserving aspect ratio and stuff). + * dest_x, dest_y: offset inside window + * dest_width, dest_height: available drawing space + * dest_pixel_aspect: display pixel aspect + * win_x, win_y: window absolute screen position + * NOTE: Semantics has changed: video_width and video_height + * are no longer pixel aspect corrected. Get the old semantics + * in the UI with + * *dest_pixel_aspect = display_pixel_aspect; + * if (video_pixel_aspect >= display_pixel_aspect) + * video_width = video_width * video_pixel_aspect / display_pixel_aspect + .5; + * else + * video_height = video_height * display_pixel_aspect / video_pixel_aspect + .5; + */ + void (*frame_output_cb) (void *user_data, + int video_width, int video_height, + double video_pixel_aspect, + int *dest_x, int *dest_y, + int *dest_width, int *dest_height, + double *dest_pixel_aspect, + int *win_x, int *win_y); + +} xcb_visual_t; + +/* * this is the visual data struct any fb gui * may supply to the xine_open_video_driver call * ("data" parameter) to get frame_output_cd calls @@ -1313,6 +1392,12 @@ xine_health_check_t* xine_health_check(xine_health_check_t*, int check_num) XINE #define XINE_CONFIG_TYPE_NUM 4 #define XINE_CONFIG_TYPE_BOOL 5 +/* For the string type (1.1.4 and later). These are stored in num_value. */ +#define XINE_CONFIG_STRING_IS_STRING 0 +#define XINE_CONFIG_STRING_IS_FILENAME 1 +#define XINE_CONFIG_STRING_IS_DEVICE_NAME 2 +#define XINE_CONFIG_STRING_IS_DIRECTORY_NAME 3 + typedef struct xine_cfg_entry_s xine_cfg_entry_t; typedef void (*xine_config_cb_t) (void *user_data, @@ -1334,7 +1419,10 @@ struct xine_cfg_entry_s { void *dummy; #endif - /* common to range, enum, num, bool: */ + /* common to range, enum, num, bool; + * num_value is also used by string to indicate what's required: + * plain string, file name, device name, directory name + */ int num_value; int num_default; @@ -1377,6 +1465,16 @@ const char *xine_config_register_string (xine_t *self, xine_config_cb_t changed_cb, void *cb_data) XINE_PROTECTED; +const char *xine_config_register_filename (xine_t *self, + const char *key, + const char *def_value, + int req_type, /* XINE_CONFIG_STRING_IS_* */ + const char *description, + const char *help, + int exp_level, + xine_config_cb_t changed_cb, + void *cb_data) XINE_PROTECTED; + int xine_config_register_range (xine_t *self, const char *key, int def_value, @@ -1484,6 +1582,7 @@ void xine_config_reset (xine_t *self) XINE_PROTECTED; #define XINE_EVENT_SPU_BUTTON 11 /* the mouse pointer enter/leave a button */ #define XINE_EVENT_DROPPED_FRAMES 12 /* number of dropped frames is too high */ #define XINE_EVENT_MRL_REFERENCE_EXT 13 /* demuxer->frontend: MRL reference(s) for the real stream */ +#define XINE_EVENT_AUDIO_AMP_LEVEL 14 /* report current audio amp level (l/r/mute) */ /* input events coming from frontend */ @@ -1561,6 +1660,7 @@ void xine_config_reset (xine_t *self) XINE_PROTECTED; #define XINE_EVENT_VDR_MUTE 331 #define XINE_EVENT_VDR_AUDIO 332 #define XINE_EVENT_VDR_INFO 333 +#define XINE_EVENT_VDR_CHANNELPREVIOUS 334 /* some space for further keys */ #define XINE_EVENT_VDR_SETVIDEOWINDOW 350 #define XINE_EVENT_VDR_FRAMESIZECHANGED 351 diff --git a/intl/.cvsignore b/intl/.hgignore index f3c7a7c5d..f3c7a7c5d 100644 --- a/intl/.cvsignore +++ b/intl/.hgignore diff --git a/lib/.cvsignore b/lib/.hgignore index 7d926a554..7d926a554 100644 --- a/lib/.cvsignore +++ b/lib/.hgignore diff --git a/lib/Makefile.am b/lib/Makefile.am index e2eec74c5..36b695bc8 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -4,7 +4,7 @@ EXTRA_DIST = Makefile.common noinst_LTLIBRARIES = libxineposix.la noinst_HEADERS = os_internal.h -include_HEADERS = os_types.h +xineinclude_HEADERS = os_types.h libxineposix_la_SOURCES = libxineposix_la_LIBADD = @LTLIBOBJS@ diff --git a/lib/asprintf.c b/lib/asprintf.c index de6c5f9ed..6c9d90664 100644 --- a/lib/asprintf.c +++ b/lib/asprintf.c @@ -22,6 +22,7 @@ #include "config.h" #include <string.h> #include <stdlib.h> +#include <stdio.h> #include <stdarg.h> int xine_private_vasprintf (char **buffer, const char *format, va_list ap) diff --git a/m4/.cvsignore b/m4/.hgignore index 282522db0..282522db0 100644 --- a/m4/.cvsignore +++ b/m4/.hgignore diff --git a/m4/Makefile.am b/m4/Makefile.am index 2236e9bfc..3a5209dc3 100644 --- a/m4/Makefile.am +++ b/m4/Makefile.am @@ -11,7 +11,6 @@ m4data_DATA = xine.m4 EXTRA_DIST = glibc2.m4 intdiv0.m4 intmax.m4 inttypes.m4 inttypes_h.m4 inttypes-pri.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 longdouble.m4 longlong.m4 nls.m4 po.m4 printf-posix.m4 signed.m4 size_max.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 wchar_t.m4 wint_t.m4 xsize.m4 \ aa.m4 \ arts.m4 \ - as.m4 \ attributes.m4 \ codeset.m4 \ directx.m4 \ @@ -32,4 +31,6 @@ EXTRA_DIST = glibc2.m4 intdiv0.m4 intmax.m4 inttypes.m4 inttypes_h.m4 inttypes-p progtest.m4 \ xine.m4 \ _xine.m4 \ - xv.m4 + xv.m4 \ + pthreads.m4 \ + gas.m4 diff --git a/m4/_xine.m4 b/m4/_xine.m4 index 60baed8c1..930703bbb 100644 --- a/m4/_xine.m4 +++ b/m4/_xine.m4 @@ -9,7 +9,7 @@ AC_DEFUN([AC_C_ALWAYS_INLINE], AC_MSG_CHECKING([for always_inline]) SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wall -Werror" - AC_TRY_COMPILE([],[inline __attribute__ ((__always_inline__)) void f (void);], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[inline __attribute__ ((__always_inline__)) void f (void);]])], [ac_cv_always_inline=yes],[ac_cv_always_inline=no]) CFLAGS="$SAVE_CFLAGS" AC_MSG_RESULT([$ac_cv_always_inline]) @@ -69,7 +69,7 @@ AC_DEFUN([AC_PREREQ_LIBTOOL], dnl AC_DEFUN([AC_CHECK_LIRC], [AC_ARG_ENABLE(lirc, - AC_HELP_STRING([--disable-lirc], [turn off LIRC support]), + AS_HELP_STRING([--disable-lirc], [turn off LIRC support]), enable_lirc=$enableval, enable_lirc=yes) if test x"$enable_lirc" = xyes; then @@ -101,7 +101,7 @@ AC_DEFUN([AC_CHECK_LIRC], dnl AC_LINUX_PATH(DEFAULT PATH) AC_DEFUN([AC_LINUX_PATH], [AC_ARG_WITH(linux-path, - AC_HELP_STRING([--with-linux-path=PATH], [where the linux sources are located]), + AS_HELP_STRING([--with-linux-path=PATH], [where the linux sources are located]), linux_path="$withval", linux_path="$1") LINUX_INCLUDE="-I$linux_path/include" ]) @@ -110,7 +110,7 @@ dnl AC_CHECK_DXR3() AC_DEFUN([AC_CHECK_DXR3], [ AC_ARG_ENABLE(dxr3, - AC_HELP_STRING([--disable-dxr3], [do not build the DXR3/HW+ plugins]), + AS_HELP_STRING([--disable-dxr3], [do not build the DXR3/HW+ plugins]), enable_dxr3=$enableval, enable_dxr3=yes) if test x"$enable_dxr3" = xyes; then have_dxr3=yes @@ -142,31 +142,13 @@ AC_DEFUN([AC_CHECK_DXR3], fi ]) - -dnl AC_C_ATTRIBUTE_ALIGNED -dnl define ATTRIBUTE_ALIGNED_MAX to the maximum alignment if this is supported -AC_DEFUN([AC_C_ATTRIBUTE_ALIGNED], - [AC_CACHE_CHECK([__attribute__ ((aligned ())) support], - [ac_cv_c_attribute_aligned], - [ac_cv_c_attribute_aligned=0 - for ac_cv_c_attr_align_try in 2 4 8 16 32 64; do - AC_TRY_COMPILE([], - [static char c __attribute__ ((aligned($ac_cv_c_attr_align_try))) = 0 -; return c;], - [ac_cv_c_attribute_aligned=$ac_cv_c_attr_align_try]) - done]) - if test x"$ac_cv_c_attribute_aligned" != x"0"; then - AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], - [$ac_cv_c_attribute_aligned],[maximum supported data alignment]) - fi]) - dnl AC_TRY_CFLAGS (CFLAGS, [ACTION-IF-WORKS], [ACTION-IF-FAILS]) dnl check if $CC supports a given set of cflags AC_DEFUN([AC_TRY_CFLAGS], [AC_MSG_CHECKING([if $CC supports $1 flags]) SAVE_CFLAGS="$CFLAGS" CFLAGS="$1" - AC_TRY_COMPILE([],[],[ac_cv_try_cflags_ok=yes],[ac_cv_try_cflags_ok=no]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[ac_cv_try_cflags_ok=yes],[ac_cv_try_cflags_ok=no]) CFLAGS="$SAVE_CFLAGS" AC_MSG_RESULT([$ac_cv_try_cflags_ok]) if test x"$ac_cv_try_cflags_ok" = x"yes"; then @@ -175,6 +157,20 @@ AC_DEFUN([AC_TRY_CFLAGS], ifelse([$3],[],[:],[$3]) fi]) +dnl AC_TRY_LDFLAGS (CFLAGS, [ACTION-IF-WORKS], [ACTION-IF-FAILS]) +dnl check if $CC supports a given set of ldflags +AC_DEFUN([AC_TRY_LDFLAGS], + [AC_MSG_CHECKING([if $CC supports $1 flags]) + SAVE_LDFLAGS="$LDFLAGS" + LDFLAGS="$1" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[ac_cv_try_ldflags_ok=yes],[ac_cv_try_ldflags_ok=no]) + LDFLAGS="$SAVE_LDFLAGS" + AC_MSG_RESULT([$ac_cv_try_ldflags_ok]) + if test x"$ac_cv_try_ldflags_ok" = x"yes"; then + ifelse([$2],[],[:],[$2]) + else + ifelse([$3],[],[:],[$3]) + fi]) dnl AC_CHECK_GENERATE_INTTYPES_H (INCLUDE-DIRECTORY) dnl generate a default inttypes.h if the header file does not exist already @@ -366,7 +362,7 @@ dnl AC_COMPILE_CHECK_SIZEOF (TYPE SUPPOSED-SIZE) dnl abort if the given type does not have the supposed size AC_DEFUN([AC_COMPILE_CHECK_SIZEOF], [AC_MSG_CHECKING(that size of $1 is $2) - AC_TRY_COMPILE([],[switch (0) case 0: case (sizeof ($1) == $2):;],[], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[switch (0) case 0: case (sizeof ($1) == $2):;]])],[], [AC_MSG_ERROR([can not build a default inttypes.h])]) AC_MSG_RESULT([yes])]) @@ -549,26 +545,18 @@ AC_DEFUN([AC_CHECK_SOCKLEN_T], [ AC_LANG_PUSH(C++) AC_CACHE_VAL(ac_cv_socklen_t, [ - AC_TRY_COMPILE( -#include <sys/types.h> + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> #include <sys/socket.h> - , -socklen_t a=0; + ]], [[socklen_t a=0; getsockname(0,(struct sockaddr*)0, &a); - , - ac_cv_socklen_t=socklen_t, - [ - AC_TRY_COMPILE( -#include <sys/types.h> -#include <sys/socket.h> - , + ]])],[ac_cv_socklen_t=socklen_t],[ac_cv_socklen_t='']) + if test "x$ac_cv_socklen_t" = x; then + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> +#include <sys/socket.h>]], [[ int a=0; -getsockname(0,(struct sockaddr*)0, &a); - , - ac_cv_socklen_t=int, - ac_cv_socklen_t=size_t - )] - ) +getsockname(0,(struct sockaddr*)0, &a);]])], + [ac_cv_socklen_t=int],[ac_cv_socklen_t=size_t]) + fi ]) AC_LANG_POP([C++]) @@ -35,19 +35,92 @@ dnl * use aalib-config instead of aainfo now. dnl 17/06/2001 dnl * First shot dnl + +dnl Internal bits, used by AM_PATH_AALIB. +dnl Requires AALIB_CFLAGS and AALIB_FLAGS to be defined +AC_DEFUN([_AALIB_CHECK_VERSION], [ + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$AALIB_CFLAGS $CFLAGS" + LIBS="$AALIB_LIBS $LIBS" + +dnl Now check if the installed AALIB is sufficiently new. (Also sanity +dnl checks the results of aalib-config to some extent.) + + rm -f conf.aalibtest + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include <stdio.h> +#include <stdlib.h> +#include <aalib.h> + +int main () { + int major, minor; + char *tmp_version; + + system ("touch conf.aalibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = (char *) strdup("$min_aalib_version"); + if (sscanf(tmp_version, "%d.%d", &major, &minor) != 2) { + printf("%s, bad version string\n", "$min_aalib_version"); + exit(1); + } + + if ((AA_LIB_VERSION > major) || ((AA_LIB_VERSION == major) && +#ifdef AA_LIB_MINNOR + (AA_LIB_MINNOR >= minor) +#else + (AA_LIB_MINOR >= minor) +#endif + )) { + return 0; + } + else { +#ifdef AA_LIB_MINNOR + printf("\n*** An old version of AALIB (%d.%d) was found.\n", AA_LIB_VERSION, AA_LIB_MINNOR); +#else + printf("\n*** An old version of AALIB (%d.%d) was found.\n", AA_LIB_VERSION, AA_LIB_MINOR); +#endif + printf("*** You need a version of AALIB newer than %d.%d. The latest version of\n", major, minor); + printf("*** AALIB is always available from:\n"); + printf("*** http://www.ta.jcu.cz://aa\n"); + printf("***\n"); + } + return 1; +} +]])],[],[no_aalib=yes],[no_aalib=cc]) + if test "x$no_aalib" = xcc; then + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include <stdio.h> +#include <aalib.h> +]], [[ return ((AA_LIB_VERSION) || +#ifdef AA_LIB_MINNOR + (AA_LIB_MINNOR) +#else + (AA_LIB_MINOR) +#endif + ); ]])],[no_aalib=''],[no_aalib=yes]) + fi + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" +]) + + AC_DEFUN([AM_PATH_AALIB], [dnl dnl AC_ARG_WITH(aalib-prefix, - AC_HELP_STRING([--with-aalib-prefix=DIR], [prefix where AALIB is installed (optional)]), + AS_HELP_STRING([--with-aalib-prefix=DIR], [prefix where AALIB is installed (optional)]), aalib_config_prefix="$withval", aalib_config_prefix="") AC_ARG_WITH(aalib-exec-prefix, - AC_HELP_STRING([--with-aalib-exec-prefix=DIR], [exec prefix where AALIB is installed (optional)]), + AS_HELP_STRING([--with-aalib-exec-prefix=DIR], [exec prefix where AALIB is installed (optional)]), aalib_config_exec_prefix="$withval", aalib_config_exec_prefix="") AC_ARG_ENABLE(aalibtest, - AC_HELP_STRING([--disable-aalibtest], [do not try to compile and run a test AALIB program]), + AS_HELP_STRING([--disable-aalibtest], [do not try to compile and run a test AALIB program]), enable_aalibtest=$enableval, enable_aalibtest=yes) + AC_LANG_PUSH([C]) + if test x$aalib_config_exec_prefix != x ; then aalib_config_args="$aalib_config_args --exec-prefix=$aalib_config_exec_prefix" if test x${AALIB_CONFIG+set} != xset ; then @@ -124,78 +197,14 @@ dnl gpmdep="yes" dnl fi done - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$AALIB_CFLAGS $CFLAGS" - LIBS="$AALIB_LIBS $LIBS" - -dnl -dnl Now check if the installed AALIB is sufficiently new. (Also sanity -dnl checks the results of xine-config to some extent -dnl - AC_LANG_SAVE() - AC_LANG_C() - rm -f conf.aalibtest - AC_TRY_RUN([ -#include <stdio.h> -#include <stdlib.h> -#include <aalib.h> - -int main () { - int major, minor; - char *tmp_version; - - system ("touch conf.aalibtest"); - - /* HP/UX 9 (%@#!) writes to sscanf strings */ - tmp_version = (char *) strdup("$min_aalib_version"); - if (sscanf(tmp_version, "%d.%d", &major, &minor) != 2) { - printf("%s, bad version string\n", "$min_aalib_version"); - exit(1); - } - - if ((AA_LIB_VERSION > major) || ((AA_LIB_VERSION == major) && -#ifdef AA_LIB_MINNOR - (AA_LIB_MINNOR >= minor) -#else - (AA_LIB_MINOR >= minor) -#endif - )) { - return 0; - } - else { -#ifdef AA_LIB_MINNOR - printf("\n*** An old version of AALIB (%d.%d) was found.\n", AA_LIB_VERSION, AA_LIB_MINNOR); -#else - printf("\n*** An old version of AALIB (%d.%d) was found.\n", AA_LIB_VERSION, AA_LIB_MINOR); -#endif - printf("*** You need a version of AALIB newer than %d.%d. The latest version of\n", major, minor); - printf("*** AALIB is always available from:\n"); - printf("*** http://www.ta.jcu.cz://aa\n"); - printf("***\n"); - } - return 1; -} -],, no_aalib=yes, - AC_TRY_LINK([ -#include <stdio.h> -#include <aalib.h> -], [ return ((AA_LIB_VERSION) || -#ifdef AA_LIB_MINNOR - (AA_LIB_MINNOR) -#else - (AA_LIB_MINOR) -#endif - ); ],, no_aalib=yes)) - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" + _AALIB_CHECK_VERSION fi else dnl AALIB_CONFIG AC_MSG_CHECKING([for AALIB version >= $min_aalib_version]) no_aalib="" - AALIB_CFLAGS=`$AALIB_CONFIG $aalib_config_args --cflags` - AALIB_LIBS=`$AALIB_CONFIG $aalib_config_args --libs` + AALIB_CFLAGS="`$AALIB_CONFIG $aalib_config_args --cflags`" + AALIB_LIBS="`$AALIB_CONFIG $aalib_config_args --libs`" aalib_config_major_version=`$AALIB_CONFIG $aalib_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` aalib_config_minor_version=`$AALIB_CONFIG $aalib_config_args --version | \ @@ -203,71 +212,7 @@ int main () { aalib_config_sub_version=`$AALIB_CONFIG $aalib_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` - ac_save_CFLAGS="$CFLAGS" - ac_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $AALIB_CFLAGS" - LIBS="$AALIB_LIBS $LIBS" - -dnl -dnl Now check if the installed AALIB is sufficiently new. (Also sanity -dnl checks the results of aalib-config to some extent -dnl - AC_LANG_SAVE() - AC_LANG_C() - rm -f conf.aalibtest - AC_TRY_RUN([ -#include <stdio.h> -#include <stdlib.h> -#include <aalib.h> - -int main () { - int major, minor; - char *tmp_version; - - system ("touch conf.aalibtest"); - - /* HP/UX 9 (%@#!) writes to sscanf strings */ - tmp_version = (char *) strdup("$min_aalib_version"); - if (sscanf(tmp_version, "%d.%d", &major, &minor) != 2) { - printf("%s, bad version string\n", "$min_aalib_version"); - exit(1); - } - - if ((AA_LIB_VERSION > major) || ((AA_LIB_VERSION == major) && -#ifdef AA_LIB_MINNOR - (AA_LIB_MINNOR >= minor) -#else - (AA_LIB_MINOR >= minor) -#endif - )) { - return 0; - } - else { -#ifdef AA_LIB_MINNOR - printf("\n*** An old version of AALIB (%d.%d) was found.\n", AA_LIB_VERSION, AA_LIB_MINNOR); -#else -printf("\n*** An old version of AALIB (%d.%d) was found.\n", AA_LIB_VERSION, AA_LIB_MINOR); -#endif - printf("*** You need a version of AALIB newer than %d.%d. The latest version of\n", major, minor); - printf("*** AALIB is always available from:\n"); - printf("*** http://www.ta.jcu.cz://aa\n"); - printf("***\n"); - } - return 1; -} -],, no_aalib=yes, - AC_TRY_LINK([ -#include <stdio.h> -#include <aalib.h> -], [ return ((AA_LIB_VERSION) || -#ifdef AA_LIB_MINNOR - (AA_LIB_MINNOR) -#else - (AA_LIB_MINOR) -#endif - ); ],, no_aalib=yes)) - CFLAGS="$ac_save_CFLAGS" - LIBS="$ac_save_LIBS" + _AALIB_CHECK_VERSION fi dnl AALIB_CONFIG fi dnl enable_aalibtest @@ -288,17 +233,17 @@ printf("\n*** An old version of AALIB (%d.%d) was found.\n", AA_LIB_VERSION, AA_ echo "*** Could not run AALIB test program, checking why..." CFLAGS="$CFLAGS $AALIB_CFLAGS" LIBS="$LIBS $AALIB_LIBS" - AC_TRY_LINK([ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> #include <aalib.h> -], [ +]], [[ return ((AA_LIB_VERSION) || #ifdef AA_LIB_MINNOR (AA_LIB_MINNOR) #else (AA_LIB_MINOR) #endif - ); ], + ); ]])], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding AALIB or finding the wrong" echo "*** version of AALIB. If it is not finding AALIB, you'll need to set your" @@ -322,6 +267,6 @@ printf("\n*** An old version of AALIB (%d.%d) was found.\n", AA_LIB_VERSION, AA_ fi AC_SUBST(AALIB_CFLAGS) AC_SUBST(AALIB_LIBS) - AC_LANG_RESTORE() + AC_LANG_POP([C]) rm -f conf.aalibtest ]) diff --git a/m4/arts.m4 b/m4/arts.m4 index b44d26a21..079c21ba8 100644 --- a/m4/arts.m4 +++ b/m4/arts.m4 @@ -9,9 +9,9 @@ AC_DEFUN([AM_PATH_ARTS], [dnl dnl Get the cflags and libraries from the artsc-config script dnl -AC_ARG_WITH(arts-prefix, AC_HELP_STRING([--with-arts-prefix=DIR], [prefix where ARTS is installed (optional)]), +AC_ARG_WITH(arts-prefix, AS_HELP_STRING([--with-arts-prefix=DIR], [prefix where ARTS is installed (optional)]), arts_prefix="$withval", arts_prefix="") -AC_ARG_ENABLE(artstest, AC_HELP_STRING([--disable-artstest], [do not try to compile and run a test ARTS program]), +AC_ARG_ENABLE(artstest, AS_HELP_STRING([--disable-artstest], [do not try to compile and run a test ARTS program]), enable_artstest=$enableval, enable_artstest=yes) if test x$arts_prefix != x ; then @@ -54,7 +54,7 @@ dnl Now check if the installed ARTS is sufficiently new. (Also sanity dnl checks the results of artsc-config to some extent) dnl rm -f conf.artstest - AC_TRY_RUN([ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -108,11 +108,14 @@ int main () } } -],, no_arts=yes, - AC_TRY_LINK([ +]])],[],[no_arts=yes],[no_arts=cc]) + + if test "x$no_arts" = "xcc"; then + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> #include <artsc.h> -], [ return 0; ],, no_arts=yes)) +]], [[ return 0; ]])],[no_arts=''],[no_arts=yes]) + fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi @@ -134,10 +137,10 @@ int main () echo "*** Could not run ARTS test program, checking why..." CFLAGS="$CFLAGS $ARTS_CFLAGS" LIBS="$LIBS $ARTS_LIBS" - AC_TRY_LINK([ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> #include <artsc.h> -], [ return 0; ], +]], [[ return 0; ]])], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding ARTS or finding the wrong" echo "*** version of ARTS. If it is not finding ARTS, you'll need to set your" diff --git a/m4/as.m4 b/m4/as.m4 deleted file mode 100644 index 96a44e239..000000000 --- a/m4/as.m4 +++ /dev/null @@ -1,21 +0,0 @@ -dnl Extracted from automake-1.5 and sligtly modified for Xine usage. -dnl Daniel Caujolle-Bert <segfault@club-internet.fr> - -# Figure out how to run the assembler. - -# AM_PROG_AS_MOD -AC_DEFUN([AM_PROG_AS_MOD], -[# By default we simply use the C compiler to build assembly code. -AC_REQUIRE([AC_PROG_CC]) -: ${CCAS='$(CC)'} -# Set CCASFLAGS if not already set. -: ${CCASFLAGS='$(CFLAGS)'} -# Set ASCOMPILE if not already set. -if test $CCAS = '$'CC; then -: ${CCASCOMPILE='$(LIBTOOL) --mode=compile $(CCAS) $(AM_ASFLAGS) $(CCASFLAGS) -c'} -else -: ${CCASCOMPILE='$(LIBTOOL) --mode=compile $(CCAS) $(AM_ASFLAGS) $(CCASFLAGS)'} -fi -AC_SUBST(CCAS) -AC_SUBST(CCASFLAGS) -AC_SUBST(CCASCOMPILE)]) diff --git a/m4/attributes.m4 b/m4/attributes.m4 index fa00a95f8..eaa788c5f 100644 --- a/m4/attributes.m4 +++ b/m4/attributes.m4 @@ -1,13 +1,79 @@ -# Functions to check for attributes support in compiler +dnl Macros to check the presence of generic (non-typed) symbols. +dnl Copyright (c) 2006-2007 Diego Pettenò <flameeyes@gmail.com> +dnl Copyright (c) 2006-2007 xine project +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +dnl 02110-1301, USA. +dnl +dnl As a special exception, the copyright owners of the +dnl macro gives unlimited permission to copy, distribute and modify the +dnl configure scripts that are the output of Autoconf when processing the +dnl Macro. You need not follow the terms of the GNU General Public +dnl License when using or distributing such scripts, even though portions +dnl of the text of the Macro appear in them. The GNU General Public +dnl License (GPL) does govern all other use of the material that +dnl constitutes the Autoconf Macro. +dnl +dnl This special exception to the GPL applies to versions of the +dnl Autoconf Macro released by this project. When you make and +dnl distribute a modified version of the Autoconf Macro, you may extend +dnl this special exception to the GPL to apply to your modified version as +dnl well. + +AC_DEFUN([CC_CHECK_CFLAGS], [ + AC_CACHE_CHECK([if $CC supports $1 flag], + AS_TR_SH([cc_cv_cflags_$1]), + [ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $1" + AC_COMPILE_IFELSE([int a;], + [eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"], + [eval "AS_TR_SH([cc_cv_cflags_$1])="]) + CFLAGS="$ac_save_CFLAGS" + ]) + + if eval test [x$]AS_TR_SH([cc_cv_cflags_$1]) = xyes; then + ifelse([$2], , [:], [$2]) + else + ifelse([$3], , [:], [$3]) + fi +]) + +dnl Check for a -Werror flag or equivalent. -Werror is the GCC +dnl and ICC flag that tells the compiler to treat all the warnings +dnl as fatal. We usually need this option to make sure that some +dnl constructs (like attributes) are not simply ignored. +dnl +dnl Other compilers don't support -Werror per se, but they support +dnl an equivalent flag: +dnl - Sun Studio compiler supports -errwarn=%all +AC_DEFUN([CC_CHECK_WERROR], [ + AC_CACHE_VAL([cc_cv_werror], + [CC_CHECK_CFLAGS([-Werror], [cc_cv_werror=-Werror], + [CC_CHECK_CFLAGS([-errwarn=%all], [cc_cv_werror=-errwarn=%all])]) + ]) +]) AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [ + AC_REQUIRE([CC_CHECK_WERROR]) ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror" + CFLAGS="$CFLAGS $cc_cv_werror" AC_CACHE_CHECK([if compiler supports __attribute__((constructor))], [cc_cv_attribute_constructor], [AC_COMPILE_IFELSE([ void ctor() __attribute__((constructor)); - void ctor() { }; + void ctor() { int a; }; ], [cc_cv_attribute_constructor=yes], [cc_cv_attribute_constructor=no]) @@ -24,8 +90,9 @@ AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [ ]) AC_DEFUN([CC_ATTRIBUTE_FORMAT], [ + AC_REQUIRE([CC_CHECK_WERROR]) ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror" + CFLAGS="$CFLAGS $cc_cv_werror" AC_CACHE_CHECK([if compiler supports __attribute__((format(printf, n, n)))], [cc_cv_attribute_format], [AC_COMPILE_IFELSE([ @@ -46,8 +113,9 @@ AC_DEFUN([CC_ATTRIBUTE_FORMAT], [ ]) AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [ + AC_REQUIRE([CC_CHECK_WERROR]) ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror" + CFLAGS="$CFLAGS $cc_cv_werror" AC_CACHE_CHECK([if compiler supports __attribute__((format_arg(printf)))], [cc_cv_attribute_format_arg], [AC_COMPILE_IFELSE([ @@ -68,32 +136,29 @@ AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [ ]) AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [ - ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror" - AC_CACHE_CHECK([if compiler supports __attribute__((visibility("...")))], - [cc_cv_attribute_visibility], - [AC_COMPILE_IFELSE([ - void __attribute__((visibility("internal"))) internal_function() { } - void __attribute__((visibility("hidden"))) hidden_function() { } - void __attribute__((visibility("default"))) external_function() { } - ], - [cc_cv_attribute_visibility=yes], - [cc_cv_attribute_visibility=no]) - ]) - CFLAGS="$ac_save_CFLAGS" - - if test "x$cc_cv_attribute_visibility" = "xyes"; then - AC_DEFINE([SUPPORT_ATTRIBUTE_VISIBILITY], 1, [Define this if the compiler supports the visibility attribute]) - $1 - else - true - $2 - fi + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([if $CC supports __attribute__((visibility("$1")))], + AS_TR_SH([cc_cv_attribute_visibility_$1]), + [ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + AC_COMPILE_IFELSE([void __attribute__((visibility("$1"))) $1_function() { }], + [eval "AS_TR_SH([cc_cv_attribute_visibility_$1])='yes'"], + [eval "AS_TR_SH([cc_cv_attribute_visibility_$1])='no'"]) + CFLAGS="$ac_save_CFLAGS" + ]) + + if eval test [x$]AS_TR_SH([cc_cv_attribute_visibility_$1]) = xyes; then + AC_DEFINE(AS_TR_CPP([SUPPORT_ATTRIBUTE_VISIBILITY_$1]), 1, [Define this if the compiler supports __attribute__((visibility("$1")))]) + ifelse([$2], , [:], [$2]) + else + ifelse([$3], , [:], [$3]) + fi ]) AC_DEFUN([CC_FLAG_VISIBILITY], [ + AC_REQUIRE([CC_CHECK_WERROR]) ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror" + CFLAGS="$CFLAGS $cc_cv_werror" AC_CACHE_CHECK([if compiler supports -fvisibility=hidden], [cc_cv_flag_visibility], [ @@ -116,8 +181,9 @@ AC_DEFUN([CC_FLAG_VISIBILITY], [ ]) AC_DEFUN([CC_ATTRIBUTE_NONNULL], [ + AC_REQUIRE([CC_CHECK_WERROR]) ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror" + CFLAGS="$CFLAGS $cc_cv_werror" AC_CACHE_CHECK([if compiler supports __attribute__((nonnull()))], [cc_cv_attribute_nonnull], [AC_COMPILE_IFELSE([ @@ -139,8 +205,9 @@ AC_DEFUN([CC_ATTRIBUTE_NONNULL], [ ]) AC_DEFUN([CC_ATTRIBUTE_UNUSED], [ + AC_REQUIRE([CC_CHECK_WERROR]) ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror" + CFLAGS="$CFLAGS $cc_cv_werror" AC_CACHE_CHECK([if compiler supports __attribute__((unused))], [cc_cv_attribute_unused], [AC_COMPILE_IFELSE([ @@ -161,8 +228,9 @@ AC_DEFUN([CC_ATTRIBUTE_UNUSED], [ ]) AC_DEFUN([CC_FUNC_EXPECT], [ + AC_REQUIRE([CC_CHECK_WERROR]) ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror" + CFLAGS="$CFLAGS $cc_cv_werror" AC_CACHE_CHECK([if compiler has __builtin_expect function], [cc_cv_func_expect], [AC_COMPILE_IFELSE([ @@ -187,8 +255,9 @@ AC_DEFUN([CC_FUNC_EXPECT], [ ]) AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [ + AC_REQUIRE([CC_CHECK_WERROR]) ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror" + CFLAGS="$CFLAGS $cc_cv_werror" AC_CACHE_CHECK([if compiler supports __attribute__((sentinel))], [cc_cv_attribute_sentinel], [AC_COMPILE_IFELSE([ @@ -207,3 +276,49 @@ AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [ $2 fi ]) + +AC_DEFUN([CC_ATTRIBUTE_ALIAS], [ + AC_REQUIRE([CC_CHECK_WERROR]) + ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + AC_CACHE_CHECK([if compiler supports __attribute__((weak, alias))], + [cc_cv_attribute_alias], + [AC_COMPILE_IFELSE([ + void other_function(void *foo) { } + void some_function(void *foo) __attribute__((weak, alias("other_function"))); + ], + [cc_cv_attribute_alias=yes], + [cc_cv_attribute_alias=no]) + ]) + CFLAGS="$ac_save_CFLAGS" + + if test "x$cc_cv_attribute_alias" = "xyes"; then + AC_DEFINE([SUPPORT_ATTRIBUTE_ALIAS], 1, [Define this if the compiler supports the alias attribute]) + $1 + else + true + $2 + fi +]) + +AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported], + [cc_cv_attribute_aligned], + [ac_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $cc_cv_werror" + for cc_attribute_align_try in 64 32 16 8 4 2; do + AC_COMPILE_IFELSE([ + int main() { + static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0; + return c; + }], [cc_cv_attribute_aligned=$cc_attribute_align_try; break]) + done + CFLAGS="$ac_save_CFLAGS" + ]) + + if test "x$cc_cv_attribute_aligned" != "x"; then + AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned], + [Define the highest alignment supported]) + fi +]) diff --git a/m4/directx.m4 b/m4/directx.m4 index 11725123f..6d023528e 100644 --- a/m4/directx.m4 +++ b/m4/directx.m4 @@ -11,7 +11,7 @@ dnl DIRECTX_VIDEO_LIBS. dnl AC_DEFUN([AM_PATH_DIRECTX], [ -AC_ARG_WITH(dxheaders, AC_HELP_STRING([--with-dxheaders], [specify location of DirectX headers]), +AC_ARG_WITH(dxheaders, AS_HELP_STRING([--with-dxheaders], [specify location of DirectX headers]), [dxheaders_prefix="$withval"], [dxheaders_prefix="no"] ) @@ -23,8 +23,7 @@ fi AC_MSG_CHECKING(for DirectX) DIRECTX_VIDEO_LIBS="$DIRECTX_LIBS -lgdi32 -lddraw" DIRECTX_AUDIO_LIBS="$DIRECTX_LIBS -ldsound" -AC_LANG_SAVE() -AC_LANG_C() +AC_LANG_PUSH([C]) ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS $DIRECTX_CPPFLAGS" @@ -48,7 +47,7 @@ int main() { AC_DEFINE(HAVE_DIRECTX,1,[Define this if you have DirectX])],,) CPPFLAGS=$ac_save_CPPFLAGS LIBS=$ac_save_LIBS -AC_LANG_RESTORE() +AC_LANG_POP([C]) if test x$have_directx = xyes ; then AC_MSG_RESULT(yes) @@ -17,8 +17,7 @@ AC_DEFUN([AM_DL], [ if test x$have_dl != "xyes"; then AC_MSG_CHECKING(for dlopen under win32) - AC_LANG_SAVE() - AC_LANG_C() + AC_LANG_PUSH([C]) ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LIBS="$LIBS" @@ -42,7 +41,7 @@ int main() { CPPFLAGS=$ac_save_CPPFLAGS LIBS=$ac_save_LIBS - AC_LANG_RESTORE() + AC_LANG_POP([C]) fi if test x$have_dl != "xyes"; then diff --git a/m4/dvdnav.m4 b/m4/dvdnav.m4 index 9254ca533..0f24080f7 100644 --- a/m4/dvdnav.m4 +++ b/m4/dvdnav.m4 @@ -31,15 +31,17 @@ AC_DEFUN([AM_PATH_DVDNAV], dnl Get the cflags and libraries from the dvdnav-config script dnl AC_ARG_WITH(dvdnav-prefix, - AC_HELP_STRING([--with-dvdnav-prefix=DIR], [prefix where DVDNAV is installed (optional)]), + AS_HELP_STRING([--with-dvdnav-prefix=DIR], [prefix where DVDNAV is installed (optional)]), dvdnav_config_prefix="$withval", dvdnav_config_prefix="") AC_ARG_WITH(dvdnav-exec-prefix, - AC_HELP_STRING([--with-dvdnav-exec-prefix=DIR], [exec prefix where DVDNAV is installed (optional)]), + AS_HELP_STRING([--with-dvdnav-exec-prefix=DIR], [exec prefix where DVDNAV is installed (optional)]), dvdnav_config_exec_prefix="$withval", dvdnav_config_exec_prefix="") AC_ARG_ENABLE(dvdnavtest, - AC_HELP_STRING([--disable-dvdnavtest], [do not try to compile and run a test DVDNAV program]), + AS_HELP_STRING([--disable-dvdnavtest], [do not try to compile and run a test DVDNAV program]), enable_dvdnavtest=$enableval, enable_dvdnavtest=yes) + AC_LANG_PUSH([C]) + if test x$dvdnav_config_exec_prefix != x ; then dvdnav_config_args="$dvdnav_config_args --exec-prefix=$dvdnav_config_exec_prefix" if test x${DVDNAV_CONFIG+set} != xset ; then @@ -80,10 +82,8 @@ dnl dnl Now check if the installed DVDNAV is sufficiently new. (Also sanity dnl checks the results of dvdnav-config to some extent dnl - AC_LANG_SAVE() - AC_LANG_C() rm -f conf.dvdnavtest - AC_TRY_RUN([ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <dvdnav.h> #include <stdio.h> #include <stdlib.h> @@ -126,11 +126,13 @@ main () } return 1; } -],, no_dvdnav=yes, - AC_TRY_LINK([ +]])],[],[no_dvdnav=yes],[no_dvdnav=cc]) + if test "x$no_dvdnav" = xcc; then + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <dvdnav.h> #include <stdio.h> -], [ return 0; ],, no_dvdnav=yes)) +]], [[ return 0; ]])],[no_dvdnav=''],[no_dvdnav=yes]) + fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi @@ -152,10 +154,10 @@ main () echo "*** Could not run DVDNAV test program, checking why..." CFLAGS="$CFLAGS $DVDNAV_CFLAGS" LIBS="$LIBS $DVDNAV_LIBS" - AC_TRY_LINK([ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <dvdnav.h> #include <stdio.h> -], [ return 0; ], +]], [[ return 0; ]])], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding DVDNAV or finding the wrong" echo "*** version of DVDNAV. If it is not finding DVDNAV, you'll need to set your" @@ -180,6 +182,6 @@ main () fi AC_SUBST(DVDNAV_CFLAGS) AC_SUBST(DVDNAV_LIBS) - AC_LANG_RESTORE() + AC_LANG_POP([C]) rm -f conf.dvdnavtest ]) diff --git a/m4/gas.m4 b/m4/gas.m4 new file mode 100644 index 000000000..923c3f90c --- /dev/null +++ b/m4/gas.m4 @@ -0,0 +1,120 @@ +dnl Copyright 2007 xine project +dnl Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 +dnl Free Software Foundation, Inc. +dnl Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 +dnl +dnl This file is free software; the Free Software Foundation gives +dnl unlimited permission to copy and/or distribute it, with or without +dnl modifications, as long as this notice is preserved. + +dnl AC_PROG_AS +dnl ---------- +dnl find the pathname to the GNU or non-GNU assembler +AC_DEFUN([CC_PROG_AS], +[AC_ARG_WITH([gnu-as], + [AS_HELP_STRING([--with-gnu-as], + [assume the C compiler uses GNU as @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_as=yes], + [with_gnu_as=no]) +AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +cc_prog=as +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=as gives a path. + AC_MSG_CHECKING([for as used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=as) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=as) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of as + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$AS" && AS="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=as + ;; + *) + # If it is relative, then search for the first as in PATH. + with_gnu_as=unknown + ;; + esac +elif test "$with_gnu_as" = yes; then + AC_MSG_CHECKING([for GNU as]) +else + AC_MSG_CHECKING([for non-GNU as]) +fi +AC_CACHE_VAL(cc_cv_path_AS, +[if test -z "$AS"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_AS="$ac_dir/$ac_prog" + # Check to see if the program is GNU as. I'd rather use --version, + # but apparently some variants of GNU as only accept -v. + # Break only if it was the GNU/non-GNU as that we prefer. + case `"$cc_cv_path_AS" -v 2>&1 </dev/null` in + dnl Apple's assembler reports itself as GNU as 1.38; + dnl but it doesn't provide the functions we need. + *Apple*) + test "$with_gnu_as" != yes && break + ;; + *GNU* | *'with BFD'*) + test "$with_gnu_as" != no && break + ;; + *) + test "$with_gnu_as" != yes && break + ;; + esac + fi + done + IFS="$lt_save_ifs" +else + cc_cv_path_AS="$AS" # Let the user override the test with a path. +fi]) +AS="$cc_cv_path_AS" +if test -n "$AS"; then + AC_MSG_RESULT($AS) +else + AC_MSG_RESULT(no) +fi +test -z "$AS" && AC_MSG_ERROR([no acceptable as found in \$PATH]) +CC_PROG_AS_GNU +]) + + +dnl AC_PROG_AS_GNU +dnl -------------- +AC_DEFUN([CC_PROG_AS_GNU], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_CACHE_CHECK([if the assembler ($AS) is GNU as], cc_cv_prog_gnu_as, +[# I'd rather use --version here, but apparently some GNU as's only accept -v. +case `$AS -v 2>&1 </dev/null` in +dnl Apple's assembler reports itself as GNU as 1.38; +dnl but it doesn't provide the functions we need. +*Apple*) + cc_cv_prog_gnu_as=no + ;; +*GNU* | *'with BFD'*) + cc_cv_prog_gnu_as=yes + ;; +*) + cc_cv_prog_gnu_as=no + ;; +esac]) +with_gnu_as=$cc_cv_prog_gnu_as +]) diff --git a/m4/ioctl_request.m4 b/m4/ioctl_request.m4 new file mode 100644 index 000000000..c6d12258e --- /dev/null +++ b/m4/ioctl_request.m4 @@ -0,0 +1,52 @@ +dnl Simple macro to find the type of the ioctl request parameter +dnl Copyright (c) 2007 xine project +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +dnl 02110-1301, USA. +dnl +dnl As a special exception, the xine project, as copyright owner of the +dnl macro gives unlimited permission to copy, distribute and modify the +dnl configure scripts that are the output of Autoconf when processing the +dnl Macro. You need not follow the terms of the GNU General Public +dnl License when using or distributing such scripts, even though portions +dnl of the text of the Macro appear in them. The GNU General Public +dnl License (GPL) does govern all other use of the material that +dnl constitutes the Autoconf Macro. +dnl +dnl This special exception to the GPL applies to versions of the +dnl Autoconf Macro released by the xine project. When you make and +dnl distribute a modified version of the Autoconf Macro, you may extend +dnl this special exception to the GPL to apply to your modified version as +dnl well. + + +dnl Usage AC_IOCTL_REQUEST +AC_DEFUN([AC_IOCTL_REQUEST], [ + AC_CACHE_CHECK([type of request parameter for ioctl()], + ac_cv_ioctl_request, + [for ac_ioctl_request_type in "unsigned long" "int" + do + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + #include <sys/ioctl.h> + int ioctl(int fd, $ac_ioctl_request_type request, ...); + ]], [[]])],[ac_cv_ioctl_request=$ac_ioctl_request_type],[]) + done]) + + if test "x$ac_cv_ioctl_request" = "x"; then + AC_MSG_ERROR([Unable to determine the type for ioctl() request parameter]) + fi + + AC_DEFINE_UNQUOTED([IOCTL_REQUEST_TYPE], $ac_cv_ioctl_request, [Type of the request parameter for ioctl()]) +]) diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4 index 0d895ca63..e0736ce1c 100644 --- a/m4/lib-prefix.m4 +++ b/m4/lib-prefix.m4 @@ -9,7 +9,7 @@ dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. -ifdef([AC_HELP_STRING], +ifdef([AS_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) diff --git a/m4/libFLAC.m4 b/m4/libFLAC.m4 index 26b4beba1..9ecf8dd51 100644 --- a/m4/libFLAC.m4 +++ b/m4/libFLAC.m4 @@ -8,10 +8,10 @@ AC_DEFUN([AM_PATH_LIBFLAC], [dnl dnl Get the cflags and libraries dnl -AC_ARG_WITH(libFLAC-prefix, AC_HELP_STRING([--with-libFLAC-prefix=DIR], [prefix where libFLAC is installed (optional)]), libFLAC_prefix="$withval", libFLAC_prefix="") -AC_ARG_WITH(libFLAC-libraries, AC_HELP_STRING([--with-libFLAC-libraries=DIR], [directory where libFLAC library is installed (optional)]), libFLAC_libraries="$withval", libFLAC_libraries="") -AC_ARG_WITH(libFLAC-includes, AC_HELP_STRING([--with-libFLAC-includes=DIR], [directory where libFLAC header files are installed (optional)]), libFLAC_includes="$withval", libFLAC_includes="") -AC_ARG_ENABLE(libFLACtest, AC_HELP_STRING([--disable-libFLACtest], [do not try to compile and run a test libFLAC program]), enable_libFLACtest=$enableval, enable_libFLACtest=yes) +AC_ARG_WITH(libFLAC-prefix, AS_HELP_STRING([--with-libFLAC-prefix=DIR], [prefix where libFLAC is installed (optional)]), libFLAC_prefix="$withval", libFLAC_prefix="") +AC_ARG_WITH(libFLAC-libraries, AS_HELP_STRING([--with-libFLAC-libraries=DIR], [directory where libFLAC library is installed (optional)]), libFLAC_libraries="$withval", libFLAC_libraries="") +AC_ARG_WITH(libFLAC-includes, AS_HELP_STRING([--with-libFLAC-includes=DIR], [directory where libFLAC header files are installed (optional)]), libFLAC_includes="$withval", libFLAC_includes="") +AC_ARG_ENABLE(libFLACtest, AS_HELP_STRING([--disable-libFLACtest], [do not try to compile and run a test libFLAC program]), enable_libFLACtest=$enableval, enable_libFLACtest=yes) if test "x$libFLAC_libraries" != "x" ; then LIBFLAC_LIBS="-L$libFLAC_libraries" @@ -46,7 +46,7 @@ dnl dnl Now check if the installed libFLAC is sufficiently new. dnl rm -f conf.libFLACtest - AC_TRY_RUN([ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -58,11 +58,13 @@ int main () return 0; } -],, no_libFLAC=yes, - AC_TRY_LINK([ +]])],[],[no_libFLAC=yes],[no_libFLAC=cc]) + if test "x$no_libFLAC" = xcc; then + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> #include <FLAC/format.h> -], [ return 0; ],, no_libFLAC=yes)) +]], [[ return 0; ]])],[no_libFLAC=''],[no_libFLAC=yes]) + fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi @@ -78,11 +80,11 @@ int main () echo "*** Could not run libFLAC test program, checking why..." CFLAGS="$CFLAGS $LIBFLAC_CFLAGS" LIBS="$LIBS $LIBFLAC_LIBS" - AC_TRY_LINK([ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> #include <FLAC/format.h> -], [ return 0; ], - [ echo "*** The test program compiled, but did not run. This usually means" +]], [[ return 0; ]])], + [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding libFLAC or finding the wrong" echo "*** version of libFLAC. If it is not finding libFLAC, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" @@ -91,7 +93,7 @@ int main () echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], - [ echo "*** The test program failed to compile or link. See the file config.log for the" + [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means libFLAC was incorrectly installed" echo "*** or that you have moved libFLAC since it was installed. In the latter case, you" echo "*** may want to edit the libFLAC-config script: $LIBFLAC_CONFIG" ]) diff --git a/m4/libfame.m4 b/m4/libfame.m4 index b6a14ed34..5fc34cc56 100644 --- a/m4/libfame.m4 +++ b/m4/libfame.m4 @@ -7,11 +7,11 @@ AC_DEFUN([AM_PATH_LIBFAME], [dnl dnl Get the cflags and libraries from the libfame-config script dnl -AC_ARG_WITH(libfame-prefix, AC_HELP_STRING([--with-libfame-prefix=DIR], [prefix where libfame is installed (optional)]), +AC_ARG_WITH(libfame-prefix, AS_HELP_STRING([--with-libfame-prefix=DIR], [prefix where libfame is installed (optional)]), libfame_config_prefix="$withval", libfame_config_prefix="") -AC_ARG_WITH(libfame-exec-prefix, AC_HELP_STRING([--with-libfame-exec-prefix=DIR], [exec prefix where libfame is installed (optional)]), +AC_ARG_WITH(libfame-exec-prefix, AS_HELP_STRING([--with-libfame-exec-prefix=DIR], [exec prefix where libfame is installed (optional)]), libfame_config_exec_prefix="$withval", libfame_config_exec_prefix="") -AC_ARG_ENABLE(libfametest, AC_HELP_STRING([--disable-libfametest], [do not try to compile and run a test libfame program]), +AC_ARG_ENABLE(libfametest, AS_HELP_STRING([--disable-libfametest], [do not try to compile and run a test libfame program]), enable_libfametest=$enableval, enable_libfametest=yes) if test x$libfame_config_exec_prefix != x ; then diff --git a/m4/libtool15.m4 b/m4/libtool15.m4 index 189cddb25..1f0567787 100644 --- a/m4/libtool15.m4 +++ b/m4/libtool15.m4 @@ -201,12 +201,12 @@ AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], enable_win32_dll=yes, enable_win32_dll=no) AC_ARG_ENABLE([libtool-lock], - [AC_HELP_STRING([--disable-libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes AC_ARG_WITH([pic], - [AC_HELP_STRING([--with-pic], + [AS_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) @@ -464,7 +464,7 @@ AC_SUBST(ECHO) # ----------- AC_DEFUN([_LT_AC_LOCK], [AC_ARG_ENABLE([libtool-lock], - [AC_HELP_STRING([--disable-libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes @@ -1700,7 +1700,7 @@ test "$dynamic_linker" = no && can_build_shared=no # ---------------- AC_DEFUN([_LT_AC_TAGCONFIG], [AC_ARG_WITH([tags], - [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], + [AS_HELP_STRING([--with-tags@<:@=TAGS@:>@], [include additional configurations @<:@automatic@:>@])], [tagnames="$withval"]) @@ -1820,7 +1820,7 @@ AC_DEFUN([AC_LIBTOOL_WIN32_DLL], AC_DEFUN([AC_ENABLE_SHARED], [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([shared], - [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in @@ -1859,7 +1859,7 @@ AC_ENABLE_SHARED(no) AC_DEFUN([AC_ENABLE_STATIC], [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([static], - [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in @@ -1898,7 +1898,7 @@ AC_ENABLE_STATIC(no) AC_DEFUN([AC_ENABLE_FAST_INSTALL], [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([fast-install], - [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in @@ -2038,7 +2038,7 @@ fi # find the pathname to the GNU or non-GNU linker AC_DEFUN([AC_PROG_LD], [AC_ARG_WITH([gnu-ld], - [AC_HELP_STRING([--with-gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no]) diff --git a/m4/opengl.m4 b/m4/opengl.m4 index 82534be91..2c12949d9 100644 --- a/m4/opengl.m4 +++ b/m4/opengl.m4 @@ -6,11 +6,11 @@ dnl AC_DEFUN([AM_PATH_OPENGL], [ - AC_ARG_ENABLE(opengl, AC_HELP_STRING([--disable-opengl], [do not build OpenGL plugin]), + AC_ARG_ENABLE(opengl, AS_HELP_STRING([--disable-opengl], [do not build OpenGL plugin]), [enableopengl=$enableval], [enableopengl="yes"] ) - AC_ARG_ENABLE(glu, AC_HELP_STRING([--disable-glu], [build OpenGL plugin without GLU (no verbose errors)]), + AC_ARG_ENABLE(glu, AS_HELP_STRING([--disable-glu], [build OpenGL plugin without GLU (no verbose errors)]), [enableglu=$enableval], [enableglu="yes"] ) @@ -32,9 +32,8 @@ AC_DEFUN([AM_PATH_OPENGL], [ [AC_MSG_CHECKING([if GLU is sane]) ac_save_LIBS="$LIBS" LIBS="$X_LIBS $XPRE_LIBS $OPENGL_LIBS -lGLU $X_EXTRA_LIBS" - AC_TRY_LINK([#include <GL/gl.h> -#include <GL/glu.h>], - [ gluPerspective(45.0f,1.33f,1.0f,1000.0f); glBegin(GL_POINTS); glEnd(); return 0 ], + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <GL/gl.h> +#include <GL/glu.h>]], [[ gluPerspective(45.0f,1.33f,1.0f,1000.0f); glBegin(GL_POINTS); glEnd(); return 0 ]])], [ ac_have_glu="yes" GLU_LIBS="-lGLU" AC_DEFINE(HAVE_GLU,1,[Define this if you have GLU support available]) diff --git a/m4/optimizations.m4 b/m4/optimizations.m4 index 85d088079..a1f2f2f00 100644 --- a/m4/optimizations.m4 +++ b/m4/optimizations.m4 @@ -9,7 +9,7 @@ dnl AC_DEFUN([AC_OPTIMIZATIONS], [ AC_ARG_ENABLE([optimizations], - AC_HELP_STRING([--disable-optimizations], [Don't try to guess what optimization to enable])) + AS_HELP_STRING([--disable-optimizations], [Don't try to guess what optimization to enable])) if test "x$enable_optimizations" != "xno"; then INLINE_FUNCTIONS=-finline-functions @@ -17,11 +17,6 @@ AC_DEFUN([AC_OPTIMIZATIONS], [ if test "$GCC" = yes; then dnl dnl check cflags not supported by all gcc versions - dnl eg: -mpreferred-stack-boundary=2 and 2.91.66, - dnl and gcc-2.7.2.3 support a bit less options - dnl - AC_TRY_CFLAGS("-mpreferred-stack-boundary=2", - m_psb="-mpreferred-stack-boundary=2", m_psb="") AC_TRY_CFLAGS("-fschedule-insns2", f_si="-fschedule-insns2", f_si="") AC_TRY_CFLAGS("-mwide-multiply", m_wm="-mwide-multiply", m_wm="") dnl @@ -58,7 +53,7 @@ AC_DEFUN([AC_OPTIMIZATIONS], [ AC_MSG_CHECKING(for sane -Wpointer-arith) SAVE_CFLAGS="$CFLAGS" CFLAGS="-O2 -Wpointer-arith -Werror $CFLAGS" - AC_TRY_COMPILE([#include <string.h>],[int a; memset(&a, 0, sizeof(int));], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <string.h>]], [[int a; memset(&a, 0, sizeof(int));]])], [AC_MSG_RESULT(yes); CFLAGS="-Wpointer-arith $SAVE_CFLAGS"], [AC_MSG_RESULT(no); CFLAGS="$SAVE_CFLAGS"]); @@ -67,8 +62,7 @@ AC_DEFUN([AC_OPTIMIZATIONS], [ AC_MSG_CHECKING(for gcc 3.4.0 or later) newGCC="`"$CC" -dumpversion | - awk 'BEGIN { FS = "." }; - 1 { if ((@S|@1 * 10000 + @S|@2 * 100 + @S|@3) >= 30400) { print "yes" } }' + awk -F. '{ if ((@S|@1 * 10000 + @S|@2 * 100 + @S|@3) >= 30400) { print "yes" } }' `" AC_MSG_RESULT(${newGCC:-no - assuming bugginess in -finline-functions}) test "$newGCC" = yes || INLINE_FUNCTIONS=-fno-inline-functions diff --git a/m4/pthreads.m4 b/m4/pthreads.m4 new file mode 100644 index 000000000..28d72dd4f --- /dev/null +++ b/m4/pthreads.m4 @@ -0,0 +1,59 @@ +dnl Detection of the Pthread implementation flags and libraries +dnl Diego Pettenò <flameeyes-aBrp7R+bbdUdnm+yROfE0A@public.gmane.org> 2006-11-03 +dnl +dnl CC_PTHREAD_FLAGS([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl This macro checks for the Pthread flags to use to build +dnl with support for PTHREAD_LIBS and PTHREAD_CFLAGS variables +dnl used in FreeBSD ports. +dnl +dnl This macro is released as public domain, but please mail +dnl to flameeyes@gmail.com if you want to add support for a +dnl new case, or if you're going to use it, so that there will +dnl always be a version available. +AC_DEFUN([CC_PTHREAD_FLAGS], [ + AC_REQUIRE([CC_CHECK_WERROR]) + AC_ARG_VAR([PTHREAD_CFLAGS], [C compiler flags for Pthread support]) + AC_ARG_VAR([PTHREAD_LIBS], [linker flags for Pthread support]) + + dnl if PTHREAD_* are not set, default to -pthread (GCC) + if test "${PTHREAD_CFLAGS-unset}" = "unset"; then + case $host in + *-hpux11*) PTHREAD_CFLAGS="" ;; + *-darwin*) PTHREAD_CFLAGS="" ;; + *) PTHREAD_CFLAGS="-pthread" ;; + esac + fi + if test "${PTHREAD_LIBS-unset}" = "unset"; then + case $host in + *-hpux11*) PTHREAD_LIBS="-lpthread" ;; + *-darwin*) PTHREAD_LIBS="" ;; + *) PTHREAD_LIBS="-pthread" ;; + esac + fi + + AC_CACHE_CHECK([if $CC supports Pthread], + AS_TR_SH([cc_cv_pthreads]), + [ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $cc_cv_werror $PTHREAD_CFLAGS" + LIBS="$LIBS $PTHREAD_LIBS" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <pthread.h>]], + [[pthread_create(NULL, NULL, NULL, NULL);]] + )], + [cc_cv_pthreads=yes], + [cc_cv_pthreads=no]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + ]) + + AC_SUBST([PTHREAD_LIBS]) + AC_SUBST([PTHREAD_CFLAGS]) + + if test x$cc_cv_pthreads = xyes; then + ifelse([$1], , [:], [$1]) + else + ifelse([$2], , [:], [$2]) + fi +]) diff --git a/m4/symbol.m4 b/m4/symbol.m4 new file mode 100644 index 000000000..7f807f1b1 --- /dev/null +++ b/m4/symbol.m4 @@ -0,0 +1,86 @@ +dnl Macros to check the presence of generic (non-typed) symbols. +dnl Copyright (c) 2007 xine project +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2, or (at your option) +dnl any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +dnl 02110-1301, USA. +dnl +dnl As a special exception, the xine project, as copyright owner of the +dnl macro gives unlimited permission to copy, distribute and modify the +dnl configure scripts that are the output of Autoconf when processing the +dnl Macro. You need not follow the terms of the GNU General Public +dnl License when using or distributing such scripts, even though portions +dnl of the text of the Macro appear in them. The GNU General Public +dnl License (GPL) does govern all other use of the material that +dnl constitutes the Autoconf Macro. +dnl +dnl This special exception to the GPL applies to versions of the +dnl Autoconf Macro released by the xine project. When you make and +dnl distribute a modified version of the Autoconf Macro, you may extend +dnl this special exception to the GPL to apply to your modified version as +dnl well. + +dnl AC_CHECK_SYMBOL - Check for a single symbol +dnl Usage: AC_CHECK_SYMBOL([symbol], [action-if-found], [action-if-not-found]) +dnl Default action, defines HAVE_SYMBOL (with symbol capitalised) if the +dnl symbol is present at link time. +AC_DEFUN([AC_CHECK_SYMBOL], [ + AC_CACHE_CHECK([for $1 symbol presence], + AS_TR_SH([ac_cv_symbol_$1]), + [AC_TRY_LINK([extern void *$1;], [void *tmp = $1;], + [eval "AS_TR_SH([ac_cv_symbol_$1])=yes"], + [eval "AS_TR_SH([ac_cv_symbol_$1])=no"]) + ]) + + if eval test [x$]AS_TR_SH([ac_cv_symbol_$1]) = xyes; then + ifelse([$2], , [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]), [1], + [Define to 1 if you have the $1 symbol.])], [$2]) + else + ifelse([$3], , [:], [$3]) + fi +]) + +dnl AC_CHECK_SYMBOLS - Check for multiple symbols +dnl Usage: AC_CHECK_SYMBOLS([symbol1 symbol2], [action-if-found], [action-if-not-found]) +AC_DEFUN([AC_CHECK_SYMBOLS], [ + AH_CHECK_SYMBOLS([$1]) + + for ac_symbol in $1 + do + AC_CHECK_SYMBOL($ac_symbol, [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$ac_symbol])) $2], [$3]) + done +]) + +m4_ifdef([m4_foreach_w], [], [ + # m4_foreach_w(VARIABLE, LIST, EXPRESSION) + # ---------------------------------------- + # + # Like m4_foreach, but the list is whitespace separated. + # + # This macro is robust to active symbols: + # m4_foreach_w([Var], [ active + # b act\ + # ive ], [-Var-])end + # => -active--b--active-end + # + m4_define([m4_foreach_w], + [m4_foreach([$1], m4_split(m4_normalize([$2])), [$3])]) + m4_define([m4_foreach_w_is_compatibility]) +]) + +m4_define([AH_CHECK_SYMBOLS], [ + m4_foreach_w([AC_Symbol], [$1], + [AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([AC_Symbol])), + [Define to 1 if you have the ]m4_defn([AC_Symbol])[ symbol.])]) +]) diff --git a/m4/xine.m4 b/m4/xine.m4 index 1b21bbbab..cb64bad1a 100644 --- a/m4/xine.m4 +++ b/m4/xine.m4 @@ -31,15 +31,17 @@ AC_DEFUN([AM_PATH_XINE], dnl Get the cflags and libraries from the xine-config script dnl AC_ARG_WITH(xine-prefix, - AC_HELP_STRING([--with-xine-prefix=DIR], [prefix where XINE is installed (optional)]), + AS_HELP_STRING([--with-xine-prefix=DIR], [prefix where XINE is installed (optional)]), xine_config_prefix="$withval", xine_config_prefix="") AC_ARG_WITH(xine-exec-prefix, - AC_HELP_STRING([--with-xine-exec-prefix=DIR], [exec prefix where XINE is installed (optional)]), + AS_HELP_STRING([--with-xine-exec-prefix=DIR], [exec prefix where XINE is installed (optional)]), xine_config_exec_prefix="$withval", xine_config_exec_prefix="") AC_ARG_ENABLE(xinetest, - AC_HELP_STRING([--disable-xinetest], [do not try to compile and run a test XINE program]), + AS_HELP_STRING([--disable-xinetest], [do not try to compile and run a test XINE program]), enable_xinetest=$enableval, enable_xinetest=yes) + AC_LANG_PUSH([C]) + if test x$xine_config_exec_prefix != x ; then xine_config_args="$xine_config_args --exec-prefix=$xine_config_exec_prefix" if test x${XINE_CONFIG+set} != xset ; then @@ -85,10 +87,8 @@ dnl dnl Now check if the installed XINE is sufficiently new. (Also sanity dnl checks the results of xine-config to some extent dnl - AC_LANG_SAVE() - AC_LANG_C() rm -f conf.xinetest - AC_TRY_RUN([ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <xine.h> #include <stdio.h> #include <stdlib.h> @@ -153,7 +153,7 @@ main () } return 1; } -],, no_xine=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) +]])],[],[no_xine=yes],[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi @@ -175,10 +175,10 @@ main () echo "*** Could not run XINE test program, checking why..." CFLAGS="$CFLAGS $XINE_CFLAGS" LIBS="$LIBS $XINE_LIBS" - AC_TRY_LINK([ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <xine.h> #include <stdio.h> -], [ return ((XINE_MAJOR_VERSION) || (XINE_MINOR_VERSION) || (XINE_SUB_VERSION)); ], +]], [[ return ((XINE_MAJOR_VERSION) || (XINE_MINOR_VERSION) || (XINE_SUB_VERSION)); ]])], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding XINE or finding the wrong" echo "*** version of XINE. If it is not finding XINE, you'll need to set your" @@ -204,7 +204,7 @@ main () AC_SUBST(XINE_CFLAGS) AC_SUBST(XINE_LIBS) AC_SUBST(XINE_ACFLAGS) - AC_LANG_RESTORE() + AC_LANG_POP([C]) rm -f conf.xinetest dnl Make sure HAVE_STRSEP, HAVE_SETENV and HAVE_STRPBRK are defined as diff --git a/misc/.cvsignore b/misc/.hgignore index fe4e75d06..fe4e75d06 100644 --- a/misc/.cvsignore +++ b/misc/.hgignore diff --git a/misc/Makefile.common b/misc/Makefile.common index e0bcc28ef..b3772941f 100644 --- a/misc/Makefile.common +++ b/misc/Makefile.common @@ -1,6 +1,10 @@ -LIBTOOL = $(SHELL) $(top_builddir)/libtool XINE_LIB = $(top_builddir)/src/xine-engine/libxine.la +xineincludedir = $(includedir)/xine + +xineplugdir = $(XINE_PLUGINDIR) +xineplug_ldflags = $(NOUNDEF) -avoid-version -module + $(XINE_LIB): @cd $(top_srcdir)/src/xine-engine && $(MAKE) @@ -10,7 +14,7 @@ install-data-hook: $(top_srcdir)/post-install.sh ; \ fi; \ fi; \ - if test -x /usr/bin/chcon -a `id -u` -eq 0; then \ + if test -x /usr/bin/chcon -a "`id -u`" -eq 0; then \ list='$(lib_LTLIBRARIES)'; \ if test -n "$$list" ; then \ for p in $$list; do \ @@ -37,21 +41,6 @@ install-debug: debug done; $(MAKE) $(AM_MAKEFLAGS) install-data-hook -install-includeHEADERS: $(include_HEADERS) - @$(NORMAL_INSTALL) - $(install_sh) -d $(DESTDIR)$(includedir)/xine - @list='$(include_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ - echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/xine/$$p"; \ - $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/xine/$$p; \ - done - -uninstall-includeHEADERS: - @$(NORMAL_UNINSTALL) - list='$(include_HEADERS)'; for p in $$list; do \ - rm -f $(DESTDIR)$(includedir)/xine/$$p; \ - done - uninstall-hook: @if echo '$(libdir)' | egrep ^'$(XINE_PLUGINDIR)' >/dev/null; then \ list='$(lib_LTLIBRARIES)'; for p in $$list; do \ diff --git a/misc/fonts/.cvsignore b/misc/fonts/.hgignore index 282522db0..282522db0 100644 --- a/misc/fonts/.cvsignore +++ b/misc/fonts/.hgignore diff --git a/misc/libxine.pc.in b/misc/libxine.pc.in index ea21d74a3..032eedfc1 100644 --- a/misc/libxine.pc.in +++ b/misc/libxine.pc.in @@ -7,5 +7,5 @@ Name: libxine Description: The xine engine library Version: @XINE_MAJOR@.@XINE_MINOR@.@XINE_SUB@ Requires: -Libs: -L${libdir} -lxine @ZLIB_LIBS@ @NET_LIBS@ @THREAD_LIBS@ @LIBICONV@ @RT_LIBS@ -Cflags: -I${includedir} @THREAD_CPPFLAGS@ +Libs: -L${libdir} -lxine @ZLIB_LIBS@ @NET_LIBS@ @PTHREAD_LIBS@ @LIBICONV@ @RT_LIBS@ +Cflags: -I${includedir} @PTHREAD_CFLAGS@ diff --git a/misc/xine-config.in b/misc/xine-config.in index e21bed104..8d288b22b 100644 --- a/misc/xine-config.in +++ b/misc/xine-config.in @@ -100,11 +100,11 @@ if test "$echo_acflags" = "yes"; then fi if test "$echo_cflags" = "yes"; then - echo -I@includedir@ @THREAD_CPPFLAGS@ + echo -I@includedir@ @PTHREAD_CFLAGS@ fi if test "$echo_libs" = "yes"; then - echo -L@libdir@ -lxine @ZLIB_LIBS@ @NET_LIBS@ @THREAD_LIBS@ @LIBICONV@ @RT_LIBS@ + echo -L@libdir@ -lxine @ZLIB_LIBS@ @NET_LIBS@ @PTHREAD_LIBS@ @LIBICONV@ @RT_LIBS@ fi if test "$echo_plugindir" = "yes"; then echo "@XINE_PLUGINPATH@" diff --git a/po/.cvsignore b/po/.hgignore index a57e19405..a57e19405 100644 --- a/po/.cvsignore +++ b/po/.hgignore diff --git a/po/Makefile.format b/po/Makefile.format new file mode 100644 index 000000000..dfbdf1ec1 --- /dev/null +++ b/po/Makefile.format @@ -0,0 +1,21 @@ +# Source: +# grep 'attribute.*format.*printf' src include -rI -B3 -C3 + +# Internal usage +XGETTEXT_FORMAT_FLAGS_PRIVATE = \ + --flag=xine_log_msg:1:c-format \ + --flag=xine_log_err:1:c-format \ + --flag=set_hc_result:3:c-format \ + --flag=log_printf:1:c-format \ + --flag=error_message:1:c-format \ + --flag=error_callback:5:c-format \ + --flag=dbgprintf:1:c-format \ + --flag=dbg_printf:1:c-format \ + --flag=sock_string_write:3:c-format \ + --flag=broadcaster_string_write:3:c-format \ + --flag=scratch_printf:3:c-format + +# External usage (installed include files) +XGETTEXT_FORMAT_FLAGS = \ + --flag=xine_log:3:c-format \ + --flag=xine_vlog:3:c-format diff --git a/po/Makefile.in.in b/po/Makefile.in.in index 2ec0141c1..2b9a10dc5 100644 --- a/po/Makefile.in.in +++ b/po/Makefile.in.in @@ -10,6 +10,8 @@ # # Origin: gettext-0.14.4 +include @srcdir@/Makefile.format + PACKAGE = @PACKAGE@ LIBNAME = @LIBNAME@ VERSION = @VERSION@ @@ -50,7 +52,7 @@ POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ -DISTFILES.common = Makefile.in.in remove-potcdate.sin \ +DISTFILES.common = Makefile.in.in remove-potcdate.sin Makefile.format \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ @@ -121,6 +123,7 @@ $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + $(XGETTEXT_FORMAT_FLAGS) $(XGETTEXT_FORMAT_FLAGS_PRIVATE) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: xine-lib 1.0.1\n" "Report-Msgid-Bugs-To: xine-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2006-11-29 23:07+0100\n" +"POT-Creation-Date: 2007-01-26 18:31+0100\n" "PO-Revision-Date: 2005-12-11 20:47+0100\n" "Last-Translator: FrantiÅ¡ek Dvořák <valtri@atlas.cz>\n" "Language-Team: Czech <cs@li.org>\n" @@ -107,6 +107,7 @@ msgid "w32codec: decoder failed to start. Is '%s' installed?\n" msgstr "w32codec: selhalo spuÅ¡tÄ›nà dekodéru. Je nainstalován '%s?\n" #: src/libw32dll/w32codec.c:1221 +#, c-format msgid "w32codec: (ACM_Decoder) Unappropriate audio format\n" msgstr "w32codec: (ACM_Decoder) Neadekvátnà zvukový formát\n" @@ -116,10 +117,12 @@ msgid "w32codec: (ACM_Decoder) acmStreamOpen error %d\n" msgstr "w32codec: (ACM_Decoder) chyba acmStreamOpen%d\n" #: src/libw32dll/w32codec.c:1243 +#, c-format msgid "w32codec: Error initializing DirectShow Audio\n" msgstr "w32codec: Chyba inicializace DirectShow zvuku\n" #: src/libw32dll/w32codec.c:1261 +#, c-format msgid "w32codec: Error initializing DMO Audio\n" msgstr "w32codec: Chyba inicializace DMO zvuku\n" @@ -406,16 +409,16 @@ msgstr "modul zvukového výstupu xine do souboru" msgid "xine output plugin for Coreaudio/Mac OS X" msgstr "modul zvukového výstupu xine pro Coreaudio/Mac OS X" -#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:919 +#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:920 #, c-format msgid "audio_sun_out: opening audio device %s failed: %s\n" msgstr "audio_sun_out: otevÃránà zvukového zaÅ™Ãzenà %s selhalo: %s\n" -#: src/audio_out/audio_sun_out.c:894 +#: src/audio_out/audio_sun_out.c:895 msgid "Sun audio device name" msgstr "jméno zvukového zaÅ™Ãzenà Sun" -#: src/audio_out/audio_sun_out.c:895 +#: src/audio_out/audio_sun_out.c:896 msgid "" "Specifies the file name for the Sun audio device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -428,12 +431,12 @@ msgstr "" "obsahem. A tak by jste si mÄ›li být jisti, že hodnota, kterou zadáváte, je " "skuteÄnÄ› náležité zvukové zaÅ™Ãzenà Sun." -#: src/audio_out/audio_sun_out.c:937 +#: src/audio_out/audio_sun_out.c:938 #, fuzzy, c-format msgid "audio_sun_out: audio ioctl on device %s failed: %s\n" msgstr "audio_sun_out: otevÃránà zvukového zaÅ™Ãzenà %s selhalo: %s\n" -#: src/audio_out/audio_sun_out.c:988 +#: src/audio_out/audio_sun_out.c:989 msgid "xine audio output plugin using sun-compliant audio devices/drivers" msgstr "výstupnà zvukový modul použije zvuková zaÅ™ÃzenÃ/ovladaÄe sun" @@ -522,10 +525,12 @@ msgid "unknown error" msgstr "neznámá chyba" #: src/audio_out/audio_directx2_out.c:206 +#, c-format msgid "Unable to create direct sound object." msgstr "NepodaÅ™ilo se vytvoÅ™it objekt direct sound." #: src/audio_out/audio_directx2_out.c:212 +#, c-format msgid "Could not set direct sound cooperative level." msgstr "Nelze nastavit cooperativnà úroveň direct sound." @@ -534,6 +539,7 @@ msgid "Unable to create secondary direct sound buffer" msgstr "NepodaÅ™ilo se vytvoÅ™it sekundárnà buffer direct sound" #: src/audio_out/audio_directx2_out.c:310 +#, c-format msgid "Unable to create buffer position events." msgstr "NepodaÅ™ilo se vytvoÅ™it poziÄnà události bufferu." @@ -566,6 +572,7 @@ msgid "Can't set sound volume" msgstr "Nelze nastavit hlasitost zvuku" #: src/audio_out/audio_directx2_out.c:432 +#, c-format msgid ": buffer lost, tryig to restore\n" msgstr ": buffer ztracen, zkusà se obnovit\n" @@ -578,10 +585,12 @@ msgid "Couldn't unlock direct sound buffer" msgstr "NeÅ¡lo odemknout buffer direct sound" #: src/audio_out/audio_directx2_out.c:544 +#, c-format msgid "Unable to create primary direct sound buffer." msgstr "NepodaÅ™ilo se vytvoÅ™it primárnà buffer direct sound." #: src/audio_out/audio_directx2_out.c:637 +#, c-format msgid ": play cursor overran, flushing buffers\n" msgstr ": kurzor pÅ™ehrávánà pÅ™ebÄ›hl, resetovánà bufferů\n" @@ -642,6 +651,7 @@ msgid "xine audio output plugin for win32 using directx" msgstr "modul zvukového výstupu xine pro win32 použÃvajÃcà directx" #: src/audio_out/audio_alsa_out.c:355 +#, c-format msgid "audio_alsa_out:Already open...WHY!" msgstr "audio_alsa_out: Již otevÅ™eno...PROÄŒ!" @@ -763,6 +773,7 @@ msgid "snd_pcm_open() failed:%d:%s\n" msgstr "snd_cm_open() selhalo:%d:%s\n" #: src/audio_out/audio_alsa_out.c:1428 +#, c-format msgid ">>> Check if another program already uses PCM <<<\n" msgstr ">>> Zkontrolujte, jestli už jiný program nepoužÃvá PCM <<<\n" @@ -906,6 +917,7 @@ msgid "xine audio output plugin using pulseaudio sound server" msgstr "modul zvukového výstupu xine použije esound" #: src/xine-engine/io_helper.c:252 +#, c-format msgid "io_helper: waiting abandoned\n" msgstr "io_helper: Äekánà ukonÄeno\n" @@ -919,14 +931,17 @@ msgid "failed to get status of socket" msgstr "selhalo zÃskánà stavu soketu" #: src/xine-engine/io_helper.c:388 +#, c-format msgid "io_helper: Permission denied\n" msgstr "io_helper: PÅ™Ãstup odepÅ™en\n" #: src/xine-engine/io_helper.c:392 +#, c-format msgid "io_helper: File not found\n" msgstr "io_helper: Soubor nenalezen\n" #: src/xine-engine/io_helper.c:396 +#, c-format msgid "io_helper: Connection Refused\n" msgstr "io_helper: Spojenà odmÃtnuto\n" @@ -984,124 +999,129 @@ msgstr "" "videovýstupy jako je XShm, kde nenà škálovánà obrazu hardwarovÄ› urychlováno, " "může toto dramaticky snÞit využità CPU." -#: src/xine-engine/xine.c:696 src/xine-engine/xine.c:803 -#: src/xine-engine/xine.c:842 src/xine-engine/xine.c:878 -#: src/xine-engine/xine.c:890 src/xine-engine/xine.c:903 -#: src/xine-engine/xine.c:916 src/xine-engine/xine.c:929 -#: src/xine-engine/xine.c:955 src/xine-engine/xine.c:980 -#: src/xine-engine/xine.c:1015 +#: src/xine-engine/xine.c:704 src/xine-engine/xine.c:811 +#: src/xine-engine/xine.c:850 src/xine-engine/xine.c:886 +#: src/xine-engine/xine.c:898 src/xine-engine/xine.c:911 +#: src/xine-engine/xine.c:924 src/xine-engine/xine.c:937 +#: src/xine-engine/xine.c:963 src/xine-engine/xine.c:988 +#: src/xine-engine/xine.c:1023 msgid "xine: error while parsing mrl\n" msgstr "xine: chyba bÄ›hem zpracovánà MRL\n" -#: src/xine-engine/xine.c:732 +#: src/xine-engine/xine.c:740 #, c-format msgid "xine: found input plugin : %s\n" msgstr "xine: nelze nalézt vstupnà modul: %s\n" -#: src/xine-engine/xine.c:750 +#: src/xine-engine/xine.c:758 #, c-format msgid "xine: input plugin cannot open MRL [%s]\n" msgstr "xine: vstupnà modul nemůže otevÅ™Ãt MRL [%s]\n" -#: src/xine-engine/xine.c:766 +#: src/xine-engine/xine.c:774 #, c-format msgid "xine: cannot find input plugin for MRL [%s]\n" msgstr "xine: nelze nalézt vstupnà modul pro MRL [%s]\n" -#: src/xine-engine/xine.c:792 +#: src/xine-engine/xine.c:800 #, c-format msgid "xine: specified demuxer %s failed to start\n" msgstr "xine: selhalo spuÅ¡tÄ›nà demultiplexoru %s\n" -#: src/xine-engine/xine.c:828 +#: src/xine-engine/xine.c:836 +#, c-format msgid "xine: join rip input plugin\n" msgstr "xine: pÅ™ipojen ripovacà vstupnà modul\n" -#: src/xine-engine/xine.c:835 +#: src/xine-engine/xine.c:843 msgid "xine: error opening rip input plugin instance\n" msgstr "xine: chyba otevÃránà instance ripovacÃho vstupnÃho modulu\n" -#: src/xine-engine/xine.c:866 +#: src/xine-engine/xine.c:874 #, c-format msgid "xine: last_probed demuxer %s failed to start\n" msgstr "xine: selhalo spuÅ¡tÄ›nà poslednÃho vyzkouÅ¡eného demultiplexoru %s\n" -#: src/xine-engine/xine.c:895 +#: src/xine-engine/xine.c:903 msgid "ignoring video\n" msgstr "ignoruje se video\n" -#: src/xine-engine/xine.c:908 +#: src/xine-engine/xine.c:916 msgid "ignoring audio\n" msgstr "ignoruje se zvuk\n" -#: src/xine-engine/xine.c:921 +#: src/xine-engine/xine.c:929 msgid "ignoring subpicture\n" msgstr "ignorujà se titulky\n" -#: src/xine-engine/xine.c:934 +#: src/xine-engine/xine.c:942 msgid "input cache plugin disabled\n" msgstr "vstupnà modul cache zakázán\n" -#: src/xine-engine/xine.c:1005 +#: src/xine-engine/xine.c:1013 #, c-format msgid "subtitle mrl opened '%s'\n" msgstr "otevÅ™eno MRL titulků '%s'\n" -#: src/xine-engine/xine.c:1009 +#: src/xine-engine/xine.c:1017 msgid "xine: error opening subtitle mrl\n" msgstr "xine: chyba otevÃránà MRL titulků\n" -#: src/xine-engine/xine.c:1041 +#: src/xine-engine/xine.c:1049 +#, c-format msgid "xine: error while parsing MRL\n" msgstr "xine: chyba bÄ›hem zpracovánà MRL\n" -#: src/xine-engine/xine.c:1048 +#: src/xine-engine/xine.c:1056 #, c-format msgid "xine: changing option '%s' from MRL isn't permitted\n" msgstr "xine: zmÄ›na volby '%s' z MRL nanà povolena\n" -#: src/xine-engine/xine.c:1068 +#: src/xine-engine/xine.c:1076 #, c-format msgid "xine: couldn't find demux for >%s<\n" msgstr "xine: nelze nalézt demultiplexor pro >%s<\n" -#: src/xine-engine/xine.c:1084 +#: src/xine-engine/xine.c:1092 #, c-format msgid "xine: found demuxer plugin: %s\n" msgstr "xine: nalezen demultiplexnà modul: %s\n" -#: src/xine-engine/xine.c:1104 +#: src/xine-engine/xine.c:1112 +#, c-format msgid "xine: demuxer failed to start\n" msgstr "xine: selhalo spuÅ¡tÄ›nà demultiplexoru\n" -#: src/xine-engine/xine.c:1167 +#: src/xine-engine/xine.c:1177 +#, c-format msgid "xine_play: no demux available\n" msgstr "xine_play: žádný dostupný demultiplexor\n" -#: src/xine-engine/xine.c:1237 +#: src/xine-engine/xine.c:1247 +#, c-format msgid "xine_play: demux failed to start\n" msgstr "xine_play: selhalo spuÅ¡tÄ›nà demultiplexoru\n" -#: src/xine-engine/xine.c:1508 +#: src/xine-engine/xine.c:1523 #, c-format msgid "xine: The specified save_dir \"%s\" might be a security risk.\n" msgstr "" "xine: Uvedený adresář pro ukládánà \"%s\" by mohl znamenat bezpeÄnostnà " "riziko.\n" -#: src/xine-engine/xine.c:1513 +#: src/xine-engine/xine.c:1528 msgid "The specified save_dir might be a security risk." msgstr "Uvedený adresář pro ukládánà by mohl znamenat bezpeÄnostnà riziko." -#: src/xine-engine/xine.c:1539 +#: src/xine-engine/xine.c:1554 msgid "xine: locale not supported by C library\n" msgstr "xine: locale nenà podporováno knihovnou C\n" -#: src/xine-engine/xine.c:1548 +#: src/xine-engine/xine.c:1563 msgid "media format detection strategy" msgstr "strategie zjiÅ¡továnà formátu dat" -#: src/xine-engine/xine.c:1549 +#: src/xine-engine/xine.c:1564 msgid "" "xine offers various methods to detect the media format of input to play. The " "individual values are:\n" @@ -1132,11 +1152,11 @@ msgstr "" "extension\n" "Detekovat pouze podle pÅ™Ãpony jména souboru.\n" -#: src/xine-engine/xine.c:1567 +#: src/xine-engine/xine.c:1582 msgid "directory for saving streams" msgstr "adresář pro ukládánà dat" -#: src/xine-engine/xine.c:1568 +#: src/xine-engine/xine.c:1583 msgid "" "When using the stream save feature, files will be written only into this " "directory.\n" @@ -1152,11 +1172,11 @@ msgstr "" "Proto byste si mÄ›li být jisti, že je v uvedeném adresáři bezproblémový " "jakýkoliv obsah v jakémkoliv souboru." -#: src/xine-engine/xine.c:1579 +#: src/xine-engine/xine.c:1594 msgid "allow implicit changes to the configuration (e.g. by MRL)" msgstr "povolit implicitnà zmÄ›ny v konfiguraci (napÅ™. pomocà MRL)" -#: src/xine-engine/xine.c:1580 +#: src/xine-engine/xine.c:1595 msgid "" "If enabled, you allow xine to change your configuration without explicit " "actions from your side. For example configuration changes demanded by MRLs " @@ -1173,26 +1193,26 @@ msgstr "" "dovolÃte libovolnÄ› mÄ›nit vaÅ¡i konfiguraci, můžete skonÄit s úplnÄ› rozhozeným " "xine." -#: src/xine-engine/xine.c:1594 +#: src/xine-engine/xine.c:1609 msgid "Timeout for network stream reading (in seconds)" msgstr "" -#: src/xine-engine/xine.c:1595 +#: src/xine-engine/xine.c:1610 msgid "" "Specifies the timeout when reading from network streams, in seconds. Too low " "values might stop streaming when the source is slow or the bandwidth is " "occupied, too high values will freeze the player if the connection is lost." msgstr "" -#: src/xine-engine/xine.c:1946 +#: src/xine-engine/xine.c:1962 msgid "messages" msgstr "zprávy" -#: src/xine-engine/xine.c:1947 +#: src/xine-engine/xine.c:1963 msgid "plugin" msgstr "modul" -#: src/xine-engine/xine.c:1948 +#: src/xine-engine/xine.c:1964 msgid "trace" msgstr "trasovánÃ" @@ -1202,20 +1222,23 @@ msgid "input_rip: reading of saved data failed: %s\n" msgstr "input_rip: Ätenà uložených dat selhalo: %s\n" #: src/xine-engine/input_rip.c:154 +#, c-format msgid "input_rip: reading by input plugin failed\n" msgstr "input_rip: Ätenà vstupnÃm modulem selhalo\n" #: src/xine-engine/input_rip.c:162 src/xine-engine/input_rip.c:291 -#: src/xine-engine/input_rip.c:643 +#: src/xine-engine/input_rip.c:657 #, c-format msgid "input_rip: error writing to file %<PRIdMAX> bytes: %s\n" msgstr "input_rip: chyba zápisu %<PRIdMAX> bytů do souboru: %s\n" #: src/xine-engine/input_rip.c:183 +#, c-format msgid "input_rip: open() function should never be called\n" msgstr "input_rip: funkce open() by nikdy nemÄ›la být volána\n" #: src/xine-engine/input_rip.c:314 src/xine-engine/input_rip.c:419 +#, c-format msgid "input_rip: seeking failed\n" msgstr "input_rip: selhalo nastavenà pozice\n" @@ -1229,11 +1252,13 @@ msgstr "input_rip: selhalo nastavenà pozice: %s\n" msgid "input_rip: %<PRIdMAX> bytes dropped\n" msgstr "input_rip: zahozeno %<PRIdMAX> bytů\n" -#: src/xine-engine/input_rip.c:548 +#: src/xine-engine/input_rip.c:562 +#, c-format msgid "input_rip: input plugin not defined!\n" msgstr "input_rip: vstupnà modul nenà definován!\n" -#: src/xine-engine/input_rip.c:554 +#: src/xine-engine/input_rip.c:568 +#, c-format msgid "" "input_rip: target directory wasn't specified, please fill out the option " "'media.capture.save_dir'\n" @@ -1241,7 +1266,7 @@ msgstr "" "input_rip: cÃlový adresář nebyl specifikován, prosÃm vyplňte volbu 'misc." "save_dir'\n" -#: src/xine-engine/input_rip.c:556 +#: src/xine-engine/input_rip.c:570 msgid "" "The stream save feature is disabled until you set media.capture.save_dir in " "the configuration." @@ -1249,11 +1274,12 @@ msgstr "" "Vlastnost ukládánà dat je zakázána, dokud nenastavÃte v konfiguraci 'misc." "save_dir'." -#: src/xine-engine/input_rip.c:563 +#: src/xine-engine/input_rip.c:577 +#, c-format msgid "input_rip: ripping/caching of this source is not permitted!\n" msgstr "input_rip: ukládánà z tohoto zdroje nenà povoleno!\n" -#: src/xine-engine/input_rip.c:565 +#: src/xine-engine/input_rip.c:579 msgid "" "xine is not allowed to save from this source. (possibly copyrighted " "material?)" @@ -1261,11 +1287,12 @@ msgstr "" "xine nemá dovoleno ukládat z tohoto zdroje (možná materiál chránÄ›ný " "autorskými právy?)" -#: src/xine-engine/input_rip.c:571 +#: src/xine-engine/input_rip.c:585 +#, c-format msgid "input_rip: file name not given!\n" msgstr "input_rip: nebyl dán název souboru!\n" -#: src/xine-engine/input_rip.c:613 +#: src/xine-engine/input_rip.c:627 #, c-format msgid "input_rip: error opening file %s: %s\n" msgstr "input_rip: chyba otevÃránà souboru %s: %s\n" @@ -1312,57 +1339,59 @@ msgstr "" "také se snÞà využità procesoru." #: src/xine-engine/input_cache.c:167 +#, c-format msgid ": open() function should never be called\n" msgstr ": funkce open() by nikdy nemÄ›la být volána\n" #: src/xine-engine/input_cache.c:349 +#, c-format msgid ": input plugin not defined!\n" msgstr ": vstupnà modul nenà definován!\n" -#: src/xine-engine/osd.c:739 +#: src/xine-engine/osd.c:745 #, c-format msgid "font '%s-%d' already loaded, weird.\n" msgstr "font '%s-%d' je již nahrán, divné.\n" -#: src/xine-engine/osd.c:751 +#: src/xine-engine/osd.c:757 #, c-format msgid "font '%s' loading failed (%d < %d)\n" msgstr "naÄÃtánà fontu '%s' selhalo (%d < %d)\n" -#: src/xine-engine/osd.c:761 +#: src/xine-engine/osd.c:767 #, c-format msgid "wrong version for font '%s'. expected %d found %d.\n" msgstr "nesprávná verze u fontu '%s'. oÄekávána %d, nalezena %d.\n" -#: src/xine-engine/osd.c:828 +#: src/xine-engine/osd.c:834 msgid "osd: cannot initialize ft2 library\n" msgstr "osd: nelze inicializovat knihovnu ft2\n" -#: src/xine-engine/osd.c:851 +#: src/xine-engine/osd.c:857 #, fuzzy, c-format msgid "osd: error matching font %s with FontConfig" msgstr "osd: chyba naÄÃtánà fontu %s pomocà ft2\n" -#: src/xine-engine/osd.c:865 +#: src/xine-engine/osd.c:871 #, fuzzy, c-format msgid "osd: error loading font %s with FontConfig" msgstr "osd: chyba naÄÃtánà fontu %s pomocà ft2\n" -#: src/xine-engine/osd.c:868 +#: src/xine-engine/osd.c:874 #, fuzzy, c-format msgid "osd: error looking up font %s with FontConfig" msgstr "osd: chyba naÄÃtánà fontu %s pomocà ft2\n" -#: src/xine-engine/osd.c:889 +#: src/xine-engine/osd.c:895 #, c-format msgid "osd: error loading font %s with ft2\n" msgstr "osd: chyba naÄÃtánà fontu %s pomocà ft2\n" -#: src/xine-engine/osd.c:899 +#: src/xine-engine/osd.c:905 msgid "osd: error setting font size (no scalable font?)\n" msgstr "osd: chyba pÅ™i nastavovánà velikosti fontu (font nenà škálovatelný?)\n" -#: src/xine-engine/osd.c:1015 +#: src/xine-engine/osd.c:1021 #, c-format msgid "" "osd: unknown sequence starting with byte 0x%02X in encoding \"%s\", " @@ -1371,41 +1400,41 @@ msgstr "" "osd: neznámá sekvence zaÄÃnajÃcà bytem 0x%02X v kódovánà \"%s\", pÅ™eskoÄà " "se\n" -#: src/xine-engine/osd.c:1071 +#: src/xine-engine/osd.c:1077 msgid "osd: can't find out current locale character set\n" msgstr "osd: nelze zjistit aktuálnà kódovou stránku\n" -#: src/xine-engine/osd.c:1081 +#: src/xine-engine/osd.c:1087 #, c-format msgid "osd: unsupported conversion %s -> %s, no conversion performed\n" msgstr "osd: nepodporovaná konverze %s -> %s, nebude provádÄ›na\n" -#: src/xine-engine/osd.c:1136 src/xine-engine/osd.c:1304 +#: src/xine-engine/osd.c:1142 src/xine-engine/osd.c:1310 msgid "osd: font isn't defined\n" msgstr "osd: font nenà definován\n" -#: src/xine-engine/osd.c:1175 +#: src/xine-engine/osd.c:1181 msgid "osd: error loading glyph\n" msgstr "osd: chyba naÄÃtanà glyfu\n" -#: src/xine-engine/osd.c:1181 +#: src/xine-engine/osd.c:1187 msgid "osd: error in rendering glyph\n" msgstr "osd: chyba v renderovánà glyfu\n" -#: src/xine-engine/osd.c:1341 +#: src/xine-engine/osd.c:1347 #, c-format msgid "osd: error loading glyph %i\n" msgstr "osd: chyba naÄÃtánà glyfu %i\n" -#: src/xine-engine/osd.c:1348 +#: src/xine-engine/osd.c:1354 msgid "osd: error in rendering\n" msgstr "osd: chyba pÅ™i renderovánÃ\n" -#: src/xine-engine/osd.c:1596 +#: src/xine-engine/osd.c:1602 msgid "palette (foreground-border-background) to use for subtitles and OSD" msgstr "paleta (popÅ™edÃ-okraj-pozadÃ) použitá na titulky a OSD" -#: src/xine-engine/osd.c:1597 +#: src/xine-engine/osd.c:1603 msgid "" "The palette for on-screen-display and some subtitle formats that do not " "specify any colouring themselves. The palettes are listed in the form: " @@ -1414,38 +1443,39 @@ msgstr "" "Paleta on-screen-display a nÄ›kterých formátů titulků, které samy o sobÄ› " "nespecifikujà žádnou barvu. Paleta je uvedena ve formÄ›: popÅ™edÃ-okraj-pozadÃ." -#: src/xine-engine/configfile.c:896 +#: src/xine-engine/configfile.c:924 +#, c-format msgid "The current config file has been modified by a newer version of xine." msgstr "StávajÃcà konfiguraÄnà soubor byl upraven novÄ›jšà verzà xine." -#: src/xine-engine/configfile.c:1001 +#: src/xine-engine/configfile.c:1029 #, c-format msgid "configfile: WARNING: backing up configfile to %s failed\n" msgstr "" "configfile: VAROVÃNÃ: zálohovánà konfiguraÄnÃho souboru do %s selhalo\n" -#: src/xine-engine/configfile.c:1002 +#: src/xine-engine/configfile.c:1030 msgid "configfile: WARNING: your configuration will not be saved\n" msgstr "configfile: VAROVÃNÃ: vaÅ¡e konfigurace nebude uložena\n" -#: src/xine-engine/configfile.c:1101 +#: src/xine-engine/configfile.c:1129 #, c-format msgid "configfile: WARNING: writing configuration to %s failed\n" msgstr "configfile: VAROVÃNÃ: zápis konfigurace do %s selhal\n" -#: src/xine-engine/configfile.c:1102 +#: src/xine-engine/configfile.c:1130 #, c-format msgid "configfile: WARNING: removing possibly broken config file %s\n" msgstr "" "configfile: VAROVÃNÃ: odstranà se pravdÄ›podobnÄ› poÅ¡kozený konfiguraÄnà " "soubor %s\n" -#: src/xine-engine/configfile.c:1103 +#: src/xine-engine/configfile.c:1131 #, c-format msgid "configfile: WARNING: you should check the backup file %s\n" msgstr "configfile: VAROVÃNÃ: mÄ›li byste zkontrolovat záložnà soubor %s\n" -#: src/xine-engine/configfile.c:1237 +#: src/xine-engine/configfile.c:1266 #, c-format msgid "configfile: entry '%s' mustn't be modified from MRL\n" msgstr "configfile: údaj '%s' nesmà být modifikován z MRL\n" @@ -1466,11 +1496,22 @@ msgstr "" "video_out: zahozenà obrazu s pts %<PRId64>, protože je pÅ™ÃliÅ¡ starý " "(rozdÃl : %<PRId64>).\n" -#: src/xine-engine/video_out.c:1818 +#: src/xine-engine/video_out.c:1790 +#, fuzzy +msgid "default number of video frames" +msgstr "Výchozà poÄet opakovánà snÃmku" + +#: src/xine-engine/video_out.c:1791 +msgid "" +"The default number of video frames to request from xine video out driver. " +"Some drivers will override this setting with their own values." +msgstr "" + +#: src/xine-engine/video_out.c:1830 msgid "percentage of skipped frames to tolerate" msgstr "procento pÅ™eskoÄených snÃmků, které se bude tolerovat" -#: src/xine-engine/video_out.c:1819 +#: src/xine-engine/video_out.c:1831 msgid "" "When more than this percentage of frames are not shown, because they were " "not decoded in time, xine sends a notification." @@ -1478,11 +1519,11 @@ msgstr "" "Pokud se nezobrazà vÃce než toto procento snÃmků, protože nebyly vÄas " "dekódovány, poÅ¡le xine hlášenÃ." -#: src/xine-engine/video_out.c:1824 +#: src/xine-engine/video_out.c:1836 msgid "percentage of discarded frames to tolerate" msgstr "procentnà tolerance zahozených snÃmků" -#: src/xine-engine/video_out.c:1825 +#: src/xine-engine/video_out.c:1837 msgid "" "When more than this percentage of frames are not shown, because they were " "not scheduled for display in time, xine sends a notification." @@ -1490,26 +1531,26 @@ msgstr "" "Pokud se nezobrazà vÃce než toto procento snÃmků, protože nebyly vÄas " "naplánovány k zobrazenÃ, poÅ¡le xine hlášenÃ." -#: src/xine-engine/video_out.c:1859 +#: src/xine-engine/video_out.c:1871 msgid "video_out: sorry, this should not happen. please restart xine.\n" msgstr "" "video_out: Litujeme, toto by se nemÄ›lo pÅ™ihodit. ProsÃm restartujte xine.\n" -#: src/xine-engine/video_decoder.c:374 +#: src/xine-engine/video_decoder.c:380 #, c-format msgid "video_decoder: no plugin available to handle '%s'\n" msgstr "video_decoder: nenà k dispozici žádný modul ke zpracovánà '%s'\n" -#: src/xine-engine/video_decoder.c:453 +#: src/xine-engine/video_decoder.c:459 #, c-format msgid "video_decoder: error, unknown buffer type: %08x\n" msgstr "video_decoder: chyba, neznámý typ bufferu: %08x\n" -#: src/xine-engine/video_decoder.c:489 +#: src/xine-engine/video_decoder.c:495 msgid "number of video buffers" msgstr "poÄet bufferů videa" -#: src/xine-engine/video_decoder.c:490 +#: src/xine-engine/video_decoder.c:496 msgid "" "The number of video buffers (each is 8k in size) xine uses in its internal " "queue. Higher values mean smoother playback for unreliable inputs, but also " @@ -1529,94 +1570,94 @@ msgid "" "info_helper: unsupported conversion %s -> UTF-8, no conversion performed\n" msgstr "info_helper: nepodporovaná konverze %s -> UTF-8, nebude provádÄ›na\n" -#: src/xine-engine/xine_interface.c:918 +#: src/xine-engine/xine_interface.c:934 msgid "Warning:" msgstr "" # standarnà hláška hstrerror -#: src/xine-engine/xine_interface.c:919 +#: src/xine-engine/xine_interface.c:935 #, fuzzy msgid "Unknown host:" msgstr "Neznámý poÄÃtaÄ" -#: src/xine-engine/xine_interface.c:920 +#: src/xine-engine/xine_interface.c:936 #, fuzzy msgid "Unknown device:" msgstr "Neznámý typ události: " -#: src/xine-engine/xine_interface.c:921 +#: src/xine-engine/xine_interface.c:937 msgid "Network unreachable" msgstr "" -#: src/xine-engine/xine_interface.c:922 +#: src/xine-engine/xine_interface.c:938 #, fuzzy msgid "Connection refused:" msgstr "io_helper: Spojenà odmÃtnuto\n" -#: src/xine-engine/xine_interface.c:923 +#: src/xine-engine/xine_interface.c:939 #, fuzzy msgid "File not found:" msgstr "io_helper: Soubor nenalezen\n" -#: src/xine-engine/xine_interface.c:924 +#: src/xine-engine/xine_interface.c:940 msgid "Read error from:" msgstr "" -#: src/xine-engine/xine_interface.c:925 +#: src/xine-engine/xine_interface.c:941 #, fuzzy msgid "Error loading library:" msgstr "osd: chyba naÄÃtanà glyfu\n" -#: src/xine-engine/xine_interface.c:926 +#: src/xine-engine/xine_interface.c:942 #, fuzzy msgid "Encrypted media stream detected" msgstr "ogg: detekována zvuková data vorbis\n" -#: src/xine-engine/xine_interface.c:927 +#: src/xine-engine/xine_interface.c:943 msgid "Security message:" msgstr "" -#: src/xine-engine/xine_interface.c:928 +#: src/xine-engine/xine_interface.c:944 #, fuzzy msgid "Audio device unavailable" msgstr "jméno zvukového zaÅ™Ãzenà Sun" -#: src/xine-engine/xine_interface.c:929 +#: src/xine-engine/xine_interface.c:945 msgid "Permission error" msgstr "" -#: src/xine-engine/xine_interface.c:930 +#: src/xine-engine/xine_interface.c:946 msgid "File is empty:" msgstr "" -#: src/xine-engine/audio_out.c:1074 +#: src/xine-engine/audio_out.c:1072 msgid "" "audio_out: delay calculation impossible with an unavailable audio device\n" msgstr "" "audio_out: výpoÄet Äekánà nenà možný, pokud nenà k dispozici zvukové " "zaÅ™ÃzenÃ\n" -#: src/xine-engine/audio_out.c:1216 +#: src/xine-engine/audio_out.c:1214 msgid "write to sound card failed. Was a USB device unplugged ?\n" msgstr "zápis do zvukové karty selhal. Nebylo odpojeno USB zaÅ™ÃzenÃ?\n" -#: src/xine-engine/audio_out.c:1369 +#: src/xine-engine/audio_out.c:1367 msgid "8 bits not supported by driver, converting to 16 bits.\n" msgstr "8 bitů nenà ovladaÄem podporováno, konvertuje se na 16 bitů.\n" -#: src/xine-engine/audio_out.c:1377 +#: src/xine-engine/audio_out.c:1375 msgid "mono not supported by driver, converting to stereo.\n" msgstr "mono nenà ovladaÄem podporováno, konvertuje se na stereo.\n" -#: src/xine-engine/audio_out.c:1383 +#: src/xine-engine/audio_out.c:1381 msgid "stereo not supported by driver, converting to mono.\n" msgstr "stereo nenà ovladaÄem podporováno, konvertuje se na mono.\n" -#: src/xine-engine/audio_out.c:2028 +#: src/xine-engine/audio_out.c:2033 msgid "method to sync audio and video" msgstr "metoda synchronizace zvuku a videa" -#: src/xine-engine/audio_out.c:2029 +#: src/xine-engine/audio_out.c:2034 msgid "" "When playing audio and video, there are at least two clocks involved: The " "system clock, to which video frames are synchronized and the clock in your " @@ -1657,11 +1698,11 @@ msgstr "" "digital passtthrough, kde jsou zvuková data posÃlána do vnÄ›jÅ¡Ãho dekodéru v " "digitálnà formÄ›." -#: src/xine-engine/audio_out.c:2057 +#: src/xine-engine/audio_out.c:2062 msgid "enable resampling" msgstr "povolit pÅ™evzorkovávánÃ" -#: src/xine-engine/audio_out.c:2058 +#: src/xine-engine/audio_out.c:2063 msgid "" "When the sample rate of the decoded audio does not match the capabilities of " "your sound hardware, an adaptation called \"resampling\" is required. Here " @@ -1673,11 +1714,11 @@ msgstr "" "\" (\"resampling\"). Zde můžete vybrat, zda je pÅ™evzorkovávánà povoleno, " "zakázáno nebo použito automaticky v pÅ™ÃpadÄ› potÅ™eby." -#: src/xine-engine/audio_out.c:2065 +#: src/xine-engine/audio_out.c:2070 msgid "always resample to this rate (0 to disable)" msgstr "vždy pÅ™evzorkovat na danou frekvenci (0 zakáže)" -#: src/xine-engine/audio_out.c:2066 +#: src/xine-engine/audio_out.c:2071 msgid "" "Some audio drivers do not correctly announce the capabilities of the audio " "hardware. By setting a value other than zero here, you can force the audio " @@ -1687,11 +1728,11 @@ msgstr "" "NastavenÃm hodnoty jiné, než je nula, můžete vnutit pÅ™evzorkovávánà " "zvukových dat na danou rychlost." -#: src/xine-engine/audio_out.c:2075 +#: src/xine-engine/audio_out.c:2080 msgid "offset for digital passthrough" msgstr "posun pro digital passthrough" -#: src/xine-engine/audio_out.c:2076 +#: src/xine-engine/audio_out.c:2081 msgid "" "If you use an external surround decoder and audio is ahead or behind video, " "you can enter a fixed offset here to compensate.\n" @@ -1701,11 +1742,11 @@ msgstr "" "můžete zde zadat pevný posuv, který to bude kompenzovat.\n" "Jednotka hodnoty je jeden tik PTS, což je 1/90000 sekundy." -#: src/xine-engine/audio_out.c:2085 +#: src/xine-engine/audio_out.c:2090 msgid "play audio even on slow/fast speeds" msgstr "pÅ™ehrávat zvuk i pÅ™i pomalých a rychlých rychlostech" -#: src/xine-engine/audio_out.c:2086 +#: src/xine-engine/audio_out.c:2091 msgid "" "If you enable this option, the audio will be heard even when playback speed " "is different than 1X. Of course, it will sound distorted (lower/higher " @@ -1717,29 +1758,30 @@ msgstr "" "Pokud chcete experimentovat se zachovánÃm výšky, můžete vyzkouÅ¡et mÃsto " "tohoto modulu zvukový post modul 'stretch'." -#: src/xine-engine/audio_out.c:2157 +#: src/xine-engine/audio_out.c:2162 msgid "startup audio volume" msgstr "hlasitost zvuku pÅ™i startu" -#: src/xine-engine/audio_out.c:2158 +#: src/xine-engine/audio_out.c:2163 msgid "The overall audio volume set at xine startup." msgstr "Celková úroveň hlasitosti pÅ™i startu." -#: src/xine-engine/audio_out.c:2161 +#: src/xine-engine/audio_out.c:2166 msgid "restore volume level at startup" msgstr "obnovit úroveň hlasitosti pÅ™i startu" -#: src/xine-engine/audio_out.c:2162 +#: src/xine-engine/audio_out.c:2167 msgid "If disabled, xine will not modify any mixer settings at startup." msgstr "" "Pokud je zakázáno, xine nebude pÅ™i spuÅ¡tÄ›nà mÄ›nit žádná nastavenà mixeru." -#: src/xine-engine/audio_out.c:2192 +#: src/xine-engine/audio_out.c:2197 msgid "audio_out: sorry, this should not happen. please restart xine.\n" msgstr "" "audio_out: Litujeme, toto by se nemÄ›lo pÅ™ihodit. ProsÃm restartujte xine.\n" #: src/xine-engine/load_plugins.c:212 +#, c-format msgid "map_decoder_list: no space for decoder, skipped.\n" msgstr "" @@ -1790,6 +1832,7 @@ msgid "load_plugins: plugin %s found\n" msgstr "load_plugins: nalezen modul %s\n" #: src/xine-engine/load_plugins.c:499 +#, c-format msgid "load_plugins: static plugin found\n" msgstr "load_plugins: nalezen statický modul\n" @@ -1799,6 +1842,7 @@ msgid "load_plugins: plugin limit reached, %s could not be loaded\n" msgstr "load_plugins: dosažen limit poÄtu modulů, %s nemohl být nahrán\n" #: src/xine-engine/load_plugins.c:509 +#, c-format msgid "load_plugins: plugin limit reached, static plugin could not be loaded\n" msgstr "" "load_plugins: dosažen limit poÄtu modulů, statický modul nemohl být nahrán\n" @@ -1972,11 +2016,11 @@ msgid "" msgstr "" "výstupnà modul videa xine použije modul SyncFB pro karty Matrox G200/G400" -#: src/video_out/video_out_syncfb.c:1077 +#: src/video_out/video_out_syncfb.c:1078 msgid "SyncFB device name" msgstr "Jméno zaÅ™Ãzenà SyncFB" -#: src/video_out/video_out_syncfb.c:1078 +#: src/video_out/video_out_syncfb.c:1079 msgid "" "Specifies the file name for the SyncFB (TeleTux) device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -1995,13 +2039,13 @@ msgstr "" "výstupnà modul videa xine použije knihovnu Libstk Surface Set-top Toolkit" #: src/video_out/video_out_xvmc.c:1446 src/video_out/video_out_pgx64.c:1464 -#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1436 +#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1437 msgid "video overlay colour key" msgstr "hodnota klÃÄové barvy pÅ™ekrývánÃ" #: src/video_out/video_out_xvmc.c:1447 src/video_out/video_out_xxmc.c:2431 #: src/video_out/video_out_vidix.c:1159 src/video_out/video_out_vidix.c:1166 -#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1437 +#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1438 msgid "" "The colour key is used to tell the graphics card where to overlay the video " "image. Try different values, if you experience windows becoming transparent." @@ -2011,23 +2055,23 @@ msgstr "" "hodnoty." #: src/video_out/video_out_xvmc.c:1455 src/video_out/video_out_xxmc.c:2439 -#: src/video_out/video_out_xv.c:1445 +#: src/video_out/video_out_xv.c:1446 msgid "autopaint colour key" msgstr "klÃÄová barva pro automatické vykreslovánÃ" #: src/video_out/video_out_xvmc.c:1456 src/video_out/video_out_xxmc.c:2440 -#: src/video_out/video_out_xv.c:1446 +#: src/video_out/video_out_xv.c:1447 msgid "Make Xv autopaint its colorkey." msgstr "PÅ™imÄ›t Xv automaticky kreslit svou klÃÄovou barvu." #: src/video_out/video_out_xvmc.c:1461 src/video_out/video_out_xxmc.c:2463 -#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1469 +#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1470 #: src/video_out/video_out_opengl.c:1918 msgid "enable double buffering" msgstr "povolit dvojité bufferovánÃ" #: src/video_out/video_out_xvmc.c:1462 src/video_out/video_out_xxmc.c:2464 -#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1470 +#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1471 msgid "" "Double buffering will synchronize the update of the video image to the " "repainting of the entire screen (\"vertical retrace\"). This eliminates " @@ -2037,11 +2081,11 @@ msgstr "" "úplné obrazovky (\"vertikálnà zpÄ›tný bÄ›h paprsku\"). Toto eliminuje blikánà " "a trhané artefakty, ale bude použito vÃce grafické pamÄ›ti." -#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1537 +#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1538 msgid "deinterlace method (deprecated)" msgstr "metoda korekce prokládánà (zavrženo)" -#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1538 +#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1539 msgid "" "This config setting is deprecated. You should use the new deinterlacing post " "processing settings instead.\n" @@ -2303,11 +2347,11 @@ msgstr "" "video_out_xxmc: pro hardwarovou konverzi barevného prostoru a Å¡kálovánà se " "použije Xv port %ld z adaptéru %s.\n" -#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1453 +#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1454 msgid "bilinear scaling mode" msgstr "bilineárnà režim Å¡kálovánÃ" -#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1454 +#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1455 msgid "" "Selects the bilinear scaling mode for Permedia cards. The individual values " "are:\n" @@ -2341,11 +2385,11 @@ msgstr "video_out_xxmc: tento adaptér podporuje formát yv12.\n" msgid "video_out_xxmc: this adaptor supports the yuy2 format.\n" msgstr "video_out_xxmc: tento adaptér podporuje formát yuy2.\n" -#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1530 +#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1531 msgid "pitch alignment workaround" msgstr "obcházet chybu zarovnávánà rozteÄe" -#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1531 +#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1532 msgid "Some buggy video drivers need a workaround to function properly." msgstr "" "NÄ›které chybové ovladaÄe videa potÅ™ebujà ke správnÄ› funkci tento workaround." @@ -2403,7 +2447,7 @@ msgstr "" "pÅ™epÃná mezi vrchnÃm a spodnÃm polem k dosaženà dvojnásobné rychlosti " "snÃmků.\n" -#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1611 +#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1612 msgid "xine video output plugin using the MIT X video extension" msgstr "výstupnà modul videa xine použije rozÅ¡ÃÅ™enà MIT X video" @@ -2556,11 +2600,11 @@ msgstr "" "video_out_xv: chyba x11 bÄ›hem vytvářenà XImage\n" "video_out_xv: => rozÅ¡ÃÅ™enà MIT Shared Memory se nepoužije.\n" -#: src/video_out/video_out_xv.c:1282 +#: src/video_out/video_out_xv.c:1283 msgid "video_out_xv: Xv extension not present.\n" msgstr "video_out_xv: RozÅ¡ÃÅ™enà Xv nenà pÅ™Ãtomno.\n" -#: src/video_out/video_out_xv.c:1319 +#: src/video_out/video_out_xv.c:1320 msgid "" "video_out_xv: Xv extension is present but I couldn't find a usable yuv12 " "port.\n" @@ -2571,7 +2615,7 @@ msgstr "" " Vypadá to, jako by váš grafický hardwarový ovladaÄ " "nepodporoval Xv?!\n" -#: src/video_out/video_out_xv.c:1328 +#: src/video_out/video_out_xv.c:1329 #, c-format msgid "" "video_out_xv: using Xv port %ld from adaptor %s for hardware colorspace " @@ -2580,11 +2624,11 @@ msgstr "" "video_out_xv: pro hardwarovou konverzi barevného prostoru a Å¡kálovánà se " "použije Xv port %ld z adaptéru %s.\n" -#: src/video_out/video_out_xv.c:1503 +#: src/video_out/video_out_xv.c:1504 msgid "video_out_xv: this adaptor supports the yv12 format.\n" msgstr "video_out_xv: tento adaptér podporuje formát yv12.\n" -#: src/video_out/video_out_xv.c:1508 +#: src/video_out/video_out_xv.c:1509 msgid "video_out_xv: this adaptor supports the yuy2 format.\n" msgstr "video_out_xv: tento adaptér podporuje formát yuy2.\n" @@ -2881,48 +2925,48 @@ msgstr "" "U prokládaného zobrazovaÄe, povolà řÃzenà parity pole (\"none\" znamená " "zakázáno)." -#: src/video_out/video_out_directfb.c:1509 +#: src/video_out/video_out_directfb.c:1516 #, fuzzy msgid "video_out_directfb: using hardware subpicture acceleration.\n" msgstr "" "video_out_directfb: použije se hardwarovÄ› urychlované Å¡kálovánà obrazu.\n" -#: src/video_out/video_out_directfb.c:1523 +#: src/video_out/video_out_directfb.c:1530 #, fuzzy msgid "video_out_directfb: layer supports video output.\n" msgstr "video_out_vidix: adaptér podporuje formát yuy2\n" -#: src/video_out/video_out_directfb.c:1532 +#: src/video_out/video_out_directfb.c:1539 #, fuzzy msgid "video_out_directfb: layer doesn't support YV12!\n" msgstr "video_out_syncfb: info. (modul SyncFB podporuje YUY2)\n" -#: src/video_out/video_out_directfb.c:1539 +#: src/video_out/video_out_directfb.c:1546 #, fuzzy msgid "video_out_directfb: layer doesn't support YUY2!\n" msgstr "video_out_syncfb: info. (modul SyncFB podporuje YUY2)\n" -#: src/video_out/video_out_directfb.c:1550 +#: src/video_out/video_out_directfb.c:1557 msgid "" "video_out_directfb:need at least DirectFB 0.9.25 to play on this layer!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1585 +#: src/video_out/video_out_directfb.c:1592 #, fuzzy, c-format msgid "video_out_directfb: layer doesn't support buffermode %d!\n" msgstr "video_out_directfb: žádná použitelná vrstva výstupu nebyla nalezena!\n" -#: src/video_out/video_out_directfb.c:1591 +#: src/video_out/video_out_directfb.c:1598 #, c-format msgid "video_out_directfb: layer doesn't support options 0x%08x!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1685 +#: src/video_out/video_out_directfb.c:1692 msgid "video_out_directfb: using hardware accelerated image scaling.\n" msgstr "" "video_out_directfb: použije se hardwarovÄ› urychlované Å¡kálovánà obrazu.\n" -#: src/video_out/video_out_directfb.c:1697 +#: src/video_out/video_out_directfb.c:1704 msgid "" "video_out_directfb: image scaling with deinterlacing is hardware " "accelerated.\n" @@ -2930,31 +2974,31 @@ msgstr "" "video_out_directfb: Å¡kálovánà obrazu s korekcà prokládánà je hardwarovÄ› " "urychklované.\n" -#: src/video_out/video_out_directfb.c:1775 +#: src/video_out/video_out_directfb.c:1782 #, fuzzy msgid "video layer id (auto: -1)" msgstr "ID vrstvy videa" -#: src/video_out/video_out_directfb.c:1776 +#: src/video_out/video_out_directfb.c:1783 msgid "Select the video output layer by its id." msgstr "Vybere vrstvu výstupu videa podle jeho ID." -#: src/video_out/video_out_directfb.c:1797 -#: src/video_out/video_out_directfb.c:2006 +#: src/video_out/video_out_directfb.c:1804 +#: src/video_out/video_out_directfb.c:2013 #, fuzzy, c-format msgid "video_out_directfb: using display layer #%d.\n" msgstr "video_out_directfb: žádná použitelná vrstva overlay nebyla nalezena!\n" -#: src/video_out/video_out_directfb.c:1881 +#: src/video_out/video_out_directfb.c:1888 msgid "xine video output plugin using DirectFB." msgstr "výstupnà modul videa xine použije DirectFB." -#: src/video_out/video_out_directfb.c:1999 +#: src/video_out/video_out_directfb.c:2006 #, fuzzy msgid "video_out_directfb: no usable display layer was found!\n" msgstr "video_out_directfb: žádná použitelná vrstva overlay nebyla nalezena!\n" -#: src/video_out/video_out_directfb.c:2088 +#: src/video_out/video_out_directfb.c:2095 msgid "xine video output plugin using DirectFB under XDirectFB." msgstr "výstupnà modul videa xine použije DirectFB pod XDirectFB." @@ -2972,20 +3016,20 @@ msgstr "video_out_dxr3: Chyba: selhalo ioctl, Å¡patné zaÅ™Ãzenà (%s)\n" msgid "video_out_pgx32: Error: '%s' is not a pgx32 framebuffer device\n" msgstr "video_out_pgx32: Chyba: '%s' nenà zaÅ™Ãzenà framebufferu pgx32\n" -#: src/libmusepack/xine_decoder.c:237 +#: src/libmusepack/xine_decoder.c:241 #, c-format msgid "libmusepack: mpc_streaminfo_read failed: %d\n" msgstr "libmusepack: mpc_streaminfo_read selhalo: %d\n" -#: src/libmusepack/xine_decoder.c:311 +#: src/libmusepack/xine_decoder.c:315 msgid "libmusepack: data after last frame ignored\n" msgstr "libmusepack: data po poslednÃm snÃmku ignorována\n" -#: src/libmusepack/xine_decoder.c:322 +#: src/libmusepack/xine_decoder.c:326 msgid "libmusepack: mpc_decoder_initialise failed\n" msgstr "libmusepack: selhalo mpc_decoder_initialise\n" -#: src/libmusepack/xine_decoder.c:342 src/libmusepack/xine_decoder.c:357 +#: src/libmusepack/xine_decoder.c:346 src/libmusepack/xine_decoder.c:361 #, c-format msgid "libmusepack: mpc_decoder_decode failed: %d\n" msgstr "libmusepack: selhalo mpc_decoder_decode: %d\n" @@ -3056,15 +3100,15 @@ msgstr "vertikálnà posun titulků (vzhledem k velikosti okna)" msgid "encoding of subtitles" msgstr "kódovánà titulků" -#: src/input/vcd/vcdio.c:211 +#: src/input/vcd/vcdio.c:223 msgid "SEEK_CUR not implemented for non-zero offset" msgstr "SEEK_CUR nenà implementováno pro nenulovou hodnotu posuvu" -#: src/input/vcd/vcdio.c:239 +#: src/input/vcd/vcdio.c:251 msgid "SEEK_END not implemented yet." msgstr "SEEK_END jeÅ¡tÄ› nenà implementováno." -#: src/input/vcd/vcdio.c:242 +#: src/input/vcd/vcdio.c:254 msgid "seek not implemented yet for" msgstr "posuv jeÅ¡tÄ› nenà implementován" @@ -3072,48 +3116,48 @@ msgstr "posuv jeÅ¡tÄ› nenà implementován" msgid "failed to find a device with a VCD" msgstr "selhalo hledánà zaÅ™Ãzenà s VCD" -#: src/input/vcd/xineplug_inp_vcd.c:327 +#: src/input/vcd/xineplug_inp_vcd.c:328 msgid "was passed a null class parameter" msgstr "byl pÅ™edán parametr tÅ™Ãdy null" -#: src/input/vcd/xineplug_inp_vcd.c:967 +#: src/input/vcd/xineplug_inp_vcd.c:972 msgid "Invalid current entry type" msgstr "Neplatný typ aktuálnà položky" -#: src/input/vcd/xineplug_inp_vcd.c:991 +#: src/input/vcd/xineplug_inp_vcd.c:996 msgid "" "Video CD plugin with PBC and support for: (X)VCD, (X)SVCD, HQVCD, CVD ... " msgstr "modul video CD s PBC a podporou: (X)VCD, (X)SVCD, HQVCD, CVD ... " -#: src/input/vcd/xineplug_inp_vcd.c:1092 +#: src/input/vcd/xineplug_inp_vcd.c:1097 msgid "selection has no RETURN entry" msgstr "výbÄ›r nemá položku NÃVRAT" -#: src/input/vcd/xineplug_inp_vcd.c:1121 +#: src/input/vcd/xineplug_inp_vcd.c:1126 msgid "DEFAULT selected, but PBC is not on." msgstr "VÃCHOZà vybráno, ale PBC nenà zapnuto." -#: src/input/vcd/xineplug_inp_vcd.c:1126 +#: src/input/vcd/xineplug_inp_vcd.c:1131 msgid "selection has no NEXT entry" msgstr "výbÄ›r nemá položku DALÅ Ã" -#: src/input/vcd/xineplug_inp_vcd.c:1134 +#: src/input/vcd/xineplug_inp_vcd.c:1139 msgid "selection has no PREVIOUS entry" msgstr "výbÄ›r nemá položku PŘEDCHOZÃ" -#: src/input/vcd/xineplug_inp_vcd.c:1141 +#: src/input/vcd/xineplug_inp_vcd.c:1146 msgid "Unknown event type: " msgstr "Neznámý typ události: " -#: src/input/vcd/xineplug_inp_vcd.c:1441 src/input/vcd/xineplug_inp_vcd.c:1488 +#: src/input/vcd/xineplug_inp_vcd.c:1446 src/input/vcd/xineplug_inp_vcd.c:1493 msgid "The above message had unknown vcdimager log level" msgstr "Výše uvedená zpráva má neznámou logovacà úroveň vcdimageru" -#: src/input/vcd/xineplug_inp_vcd.c:1819 +#: src/input/vcd/xineplug_inp_vcd.c:1824 msgid "VCD default type to use on autoplay" msgstr "výchozà typ VCD, který se použije na automatické pÅ™ehránÃ" -#: src/input/vcd/xineplug_inp_vcd.c:1820 +#: src/input/vcd/xineplug_inp_vcd.c:1825 msgid "" "The VCD play unit to use when none is specified in an MRL, e.g. vcd:// or " "vcd:///dev/dvd:" @@ -3121,11 +3165,11 @@ msgstr "" "Jednotka pÅ™ehrávánà VCD, kterou použÃt, jestliže nenà žádná uvedena v MRL. " "NapÅ™. vcd:// nebo vcd:///dev/dvd:" -#: src/input/vcd/xineplug_inp_vcd.c:1830 +#: src/input/vcd/xineplug_inp_vcd.c:1835 msgid "CD-ROM drive used for VCD when none given" msgstr "výchozà zaÅ™Ãzenà CD-ROM použité pro VCD, jestliže nenà žádné zadáno" -#: src/input/vcd/xineplug_inp_vcd.c:1831 +#: src/input/vcd/xineplug_inp_vcd.c:1836 msgid "" "What to use if no drive specified. If the setting is empty, xine will scan " "for CD drives." @@ -3133,28 +3177,28 @@ msgstr "" "Co použÃt, jestliže nenà uvedeno zaÅ™ÃzenÃ. Jestliže je nastavenà prázdné, " "xine prozkoumá jednotky CD." -#: src/input/vcd/xineplug_inp_vcd.c:1841 +#: src/input/vcd/xineplug_inp_vcd.c:1846 msgid "VCD position slider range" msgstr "rozsah ukazatele pozice VCD" -#: src/input/vcd/xineplug_inp_vcd.c:1842 +#: src/input/vcd/xineplug_inp_vcd.c:1847 msgid "" "range that the stream playback position slider represents playing a VCD." msgstr "Rozsah ukazatele pozice pÅ™ehrávánà pÅ™Ãtomného pÅ™i pÅ™ehrávánÃ." -#: src/input/vcd/xineplug_inp_vcd.c:1850 +#: src/input/vcd/xineplug_inp_vcd.c:1855 msgid "VCD read-ahead caching?" msgstr "read-ahead cachovánà VCD?" -#: src/input/vcd/xineplug_inp_vcd.c:1851 +#: src/input/vcd/xineplug_inp_vcd.c:1856 msgid "Class may lead to jerky playback on low-end machines." msgstr "Na slabÅ¡Ãch strojÃch může toto vést k trhanému pÅ™ehrávánÃ" -#: src/input/vcd/xineplug_inp_vcd.c:1861 +#: src/input/vcd/xineplug_inp_vcd.c:1866 msgid "automatically advance VCD track/entry" msgstr "automaticky postupovat po stopách nebo položkách VCD" -#: src/input/vcd/xineplug_inp_vcd.c:1862 +#: src/input/vcd/xineplug_inp_vcd.c:1867 msgid "" "If enabled, we should automatically advance to the next entry or track. Used " "only when playback control (PBC) is disabled." @@ -3162,11 +3206,11 @@ msgstr "" "Jestliže je povoleno, mÄ›li bychom automaticky postoupit na dalšà položku " "nebo stopu. Použito pouze, když nenà zapnuta kontrola pÅ™ehrávánà (PBC)." -#: src/input/vcd/xineplug_inp_vcd.c:1871 +#: src/input/vcd/xineplug_inp_vcd.c:1876 msgid "show 'rejected' VCD LIDs" msgstr "zobrazit 'odmÃtané' VCD LID?" -#: src/input/vcd/xineplug_inp_vcd.c:1872 +#: src/input/vcd/xineplug_inp_vcd.c:1877 msgid "" "Some playback list IDs (LIDs) are marked not showable, but you can see them " "in the MRL list if this is set. Rejected entries are marked with an asterisk " @@ -3176,11 +3220,11 @@ msgstr "" "nezobrazovaly. Ale pokud je nastavena tato volba, můžete je vidÄ›t v seznamu " "MRL. OdmÃtané položky jsou oznaÄeny hvÄ›zdiÄkou (*) pÅ™idanou na konec MRL." -#: src/input/vcd/xineplug_inp_vcd.c:1883 +#: src/input/vcd/xineplug_inp_vcd.c:1888 msgid "VCD format string for display banner" msgstr "VCD formát Å™etÄ›zce pro nápis na obrazovce" -#: src/input/vcd/xineplug_inp_vcd.c:1884 +#: src/input/vcd/xineplug_inp_vcd.c:1889 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are:\n" @@ -3218,11 +3262,11 @@ msgstr "" " ÄÃslo 1 až poÄet svazků\n" " %% : %\n" -#: src/input/vcd/xineplug_inp_vcd.c:1909 +#: src/input/vcd/xineplug_inp_vcd.c:1914 msgid "VCD format string for stream comment field" msgstr "formátovacà řetÄ›zec VCD pro pole komentáře proudu dat" -#: src/input/vcd/xineplug_inp_vcd.c:1910 +#: src/input/vcd/xineplug_inp_vcd.c:1915 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are %A, %C, %c, %F, %I, %L, " @@ -3234,11 +3278,11 @@ msgstr "" "c, %F, %I, %L, %N, %P, %p, %S, %T, %V, %v a %%.\n" "Jejich význam viz. help k title_format." -#: src/input/vcd/xineplug_inp_vcd.c:1922 +#: src/input/vcd/xineplug_inp_vcd.c:1927 msgid "VCD debug flag mask" msgstr "debugovacà maska pÅ™Ãznaků VCD" -#: src/input/vcd/xineplug_inp_vcd.c:1923 +#: src/input/vcd/xineplug_inp_vcd.c:1928 msgid "" "For tracking down bugs in the VCD plugin. Mask values are:\n" " 1: Meta information\n" @@ -3399,11 +3443,11 @@ msgstr "" "Cesta k zaÅ™ÃzenÃ, obvykle DVD mechanice, které chcete použÃvat pro " "pÅ™ehrávánà DVD." -#: src/input/input_dvd.c:1803 +#: src/input/input_dvd.c:1804 msgid "raw device set up for DVD access" msgstr "cesta k raw zaÅ™Ãzenà nastavenému pro pÅ™Ãstup k DVD" -#: src/input/input_dvd.c:1804 +#: src/input/input_dvd.c:1805 msgid "" "If this points to a raw device connected to your DVD device, xine will use " "the raw device for playback. This has the advantage of being slightly faster " @@ -3421,11 +3465,11 @@ msgstr "" "použita pouze jednou.\n" "Dalšà informace viz. dokumentace o raw zaÅ™ÃzenÃch (man raw)." -#: src/input/input_dvd.c:1817 +#: src/input/input_dvd.c:1818 msgid "CSS decryption method" msgstr "metoda deÅ¡ifrovánà CSS" -#: src/input/input_dvd.c:1818 +#: src/input/input_dvd.c:1819 msgid "" "Selects the decryption method libdvdcss will use to descramble copy " "protected DVDs. Try the various methods, if you have problems playing " @@ -3435,11 +3479,11 @@ msgstr "" "chránÄ›nÃch proti kopÃrovánÃ. Pokud máte problémy s pÅ™ehrávánÃm zakódovaných " "DVD, vyzkouÅ¡ejte různé metody." -#: src/input/input_dvd.c:1826 +#: src/input/input_dvd.c:1827 msgid "path to the title key cache" msgstr "cesta ke cache klÃÄů titulů" -#: src/input/input_dvd.c:1827 +#: src/input/input_dvd.c:1828 msgid "" "Since cracking the copy protection of scrambled DVDs can be quite time " "consuming, libdvdcss will cache the cracked keys in this directory.\n" @@ -3453,11 +3497,11 @@ msgstr "" "tomto adresáři vytvářeny soubory s nekontrolovatelnými jmény. UjistÄ›te se, " "že daný adresář nenà kromÄ› cachovánà DVD klÃÄů použÃván na nic jiného." -#: src/input/input_dvd.c:1849 +#: src/input/input_dvd.c:1850 msgid "region the DVD player claims to be in (1 to 8)" msgstr "DVD pÅ™ehrávaÄ tvrdÃ, že je v oblasti (1 až 8)" -#: src/input/input_dvd.c:1850 +#: src/input/input_dvd.c:1851 msgid "" "This only needs to be changed if your DVD jumps to a screen complaining " "about a wrong region code. It has nothing to do with the region code set in " @@ -3467,11 +3511,11 @@ msgstr "" "na Å¡patný kód oblasti. Nemá to nic dÄ›lat s kódem oblasti nastaveným v DVD " "mechanikách, je to ÄistÄ› softwarové." -#: src/input/input_dvd.c:1856 +#: src/input/input_dvd.c:1857 msgid "default language for DVD playback" msgstr "výchozà jazyk pro pÅ™ehrávánà DVD" -#: src/input/input_dvd.c:1857 +#: src/input/input_dvd.c:1858 msgid "" "xine tries to use this language as a default for DVD playback. As far as the " "DVD supports it, menus and audio tracks will be presented in this language.\n" @@ -3481,11 +3525,11 @@ msgstr "" "bude podporovat, volby a zvukové stopy budou prezentovány v tomto jazyce.\n" "Hodnotou musà být dva znaky jazykového kódu ISO639." -#: src/input/input_dvd.c:1863 +#: src/input/input_dvd.c:1864 msgid "read-ahead caching" msgstr "read-ahead cachovánÃ" -#: src/input/input_dvd.c:1864 +#: src/input/input_dvd.c:1865 msgid "" "xine can use a read ahead cache for DVD drive access.\n" "This may lead to jerky playback on slow drives, but it improves the impact " @@ -3495,11 +3539,11 @@ msgstr "" "To může vést na pomalých mechanikách ke Å¡kubavému pÅ™ehrávánÃ, ale na " "rychlejÅ¡Ãch mechanikách to zlepšà výsledek zmÄ›ny vrstvy DVD." -#: src/input/input_dvd.c:1870 +#: src/input/input_dvd.c:1871 msgid "unit for the skip action" msgstr "jednotka pro akci skoku" -#: src/input/input_dvd.c:1871 +#: src/input/input_dvd.c:1872 msgid "" "You can configure the behaviour when issuing a skip command (using the skip " "buttons for example). The individual values mean:\n" @@ -3531,11 +3575,11 @@ msgstr "" "skip title\n" "pÅ™eskoÄà DVD titul, což je stavebnà jednotka reprezentujÃcà celé DVD" -#: src/input/input_dvd.c:1886 +#: src/input/input_dvd.c:1887 msgid "unit for seeking" msgstr "jednotka pro nastavenà pozice" -#: src/input/input_dvd.c:1887 +#: src/input/input_dvd.c:1888 msgid "" "You can configure the domain spanned by the seek slider. The individual " "values mean:\n" @@ -3559,11 +3603,11 @@ msgstr "" "nastavovánà pozice se týká programu DVD, což je navigaÄnà jednotka " "reprezentujÃcà kapitolu souÄasného dÄ›jstvÃ" -#: src/input/input_dvd.c:1898 +#: src/input/input_dvd.c:1899 msgid "play mode when title/chapter is given" msgstr "režim pÅ™ehrávánÃ, když je zadán titul nebo kapitola" -#: src/input/input_dvd.c:1899 +#: src/input/input_dvd.c:1900 msgid "" "You can configure the behaviour when playing a dvd from a given title/" "chapter (eg. using MRL 'dvd:/1.2'). The individual values mean:\n" @@ -3736,11 +3780,11 @@ msgstr "" msgid "DVB (Digital TV) input plugin" msgstr "vstupnà modul DVB (digitálnà TV)" -#: src/input/input_dvb.c:3238 +#: src/input/input_dvb.c:3237 msgid "Remember last DVB channel watched" msgstr "Pamatovat si naposledy sledovaný kanál DVB" -#: src/input/input_dvb.c:3239 +#: src/input/input_dvb.c:3238 msgid "" "On autoplay, xine will remember and switch to the channel indicated in media." "dvb.last_channel. " @@ -3748,21 +3792,21 @@ msgstr "" "PÅ™i automatickém pÅ™ehrávánà xine pÅ™epne na poslednà kanál uvedený v media." "dvb.last_channel." -#: src/input/input_dvb.c:3246 +#: src/input/input_dvb.c:3245 msgid "Last DVB channel viewed" msgstr "Naposledy sledovaný kanál DVB" -#: src/input/input_dvb.c:3247 +#: src/input/input_dvb.c:3246 msgid "If enabled xine will remember and switch to this channel. " msgstr "" "Pokud je povoleno, xine si bude pamatovat tento kanál a bude se na nÄ›j " "automaticky pÅ™epÃnat." -#: src/input/input_dvb.c:3253 +#: src/input/input_dvb.c:3252 msgid "Number of dvb card to use." msgstr "PoÄet karet DVB, které se majà použÃt." -#: src/input/input_dvb.c:3254 +#: src/input/input_dvb.c:3253 msgid "" "Leave this at zero unless you really have more than 1 card in your system." msgstr "" @@ -3903,74 +3947,74 @@ msgstr "" "potÅ™ebné, a tak by nemÄ›lo zpomalenà ovlivnit výkon pÅ™ehrávánÃ.\n" "Hodnota nula zde zakáže zpomalovánÃ." -#: src/input/input_rtp.c:182 +#: src/input/input_rtp.c:185 #, c-format msgid "socket(): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:192 +#: src/input/input_rtp.c:195 msgid "IP address specified is multicast\n" msgstr "Uvedená IP adresa je multicast\n" -#: src/input/input_rtp.c:201 +#: src/input/input_rtp.c:204 #, c-format msgid "setsockopt(SO_RCVBUF): %s.\n" msgstr "setsockopt(SO_RCVBUF): %s.\n" -#: src/input/input_rtp.c:209 +#: src/input/input_rtp.c:212 #, c-format msgid "setsockopt(SO_REUSEADDR): %s.\n" msgstr "setsockopt(SO_REUSEADDR): %s.\n" -#: src/input/input_rtp.c:216 +#: src/input/input_rtp.c:219 #, c-format msgid "bind(): %s.\n" msgstr "bind(): %s.\n" -#: src/input/input_rtp.c:236 +#: src/input/input_rtp.c:239 #, c-format msgid "Can't find address for iface %s:%s\n" msgstr "Nelze nalézt adresu rozhranà %s:%s\n" -#: src/input/input_rtp.c:254 +#: src/input/input_rtp.c:257 #, c-format msgid "setsockopt(IP_ADD_MEMBERSHIP) failed (multicast kernel?): %s.\n" msgstr "setsockopt(IP_ADD_MEMBERSHIP) selhalo (jádro s multicastem?): %s.\n" -#: src/input/input_rtp.c:276 +#: src/input/input_rtp.c:279 #, c-format msgid "unable to resolve '%s'.\n" msgstr "nelze zjistit adresu '%s'.\n" -#: src/input/input_rtp.c:286 +#: src/input/input_rtp.c:289 #, c-format msgid "unable to bind to '%s'.\n" msgstr "nelze se pÅ™ipojit k '%s'.\n" -#: src/input/input_rtp.c:314 +#: src/input/input_rtp.c:317 #, c-format msgid "recv(): %s.\n" msgstr "recv(): %s.\n" -#: src/input/input_rtp.c:602 +#: src/input/input_rtp.c:605 msgid "RTP: stopping reading thread...\n" msgstr "RTP: ukonÄuje se Ätecà vlákno...\n" -#: src/input/input_rtp.c:605 +#: src/input/input_rtp.c:608 msgid "RTP: reading thread terminated\n" msgstr "RTP: Ätecà vlákno ukonÄeno\n" -#: src/input/input_rtp.c:620 +#: src/input/input_rtp.c:623 #, c-format msgid "Opening >filename:%s port:%d interface:%s<\n" msgstr "OtevÃránà >filename:%s port:%d rozhranÃ:%s<\n" -#: src/input/input_rtp.c:637 +#: src/input/input_rtp.c:640 #, c-format msgid "input_rtp: can't create new thread (%s)\n" msgstr "input_rtp: nelze vytvoÅ™it nové vlákno (%s)\n" -#: src/input/input_rtp.c:743 +#: src/input/input_rtp.c:746 msgid "RTP and UDP input plugin as shipped with xine" msgstr "vstupnà modul pro RTP a UDP dodaný se xine" @@ -3984,16 +4028,30 @@ msgstr "rtsp: Å¡patné MRL: %s\n" msgid "rtsp: failed to connect to '%s'\n" msgstr "rtsp: nelze se pÅ™ipojit k '%s'\n" -#: src/input/librtsp/rtsp_session.c:84 +#: src/input/librtsp/rtsp_session.c:93 src/input/input_mms.c:479 +msgid "network bandwidth" +msgstr "Å¡ÃÅ™ka pásma sÃtÄ›" + +#: src/input/librtsp/rtsp_session.c:94 src/input/input_mms.c:480 +msgid "" +"Specify the bandwidth of your internet connection here. This will be used " +"when streaming servers offer different versions with different bandwidth " +"requirements of the same stream." +msgstr "" +"UveÄte zde Å¡ÃÅ™ku pásma vaÅ¡eho internetového pÅ™ipojenÃ. To bude použito v " +"pÅ™ÃpadÄ›, že streamovacà servery poskytnou různé verze stejných dat s " +"rozdÃlnými požadavky na Å¡ÃÅ™ku pásma." + +#: src/input/librtsp/rtsp_session.c:109 #, c-format msgid "rtsp_session: failed to connect to server %s\n" msgstr "rtsp_session: nelze se pÅ™ipojit k serveru %s\n" -#: src/input/librtsp/rtsp_session.c:118 +#: src/input/librtsp/rtsp_session.c:143 msgid "rtsp_session: session can not be established.\n" msgstr "rtsp_session: nelze zavést relaci.\n" -#: src/input/librtsp/rtsp_session.c:135 +#: src/input/librtsp/rtsp_session.c:161 #, c-format msgid "rtsp_session: rtsp server type '%s' not supported yet. sorry.\n" msgstr "rtsp_session: typ rtsp serveru '%s' jeÅ¡tÄ› nenà podporován. bohužel.\n" @@ -4042,41 +4100,45 @@ msgstr "Cesta k vaÅ¡emu zaÅ™Ãzenà rádia Video4Linux." msgid "pnm streaming input plugin" msgstr "vstupnà modul pnm pro streamovaná data" -#: src/input/mmsh.c:195 +#: src/input/mmsh.c:201 msgid "libmmsh: send error\n" msgstr "libmmsh: chyba pÅ™i posÃlánÃ\n" -#: src/input/mmsh.c:240 +#: src/input/mmsh.c:246 +#, c-format msgid "libmmsh: bad response format\n" msgstr "libmmsh: Å¡patný formát odpovÄ›di\n" -#: src/input/mmsh.c:246 +#: src/input/mmsh.c:252 #, c-format msgid "libmmsh: 3xx redirection not implemented: >%d %s<\n" msgstr "libmmsh: pÅ™esmÄ›rovánà 3xx nenà implementováno: >%d %s<\n" -#: src/input/mmsh.c:253 +#: src/input/mmsh.c:259 #, c-format msgid "libmmsh: http status not 2xx: >%d %s<\n" msgstr "libmmsh: stav http nenà 2xx: >%d %s<\n" -#: src/input/mmsh.c:261 +#: src/input/mmsh.c:267 +#, c-format msgid "libmmsh: Location redirection not implemented\n" msgstr "libmmsh: PÅ™esmÄ›rovánà umÃstÄ›nà nenà implementováno\n" -#: src/input/mmsh.c:471 +#: src/input/mmsh.c:476 msgid "Connecting MMS server (over http)..." msgstr "PÅ™ipojuje se k MMS serveru (pÅ™es HTTP)..." -#: src/input/mmsh.c:639 +#: src/input/mmsh.c:657 +#, c-format msgid "invalid url\n" msgstr "neplatné URL\n" -#: src/input/mmsh.c:644 +#: src/input/mmsh.c:662 +#, c-format msgid "unsupported protocol\n" msgstr "nepodporovaný protokol\n" -#: src/input/mms.c:537 +#: src/input/mms.c:561 msgid "Connecting MMS server (over tcp)..." msgstr "PÅ™ipojuje se k MMS serveru (pÅ™es TCP)..." @@ -4098,33 +4160,19 @@ msgstr "input_pnm: nelze se pÅ™ipojit k '%s'\n" msgid "input_pnm: failed to set up stream\n" msgstr "input_pnm: selhalo nastavenà proudu dat\n" -#: src/input/input_smb.c:154 +#: src/input/input_smb.c:158 msgid "CIFS/SMB input plugin based on libsmbclient" msgstr "Vstupnà modul CIFS/SMB založený na libsmbclient" -#: src/input/input_mms.c:420 +#: src/input/input_mms.c:443 msgid "mms streaming input plugin" msgstr "vstupnà modul mms pro streamovaná data" -#: src/input/input_mms.c:456 -msgid "network bandwidth" -msgstr "Å¡ÃÅ™ka pásma sÃtÄ›" - -#: src/input/input_mms.c:457 -msgid "" -"Specify the bandwidth of your internet connection here. This will be used " -"when streaming servers offer different versions with different bandwidth " -"requirements of the same stream." -msgstr "" -"UveÄte zde Å¡ÃÅ™ku pásma vaÅ¡eho internetového pÅ™ipojenÃ. To bude použito v " -"pÅ™ÃpadÄ›, že streamovacà servery poskytnou různé verze stejných dat s " -"rozdÃlnými požadavky na Å¡ÃÅ™ku pásma." - -#: src/input/input_mms.c:466 +#: src/input/input_mms.c:489 msgid "MMS protocol" msgstr "protokol MMS" -#: src/input/input_mms.c:467 +#: src/input/input_mms.c:490 msgid "" "Select the protocol to encapsulate MMS.\n" "TCP is better but you may need HTTP behind a firewall." @@ -4137,81 +4185,82 @@ msgstr "" msgid "input_http: gethostbyname(%s) failed: %s\n" msgstr "input_http: selhalo gethostbyname(%s): %s\n" -#: src/input/input_http.c:403 src/input/input_http.c:949 +#: src/input/input_http.c:400 src/input/input_http.c:941 #, c-format msgid "input_http: read error %d\n" msgstr "input_http: chyba Ätenà %d\n" -#: src/input/input_http.c:630 +#: src/input/input_http.c:627 msgid "Connecting HTTP server..." msgstr "PÅ™ipojuje se k HTTP serveru..." -#: src/input/input_http.c:824 +#: src/input/input_http.c:816 +#, c-format msgid "input_http: invalid http answer\n" msgstr "input_http: neplatná odpovÄ›Ä http\n" -#: src/input/input_http.c:831 +#: src/input/input_http.c:823 #, c-format msgid "input_http: 3xx redirection: >%d %s<\n" msgstr "input_http: pÅ™esmÄ›rovánà 3xx: >%d %s<\n" -#: src/input/input_http.c:836 src/input/input_http.c:842 -#: src/input/input_http.c:849 +#: src/input/input_http.c:828 src/input/input_http.c:834 +#: src/input/input_http.c:841 #, c-format msgid "input_http: http status not 2xx: >%d %s<\n" msgstr "input_http: stav http nenà 2xx: >%d %s<\n" -#: src/input/input_http.c:859 +#: src/input/input_http.c:851 #, c-format msgid "input_http: content length = %<PRIdMAX> bytes\n" msgstr "input_http: délka obsahu = %<PRIdMAX> bytů\n" -#: src/input/input_http.c:928 +#: src/input/input_http.c:920 #, fuzzy, c-format msgid "input_http: buffer exhausted after %d bytes." msgstr "input_http: chyba Ätenà %d\n" -#: src/input/input_http.c:1002 +#: src/input/input_http.c:994 msgid "http input plugin" msgstr "vstupnà modul http" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "HTTP proxy host" msgstr "HTTP proxy host" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "The hostname of the HTTP proxy." msgstr "Hostitelské jméno HTTP proxy." -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "HTTP proxy port" msgstr "HTTP proxy port" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "The port number of the HTTP proxy." msgstr "ÄŒÃslo portu HTTP proxy." -#: src/input/input_http.c:1082 +#: src/input/input_http.c:1074 msgid "HTTP proxy username" msgstr "Uživatelské jméno HTTP proxy" -#: src/input/input_http.c:1083 +#: src/input/input_http.c:1075 msgid "The user name for the HTTP proxy." msgstr "Uživatelské jméno pro HTTP proxy." -#: src/input/input_http.c:1086 +#: src/input/input_http.c:1078 msgid "HTTP proxy password" msgstr "Heslo HTTP proxy" -#: src/input/input_http.c:1087 +#: src/input/input_http.c:1079 msgid "The password for the HTTP proxy." msgstr "Heslo pro HTTP proxy." -#: src/input/input_http.c:1090 +#: src/input/input_http.c:1082 msgid "Domains for which to ignore the HTTP proxy" msgstr "Domény, pro které ignorovat HTTP proxy" -#: src/input/input_http.c:1091 +#: src/input/input_http.c:1083 msgid "" "A comma-separated list of domain names for which the proxy is to be " "ignored.\n" @@ -4227,7 +4276,7 @@ msgstr "" msgid "input_dvd: Device %s failed to open during eject calls\n" msgstr "input_dvd: Selhalo otevÅ™enà zaÅ™Ãzenà %s bÄ›hem volánà vysunutÃ\n" -#: src/input/input_rtsp.c:274 +#: src/input/input_rtsp.c:284 msgid "rtsp streaming input plugin" msgstr "vstupnà modul rtsp pro streamovaná data" @@ -4236,30 +4285,35 @@ msgid "dvbsub: cannot create timer thread\n" msgstr "dvbsub: nelze vytvoÅ™it Äasovacà vlákno\n" #: src/libxinevdec/bitplane.c:1272 +#, c-format msgid "bitplane: error doing ByteRun1 decompression\n" msgstr "bitplane: chyba pÅ™i provádÄ›nà dekomprese ByteRun1\n" #: src/libxinevdec/bitplane.c:1331 +#, c-format msgid "bitplane: Anim Opt 1 is not supported at the moment\n" msgstr "bitplane: V tomto okamžiku nenà Anim Opt 1 podporován\n" #: src/libxinevdec/bitplane.c:1338 +#, c-format msgid "bitplane: Anim Opt 2 is not supported at the moment\n" msgstr "bitplane: V tomto okamžiku nenà Anim Opt 2 podporován\n" #: src/libxinevdec/bitplane.c:1388 +#, c-format msgid "bitplane: Anim ASCIIJ is not supported at the moment\n" msgstr "bitplane: V tomto okamžiku nenà Anim ASCIIJ podporován\n" #: src/libxinevdec/bitplane.c:1394 +#, c-format msgid "bitplane: This anim-type is not supported at the moment\n" msgstr "bitplane: V tomto okamžiku nenà tento typ anim podporován\n" -#: src/libsputext/demux_sputext.c:1507 +#: src/libsputext/demux_sputext.c:1506 msgid "default duration of subtitle display in seconds" msgstr "výchozà doba zobrazenà titulků v sekundách" -#: src/libsputext/demux_sputext.c:1508 +#: src/libsputext/demux_sputext.c:1507 msgid "" "Some subtitle formats do not explicitly give a duration for each subtitle. " "For these, you can set a default duration here. Setting to zero will result " @@ -4270,12 +4324,12 @@ msgstr "" "bude mÃt za následek, že titulek bude vždy zobrazen tak dlouho, než se " "objevà dalÅ¡Ã." -#: src/libsputext/xine_decoder.c:913 +#: src/libsputext/xine_decoder.c:948 msgid "subtitle size" msgstr "velikost titulků" # FIXME: correct original? -#: src/libsputext/xine_decoder.c:914 +#: src/libsputext/xine_decoder.c:949 msgid "" "You can adjust the subtitle size here. The setting will be evaluated " "relative to the window size." @@ -4283,12 +4337,12 @@ msgstr "" "Zde můžete upravit velikost titulků. Nastavenà bude bráno relativnÄ› k " "velikosti okna." -#: src/libsputext/xine_decoder.c:920 +#: src/libsputext/xine_decoder.c:955 msgid "subtitle vertical offset" msgstr "vertikálnà posun titulků" # FIXME: correct original? -#: src/libsputext/xine_decoder.c:921 +#: src/libsputext/xine_decoder.c:956 msgid "" "You can adjust the vertical position of the subtitle. The setting will be " "evaluated relative to the window size." @@ -4296,19 +4350,28 @@ msgstr "" "Můžete upravit svislou polohu titulků. Nastavenà bude bráni relativnÄ› k " "velikosti okna." -#: src/libsputext/xine_decoder.c:927 +#: src/libsputext/xine_decoder.c:962 src/libsputext/xine_decoder.c:971 msgid "font for subtitles" msgstr "font titulků" -#: src/libsputext/xine_decoder.c:928 +#: src/libsputext/xine_decoder.c:963 msgid "A font from the xine font directory to be used for the subtitle text." msgstr "Font z adresáře fontů xine, který se použije na text s titulky." -#: src/libsputext/xine_decoder.c:935 +#: src/libsputext/xine_decoder.c:972 +#, fuzzy +msgid "An outline font file (e.g. a .ttf) to be used for the subtitle text." +msgstr "Font z adresáře fontů xine, který se použije na text s titulky." + +#: src/libsputext/xine_decoder.c:978 +msgid "whether to use a freetype font" +msgstr "" + +#: src/libsputext/xine_decoder.c:985 msgid "encoding of the subtitles" msgstr "kódovánà titulků" -#: src/libsputext/xine_decoder.c:936 +#: src/libsputext/xine_decoder.c:986 msgid "" "The encoding of the subtitle text in the stream. This setting is used to " "render non-ASCII characters correctly. If non-ASCII characters are not " @@ -4320,11 +4383,11 @@ msgstr "" "znaky zobrazeny tak, jak oÄekáváte, zeptejte se toho, kdo titulky vytvářel, " "jaké bylo použito kódovánÃ." -#: src/libsputext/xine_decoder.c:944 +#: src/libsputext/xine_decoder.c:994 msgid "use unscaled OSD if possible" msgstr "použÃvat OSD bez zmÄ›n měřÃtka, je-li to možné" -#: src/libsputext/xine_decoder.c:945 +#: src/libsputext/xine_decoder.c:995 msgid "" "The unscaled OSD will be rendered independently of the video frame and will " "always be sharp, even if the video is magnified. This will look better, but " @@ -4820,11 +4883,11 @@ msgstr "libareal: nastavenà esence dekodéru selhalo, chybový kód: 0x%x\n" msgid "libareal: oups, real can do more than 2 channels ?\n" msgstr "libareal: jejda, real může mÃt vÃce než 2 kanály?\n" -#: src/libreal/audio_decoder.c:745 src/libreal/xine_decoder.c:638 +#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 msgid "path to RealPlayer codecs" msgstr "cesta ke kodekům Real Playeru" -#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 +#: src/libreal/audio_decoder.c:747 src/libreal/xine_decoder.c:640 msgid "" "If you have RealPlayer installed, specify the path to its codec directory " "here. You can easily find the codec directory by looking for a file named " @@ -5325,6 +5388,7 @@ msgstr "" "demux:avi: neplatný datový blok avi \"%c%c%c%c\" na pozici %<PRIdMAX>\n" #: src/demuxers/demux_avi.c:828 +#, c-format msgid "demux_avi: avi index is broken\n" msgstr "demux_avi: index avi je poruÅ¡en\n" @@ -5339,23 +5403,25 @@ msgid "demux_mpc: frame too big for buffer" msgstr "demux_mpc: snÃmek pÅ™ÃliÅ¡ velký do bufferu" #: src/demuxers/demux_film.c:188 +#, c-format msgid "invalid FILM chunk size\n" msgstr "neplatná velikost datového bloku FILM\n" #: src/demuxers/demux_film.c:342 +#, c-format msgid "unrecognized FILM chunk\n" msgstr "nerozpoznaný datový blok FILM\n" -#: src/demuxers/demux_asf.c:423 +#: src/demuxers/demux_asf.c:425 #, c-format msgid "demux_asf: warning: The stream id=%d is encrypted.\n" msgstr "demux_asf: varovánÃ: Proud dat ÄÃslo %d je zaÅ¡ifrovaný.\n" -#: src/demuxers/demux_asf.c:425 +#: src/demuxers/demux_asf.c:427 msgid "Media stream scrambled/encrypted" msgstr "Proud dat je zamÃchán/zaÅ¡ifrován" -#: src/demuxers/demux_asf.c:1633 +#: src/demuxers/demux_asf.c:1634 #, c-format msgid "demux_asf: Wrong ASX version: %s\n" msgstr "demux_asf: Å patná verze ASX: %s\n" @@ -5386,7 +5452,8 @@ msgid "" "unknown VOC compression type (0x%02X); please report to xine developers\n" msgstr "neznámý typ komprese VOC (0x%02X); prosÃm oznamte vývojářům xine\n" -#: src/demuxers/demux_ogg.c:797 +#: src/demuxers/demux_ogg.c:801 +#, c-format msgid "ogg: vorbis audio track indicated but no vorbis stream header found.\n" msgstr "" "ogg: zjiÅ¡tÄ›na zvuková stopa vorbis, ale nenalezena žádná hlaviÄka dat " @@ -5408,6 +5475,7 @@ msgstr "" "demux_mpeg_block: Chyba! Uvolnà se. ProsÃm oznamte to vývojářům xine.\n" #: src/demuxers/demux_mpeg_block.c:640 +#, c-format msgid "demux_mpeg_block: warning: PES header reserved 10 bits not found\n" msgstr "" "demux_mpeg_block: varovánÃ: 10 rezervovaných bitů hlaviÄky PES nenalezeno\n" @@ -5436,6 +5504,7 @@ msgid "demux_mpeg_pes: warning: PACK stream id=0x%x decode failed.\n" msgstr "demux_mpeg_pes: varovánÃ: selhalo dekódovánà sekvence PACK id=0x%x.\n" #: src/demuxers/demux_mpeg_pes.c:771 +#, c-format msgid "demux_mpeg_pes: warning: PES header reserved 10 bits not found\n" msgstr "" "demux_mpeg_pes: varovánÃ: 10 rezervovaných bitů hlaviÄky PES nenalezeno\n" @@ -5465,10 +5534,12 @@ msgstr "" "demux_wc3movie: datový blok SHOT odkazoval na neplatnou paletu (%d >= %d)\n" #: src/demuxers/demux_wc3movie.c:406 +#, c-format msgid "demux_wc3movie: There was a problem while loading palette chunks\n" msgstr "demux_wc3movie: Byl zde problém bÄ›hem naÄÃtánà datových bloků palety\n" #: src/demuxers/demux_snd.c:104 +#, c-format msgid "demux_snd: bad header parameters\n" msgstr "demux_snd: Å¡patné parametry hlaviÄky\n" @@ -5523,61 +5594,61 @@ msgid "The maximum compression to apply to an image in constant quality mode." msgstr "" "Maximálnà komprese, která se použije na obraz v režimu konstantnà kvality." -#: src/libffmpeg/audio_decoder.c:117 +#: src/libffmpeg/audio_decoder.c:120 #, c-format msgid "ffmpeg_audio_dec: increasing buffer to %d to avoid overflow.\n" msgstr "ffmpeg_audio_dec: zvÄ›tÅ¡enà bufferu na %d, aby se pÅ™edeÅ¡lo pÅ™eteÄenÃ.\n" -#: src/libffmpeg/audio_decoder.c:161 +#: src/libffmpeg/audio_decoder.c:164 #, c-format msgid "ffmpeg_audio_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "ffmpeg_audio_dec: nelze nalézt dekodér ffmpeg pro buffer typu 0x%X\n" -#: src/libffmpeg/audio_decoder.c:253 +#: src/libffmpeg/audio_decoder.c:256 #, fuzzy msgid "ffmpeg_audio_dec: trying to open null codec\n" msgstr "ffmpeg_audio_dec: nelze otevÅ™Ãt dekodér\n" -#: src/libffmpeg/audio_decoder.c:262 +#: src/libffmpeg/audio_decoder.c:265 msgid "ffmpeg_audio_dec: couldn't open decoder\n" msgstr "ffmpeg_audio_dec: nelze otevÅ™Ãt dekodér\n" -#: src/libffmpeg/dvaudio_decoder.c:302 +#: src/libffmpeg/dvaudio_decoder.c:286 #, c-format msgid "dvaudio: increasing buffer to %d to avoid overflow.\n" msgstr "dvaudio: zvÄ›tÅ¡enà bufferu na %d, aby se pÅ™edeÅ¡lo pÅ™eteÄenÃ.\n" -#: src/libffmpeg/video_decoder.c:153 +#: src/libffmpeg/video_decoder.c:156 msgid "ffmpeg_video_dec: unsupported frame format, DR1 disabled.\n" msgstr "ffmpeg_video_dec: nepodporovaný formát, DR1 zakázáno.\n" -#: src/libffmpeg/video_decoder.c:171 +#: src/libffmpeg/video_decoder.c:174 msgid "ffmpeg_video_dec: unsupported frame dimensions, DR1 disabled.\n" msgstr "ffmpeg_video_dec: nepodporované rozmÄ›ry snÃmku, DR1 zakázáno.\n" -#: src/libffmpeg/video_decoder.c:319 +#: src/libffmpeg/video_decoder.c:334 #, c-format msgid "ffmpeg_video_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "ffmpeg_video_dec: nelze nalézt dekodér ffmpeg pro buffer typu 0x%X\n" -#: src/libffmpeg/video_decoder.c:348 +#: src/libffmpeg/video_decoder.c:363 msgid "ffmpeg_video_dec: couldn't open decoder\n" msgstr "ffmpeg_video_dec: nelze otevÅ™Ãt dekodér\n" -#: src/libffmpeg/video_decoder.c:383 +#: src/libffmpeg/video_decoder.c:398 msgid "ffmpeg_video_dec: direct rendering enabled\n" msgstr "ffmpeg_video_dec: pÅ™Ãmé renderovánà povoleno\n" -#: src/libffmpeg/video_decoder.c:802 +#: src/libffmpeg/video_decoder.c:817 #, c-format msgid "ffmpeg_video_dec: increasing buffer to %d to avoid overflow.\n" msgstr "ffmpeg_video_dec: zvÄ›tÅ¡enà bufferu na %d, aby se pÅ™edeÅ¡lo pÅ™eteÄenÃ.\n" -#: src/libffmpeg/video_decoder.c:1474 +#: src/libffmpeg/video_decoder.c:1510 msgid "MPEG-4 postprocessing quality" msgstr "kvalita dodateÄného zpracovánà MPEG-4" -#: src/libffmpeg/video_decoder.c:1475 +#: src/libffmpeg/video_decoder.c:1511 msgid "" "You can adjust the amount of post processing applied to MPEG-4 video.\n" "Higher values result in better quality, but need more CPU. Lower values may " @@ -1,13 +1,13 @@ # German xine-lib.po file. -# Copyright (C) 2002-2006 Free Software Foundation, Inc. +# Copyright (C) 2002-2007 Free Software Foundation, Inc. # Jens Gutzeit <jens.gutzeit@web.de>, 2002. # msgid "" msgstr "" -"Project-Id-Version: xine-lib 1.0.0\n" +"Project-Id-Version: xine-lib 1.1.5\n" "Report-Msgid-Bugs-To: xine-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2006-11-29 23:07+0100\n" -"PO-Revision-Date: 2006-10-13 12:55+0200\n" +"POT-Creation-Date: 2007-01-26 18:31+0100\n" +"PO-Revision-Date: 2007-02-13 09:28+0100\n" "Last-Translator: Philipp Hahn <pmhahn@users.sf.net>\n" "Language-Team: German <de@li.org>\n" "MIME-Version: 1.0\n" @@ -110,6 +110,7 @@ msgid "w32codec: decoder failed to start. Is '%s' installed?\n" msgstr "w32codec: Dekoder startete nicht. Ist '%s' installiert?\n" #: src/libw32dll/w32codec.c:1221 +#, c-format msgid "w32codec: (ACM_Decoder) Unappropriate audio format\n" msgstr "w32codec: (ACM_Decoder) Unpassendes Audioformat\n" @@ -119,10 +120,12 @@ msgid "w32codec: (ACM_Decoder) acmStreamOpen error %d\n" msgstr "w32codec: (ACM_Decoder) acmStreamOpen Fehler %d\n" #: src/libw32dll/w32codec.c:1243 +#, c-format msgid "w32codec: Error initializing DirectShow Audio\n" msgstr "w32codec: Fehler beim Initialisieren von DirectShow Audio\n" #: src/libw32dll/w32codec.c:1261 +#, c-format msgid "w32codec: Error initializing DMO Audio\n" msgstr "w32codec: Fehler beim Initialisieren von DMO Audio\n" @@ -407,16 +410,16 @@ msgstr "xine Date Soundausgabe" msgid "xine output plugin for Coreaudio/Mac OS X" msgstr "xine Soundausgabe benutzt Coreaudio/Mac OS X" -#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:919 +#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:920 #, c-format msgid "audio_sun_out: opening audio device %s failed: %s\n" msgstr "audio_sun_out: Öffnen des Audiogeräts %s schlug fehl: %s\n" -#: src/audio_out/audio_sun_out.c:894 +#: src/audio_out/audio_sun_out.c:895 msgid "Sun audio device name" msgstr "Sun Audio-Gerätename" -#: src/audio_out/audio_sun_out.c:895 +#: src/audio_out/audio_sun_out.c:896 msgid "" "Specifies the file name for the Sun audio device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -429,12 +432,12 @@ msgstr "" "sollten sich deshalb sehr sicher sein, daß Ihre Eingabe wirklich das Sun " "Audiogerät bezeichnet." -#: src/audio_out/audio_sun_out.c:937 +#: src/audio_out/audio_sun_out.c:938 #, c-format msgid "audio_sun_out: audio ioctl on device %s failed: %s\n" msgstr "audio_sun_out: Audio ioctl auf Gerät %s schlug fehl: %s\n" -#: src/audio_out/audio_sun_out.c:988 +#: src/audio_out/audio_sun_out.c:989 msgid "xine audio output plugin using sun-compliant audio devices/drivers" msgstr "xine Soundausgabe benutzt SUN-kompatibles Gerät/Treiber" @@ -523,10 +526,12 @@ msgid "unknown error" msgstr "Unbekannter Fehler" #: src/audio_out/audio_directx2_out.c:206 +#, c-format msgid "Unable to create direct sound object." msgstr "Kann DirectSound-Objekt nicht erzeugen." #: src/audio_out/audio_directx2_out.c:212 +#, c-format msgid "Could not set direct sound cooperative level." msgstr "Konnte DirectSound-Kooperationslevel nicht setzen." @@ -535,6 +540,7 @@ msgid "Unable to create secondary direct sound buffer" msgstr "Konnte keinen sekundären DirectSound-Puffer erzeugen" #: src/audio_out/audio_directx2_out.c:310 +#, c-format msgid "Unable to create buffer position events." msgstr "Konnte kein Pufferposition-Ereignis erzeugen." @@ -567,6 +573,7 @@ msgid "Can't set sound volume" msgstr "Konnte Lautstärke nicht setzen" #: src/audio_out/audio_directx2_out.c:432 +#, c-format msgid ": buffer lost, tryig to restore\n" msgstr ": Puffer verloren, versuche wiederherzustellen\n" @@ -579,10 +586,12 @@ msgid "Couldn't unlock direct sound buffer" msgstr "Konnte DirectSound-Puffer nicht freigeben" #: src/audio_out/audio_directx2_out.c:544 +#, c-format msgid "Unable to create primary direct sound buffer." msgstr "Konnte keinen primären DirectSound-Puffer erzeugen." #: src/audio_out/audio_directx2_out.c:637 +#, c-format msgid ": play cursor overran, flushing buffers\n" msgstr ": Wiedergabeposition überrannt, leere Puffer\n" @@ -643,6 +652,7 @@ msgid "xine audio output plugin for win32 using directx" msgstr "xine Soundausgabe benutzt directx für win32" #: src/audio_out/audio_alsa_out.c:355 +#, c-format msgid "audio_alsa_out:Already open...WHY!" msgstr "audio_alsa_out:Bereits geöffnet...WARUM?" @@ -766,6 +776,7 @@ msgid "snd_pcm_open() failed:%d:%s\n" msgstr "snd_pcm_open() schlug fehl:%d:%s\n" #: src/audio_out/audio_alsa_out.c:1428 +#, c-format msgid ">>> Check if another program already uses PCM <<<\n" msgstr ">>> Überprüfen Sie, ob ein anderen Programm bereis PCM benutzt <<<\n" @@ -908,6 +919,7 @@ msgid "xine audio output plugin using pulseaudio sound server" msgstr "xine Soundausgabe benutzt Pulse-Audio Soundserver" #: src/xine-engine/io_helper.c:252 +#, c-format msgid "io_helper: waiting abandoned\n" msgstr "io_helper: Warten aufgegeben\n" @@ -921,14 +933,17 @@ msgid "failed to get status of socket" msgstr "Status des Sockets konnte nicht ermittelt werden" #: src/xine-engine/io_helper.c:388 +#, c-format msgid "io_helper: Permission denied\n" msgstr "io_helper: Zugriff verweigert\n" #: src/xine-engine/io_helper.c:392 +#, c-format msgid "io_helper: File not found\n" msgstr "io_helper: Datei nicht gefunden\n" #: src/xine-engine/io_helper.c:396 +#, c-format msgid "io_helper: Connection Refused\n" msgstr "io_helper: Verbindung verweigert\n" @@ -988,122 +1003,127 @@ msgstr "" "einige Videoausgabetreiber wie XShm davon, deren Bildskalierung nicht " "hardwarebeschleunigt ist, wodurch die CPU-Auslastung drastisch sinkt." -#: src/xine-engine/xine.c:696 src/xine-engine/xine.c:803 -#: src/xine-engine/xine.c:842 src/xine-engine/xine.c:878 -#: src/xine-engine/xine.c:890 src/xine-engine/xine.c:903 -#: src/xine-engine/xine.c:916 src/xine-engine/xine.c:929 -#: src/xine-engine/xine.c:955 src/xine-engine/xine.c:980 -#: src/xine-engine/xine.c:1015 +#: src/xine-engine/xine.c:704 src/xine-engine/xine.c:811 +#: src/xine-engine/xine.c:850 src/xine-engine/xine.c:886 +#: src/xine-engine/xine.c:898 src/xine-engine/xine.c:911 +#: src/xine-engine/xine.c:924 src/xine-engine/xine.c:937 +#: src/xine-engine/xine.c:963 src/xine-engine/xine.c:988 +#: src/xine-engine/xine.c:1023 msgid "xine: error while parsing mrl\n" msgstr "xine: Fehler beim Parsen der MRL\n" -#: src/xine-engine/xine.c:732 +#: src/xine-engine/xine.c:740 #, c-format msgid "xine: found input plugin : %s\n" msgstr "xine: Inputplugin gefunden: %s\n" -#: src/xine-engine/xine.c:750 +#: src/xine-engine/xine.c:758 #, c-format msgid "xine: input plugin cannot open MRL [%s]\n" msgstr "xine: Plugin kann MRL [%s] nicht öffnen\n" -#: src/xine-engine/xine.c:766 +#: src/xine-engine/xine.c:774 #, c-format msgid "xine: cannot find input plugin for MRL [%s]\n" msgstr "xine: Kann kein Plugin für MRL [%s] finden\n" -#: src/xine-engine/xine.c:792 +#: src/xine-engine/xine.c:800 #, c-format msgid "xine: specified demuxer %s failed to start\n" msgstr "xine: Demultiplexer-Plugins %s startete nicht\n" -#: src/xine-engine/xine.c:828 +#: src/xine-engine/xine.c:836 +#, c-format msgid "xine: join rip input plugin\n" msgstr "xine: Join rip Plugin\n" -#: src/xine-engine/xine.c:835 +#: src/xine-engine/xine.c:843 msgid "xine: error opening rip input plugin instance\n" msgstr "xine: Fehler beim Öffnen einer RIP-Plugin-Instanz\n" -#: src/xine-engine/xine.c:866 +#: src/xine-engine/xine.c:874 #, c-format msgid "xine: last_probed demuxer %s failed to start\n" msgstr "xine: Letztes Demultiplexer-Plugins %s startete nicht\n" -#: src/xine-engine/xine.c:895 +#: src/xine-engine/xine.c:903 msgid "ignoring video\n" msgstr "Ignoriere Video\n" -#: src/xine-engine/xine.c:908 +#: src/xine-engine/xine.c:916 msgid "ignoring audio\n" msgstr "Ignoriere Audio\n" -#: src/xine-engine/xine.c:921 +#: src/xine-engine/xine.c:929 msgid "ignoring subpicture\n" msgstr "Ignoriere Untertitel\n" -#: src/xine-engine/xine.c:934 +#: src/xine-engine/xine.c:942 msgid "input cache plugin disabled\n" msgstr "Input-Cache Plugin deaktiviert\n" -#: src/xine-engine/xine.c:1005 +#: src/xine-engine/xine.c:1013 #, c-format msgid "subtitle mrl opened '%s'\n" msgstr "Untertitel-MRL öffnet '%s'\n" -#: src/xine-engine/xine.c:1009 +#: src/xine-engine/xine.c:1017 msgid "xine: error opening subtitle mrl\n" msgstr "xine: Fehler beim Öffnen der Untertitel-MRL\n" -#: src/xine-engine/xine.c:1041 +#: src/xine-engine/xine.c:1049 +#, c-format msgid "xine: error while parsing MRL\n" msgstr "xine: Fehler beim parsen der MRL\n" -#: src/xine-engine/xine.c:1048 +#: src/xine-engine/xine.c:1056 #, c-format msgid "xine: changing option '%s' from MRL isn't permitted\n" msgstr "xine: Das Ändern der Option '%s' per MRL ist verboten\n" -#: src/xine-engine/xine.c:1068 +#: src/xine-engine/xine.c:1076 #, c-format msgid "xine: couldn't find demux for >%s<\n" msgstr "xine: Kann keinen Demultiplexer für >%s< finden\n" -#: src/xine-engine/xine.c:1084 +#: src/xine-engine/xine.c:1092 #, c-format msgid "xine: found demuxer plugin: %s\n" msgstr "xine: Demultiplexer-Plugin gefunden: %s\n" -#: src/xine-engine/xine.c:1104 +#: src/xine-engine/xine.c:1112 +#, c-format msgid "xine: demuxer failed to start\n" msgstr "xine: Demultiplexer-Plugins startete nicht\n" -#: src/xine-engine/xine.c:1167 +#: src/xine-engine/xine.c:1177 +#, c-format msgid "xine_play: no demux available\n" msgstr "xine_play: Kein Demultiplexer vorhanden\n" -#: src/xine-engine/xine.c:1237 +#: src/xine-engine/xine.c:1247 +#, c-format msgid "xine_play: demux failed to start\n" msgstr "xine_play: Demultiplexer startete nicht\n" -#: src/xine-engine/xine.c:1508 +#: src/xine-engine/xine.c:1523 #, c-format msgid "xine: The specified save_dir \"%s\" might be a security risk.\n" msgstr "xine: Das angegebene save_dir '%s' kann ein Sicherheitsproblem sein.\n" -#: src/xine-engine/xine.c:1513 +#: src/xine-engine/xine.c:1528 msgid "The specified save_dir might be a security risk." msgstr "Das angegebene save_dir kann ein Sicherheitsproblem sein." -#: src/xine-engine/xine.c:1539 +#: src/xine-engine/xine.c:1554 msgid "xine: locale not supported by C library\n" msgstr "xine: Locale wird nicht von C-Bibliothek unterstützt\n" -#: src/xine-engine/xine.c:1548 +#: src/xine-engine/xine.c:1563 msgid "media format detection strategy" msgstr "Medienformaterkennungsstrategie" -#: src/xine-engine/xine.c:1549 +#: src/xine-engine/xine.c:1564 msgid "" "xine offers various methods to detect the media format of input to play. The " "individual values are:\n" @@ -1135,11 +1155,11 @@ msgstr "" "extension\n" "Nur anhand der Dateiendung erkennen.\n" -#: src/xine-engine/xine.c:1567 +#: src/xine-engine/xine.c:1582 msgid "directory for saving streams" msgstr "Pfad zum Sichen von Datenströmen" -#: src/xine-engine/xine.c:1568 +#: src/xine-engine/xine.c:1583 msgid "" "When using the stream save feature, files will be written only into this " "directory.\n" @@ -1154,11 +1174,11 @@ msgstr "" "benutzt werden kann, um Dateien mit beliebigen Inhalt zu füllen. Stellen Sie " "sicher, daß das Verzeichnis robust ist für beliebige Inhalte in jeder Datei." -#: src/xine-engine/xine.c:1579 +#: src/xine-engine/xine.c:1594 msgid "allow implicit changes to the configuration (e.g. by MRL)" msgstr "Erlaube implizierte Änderungen an Konfiguration (z.B. durch MRL)" -#: src/xine-engine/xine.c:1580 +#: src/xine-engine/xine.c:1595 msgid "" "If enabled, you allow xine to change your configuration without explicit " "actions from your side. For example configuration changes demanded by MRLs " @@ -1174,11 +1194,11 @@ msgstr "" "unvertrauenswürdigen Stellen empfangen kann. Falls diese willkürlichen " "Änderungen erlaubt sind, kann dies zu einem verkonfigurierten xine führen." -#: src/xine-engine/xine.c:1594 +#: src/xine-engine/xine.c:1609 msgid "Timeout for network stream reading (in seconds)" msgstr "Zeitüberschreitung für Netzwerkdatenströme (in Sekunden)" -#: src/xine-engine/xine.c:1595 +#: src/xine-engine/xine.c:1610 msgid "" "Specifies the timeout when reading from network streams, in seconds. Too low " "values might stop streaming when the source is slow or the bandwidth is " @@ -1189,15 +1209,15 @@ msgstr "" "langsam ist oder die Bandbreite erschöpft ist. Zu hohe Werte können xine " "einfrieren lassen, wenn die Verbindung abbricht." -#: src/xine-engine/xine.c:1946 +#: src/xine-engine/xine.c:1962 msgid "messages" msgstr "Nachrichten" -#: src/xine-engine/xine.c:1947 +#: src/xine-engine/xine.c:1963 msgid "plugin" msgstr "Plugin" -#: src/xine-engine/xine.c:1948 +#: src/xine-engine/xine.c:1964 msgid "trace" msgstr "Programmverfolgung" @@ -1207,20 +1227,23 @@ msgid "input_rip: reading of saved data failed: %s\n" msgstr "input_rip: Fehlschlag beim Lesen der gespeicherten Daten: %s\n" #: src/xine-engine/input_rip.c:154 +#, c-format msgid "input_rip: reading by input plugin failed\n" msgstr "input_rip: Lesefehler im input_rip-Plugin\n" #: src/xine-engine/input_rip.c:162 src/xine-engine/input_rip.c:291 -#: src/xine-engine/input_rip.c:643 +#: src/xine-engine/input_rip.c:657 #, c-format msgid "input_rip: error writing to file %<PRIdMAX> bytes: %s\n" msgstr "input_rip: Schreibfehler in Datei bei %<PRIdMAX> Bytes: %s\n" #: src/xine-engine/input_rip.c:183 +#, c-format msgid "input_rip: open() function should never be called\n" msgstr "input_rip: open()-Funktion sollte niemals aufgerufen werden\n" #: src/xine-engine/input_rip.c:314 src/xine-engine/input_rip.c:419 +#, c-format msgid "input_rip: seeking failed\n" msgstr "input_rip: Positionierung fehlgeschlagen\n" @@ -1234,11 +1257,13 @@ msgstr "input_rip: Positionierung fehlgeschlagen: %s\n" msgid "input_rip: %<PRIdMAX> bytes dropped\n" msgstr "input_rip: %<PRIdMAX> Bytes verworfen\n" -#: src/xine-engine/input_rip.c:548 +#: src/xine-engine/input_rip.c:562 +#, c-format msgid "input_rip: input plugin not defined!\n" msgstr "input_rip: Input-Plugin nicht definiert!\n" -#: src/xine-engine/input_rip.c:554 +#: src/xine-engine/input_rip.c:568 +#, c-format msgid "" "input_rip: target directory wasn't specified, please fill out the option " "'media.capture.save_dir'\n" @@ -1246,7 +1271,7 @@ msgstr "" "input_rip: Zielverzeichnis nicht angegeben, bitte die Option 'media.capture." "save_dir' angeben\n" -#: src/xine-engine/input_rip.c:556 +#: src/xine-engine/input_rip.c:570 msgid "" "The stream save feature is disabled until you set media.capture.save_dir in " "the configuration." @@ -1254,11 +1279,12 @@ msgstr "" "Das Abspeichern von Datenströmen ist solange deaktiviert, bis media.capture." "save_dir in der Konfiguration gesetzt ist." -#: src/xine-engine/input_rip.c:563 +#: src/xine-engine/input_rip.c:577 +#, c-format msgid "input_rip: ripping/caching of this source is not permitted!\n" msgstr "input_rip: Rippen/Zwischenspeichern dieser Quelle nicht erlaubt!\n" -#: src/xine-engine/input_rip.c:565 +#: src/xine-engine/input_rip.c:579 msgid "" "xine is not allowed to save from this source. (possibly copyrighted " "material?)" @@ -1266,11 +1292,12 @@ msgstr "" "xine darf diese Quelle nicht speichern. (Möglicherweise kopiergeschütztes " "Material?)" -#: src/xine-engine/input_rip.c:571 +#: src/xine-engine/input_rip.c:585 +#, c-format msgid "input_rip: file name not given!\n" msgstr "input_rip: Dateiname nicht angegeben!\n" -#: src/xine-engine/input_rip.c:613 +#: src/xine-engine/input_rip.c:627 #, c-format msgid "input_rip: error opening file %s: %s\n" msgstr "input_ipd: Fehler beim Öffnen der Datei %s: %s\n" @@ -1319,59 +1346,61 @@ msgstr "" "aber die CPU-Belastung geringer." #: src/xine-engine/input_cache.c:167 +#, c-format msgid ": open() function should never be called\n" msgstr ": open()-Funktion sollte niemals aufgerufen werden\n" #: src/xine-engine/input_cache.c:349 +#, c-format msgid ": input plugin not defined!\n" msgstr ": Input-Plugin nicht definiert!\n" -#: src/xine-engine/osd.c:739 +#: src/xine-engine/osd.c:745 #, c-format msgid "font '%s-%d' already loaded, weird.\n" msgstr "Zeichensatz '%s-%d' bereits geladen, seltsam.\n" -#: src/xine-engine/osd.c:751 +#: src/xine-engine/osd.c:757 #, c-format msgid "font '%s' loading failed (%d < %d)\n" msgstr "Laden des Zeichensatzs '%s' schlug fehl (%d <%d)\n" -#: src/xine-engine/osd.c:761 +#: src/xine-engine/osd.c:767 #, c-format msgid "wrong version for font '%s'. expected %d found %d.\n" msgstr "Falsche Version von Zeichensatz '%s'. Erwartet %d gefunden %d.\n" -#: src/xine-engine/osd.c:828 +#: src/xine-engine/osd.c:834 msgid "osd: cannot initialize ft2 library\n" msgstr "osd: Kann ft2-Bibliothek nicht initialisieren\n" -#: src/xine-engine/osd.c:851 +#: src/xine-engine/osd.c:857 #, c-format msgid "osd: error matching font %s with FontConfig" msgstr "osd: Fehler beim Suchen des Zeichensatzes %s mit FontConfig" -#: src/xine-engine/osd.c:865 +#: src/xine-engine/osd.c:871 #, c-format msgid "osd: error loading font %s with FontConfig" msgstr "osd: Fehler beim Laden des Zeichensatzes %s mit FontConfig" -#: src/xine-engine/osd.c:868 +#: src/xine-engine/osd.c:874 #, c-format msgid "osd: error looking up font %s with FontConfig" msgstr "osd: Fehler beim Zusammenstellen des Zeichensatzes %s mit FontConfig" -#: src/xine-engine/osd.c:889 +#: src/xine-engine/osd.c:895 #, c-format msgid "osd: error loading font %s with ft2\n" msgstr "osd: Fehler beim Laden des Zeichensatzes %s mit ft2\n" -#: src/xine-engine/osd.c:899 +#: src/xine-engine/osd.c:905 msgid "osd: error setting font size (no scalable font?)\n" msgstr "" "osd: Fehler beim Setzen der Zeichensatzgröße (kein skalierbarer " "Zeichensatz?)\n" -#: src/xine-engine/osd.c:1015 +#: src/xine-engine/osd.c:1021 #, c-format msgid "" "osd: unknown sequence starting with byte 0x%02X in encoding \"%s\", " @@ -1380,43 +1409,43 @@ msgstr "" "osd: Unbekannte Sequenz startet mit Byte 0x%02X in Kodierung \"%s\", " "überspringe\n" -#: src/xine-engine/osd.c:1071 +#: src/xine-engine/osd.c:1077 msgid "osd: can't find out current locale character set\n" msgstr "osd: Kann locale-Zeichensatz nicht erkennen\n" -#: src/xine-engine/osd.c:1081 +#: src/xine-engine/osd.c:1087 #, c-format msgid "osd: unsupported conversion %s -> %s, no conversion performed\n" msgstr "" "osd: Nichtunterstützte Konvertierung %s -> %s, keine Konvertierung " "durchgeführt\n" -#: src/xine-engine/osd.c:1136 src/xine-engine/osd.c:1304 +#: src/xine-engine/osd.c:1142 src/xine-engine/osd.c:1310 msgid "osd: font isn't defined\n" msgstr "osd: Zeichensatz nicht definiert\n" -#: src/xine-engine/osd.c:1175 +#: src/xine-engine/osd.c:1181 msgid "osd: error loading glyph\n" msgstr "osd: Fehler beim Laden von Bildzeichen\n" -#: src/xine-engine/osd.c:1181 +#: src/xine-engine/osd.c:1187 msgid "osd: error in rendering glyph\n" msgstr "osd: Fehler beim Darstellen von Bildzeichen\n" -#: src/xine-engine/osd.c:1341 +#: src/xine-engine/osd.c:1347 #, c-format msgid "osd: error loading glyph %i\n" msgstr "osd: Fehler beim Laden des Bildzeichens %i\n" -#: src/xine-engine/osd.c:1348 +#: src/xine-engine/osd.c:1354 msgid "osd: error in rendering\n" msgstr "osd: Fehler beim Darstellen\n" -#: src/xine-engine/osd.c:1596 +#: src/xine-engine/osd.c:1602 msgid "palette (foreground-border-background) to use for subtitles and OSD" msgstr "Farbpalette (Vordergrund-Rand-Hintergrund) für Untertitel und OSD" -#: src/xine-engine/osd.c:1597 +#: src/xine-engine/osd.c:1603 msgid "" "The palette for on-screen-display and some subtitle formats that do not " "specify any colouring themselves. The palettes are listed in the form: " @@ -1426,38 +1455,39 @@ msgstr "" "Färbung spezifizieren. Die Paletten sind in der Form Vordergrund-Rand-" "Hintergrund aufgelistst." -#: src/xine-engine/configfile.c:896 +#: src/xine-engine/configfile.c:924 +#, c-format msgid "The current config file has been modified by a newer version of xine." msgstr "" "Die Konfigurationsdatei wurde von einer neueren Version von xine modifiziert." -#: src/xine-engine/configfile.c:1001 +#: src/xine-engine/configfile.c:1029 #, c-format msgid "configfile: WARNING: backing up configfile to %s failed\n" msgstr "" "configfile: WARNUNG: Sichern der Konfigurationsdatei nach %s schlug fehl\n" -#: src/xine-engine/configfile.c:1002 +#: src/xine-engine/configfile.c:1030 msgid "configfile: WARNING: your configuration will not be saved\n" msgstr "configfile: WARNUNG: Ihre Konfigurationsdatei wird nicht gesichert\n" -#: src/xine-engine/configfile.c:1101 +#: src/xine-engine/configfile.c:1129 #, c-format msgid "configfile: WARNING: writing configuration to %s failed\n" msgstr "configfile: WARNUNG: Schreiben der Konfiguration nach %s schlug fehl\n" -#: src/xine-engine/configfile.c:1102 +#: src/xine-engine/configfile.c:1130 #, c-format msgid "configfile: WARNING: removing possibly broken config file %s\n" msgstr "" "configfile: WARNUNG: Entferne möglicherweise kaputte Konfigurationsdatei %s\n" -#: src/xine-engine/configfile.c:1103 +#: src/xine-engine/configfile.c:1131 #, c-format msgid "configfile: WARNING: you should check the backup file %s\n" msgstr "configfile: WARNUNG: Überprüfen Sie die Sicherheitskopie %s\n" -#: src/xine-engine/configfile.c:1237 +#: src/xine-engine/configfile.c:1266 #, c-format msgid "configfile: entry '%s' mustn't be modified from MRL\n" msgstr "configfile: Eintrag '%s' darf nicht per MRL geändert werden\n" @@ -1476,11 +1506,24 @@ msgstr "" "video_out: Verwerfe Bild mit pts %<PRId64>, weil es zu alt ist (Unterschied: " "%<PRId64>).\n" -#: src/xine-engine/video_out.c:1818 +#: src/xine-engine/video_out.c:1790 +msgid "default number of video frames" +msgstr "Standardanzahl von Videobildern" + +#: src/xine-engine/video_out.c:1791 +msgid "" +"The default number of video frames to request from xine video out driver. " +"Some drivers will override this setting with their own values." +msgstr "" +"Die Standardanzahl von Videobildern, die vom xine Videoausgabetreiber " +"angefordert werden. Einige Treiber überschreiben diese Einstellung mit ihren " +"eigenen Werten." + +#: src/xine-engine/video_out.c:1830 msgid "percentage of skipped frames to tolerate" msgstr "Erlaubter Prozentsatz für übersprungene Frames" -#: src/xine-engine/video_out.c:1819 +#: src/xine-engine/video_out.c:1831 msgid "" "When more than this percentage of frames are not shown, because they were " "not decoded in time, xine sends a notification." @@ -1488,11 +1531,11 @@ msgstr "" "xine zeigt eine Meldung an, wenn mehr Frames als dieser Prozentsatz nicht " "angezeigt werden, weil sie nicht rechtzeitig dekodiert werden konnten." -#: src/xine-engine/video_out.c:1824 +#: src/xine-engine/video_out.c:1836 msgid "percentage of discarded frames to tolerate" msgstr "Erlaubter Prozentsatz für verworfene Frames" -#: src/xine-engine/video_out.c:1825 +#: src/xine-engine/video_out.c:1837 msgid "" "When more than this percentage of frames are not shown, because they were " "not scheduled for display in time, xine sends a notification." @@ -1500,27 +1543,27 @@ msgstr "" "xine zeigt eine Meldung an, wenn mehr Frames als dieser Prozentsatz nicht " "angezeigt werden, weil sie nicht rechtzeitig dargestellt werden konnten." -#: src/xine-engine/video_out.c:1859 +#: src/xine-engine/video_out.c:1871 msgid "video_out: sorry, this should not happen. please restart xine.\n" msgstr "" "video_out : Ups, das sollte eigentlich nicht passieren, bitte xine " "neustarten.\n" -#: src/xine-engine/video_decoder.c:374 +#: src/xine-engine/video_decoder.c:380 #, c-format msgid "video_decoder: no plugin available to handle '%s'\n" msgstr "video_decoder: Kein Plugin gefunden zur Behandlung von '%s'\n" -#: src/xine-engine/video_decoder.c:453 +#: src/xine-engine/video_decoder.c:459 #, c-format msgid "video_decoder: error, unknown buffer type: %08x\n" msgstr "video_decoder: Fehler, unbekannter Puffertyp: %08x\n" -#: src/xine-engine/video_decoder.c:489 +#: src/xine-engine/video_decoder.c:495 msgid "number of video buffers" msgstr "Anzahl der Videopuffer" -#: src/xine-engine/video_decoder.c:490 +#: src/xine-engine/video_decoder.c:496 msgid "" "The number of video buffers (each is 8k in size) xine uses in its internal " "queue. Higher values mean smoother playback for unreliable inputs, but also " @@ -1543,86 +1586,86 @@ msgstr "" "info_helper: Nichtunterstützte Konvertierung %s -> UTF-8, keine " "Konvertierung durchgeführt\n" -#: src/xine-engine/xine_interface.c:918 +#: src/xine-engine/xine_interface.c:934 msgid "Warning:" msgstr "Warnung:" -#: src/xine-engine/xine_interface.c:919 +#: src/xine-engine/xine_interface.c:935 msgid "Unknown host:" msgstr "Unbekannter Rechner:" -#: src/xine-engine/xine_interface.c:920 +#: src/xine-engine/xine_interface.c:936 msgid "Unknown device:" msgstr "Unbekanntes Gerät:" -#: src/xine-engine/xine_interface.c:921 +#: src/xine-engine/xine_interface.c:937 msgid "Network unreachable" msgstr "Netzwerk unerreichbar" -#: src/xine-engine/xine_interface.c:922 +#: src/xine-engine/xine_interface.c:938 msgid "Connection refused:" msgstr "Verbindung verweigert:" -#: src/xine-engine/xine_interface.c:923 +#: src/xine-engine/xine_interface.c:939 msgid "File not found:" msgstr "Datei nicht gefunden:" -#: src/xine-engine/xine_interface.c:924 +#: src/xine-engine/xine_interface.c:940 msgid "Read error from:" msgstr "Lesefehler von:" -#: src/xine-engine/xine_interface.c:925 +#: src/xine-engine/xine_interface.c:941 msgid "Error loading library:" msgstr "Fehler beim Laden der Bibliothek:" -#: src/xine-engine/xine_interface.c:926 +#: src/xine-engine/xine_interface.c:942 msgid "Encrypted media stream detected" msgstr "VerschRlüsselter Mediendatenstrom erkannt" -#: src/xine-engine/xine_interface.c:927 +#: src/xine-engine/xine_interface.c:943 msgid "Security message:" msgstr "Sicherheitsmeldung:" -#: src/xine-engine/xine_interface.c:928 +#: src/xine-engine/xine_interface.c:944 msgid "Audio device unavailable" msgstr "Audiogerät nicht verfügbar" -#: src/xine-engine/xine_interface.c:929 +#: src/xine-engine/xine_interface.c:945 msgid "Permission error" msgstr "Berechtigungsfehler" -#: src/xine-engine/xine_interface.c:930 +#: src/xine-engine/xine_interface.c:946 msgid "File is empty:" msgstr "Datei ist leer:" -#: src/xine-engine/audio_out.c:1074 +#: src/xine-engine/audio_out.c:1072 msgid "" "audio_out: delay calculation impossible with an unavailable audio device\n" msgstr "" "audio_out: Berechnung der Verzögerung unmöglich mit einem nicht verfügbaren " "Audiogerät\n" -#: src/xine-engine/audio_out.c:1216 +#: src/xine-engine/audio_out.c:1214 msgid "write to sound card failed. Was a USB device unplugged ?\n" msgstr "Schreiben an Soundkarte schlug fehl. Wurde ein USB-Gerät entfernt?\n" -#: src/xine-engine/audio_out.c:1369 +#: src/xine-engine/audio_out.c:1367 msgid "8 bits not supported by driver, converting to 16 bits.\n" msgstr "Keine Treiberunterstützung für 8 Bit, Konvertierung zu 16 Bit.\n" -#: src/xine-engine/audio_out.c:1377 +#: src/xine-engine/audio_out.c:1375 msgid "mono not supported by driver, converting to stereo.\n" msgstr "Keine Treiberunterstützung für Mono, Konvertierung zu Stereo.\n" -#: src/xine-engine/audio_out.c:1383 +#: src/xine-engine/audio_out.c:1381 msgid "stereo not supported by driver, converting to mono.\n" msgstr "Keine Treiberunterstützung für Stereo, Konvertierung zu Mono.\n" -#: src/xine-engine/audio_out.c:2028 +#: src/xine-engine/audio_out.c:2033 msgid "method to sync audio and video" msgstr "Methode für Audio/Videosynchronisation" -#: src/xine-engine/audio_out.c:2029 +#: src/xine-engine/audio_out.c:2034 msgid "" "When playing audio and video, there are at least two clocks involved: The " "system clock, to which video frames are synchronized and the clock in your " @@ -1665,11 +1708,11 @@ msgstr "" "funktioniert nicht für digitales Passthrough, wo die Audiodaten in digitaler " "Form direkt an einen externen Dekoder geleitet werden." -#: src/xine-engine/audio_out.c:2057 +#: src/xine-engine/audio_out.c:2062 msgid "enable resampling" msgstr "Resampling benutzen" -#: src/xine-engine/audio_out.c:2058 +#: src/xine-engine/audio_out.c:2063 msgid "" "When the sample rate of the decoded audio does not match the capabilities of " "your sound hardware, an adaptation called \"resampling\" is required. Here " @@ -1681,11 +1724,11 @@ msgstr "" "Diese Adaption kann dauerhaft aktiviert, deaktiviert oder bei Bedarf " "automatisch aktiviert werden." -#: src/xine-engine/audio_out.c:2065 +#: src/xine-engine/audio_out.c:2070 msgid "always resample to this rate (0 to disable)" msgstr "Wenn !=0, immer auf diese Rate anpassen" -#: src/xine-engine/audio_out.c:2066 +#: src/xine-engine/audio_out.c:2071 msgid "" "Some audio drivers do not correctly announce the capabilities of the audio " "hardware. By setting a value other than zero here, you can force the audio " @@ -1695,11 +1738,11 @@ msgstr "" "Durch Eingabe eines Wertes ungleich Null wird erzwungen, daß " "Audiodatenströme immer auf die angegebene Rate resampled werden." -#: src/xine-engine/audio_out.c:2075 +#: src/xine-engine/audio_out.c:2080 msgid "offset for digital passthrough" msgstr "Versatz für digitales Passthrough" -#: src/xine-engine/audio_out.c:2076 +#: src/xine-engine/audio_out.c:2081 msgid "" "If you use an external surround decoder and audio is ahead or behind video, " "you can enter a fixed offset here to compensate.\n" @@ -1711,11 +1754,11 @@ msgstr "" "Die Einheit dieses Wertes ist ein \"PTS-Tick\", was dem 90.000stel einer " "Sekunde entspricht." -#: src/xine-engine/audio_out.c:2085 +#: src/xine-engine/audio_out.c:2090 msgid "play audio even on slow/fast speeds" msgstr "Audiowiedergabe während langsamer/schneller Geschwindigkeit" -#: src/xine-engine/audio_out.c:2086 +#: src/xine-engine/audio_out.c:2091 msgid "" "If you enable this option, the audio will be heard even when playback speed " "is different than 1X. Of course, it will sound distorted (lower/higher " @@ -1728,30 +1771,31 @@ msgstr "" "erhalten wollen, versuchen sie stattdessen das 'stretch' Audio-Wiedergabe-" "Plugin." -#: src/xine-engine/audio_out.c:2157 +#: src/xine-engine/audio_out.c:2162 msgid "startup audio volume" msgstr "Startlautstärke" -#: src/xine-engine/audio_out.c:2158 +#: src/xine-engine/audio_out.c:2163 msgid "The overall audio volume set at xine startup." msgstr "Gesamtlautstärke beim Starten von xine." -#: src/xine-engine/audio_out.c:2161 +#: src/xine-engine/audio_out.c:2166 msgid "restore volume level at startup" msgstr "Lautstärke beim Starten wiederherstellen" -#: src/xine-engine/audio_out.c:2162 +#: src/xine-engine/audio_out.c:2167 msgid "If disabled, xine will not modify any mixer settings at startup." msgstr "" "Wenn nicht angewählte, lässt xine die Lautstärke beim Starten unverändert." -#: src/xine-engine/audio_out.c:2192 +#: src/xine-engine/audio_out.c:2197 msgid "audio_out: sorry, this should not happen. please restart xine.\n" msgstr "" "audio_out: Ups, das sollte eigentlich nicht passieren, bitte xine " "neustarten.\n" #: src/xine-engine/load_plugins.c:212 +#, c-format msgid "map_decoder_list: no space for decoder, skipped.\n" msgstr "map_decoder_list: Kein Platz für Dekoder, übersprungen.\n" @@ -1802,6 +1846,7 @@ msgid "load_plugins: plugin %s found\n" msgstr "load_plugins: Plugin %s gefunden\n" #: src/xine-engine/load_plugins.c:499 +#, c-format msgid "load_plugins: static plugin found\n" msgstr "load_plugins: statisches Plugin gefunden\n" @@ -1811,6 +1856,7 @@ msgid "load_plugins: plugin limit reached, %s could not be loaded\n" msgstr "load_plugins: Plugingrenze erreicht, %s konnte nicht geladen werden\n" #: src/xine-engine/load_plugins.c:509 +#, c-format msgid "load_plugins: plugin limit reached, static plugin could not be loaded\n" msgstr "" "load_plugins: Plugingrenze erreicht, statisches Plugin konnte nicht geladen " @@ -1984,11 +2030,11 @@ msgid "" "xine video output plugin using the SyncFB module for Matrox G200/G400 cards" msgstr "xine Videoausgabe benutzt SyncFB-Modul für Matrox G200/G400-Karten" -#: src/video_out/video_out_syncfb.c:1077 +#: src/video_out/video_out_syncfb.c:1078 msgid "SyncFB device name" msgstr "SyncFB Gerätename" -#: src/video_out/video_out_syncfb.c:1078 +#: src/video_out/video_out_syncfb.c:1079 msgid "" "Specifies the file name for the SyncFB (TeleTux) device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -2006,13 +2052,13 @@ msgid "xine video output plugin using the Libstk Surface Set-top Toolkit" msgstr "xine Videoausgabe benutzt LibStk Surface Set-top Toolkit" #: src/video_out/video_out_xvmc.c:1446 src/video_out/video_out_pgx64.c:1464 -#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1436 +#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1437 msgid "video overlay colour key" msgstr "Farbschlüssel für Overlay" #: src/video_out/video_out_xvmc.c:1447 src/video_out/video_out_xxmc.c:2431 #: src/video_out/video_out_vidix.c:1159 src/video_out/video_out_vidix.c:1166 -#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1437 +#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1438 msgid "" "The colour key is used to tell the graphics card where to overlay the video " "image. Try different values, if you experience windows becoming transparent." @@ -2022,23 +2068,23 @@ msgstr "" "Fenster durchscheinend werden." #: src/video_out/video_out_xvmc.c:1455 src/video_out/video_out_xxmc.c:2439 -#: src/video_out/video_out_xv.c:1445 +#: src/video_out/video_out_xv.c:1446 msgid "autopaint colour key" msgstr "automatischer Farbschlüssel" #: src/video_out/video_out_xvmc.c:1456 src/video_out/video_out_xxmc.c:2440 -#: src/video_out/video_out_xv.c:1446 +#: src/video_out/video_out_xv.c:1447 msgid "Make Xv autopaint its colorkey." msgstr "Veranlasst Xv automatisch den Farbschlüssel zu zeichnen." #: src/video_out/video_out_xvmc.c:1461 src/video_out/video_out_xxmc.c:2463 -#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1469 +#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1470 #: src/video_out/video_out_opengl.c:1918 msgid "enable double buffering" msgstr "Doppelpufferung benutzen" #: src/video_out/video_out_xvmc.c:1462 src/video_out/video_out_xxmc.c:2464 -#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1470 +#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1471 msgid "" "Double buffering will synchronize the update of the video image to the " "repainting of the entire screen (\"vertical retrace\"). This eliminates " @@ -2048,11 +2094,11 @@ msgstr "" "Darstellung des gesamten Bildschirms (\"Strahlenrücklauf\"). Dies verhindert " "Flackern und Fransenbildung, benötigt aber mehr Grafikspeicher." -#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1537 +#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1538 msgid "deinterlace method (deprecated)" msgstr "Deinterlace-Methode (veraltet)" -#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1538 +#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1539 msgid "" "This config setting is deprecated. You should use the new deinterlacing post " "processing settings instead.\n" @@ -2315,11 +2361,11 @@ msgstr "" "video_out_xxmc: Benutze Xv-Port %ld von Adapter %s for Hardware-" "Farbraumtransformation und Skalierung.\n" -#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1453 +#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1454 msgid "bilinear scaling mode" msgstr "Bilinearer Skalierungsmodus" -#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1454 +#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1455 msgid "" "Selects the bilinear scaling mode for Permedia cards. The individual values " "are:\n" @@ -2353,11 +2399,11 @@ msgstr "video_out_xxmc: Adapter unterstützt YV12 Format.\n" msgid "video_out_xxmc: this adaptor supports the yuy2 format.\n" msgstr "video_out_xxmc: Adapter unterstützt YUY2 Format.\n" -#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1530 +#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1531 msgid "pitch alignment workaround" msgstr "pitch alignment Abhilfe" -#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1531 +#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1532 msgid "Some buggy video drivers need a workaround to function properly." msgstr "Einige fehlerhafte Videotreiber benötigen dies zur korrekten Funktion." @@ -2416,7 +2462,7 @@ msgstr "" "alterniere zwischen oberer und unterer Hälfte bei doppelter " "Bildwiederholrate.\n" -#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1611 +#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1612 msgid "xine video output plugin using the MIT X video extension" msgstr "xine Videoausgabe benutzt 'MIX XVideo' Erweiterung" @@ -2569,11 +2615,11 @@ msgstr "" "video_out_xv: X11-Fehler bei Shared-Memory-XImage-Erstellung\n" "video_out_xv: => MIT-Shared-Memory-Erweiterung wird nicht genutzt.\n" -#: src/video_out/video_out_xv.c:1282 +#: src/video_out/video_out_xv.c:1283 msgid "video_out_xv: Xv extension not present.\n" msgstr "video_out_xv: Xv-Erweiterung nicht vorhanden.\n" -#: src/video_out/video_out_xv.c:1319 +#: src/video_out/video_out_xv.c:1320 msgid "" "video_out_xv: Xv extension is present but I couldn't find a usable yuv12 " "port.\n" @@ -2583,7 +2629,7 @@ msgstr "" "YUV12-Port gefunden.\n" " Unterstützt die Grafikhardware evtl. kein Xv?!\n" -#: src/video_out/video_out_xv.c:1328 +#: src/video_out/video_out_xv.c:1329 #, c-format msgid "" "video_out_xv: using Xv port %ld from adaptor %s for hardware colorspace " @@ -2592,11 +2638,11 @@ msgstr "" "video_out_xv: Benutze Xv-Port %ld von Adapter %s for Hardware-" "Farbraumtransformation und Skalierung.\n" -#: src/video_out/video_out_xv.c:1503 +#: src/video_out/video_out_xv.c:1504 msgid "video_out_xv: this adaptor supports the yv12 format.\n" msgstr "video_out_xv: Adapter unterstützt YV12 Format.\n" -#: src/video_out/video_out_xv.c:1508 +#: src/video_out/video_out_xv.c:1509 msgid "video_out_xv: this adaptor supports the yuy2 format.\n" msgstr "video_out_xv: Adapter unterstützt YUY2 Format.\n" @@ -2899,45 +2945,45 @@ msgstr "" "Für einen Bildschirm im Halbzeilenverfahren, erlaubt die Kontrolle der " "Feldpriorität (\"none\"=deaktiviert)." -#: src/video_out/video_out_directfb.c:1509 +#: src/video_out/video_out_directfb.c:1516 msgid "video_out_directfb: using hardware subpicture acceleration.\n" msgstr "video_out_directfb: Benutzt Hardwarebeschleunigung für Untertitel.\n" -#: src/video_out/video_out_directfb.c:1523 +#: src/video_out/video_out_directfb.c:1530 msgid "video_out_directfb: layer supports video output.\n" msgstr "video_out_directfb: Ebene unterstützt Videoausgabe.\n" -#: src/video_out/video_out_directfb.c:1532 +#: src/video_out/video_out_directfb.c:1539 msgid "video_out_directfb: layer doesn't support YV12!\n" msgstr "video_out_directfb: Ebene unterstützt kein YV12!\n" -#: src/video_out/video_out_directfb.c:1539 +#: src/video_out/video_out_directfb.c:1546 msgid "video_out_directfb: layer doesn't support YUY2!\n" msgstr "video_out_directfb: Ebene unterstützt kein YUT2!\n" -#: src/video_out/video_out_directfb.c:1550 +#: src/video_out/video_out_directfb.c:1557 msgid "" "video_out_directfb:need at least DirectFB 0.9.25 to play on this layer!\n" msgstr "" "video_out_directfb: Benötige mindestens DirectFB 0.9.25 zur Wiedergabe auf " "dieser Ebene!\n" -#: src/video_out/video_out_directfb.c:1585 +#: src/video_out/video_out_directfb.c:1592 #, c-format msgid "video_out_directfb: layer doesn't support buffermode %d!\n" msgstr "video_out_directfb: Ebene unterstützt keinen Buffermode %d!\n" -#: src/video_out/video_out_directfb.c:1591 +#: src/video_out/video_out_directfb.c:1598 #, c-format msgid "video_out_directfb: layer doesn't support options 0x%08x!\n" msgstr "video_out_directfb: Ebene unterstützt keine Option 0x%08x!\n" -#: src/video_out/video_out_directfb.c:1685 +#: src/video_out/video_out_directfb.c:1692 msgid "video_out_directfb: using hardware accelerated image scaling.\n" msgstr "" "video_out_directfb: Benutzt Hardwarebeschleunigung für Bildskalierung.\n" -#: src/video_out/video_out_directfb.c:1697 +#: src/video_out/video_out_directfb.c:1704 msgid "" "video_out_directfb: image scaling with deinterlacing is hardware " "accelerated.\n" @@ -2945,29 +2991,29 @@ msgstr "" "video_out_directfb: Bildskalierung mit deinterlating ist " "hardwarebeschleunigt.\n" -#: src/video_out/video_out_directfb.c:1775 +#: src/video_out/video_out_directfb.c:1782 msgid "video layer id (auto: -1)" msgstr "Videoebenen-Id (automatisch: -1)" -#: src/video_out/video_out_directfb.c:1776 +#: src/video_out/video_out_directfb.c:1783 msgid "Select the video output layer by its id." msgstr "Wählt die Ausgabeebene für videos bei Id." -#: src/video_out/video_out_directfb.c:1797 -#: src/video_out/video_out_directfb.c:2006 +#: src/video_out/video_out_directfb.c:1804 +#: src/video_out/video_out_directfb.c:2013 #, c-format msgid "video_out_directfb: using display layer #%d.\n" msgstr "video_out_directfb: Benutze Anzeigenebene #%d.\n" -#: src/video_out/video_out_directfb.c:1881 +#: src/video_out/video_out_directfb.c:1888 msgid "xine video output plugin using DirectFB." msgstr "xine Videoausgabe benutzt DirectFB" -#: src/video_out/video_out_directfb.c:1999 +#: src/video_out/video_out_directfb.c:2006 msgid "video_out_directfb: no usable display layer was found!\n" msgstr "video_out_directfb: Keine benutzbare Anzeigenebene gefunden!\n" -#: src/video_out/video_out_directfb.c:2088 +#: src/video_out/video_out_directfb.c:2095 msgid "xine video output plugin using DirectFB under XDirectFB." msgstr "xine Videoausgabe benutzt DirectFB unter XDirectFB" @@ -2986,20 +3032,20 @@ msgstr "video_out_pgx32: Fehler: ioctl schlug fehl, fehlerhaftes Gerät (%s)\n" msgid "video_out_pgx32: Error: '%s' is not a pgx32 framebuffer device\n" msgstr "video_out_pgx32: Fehler: '%s' ist kein pgx32 Framebuffer Gerät\n" -#: src/libmusepack/xine_decoder.c:237 +#: src/libmusepack/xine_decoder.c:241 #, c-format msgid "libmusepack: mpc_streaminfo_read failed: %d\n" msgstr "libmusepack: mpc_streaminfo_read schlug fehl: %d\n" -#: src/libmusepack/xine_decoder.c:311 +#: src/libmusepack/xine_decoder.c:315 msgid "libmusepack: data after last frame ignored\n" msgstr "libmusepack: Daten nach letzem Bild ignoriert\n" -#: src/libmusepack/xine_decoder.c:322 +#: src/libmusepack/xine_decoder.c:326 msgid "libmusepack: mpc_decoder_initialise failed\n" msgstr "libmusepack: mpc_decoder_initialise schlug fehl\n" -#: src/libmusepack/xine_decoder.c:342 src/libmusepack/xine_decoder.c:357 +#: src/libmusepack/xine_decoder.c:346 src/libmusepack/xine_decoder.c:361 #, c-format msgid "libmusepack: mpc_decoder_decode failed: %d\n" msgstr "libmusepack: mpc_decoder_decode schlug fehl: %d\n" @@ -3069,15 +3115,15 @@ msgstr "Vertikaler Versatz für Untertitel (Relativ zu Fenstergröße)" msgid "encoding of subtitles" msgstr "Zeichenkodierung für Untertitel" -#: src/input/vcd/vcdio.c:211 +#: src/input/vcd/vcdio.c:223 msgid "SEEK_CUR not implemented for non-zero offset" msgstr "SEEK_CUR nicht implementiert für Versatz != 0" -#: src/input/vcd/vcdio.c:239 +#: src/input/vcd/vcdio.c:251 msgid "SEEK_END not implemented yet." msgstr "SEEK_END noch nicht implementiert." -#: src/input/vcd/vcdio.c:242 +#: src/input/vcd/vcdio.c:254 msgid "seek not implemented yet for" msgstr "Suchen noch nicht implementiert für" @@ -3085,50 +3131,50 @@ msgstr "Suchen noch nicht implementiert für" msgid "failed to find a device with a VCD" msgstr "Konnte kein Gerät mit einer VCD finden" -#: src/input/vcd/xineplug_inp_vcd.c:327 +#: src/input/vcd/xineplug_inp_vcd.c:328 msgid "was passed a null class parameter" msgstr "Es wurde ein NULL-Klassenparameter übergeben" -#: src/input/vcd/xineplug_inp_vcd.c:967 +#: src/input/vcd/xineplug_inp_vcd.c:972 msgid "Invalid current entry type" msgstr "Ungültiger Eintragstyp" -#: src/input/vcd/xineplug_inp_vcd.c:991 +#: src/input/vcd/xineplug_inp_vcd.c:996 msgid "" "Video CD plugin with PBC and support for: (X)VCD, (X)SVCD, HQVCD, CVD ... " msgstr "" "Video-CD Plugin mit PBC und Unterstützung für (X)VCD, (X)SVCD, HQVCD, " "CVD, ... " -#: src/input/vcd/xineplug_inp_vcd.c:1092 +#: src/input/vcd/xineplug_inp_vcd.c:1097 msgid "selection has no RETURN entry" msgstr "Auswahl hat keinen RETURN-Eintrag" -#: src/input/vcd/xineplug_inp_vcd.c:1121 +#: src/input/vcd/xineplug_inp_vcd.c:1126 msgid "DEFAULT selected, but PBC is not on." msgstr "DEFAULT ausgewählt, aber PBC ist nicht an." -#: src/input/vcd/xineplug_inp_vcd.c:1126 +#: src/input/vcd/xineplug_inp_vcd.c:1131 msgid "selection has no NEXT entry" msgstr "Auswahl hat keinen NEXT-Eintrag" -#: src/input/vcd/xineplug_inp_vcd.c:1134 +#: src/input/vcd/xineplug_inp_vcd.c:1139 msgid "selection has no PREVIOUS entry" msgstr "Auswahl hat keinen PREVIOUS-Eintrag" -#: src/input/vcd/xineplug_inp_vcd.c:1141 +#: src/input/vcd/xineplug_inp_vcd.c:1146 msgid "Unknown event type: " msgstr "Unbekannter Ereignistyp" -#: src/input/vcd/xineplug_inp_vcd.c:1441 src/input/vcd/xineplug_inp_vcd.c:1488 +#: src/input/vcd/xineplug_inp_vcd.c:1446 src/input/vcd/xineplug_inp_vcd.c:1493 msgid "The above message had unknown vcdimager log level" msgstr "Die vorherige Nachricht hat einen unbekannten Log-Level" -#: src/input/vcd/xineplug_inp_vcd.c:1819 +#: src/input/vcd/xineplug_inp_vcd.c:1824 msgid "VCD default type to use on autoplay" msgstr "Standardlaufwerk für VCD bei automatischer Wiedergabe" -#: src/input/vcd/xineplug_inp_vcd.c:1820 +#: src/input/vcd/xineplug_inp_vcd.c:1825 msgid "" "The VCD play unit to use when none is specified in an MRL, e.g. vcd:// or " "vcd:///dev/dvd:" @@ -3136,11 +3182,11 @@ msgstr "" "Das zu benutzende Laufwerk, wenn keins in der MRL angegeben ist (z.B. vcd:// " "oder vcd:///dev/dvd:)" -#: src/input/vcd/xineplug_inp_vcd.c:1830 +#: src/input/vcd/xineplug_inp_vcd.c:1835 msgid "CD-ROM drive used for VCD when none given" msgstr "Standard CD-ROM-Laufwerk für VCD, wenn keins angegeben wird" -#: src/input/vcd/xineplug_inp_vcd.c:1831 +#: src/input/vcd/xineplug_inp_vcd.c:1836 msgid "" "What to use if no drive specified. If the setting is empty, xine will scan " "for CD drives." @@ -3148,29 +3194,29 @@ msgstr "" "Welches Laufwerk benutzt werden soll, falls kein angegeben ist. Falls die " "Einstellung leer ist, wird xine nach CD-Laufwerken suchen." -#: src/input/vcd/xineplug_inp_vcd.c:1841 +#: src/input/vcd/xineplug_inp_vcd.c:1846 msgid "VCD position slider range" msgstr "VCD Positionierungsbereich" -#: src/input/vcd/xineplug_inp_vcd.c:1842 +#: src/input/vcd/xineplug_inp_vcd.c:1847 msgid "" "range that the stream playback position slider represents playing a VCD." msgstr "" "Der Bereich, den der Positionsschieber bei Wiedergabe von VCDs repräsentiert." -#: src/input/vcd/xineplug_inp_vcd.c:1850 +#: src/input/vcd/xineplug_inp_vcd.c:1855 msgid "VCD read-ahead caching?" msgstr "Vorauseilendes Caching für VCDs benutzen?" -#: src/input/vcd/xineplug_inp_vcd.c:1851 +#: src/input/vcd/xineplug_inp_vcd.c:1856 msgid "Class may lead to jerky playback on low-end machines." msgstr "Kann zu ruckliger Wiedergabe auf leistungsschwachen Rechnern führen." -#: src/input/vcd/xineplug_inp_vcd.c:1861 +#: src/input/vcd/xineplug_inp_vcd.c:1866 msgid "automatically advance VCD track/entry" msgstr "Automatisch Spur/Eintrag weiterschalten bei VCDs" -#: src/input/vcd/xineplug_inp_vcd.c:1862 +#: src/input/vcd/xineplug_inp_vcd.c:1867 msgid "" "If enabled, we should automatically advance to the next entry or track. Used " "only when playback control (PBC) is disabled." @@ -3179,11 +3225,11 @@ msgstr "" "weitergeschaltet. Wird nur benutzt, wenn die Wiedergabekontrolle PBC nicht " "aktiviert ist." -#: src/input/vcd/xineplug_inp_vcd.c:1871 +#: src/input/vcd/xineplug_inp_vcd.c:1876 msgid "show 'rejected' VCD LIDs" msgstr "'Ablegehnte' VCD LIDs anzeigen" -#: src/input/vcd/xineplug_inp_vcd.c:1872 +#: src/input/vcd/xineplug_inp_vcd.c:1877 msgid "" "Some playback list IDs (LIDs) are marked not showable, but you can see them " "in the MRL list if this is set. Rejected entries are marked with an asterisk " @@ -3193,11 +3239,11 @@ msgstr "" "Anwahl dieser Option werden sie trozem angezeigt und mit einem Stern (*) am " "Ende der MRL gekennzeichnet." -#: src/input/vcd/xineplug_inp_vcd.c:1883 +#: src/input/vcd/xineplug_inp_vcd.c:1888 msgid "VCD format string for display banner" msgstr "Formatvorlage für Fenstertitle bei VCDs" -#: src/input/vcd/xineplug_inp_vcd.c:1884 +#: src/input/vcd/xineplug_inp_vcd.c:1889 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are:\n" @@ -3236,11 +3282,11 @@ msgstr "" " Eine Nummer zwischen 1 und der Serienlänge.\n" " %% : ein %\n" -#: src/input/vcd/xineplug_inp_vcd.c:1909 +#: src/input/vcd/xineplug_inp_vcd.c:1914 msgid "VCD format string for stream comment field" msgstr "Formatvorlage für Kommentarfeld eines VCD Datenstroms." -#: src/input/vcd/xineplug_inp_vcd.c:1910 +#: src/input/vcd/xineplug_inp_vcd.c:1915 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are %A, %C, %c, %F, %I, %L, " @@ -3252,11 +3298,11 @@ msgstr "" "c, %F, %I, %L, %N, %P, %p, %S, %T, %V, %v, und %%.\n" "Siehe Hilfe für title_format bezüglich deren Bedeutung." -#: src/input/vcd/xineplug_inp_vcd.c:1922 +#: src/input/vcd/xineplug_inp_vcd.c:1927 msgid "VCD debug flag mask" msgstr "Bitfeld für VCD Fehlersuche" -#: src/input/vcd/xineplug_inp_vcd.c:1923 +#: src/input/vcd/xineplug_inp_vcd.c:1928 msgid "" "For tracking down bugs in the VCD plugin. Mask values are:\n" " 1: Meta information\n" @@ -3415,11 +3461,11 @@ msgstr "" "Pfadangabe zum Gerät (normalerweise ein DVD Laufwerk), das zur Wiedergabe " "von DVDs benutzt werden soll." -#: src/input/input_dvd.c:1803 +#: src/input/input_dvd.c:1804 msgid "raw device set up for DVD access" msgstr "Pfad zum RAW-Device des DVD-Laufwerks" -#: src/input/input_dvd.c:1804 +#: src/input/input_dvd.c:1805 msgid "" "If this points to a raw device connected to your DVD device, xine will use " "the raw device for playback. This has the advantage of being slightly faster " @@ -3437,11 +3483,11 @@ msgstr "" "Lesen Sie die Dokumentation zu RAW-Devices (man raw) für weitere " "Informationen." -#: src/input/input_dvd.c:1817 +#: src/input/input_dvd.c:1818 msgid "CSS decryption method" msgstr "CSS Entschlüsselungsmethode" -#: src/input/input_dvd.c:1818 +#: src/input/input_dvd.c:1819 msgid "" "Selects the decryption method libdvdcss will use to descramble copy " "protected DVDs. Try the various methods, if you have problems playing " @@ -3452,11 +3498,11 @@ msgstr "" "Methoden, falls Probleme bei der Wiedergabe von verschlüsselten DVDs " "auftreten." -#: src/input/input_dvd.c:1826 +#: src/input/input_dvd.c:1827 msgid "path to the title key cache" msgstr "Pfad zum Titelschlüsselcache" -#: src/input/input_dvd.c:1827 +#: src/input/input_dvd.c:1828 msgid "" "Since cracking the copy protection of scrambled DVDs can be quite time " "consuming, libdvdcss will cache the cracked keys in this directory.\n" @@ -3472,11 +3518,11 @@ msgstr "" "daß das Verzeichnis nur für die Zwischenpufferung von DVD Titelschlüssel " "genutzt wird." -#: src/input/input_dvd.c:1849 +#: src/input/input_dvd.c:1850 msgid "region the DVD player claims to be in (1 to 8)" msgstr "Region (1-8), aus der der DVD Player zu kommen scheint" -#: src/input/input_dvd.c:1850 +#: src/input/input_dvd.c:1851 msgid "" "This only needs to be changed if your DVD jumps to a screen complaining " "about a wrong region code. It has nothing to do with the region code set in " @@ -3486,11 +3532,11 @@ msgstr "" "sich über ein falscher Regionscode beschwert wird. Dies hat nichts mit dem " "Regionscode im DVD-Laufwerk zu tun, dies ist nur für die Software." -#: src/input/input_dvd.c:1856 +#: src/input/input_dvd.c:1857 msgid "default language for DVD playback" msgstr "Standardsprache für die DVD-Wiedergabe" -#: src/input/input_dvd.c:1857 +#: src/input/input_dvd.c:1858 msgid "" "xine tries to use this language as a default for DVD playback. As far as the " "DVD supports it, menus and audio tracks will be presented in this language.\n" @@ -3500,11 +3546,11 @@ msgstr "" "DVD dies unterstützt, werden Menüs und Titel in dieser Sparche angezeigt.\n" "Der Wert muß ein zweibuchstabiger ISO639-Sprachcode sein." -#: src/input/input_dvd.c:1863 +#: src/input/input_dvd.c:1864 msgid "read-ahead caching" msgstr "Vorauseilendes Caching benutzen" -#: src/input/input_dvd.c:1864 +#: src/input/input_dvd.c:1865 msgid "" "xine can use a read ahead cache for DVD drive access.\n" "This may lead to jerky playback on slow drives, but it improves the impact " @@ -3514,11 +3560,11 @@ msgstr "" "Dies kann bei langsamen Laufwerken zu einer stotternden Wiedergabe führen, " "verbessert aber den Einfluß von DVD-Ebenenwechseln bei schnellen Laufwerken." -#: src/input/input_dvd.c:1870 +#: src/input/input_dvd.c:1871 msgid "unit for the skip action" msgstr "Einheit für die Überspringen-Aktion" -#: src/input/input_dvd.c:1871 +#: src/input/input_dvd.c:1872 msgid "" "You can configure the behaviour when issuing a skip command (using the skip " "buttons for example). The individual values mean:\n" @@ -3553,11 +3599,11 @@ msgstr "" "Überspringt eine DVD-Titel, was eine Struktureinheit ist, die einem " "kompletten DVD Film entspricht" -#: src/input/input_dvd.c:1886 +#: src/input/input_dvd.c:1887 msgid "unit for seeking" msgstr "Einheit beim Suchen" -#: src/input/input_dvd.c:1887 +#: src/input/input_dvd.c:1888 msgid "" "You can configure the domain spanned by the seek slider. The individual " "values mean:\n" @@ -3581,11 +3627,11 @@ msgstr "" "Der Suchbereich umfaßt ein DVD-Programm, was eine Navigationseinheit ist, " "die einem Kapitel des aktuellen Films entspricht" -#: src/input/input_dvd.c:1898 +#: src/input/input_dvd.c:1899 msgid "play mode when title/chapter is given" msgstr "Wiedergabemodus falls Titel/Kapitel angegeben" -#: src/input/input_dvd.c:1899 +#: src/input/input_dvd.c:1900 msgid "" "You can configure the behaviour when playing a dvd from a given title/" "chapter (eg. using MRL 'dvd:/1.2'). The individual values mean:\n" @@ -3759,11 +3805,11 @@ msgstr "" msgid "DVB (Digital TV) input plugin" msgstr "DVB (Digital TV) Plugin" -#: src/input/input_dvb.c:3238 +#: src/input/input_dvb.c:3237 msgid "Remember last DVB channel watched" msgstr "Zuletzt gesehenen DVB-Kanal vermerken" -#: src/input/input_dvb.c:3239 +#: src/input/input_dvb.c:3238 msgid "" "On autoplay, xine will remember and switch to the channel indicated in media." "dvb.last_channel. " @@ -3771,19 +3817,19 @@ msgstr "" "Bei automatischer Widergabe wechselt xine zum zuletztgesehenen Kanal media." "dvb.last_channel. " -#: src/input/input_dvb.c:3246 +#: src/input/input_dvb.c:3245 msgid "Last DVB channel viewed" msgstr "Zuletzt gesehener DVB-Kanal" -#: src/input/input_dvb.c:3247 +#: src/input/input_dvb.c:3246 msgid "If enabled xine will remember and switch to this channel. " msgstr "Falls aktiviert vermerkt xine den Kanal und wechselt zu diesem. " -#: src/input/input_dvb.c:3253 +#: src/input/input_dvb.c:3252 msgid "Number of dvb card to use." msgstr "Nummer der zu benutzenden DVB-Karte." -#: src/input/input_dvb.c:3254 +#: src/input/input_dvb.c:3253 msgid "" "Leave this at zero unless you really have more than 1 card in your system." msgstr "" @@ -3922,74 +3968,74 @@ msgstr "" "auf die Wiedergabeleistung haben sollte.\n" "Ein Wert von Null deaktiviert das Bremsen." -#: src/input/input_rtp.c:182 +#: src/input/input_rtp.c:185 #, c-format msgid "socket(): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:192 +#: src/input/input_rtp.c:195 msgid "IP address specified is multicast\n" msgstr "IP-Adresse für Multicast\n" -#: src/input/input_rtp.c:201 +#: src/input/input_rtp.c:204 #, c-format msgid "setsockopt(SO_RCVBUF): %s.\n" msgstr "setsockopt(SO_RCVBUF): %s.\n" -#: src/input/input_rtp.c:209 +#: src/input/input_rtp.c:212 #, c-format msgid "setsockopt(SO_REUSEADDR): %s.\n" msgstr "setsockopt(SO_REUSEADDR): %s.\n" -#: src/input/input_rtp.c:216 +#: src/input/input_rtp.c:219 #, c-format msgid "bind(): %s.\n" msgstr "bind(): %s.\n" -#: src/input/input_rtp.c:236 +#: src/input/input_rtp.c:239 #, c-format msgid "Can't find address for iface %s:%s\n" msgstr "Adresse für iface %s nicht gefunden:%s\n" -#: src/input/input_rtp.c:254 +#: src/input/input_rtp.c:257 #, c-format msgid "setsockopt(IP_ADD_MEMBERSHIP) failed (multicast kernel?): %s.\n" msgstr "setsockopt(IP_ADD_MEMBERSHIP) abgbrochen (multicast Kernel?): %s.\n" -#: src/input/input_rtp.c:276 +#: src/input/input_rtp.c:279 #, c-format msgid "unable to resolve '%s'.\n" msgstr "Kann '%s' nicht auflösen.\n" -#: src/input/input_rtp.c:286 +#: src/input/input_rtp.c:289 #, c-format msgid "unable to bind to '%s'.\n" msgstr "Kann keine Verbindung zu '%s' herstellen.\n" -#: src/input/input_rtp.c:314 +#: src/input/input_rtp.c:317 #, c-format msgid "recv(): %s.\n" msgstr "recv(): %s.\n" -#: src/input/input_rtp.c:602 +#: src/input/input_rtp.c:605 msgid "RTP: stopping reading thread...\n" msgstr "RTP: Stoppe Lese-Thread...\n" -#: src/input/input_rtp.c:605 +#: src/input/input_rtp.c:608 msgid "RTP: reading thread terminated\n" msgstr "RTP: Lese-Thread terminiert\n" -#: src/input/input_rtp.c:620 +#: src/input/input_rtp.c:623 #, c-format msgid "Opening >filename:%s port:%d interface:%s<\n" msgstr "Öffne >Dateiname:%s Port:%d Schnittstelle:%s<\n" -#: src/input/input_rtp.c:637 +#: src/input/input_rtp.c:640 #, c-format msgid "input_rtp: can't create new thread (%s)\n" msgstr "input_rtp: Kann neuen Thread (%s) nicht erstellen\n" -#: src/input/input_rtp.c:743 +#: src/input/input_rtp.c:746 msgid "RTP and UDP input plugin as shipped with xine" msgstr "Mit xine ausgeliefertes RTP und UDP Plugin" @@ -4003,16 +4049,30 @@ msgstr "rtsp: Fehlerhafte mrl: %s\n" msgid "rtsp: failed to connect to '%s'\n" msgstr "rtsp: Kann keine Verbindung zu '%s' aufbauen\n" -#: src/input/librtsp/rtsp_session.c:84 +#: src/input/librtsp/rtsp_session.c:93 src/input/input_mms.c:479 +msgid "network bandwidth" +msgstr "Netzwerkbandbreite" + +#: src/input/librtsp/rtsp_session.c:94 src/input/input_mms.c:480 +msgid "" +"Specify the bandwidth of your internet connection here. This will be used " +"when streaming servers offer different versions with different bandwidth " +"requirements of the same stream." +msgstr "" +"Geben Sie hier die Bandbreite Ihrer Internetverbindung an. Dies wird " +"benutzt, falls Streaming-Server verschiedene Versionen eines Datenstroms mit " +"unterschiedlichen Bandbreitenanforderungen anbieten." + +#: src/input/librtsp/rtsp_session.c:109 #, c-format msgid "rtsp_session: failed to connect to server %s\n" msgstr "rtsp_session: Kann keine Verbindung zum Server %s aufbauen\n" -#: src/input/librtsp/rtsp_session.c:118 +#: src/input/librtsp/rtsp_session.c:143 msgid "rtsp_session: session can not be established.\n" msgstr "rtsp_session: Sitzung kann nicht eingerichtet werden.\n" -#: src/input/librtsp/rtsp_session.c:135 +#: src/input/librtsp/rtsp_session.c:161 #, c-format msgid "rtsp_session: rtsp server type '%s' not supported yet. sorry.\n" msgstr "rtsp_session: RTSP-Servertyp '%s' wird nicht unterstützt. Ups.\n" @@ -4061,41 +4121,45 @@ msgstr "Pfad zum Video4Linux Radiogerät" msgid "pnm streaming input plugin" msgstr "PNM Streaming-Plugin" -#: src/input/mmsh.c:195 +#: src/input/mmsh.c:201 msgid "libmmsh: send error\n" msgstr "libmmsh: Sendefehler\n" -#: src/input/mmsh.c:240 +#: src/input/mmsh.c:246 +#, c-format msgid "libmmsh: bad response format\n" msgstr "libmmsh: Fehlerhaftes Empfangsformat\n" -#: src/input/mmsh.c:246 +#: src/input/mmsh.c:252 #, c-format msgid "libmmsh: 3xx redirection not implemented: >%d %s<\n" msgstr "libmmsh: 3xx Weiterleitung nicht implementiert: >%d %s<\n" -#: src/input/mmsh.c:253 +#: src/input/mmsh.c:259 #, c-format msgid "libmmsh: http status not 2xx: >%d %s<\n" msgstr "libmmsh: http-Status ungleich 2xx: >%d %s<\n" -#: src/input/mmsh.c:261 +#: src/input/mmsh.c:267 +#, c-format msgid "libmmsh: Location redirection not implemented\n" msgstr "libmmsh: Weiterleitung nicht implementiert\n" -#: src/input/mmsh.c:471 +#: src/input/mmsh.c:476 msgid "Connecting MMS server (over http)..." msgstr "Kontaktiere MMS Server (über HTTP)..." -#: src/input/mmsh.c:639 +#: src/input/mmsh.c:657 +#, c-format msgid "invalid url\n" msgstr "Ungültige URL\n" -#: src/input/mmsh.c:644 +#: src/input/mmsh.c:662 +#, c-format msgid "unsupported protocol\n" msgstr "Nichtunterstütztes Protokoll\n" -#: src/input/mms.c:537 +#: src/input/mms.c:561 msgid "Connecting MMS server (over tcp)..." msgstr "Kontaktiere MMS Server (über TCP)..." @@ -4117,33 +4181,19 @@ msgstr "input_pnm: Kann keine Verbindung zu '%s' herstellen.\n" msgid "input_pnm: failed to set up stream\n" msgstr "input_pnm: Datenstrom konnte nicht eingerichtet werden\n" -#: src/input/input_smb.c:154 +#: src/input/input_smb.c:158 msgid "CIFS/SMB input plugin based on libsmbclient" msgstr "CIFS/SMB Plugin basierend auf libsmbclient" -#: src/input/input_mms.c:420 +#: src/input/input_mms.c:443 msgid "mms streaming input plugin" msgstr "MMS-Streaming-Plugin" -#: src/input/input_mms.c:456 -msgid "network bandwidth" -msgstr "Netzwerkbandbreite" - -#: src/input/input_mms.c:457 -msgid "" -"Specify the bandwidth of your internet connection here. This will be used " -"when streaming servers offer different versions with different bandwidth " -"requirements of the same stream." -msgstr "" -"Geben Sie hier die Bandbreite Ihrer Internetverbindung an. Dies wird " -"benutzt, falls Streaming-Server verschiedene Versionen eines Datenstroms mit " -"unterschiedlichen Bandbreitenanforderungen anbieten." - -#: src/input/input_mms.c:466 +#: src/input/input_mms.c:489 msgid "MMS protocol" msgstr "MMS-Protokoll" -#: src/input/input_mms.c:467 +#: src/input/input_mms.c:490 msgid "" "Select the protocol to encapsulate MMS.\n" "TCP is better but you may need HTTP behind a firewall." @@ -4156,81 +4206,82 @@ msgstr "" msgid "input_http: gethostbyname(%s) failed: %s\n" msgstr "input_http: gethostbyname(%s) schlug fehl: %s\n" -#: src/input/input_http.c:403 src/input/input_http.c:949 +#: src/input/input_http.c:400 src/input/input_http.c:941 #, c-format msgid "input_http: read error %d\n" msgstr "input_http: Lesefehler %d\n" -#: src/input/input_http.c:630 +#: src/input/input_http.c:627 msgid "Connecting HTTP server..." msgstr "Kontaktiere HTTP Server..." -#: src/input/input_http.c:824 +#: src/input/input_http.c:816 +#, c-format msgid "input_http: invalid http answer\n" msgstr "input_http: Ungültige http-Antwort\n" -#: src/input/input_http.c:831 +#: src/input/input_http.c:823 #, c-format msgid "input_http: 3xx redirection: >%d %s<\n" msgstr "input_http: 3xx Weiterleitung : >%d %s<\n" -#: src/input/input_http.c:836 src/input/input_http.c:842 -#: src/input/input_http.c:849 +#: src/input/input_http.c:828 src/input/input_http.c:834 +#: src/input/input_http.c:841 #, c-format msgid "input_http: http status not 2xx: >%d %s<\n" msgstr "input_http: http-Status ungleich 2xx: >%d %s<\n" -#: src/input/input_http.c:859 +#: src/input/input_http.c:851 #, c-format msgid "input_http: content length = %<PRIdMAX> bytes\n" msgstr "input_http: Inhaltslänge = %<PRIdMAX> bytes\n" -#: src/input/input_http.c:928 +#: src/input/input_http.c:920 #, c-format msgid "input_http: buffer exhausted after %d bytes." msgstr "input_http: Puffer erschöpft nach %d Bytes." -#: src/input/input_http.c:1002 +#: src/input/input_http.c:994 msgid "http input plugin" msgstr "http Plugin" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "HTTP proxy host" msgstr "HTTP Proxy Rechnername" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "The hostname of the HTTP proxy." msgstr "Der Rechnername des HTTP Proxys." -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "HTTP proxy port" msgstr "HTTP Proxy Portnummer" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "The port number of the HTTP proxy." msgstr "Die Portnummer des HTTP Proxys." -#: src/input/input_http.c:1082 +#: src/input/input_http.c:1074 msgid "HTTP proxy username" msgstr "HTTP Proxy Benutzername" -#: src/input/input_http.c:1083 +#: src/input/input_http.c:1075 msgid "The user name for the HTTP proxy." msgstr "Der Benutzername für den HTTP Proxy." -#: src/input/input_http.c:1086 +#: src/input/input_http.c:1078 msgid "HTTP proxy password" msgstr "HTTP Proxy Passwort" -#: src/input/input_http.c:1087 +#: src/input/input_http.c:1079 msgid "The password for the HTTP proxy." msgstr "Das Passwort für den HTTP Proxy." -#: src/input/input_http.c:1090 +#: src/input/input_http.c:1082 msgid "Domains for which to ignore the HTTP proxy" msgstr "Domains, die den HTTP Proxy umgehen" -#: src/input/input_http.c:1091 +#: src/input/input_http.c:1083 msgid "" "A comma-separated list of domain names for which the proxy is to be " "ignored.\n" @@ -4247,7 +4298,7 @@ msgstr "" msgid "input_dvd: Device %s failed to open during eject calls\n" msgstr "input_dvd: Gerät %s konnte zum Auswerfen nicht geöffnet werden\n" -#: src/input/input_rtsp.c:274 +#: src/input/input_rtsp.c:284 msgid "rtsp streaming input plugin" msgstr "RTSP Streaming-Plugin" @@ -4256,30 +4307,35 @@ msgid "dvbsub: cannot create timer thread\n" msgstr "dvbsub: Kann keinen Zeitgeber-Thread erzeugen\n" #: src/libxinevdec/bitplane.c:1272 +#, c-format msgid "bitplane: error doing ByteRun1 decompression\n" msgstr "bitplane: Fehler beim ByteRun1-Dekomprimieren\n" #: src/libxinevdec/bitplane.c:1331 +#, c-format msgid "bitplane: Anim Opt 1 is not supported at the moment\n" msgstr "bitplane: Anim Opt 1 wird momentan nicht unterstützt\n" #: src/libxinevdec/bitplane.c:1338 +#, c-format msgid "bitplane: Anim Opt 2 is not supported at the moment\n" msgstr "bitplane: Anim Opt 2 wird momentan nicht unterstützt\n" #: src/libxinevdec/bitplane.c:1388 +#, c-format msgid "bitplane: Anim ASCIIJ is not supported at the moment\n" msgstr "bitplane: Anim ASCIIJ wird momentan nicht unterstützt\n" #: src/libxinevdec/bitplane.c:1394 +#, c-format msgid "bitplane: This anim-type is not supported at the moment\n" msgstr "bitplane: Dieser anim-Type wird momentan nicht unterstützt\n" -#: src/libsputext/demux_sputext.c:1507 +#: src/libsputext/demux_sputext.c:1506 msgid "default duration of subtitle display in seconds" msgstr "Standardzeitspanne in Sekunden bis zum Ausblenden des Untertitels" -#: src/libsputext/demux_sputext.c:1508 +#: src/libsputext/demux_sputext.c:1507 msgid "" "Some subtitle formats do not explicitly give a duration for each subtitle. " "For these, you can set a default duration here. Setting to zero will result " @@ -4290,22 +4346,22 @@ msgstr "" "angegeben, werden die Untertitel solange angezeigt, bis sie vom nächsten " "ersetzt werden." -#: src/libsputext/xine_decoder.c:913 +#: src/libsputext/xine_decoder.c:948 msgid "subtitle size" msgstr "Untertitelgröße" -#: src/libsputext/xine_decoder.c:914 +#: src/libsputext/xine_decoder.c:949 msgid "" "You can adjust the subtitle size here. The setting will be evaluated " "relative to the window size." msgstr "" "Passt die Untertitelgröße an. Diese Einstellung ist relativ zur Fenstergröße." -#: src/libsputext/xine_decoder.c:920 +#: src/libsputext/xine_decoder.c:955 msgid "subtitle vertical offset" msgstr "Vertikaler Versatz für Untertitel" -#: src/libsputext/xine_decoder.c:921 +#: src/libsputext/xine_decoder.c:956 msgid "" "You can adjust the vertical position of the subtitle. The setting will be " "evaluated relative to the window size." @@ -4313,20 +4369,28 @@ msgstr "" "Passt den vertikalen Versatz der Untertitel an. Diese Einstellung ist " "relativ zur Fenstergröße." -#: src/libsputext/xine_decoder.c:927 +#: src/libsputext/xine_decoder.c:962 src/libsputext/xine_decoder.c:971 msgid "font for subtitles" msgstr "Zeichensatz für Untertitel" -#: src/libsputext/xine_decoder.c:928 +#: src/libsputext/xine_decoder.c:963 msgid "A font from the xine font directory to be used for the subtitle text." msgstr "" "Ein Zeichensatz aus xines font-Verzeichnis zur Anzeige von Untertiteln." -#: src/libsputext/xine_decoder.c:935 +#: src/libsputext/xine_decoder.c:972 +msgid "An outline font file (e.g. a .ttf) to be used for the subtitle text." +msgstr "Ein Zeichensatz (z.B. .ttf) zur Anzeige von Untertiteln." + +#: src/libsputext/xine_decoder.c:978 +msgid "whether to use a freetype font" +msgstr "ob Freetype-Zeichensätze genutzt werden" + +#: src/libsputext/xine_decoder.c:985 msgid "encoding of the subtitles" msgstr "Zeichenkodierung für Untertitel" -#: src/libsputext/xine_decoder.c:936 +#: src/libsputext/xine_decoder.c:986 msgid "" "The encoding of the subtitle text in the stream. This setting is used to " "render non-ASCII characters correctly. If non-ASCII characters are not " @@ -4338,11 +4402,11 @@ msgstr "" "anders als erwartet dargestellt werden, fragen Sie den Ersteller der " "Untertitel nach der verwendeten Kodierung." -#: src/libsputext/xine_decoder.c:944 +#: src/libsputext/xine_decoder.c:994 msgid "use unscaled OSD if possible" msgstr "Benutze unskaliertes OSD falls möglich" -#: src/libsputext/xine_decoder.c:945 +#: src/libsputext/xine_decoder.c:995 msgid "" "The unscaled OSD will be rendered independently of the video frame and will " "always be sharp, even if the video is magnified. This will look better, but " @@ -4847,11 +4911,11 @@ msgstr "" msgid "libareal: oups, real can do more than 2 channels ?\n" msgstr "libareal: Ups, Real ünterstützt mehr als 2 Kanäle?\n" -#: src/libreal/audio_decoder.c:745 src/libreal/xine_decoder.c:638 +#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 msgid "path to RealPlayer codecs" msgstr "Pfad zum Real-Player-Codecs" -#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 +#: src/libreal/audio_decoder.c:747 src/libreal/xine_decoder.c:640 msgid "" "If you have RealPlayer installed, specify the path to its codec directory " "here. You can easily find the codec directory by looking for a file named " @@ -5375,6 +5439,7 @@ msgid "demux_avi: invalid avi chunk \"%c%c%c%c\" at pos %<PRIdMAX>\n" msgstr "demux_avi: Ungültiges AVI-Paket \"%c%c%c%c\" an Position %<PRIdMAX>\n" #: src/demuxers/demux_avi.c:828 +#, c-format msgid "demux_avi: avi index is broken\n" msgstr "demux_avi: AVI-Index ist fehlerhaft\n" @@ -5390,23 +5455,25 @@ msgid "demux_mpc: frame too big for buffer" msgstr "demux_mpc: Bild zu grpß für Puffer" #: src/demuxers/demux_film.c:188 +#, c-format msgid "invalid FILM chunk size\n" msgstr "Ungültige Größe des FILM-Pakets\n" #: src/demuxers/demux_film.c:342 +#, c-format msgid "unrecognized FILM chunk\n" msgstr "Nicht erkanntes FILM-Paket\n" -#: src/demuxers/demux_asf.c:423 +#: src/demuxers/demux_asf.c:425 #, c-format msgid "demux_asf: warning: The stream id=%d is encrypted.\n" msgstr "demux_asf: Warnung: Datenstrom id=%d ist verschlüsselt.\n" -#: src/demuxers/demux_asf.c:425 +#: src/demuxers/demux_asf.c:427 msgid "Media stream scrambled/encrypted" msgstr "Medienstrom gestört/verschlüsselt" -#: src/demuxers/demux_asf.c:1633 +#: src/demuxers/demux_asf.c:1634 #, c-format msgid "demux_asf: Wrong ASX version: %s\n" msgstr "demux_asf: Falsche ASX Version: %s\n" @@ -5440,7 +5507,8 @@ msgstr "" "Unbekannter VOC-Kompressionstyp (0x%02X); bitte bei den xine-Entwicklern " "melden\n" -#: src/demuxers/demux_ogg.c:797 +#: src/demuxers/demux_ogg.c:801 +#, c-format msgid "ogg: vorbis audio track indicated but no vorbis stream header found.\n" msgstr "ogg: vorbis Tonspur erkannt, aber kein Heder im Datenstrom gefunden.\n" @@ -5460,6 +5528,7 @@ msgstr "" "demux_mpeg_block: Fehler! Freigabe. Bitte bei den xine-Entwicklern melden.\n" #: src/demuxers/demux_mpeg_block.c:640 +#, c-format msgid "demux_mpeg_block: warning: PES header reserved 10 bits not found\n" msgstr "" "demux_mpeg_block: Warnung: PES-Header reserviert 10 Bits nicht gefunden\n" @@ -5490,6 +5559,7 @@ msgstr "" "fehlgeschlagen.\n" #: src/demuxers/demux_mpeg_pes.c:771 +#, c-format msgid "demux_mpeg_pes: warning: PES header reserved 10 bits not found\n" msgstr "" "demux_mpeg_pes: Warnung: PES-Header reserviert 10 Bits nicht gefunden\n" @@ -5519,10 +5589,12 @@ msgid "demux_wc3movie: SHOT chunk referenced invalid palette (%d >= %d)\n" msgstr "demux_wc3movie: SHOT Paket referenziert ungültige Palette (%d >= %d)\n" #: src/demuxers/demux_wc3movie.c:406 +#, c-format msgid "demux_wc3movie: There was a problem while loading palette chunks\n" msgstr "demux_wc3movie: Beim Laden der Palette ist ein Problem aufgetreten\n" #: src/demuxers/demux_snd.c:104 +#, c-format msgid "demux_snd: bad header parameters\n" msgstr "demux_snd: Ungültige Header-Parameter\n" @@ -5576,62 +5648,62 @@ msgstr "Maximaler Quantisierer" msgid "The maximum compression to apply to an image in constant quality mode." msgstr "Maximale Kompression für ein Bild im Modus konstanter Qualität" -#: src/libffmpeg/audio_decoder.c:117 +#: src/libffmpeg/audio_decoder.c:120 #, c-format msgid "ffmpeg_audio_dec: increasing buffer to %d to avoid overflow.\n" msgstr "ffmpeg_audio_dec: Vergrößere Puffer auf %d um Überlauf zu vermeiden.\n" -#: src/libffmpeg/audio_decoder.c:161 +#: src/libffmpeg/audio_decoder.c:164 #, c-format msgid "ffmpeg_audio_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" "ffmpeg_audio_dec: Konnte keinen ffmpeg-Dekoder für Puffertyp 0x%X finden\n" -#: src/libffmpeg/audio_decoder.c:253 +#: src/libffmpeg/audio_decoder.c:256 msgid "ffmpeg_audio_dec: trying to open null codec\n" msgstr "ffmpeg_audio_dec: Besuche NULl-Codec zu öffnen\n" -#: src/libffmpeg/audio_decoder.c:262 +#: src/libffmpeg/audio_decoder.c:265 msgid "ffmpeg_audio_dec: couldn't open decoder\n" msgstr "ffmpeg_audio_dec: Konnte Dekoder nicht öffnen\n" -#: src/libffmpeg/dvaudio_decoder.c:302 +#: src/libffmpeg/dvaudio_decoder.c:286 #, c-format msgid "dvaudio: increasing buffer to %d to avoid overflow.\n" msgstr "dvaudio: Vergrößere Puffer auf %d um Überlauf zu vermeiden.\n" -#: src/libffmpeg/video_decoder.c:153 +#: src/libffmpeg/video_decoder.c:156 msgid "ffmpeg_video_dec: unsupported frame format, DR1 disabled.\n" msgstr "ffmpeg_video_dec: Nichtunterstütztes Bildformat, DR1 deaktiviert.\n" -#: src/libffmpeg/video_decoder.c:171 +#: src/libffmpeg/video_decoder.c:174 msgid "ffmpeg_video_dec: unsupported frame dimensions, DR1 disabled.\n" msgstr "ffmpeg_video_dec: Nichtunterstütztes Bildformat, DR1 deaktiviert.\n" -#: src/libffmpeg/video_decoder.c:319 +#: src/libffmpeg/video_decoder.c:334 #, c-format msgid "ffmpeg_video_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" "ffmpeg_video_dec: Konnte keinen ffmpeg-Dekoder für Puffertyp 0x%X finden\n" -#: src/libffmpeg/video_decoder.c:348 +#: src/libffmpeg/video_decoder.c:363 msgid "ffmpeg_video_dec: couldn't open decoder\n" msgstr "ffmpeg_video_dec: Konnte Dekoder nicht öffnen\n" -#: src/libffmpeg/video_decoder.c:383 +#: src/libffmpeg/video_decoder.c:398 msgid "ffmpeg_video_dec: direct rendering enabled\n" msgstr "ffmpeg_video_dec: Direktausgabe aktiviert\n" -#: src/libffmpeg/video_decoder.c:802 +#: src/libffmpeg/video_decoder.c:817 #, c-format msgid "ffmpeg_video_dec: increasing buffer to %d to avoid overflow.\n" msgstr "ffmpeg_video_dec: Vergrößere Puffer auf %d um Überlauf zu vermeiden.\n" -#: src/libffmpeg/video_decoder.c:1474 +#: src/libffmpeg/video_decoder.c:1510 msgid "MPEG-4 postprocessing quality" msgstr "Qualität der MPEG-4 Nachbearbeitungsstufe" -#: src/libffmpeg/video_decoder.c:1475 +#: src/libffmpeg/video_decoder.c:1511 msgid "" "You can adjust the amount of post processing applied to MPEG-4 video.\n" "Higher values result in better quality, but need more CPU. Lower values may " @@ -1,28 +1,34 @@ +# translation of xine-lib-1.1.4.po to Spanish # Spanish .po file for xine-lib. -# Copyright (C) 2002 Free Software Foundation, Inc. -# Juan Manuel GarcÃa Molina <juanma_gm@wanadoo.es>, 2002. +# Copyright (C) 2002, 2006, 2007 Free Software Foundation, Inc. # +# Juan Manuel GarcÃa Molina <juanma_gm@wanadoo.es>, 2002. +# Carlos E. Robinson M. <carloser@users.sourceforge.net>, 2006, 2007. msgid "" msgstr "" -"Project-Id-Version: xine-lib 0.9.13\n" +"Project-Id-Version: xine-lib-1.1.4\n" "Report-Msgid-Bugs-To: xine-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2006-11-29 23:07+0100\n" -"PO-Revision-Date: 2002-02-20 00:00+0100\n" -"Last-Translator: Juan Manuel GarcÃa Molina <juanma_gm@wanadoo.es>\n" -"Language-Team: Spanish <es@li.org>\n" +"POT-Creation-Date: 2007-01-28 20:59-0200\n" +"PO-Revision-Date: 2007-02-28 14:07+0100\n" +"Last-Translator: Carlos E. Robinson M. <carloser@users.sourceforge.net>\n" +"Language-Team: Spanish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 0.9.5\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-Language: Spanish\n" +"X-Poedit-Country: SPAIN\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-Basepath: /home/cer/compilaciones/xine/xine-lib-1.1.4\n" #: src/liba52/xine_decoder.c:742 src/libdts/xine_decoder.c:546 msgid "HELP! a mono-only audio driver?!\n" -msgstr "" +msgstr "¡AYUDA! ¿¡Un manejador de audio exclusivamente mono-aural?!\n" #: src/liba52/xine_decoder.c:805 msgid "A/52 volume" -msgstr "" +msgstr "Volúmen A/52" #: src/liba52/xine_decoder.c:806 msgid "" @@ -31,10 +37,14 @@ msgid "" "so later operations like channel downmixing will work on an audio stream of " "the given volume." msgstr "" +"Con audio A/52, puede modificar el volúmen en el decodificador. Esto tiene " +"la ventaja que el sonido se ya se decodifica para el volúmen especificado, " +"de modo que las operaciones posteriores como mezclado hacia abajo de canales " +"trabajaran en un flujo de bits de audio del volúmen dado." #: src/liba52/xine_decoder.c:814 msgid "use A/52 dynamic range compression" -msgstr "" +msgstr "use A/52 compresión de rango dinámico" #: src/liba52/xine_decoder.c:815 msgid "" @@ -42,10 +52,14 @@ msgid "" "making the loud sounds softer, and the soft sounds louder, so you can more " "easily listen to the audio in a noisy environment without disturbing anyone." msgstr "" +"La compresión de rango dinámico limita el rango dinámico del sonido. Esto " +"significa hacer más suaves los sonidos fuertes, y más fuertes los sonidos " +"flojos, de modo que puede escuchar el audio en un entorno ruidoso sin " +"molestar a nadie." #: src/liba52/xine_decoder.c:822 msgid "downmix audio to 2 channel surround stereo" -msgstr "" +msgstr "mezcla reducida de audio a 2 canales estereo envolvente" #: src/liba52/xine_decoder.c:823 msgid "" @@ -54,80 +68,92 @@ msgid "" "matrix surround decoding like prologic, you should enable this option so " "that the additional channels are mixed into the stereo signal." msgstr "" +"Cuando desee escuchar sonido envolvente multicanal, pero sólo tiene dos " +"altavoces o un decodificador o amplificador envolvente que hace algún tipo " +"de decodificación envolvente matricial como prologic, deberÃa activar esta " +"opción de modo que los canales adicionales se mezclen en la señal estéreo." #: src/libw32dll/w32codec.c:588 #, c-format msgid "w32codec: ICOpen failed! unknown codec %08lx / wrong parameters?\n" -msgstr "" +msgstr "w32codec: ¡Falló ICOpen! ¿codec %08lx desconocido / parámetros equivocados?\n" #: src/libw32dll/w32codec.c:597 #, c-format msgid "w32codec: ICDecompressGetFormat (%.4s %08lx/%d) failed: Error %ld\n" -msgstr "" +msgstr "w32codec: Falló ICDecompressGetFormat (%.4s %08lx/%d): Error %ld\n" #: src/libw32dll/w32codec.c:630 #, c-format msgid "w32codec: ICDecompressQuery failed: Error %ld\n" -msgstr "" +msgstr "w32codec: Falló ICDecompressQuery: Error %ld\n" #: src/libw32dll/w32codec.c:641 #, c-format msgid "w32codec: ICDecompressBegin failed: Error %ld\n" -msgstr "" +msgstr "w32codec: Falló ICDecompressBegin: Error %ld\n" #: src/libw32dll/w32codec.c:687 #, c-format -msgid "" -"w32codec: DS_VideoDecoder failed! unknown codec %08lx / wrong parameters?\n" +msgid "w32codec: DS_VideoDecoder failed! unknown codec %08lx / wrong parameters?\n" msgstr "" +"w32codec: ¡Falló DS_VideoDecoder! ¿codec %08lx desconocido / parámetros " +"equivocados?\n" #: src/libw32dll/w32codec.c:698 #, c-format -msgid "" -"w32codec: DMO_VideoDecoder failed! unknown codec %08lx / wrong parameters?\n" +msgid "w32codec: DMO_VideoDecoder failed! unknown codec %08lx / wrong parameters?\n" msgstr "" +"w32codec: ¡Falló DMO_VideoDecoder! ¿codec %08lx / desconocido / parámetros " +"equivocados??\n" #: src/libw32dll/w32codec.c:818 src/libw32dll/w32codec.c:1487 #, c-format msgid "w32codec: decoder failed to start. Is '%s' installed?\n" -msgstr "" +msgstr "w32codec: Falló el arranque del decodificador. ¿está '%s' instalado?\n" #: src/libw32dll/w32codec.c:1221 +#, c-format msgid "w32codec: (ACM_Decoder) Unappropriate audio format\n" -msgstr "" +msgstr "w32codec: (ACM_Decoder) Formato de audio no apropiado\n" #: src/libw32dll/w32codec.c:1224 #, c-format msgid "w32codec: (ACM_Decoder) acmStreamOpen error %d\n" -msgstr "" +msgstr "w32codec: (ACM_Decoder) error en acmStreamOpen %d\n" #: src/libw32dll/w32codec.c:1243 +#, c-format msgid "w32codec: Error initializing DirectShow Audio\n" -msgstr "" +msgstr "w32codec: Error inicializando audio DirectShow\n" #: src/libw32dll/w32codec.c:1261 +#, c-format msgid "w32codec: Error initializing DMO Audio\n" -msgstr "" +msgstr "w32codec: Error inicializando audio DMO\n" #: src/audio_out/audio_oss_out.c:191 #, c-format msgid "audio_oss_out: Opening audio device %s: %s\n" -msgstr "" +msgstr "audio_oss_out: Abriendo dispositivo de audio %s: %s\n" #: src/audio_out/audio_oss_out.c:213 #, c-format -msgid "" -"audio_oss_out: warning: sampling rate %d Hz not supported, trying 44100 Hz\n" +msgid "audio_oss_out: warning: sampling rate %d Hz not supported, trying 44100 Hz\n" msgstr "" +"audio_oss_out: aviso: tasa de muestreo de %d Hz no suportada, probando 44100 " +"Hz\n" #: src/audio_out/audio_oss_out.c:225 #, c-format msgid "audio_oss_out: audio rate : %d requested, %d provided by device\n" msgstr "" +"audio_oss_out: tasa de audio: %d solicitada, %d proporcionada por el " +"dispositivo\n" #: src/audio_out/audio_oss_out.c:738 msgid "OSS audio device name" -msgstr "" +msgstr "nombre del dispositivo de audio OSS" #: src/audio_out/audio_oss_out.c:739 msgid "" @@ -135,10 +161,14 @@ msgid "" "number is appended to get the full device name.\n" "Select \"auto\" if you want xine to auto detect the corret setting." msgstr "" +"Especifica la parte raiz del nombre de dispositivo de audio, al cual el " +"número del dispositivo OSS se adjunta para obtener el nombre completo del " +"dispositivo.\n" +"Seleccione \"auto\" si desea que xine auto detecte el parámetro correcto." #: src/audio_out/audio_oss_out.c:746 msgid "OSS audio device number, -1 for none" -msgstr "" +msgstr "número de dispositivo audio OSS, -1 para ninguno" #: src/audio_out/audio_oss_out.c:747 msgid "" @@ -149,30 +179,38 @@ msgid "" "The range of this value is -1 or 0-15. This setting is ignored, when the OSS " "audio device name is set to \"auto\"." msgstr "" +"El nombre completo del dispositivo audio se crea concatenando el nombre de " +"dispositivo OSS y el número de dispositivo audio.\n" +"Si no necesita un número porque está contento con el dispositivo audio por " +"defecto de su sistema, póngalo a -1\n" +"El rango de este valor es -1 o 0-15. Éste parámetro se ignora cuando el " +"nombre del dispositivo audio OSS está puesto a \"auto\"." #: src/audio_out/audio_oss_out.c:756 msgid "audio_oss_out: audio.device.oss_device_name = auto, probing devs\n" -msgstr "" +msgstr "audio_oss_out: audio.device.oss_device_name = auto, sondeando devs\n" #: src/audio_out/audio_oss_out.c:759 msgid "audio_oss_out: Auto probe for audio device failed\n" -msgstr "" +msgstr "audio_oss_out: Sondeo automático de dispositivo audio falló\n" #: src/audio_out/audio_oss_out.c:775 #, c-format msgid "audio_oss_out: using device >%s<\n" -msgstr "" +msgstr "audio_oss_out: usando dispositivo >%s<\n" #: src/audio_out/audio_oss_out.c:781 src/audio_out/audio_oss_out.c:896 -#, fuzzy, c-format +#, c-format msgid "" "audio_oss_out: opening audio device %s failed:\n" "%s\n" -msgstr "input_cda: fallo al abrir el servidor '%s:%d': %s\n" +msgstr "" +"audio_oss_out: falló al abrir el dispositivo de audio %s:\n" +"%s\n" #: src/audio_out/audio_oss_out.c:802 msgid "a/v sync method to use by OSS" -msgstr "" +msgstr "método de sincronismo a/v a usar por OSS" #: src/audio_out/audio_oss_out.c:803 msgid "" @@ -203,6 +241,36 @@ msgid "" "for a/v sync; try this if your system does not support any of the realtime " "ioctls and you experience sync errors after long playback" msgstr "" +"xine puede usar diferentes métodos para mantener audio y vÃdeo " +"sincronizados. Que ajuste funciona mejor depende en el driver OSS y el " +"equipo de sonido que esté usando. Pruebe los varios métodos, si observa " +"problemas de sincronismo.\n" +"\n" +"El significado de las opciones es como sigue:\n" +"\n" +"auto\n" +"xine intenta detectar automáticamente detectar el ajuste óptimo\n" +"\n" +"getodelay\n" +"usa el ioctl SNDCTL_DSP_GETODELAY para conseguir verdadero sincronismo a/v " +"incluso si el driver asegura no soportar reprodución en tiempo real\n" +"\n" +"getoptr\n" +"usa el ioctl SNDCTL_DSP_GETOPTR para conseguir verdadero sincronismo a/v " +"incluso si el driver asegura no soportar el preferido ioctl " +"SNDCTL_DSP_GETODELAY\n" +"\n" +"softsync\n" +"usa sincronización software con el reloj del sistema; audio y vÃdeo pueden " +"quedar severamente fuera de sincronismo si la velocidad del reloj del " +"sistema no se ajusta exactamente a la velocidad de reproducción de su " +"tarjeta de sonido\n" +"\n" +"probebuffer\n" +"sondea el búfer de la tarjeta de sonido durante la inicialización para " +"calcular la latencia para sincronismo a/v; pruebe esto si su sistema no " +"soporta ninguno de los ioctls de tiempo real y observa errores de " +"sincronismo después de una reproducción larga" #: src/audio_out/audio_oss_out.c:851 msgid "" @@ -210,10 +278,15 @@ msgid "" "audio_oss_out: ...will use system real-time clock for soft-sync instead\n" "audio_oss_out: ...there may be audio/video synchronization issues\n" msgstr "" +"audio_oss_out: Sincronismo en tiempo real del driver de sonido " +"desactivado...\n" +"audio_oss_out: ...usaremos el reloj de tiempo real del sistema para soft-" +"sync, en su lugar\n" +"audio_oss_out: ...puede haber problemas de sincronización audio/vÃdeo\n" #: src/audio_out/audio_oss_out.c:858 msgid "OSS audio output latency (adjust a/v sync)" -msgstr "" +msgstr "Latencia de salida de audio OSS audio (ajuste sincronismo a/v)" #: src/audio_out/audio_oss_out.c:859 src/audio_out/audio_esd_out.c:542 msgid "" @@ -221,12 +294,17 @@ msgid "" "fixed offset here to compensate.\n" "The unit of the value is one PTS tick, which is the 90000th part of a second." msgstr "" +"Si observa que el sonido no está sincronizado con la imagen, puede " +"introducir aquà un desfase fijo para compensar.\n" +"La unidad del valor es un tick PTS tick, que es 1/90000 de segundo." #: src/audio_out/audio_oss_out.c:872 msgid "" "audio_oss_out: Audio driver realtime sync disabled...\n" "audio_oss_out: ...probing output buffer size: " msgstr "" +"audio_oss_out: Sincronismo tiempo real driver de audio desactivado...\n" +"audio_oss_out: ...ensayando tamaño del búfer de salida: " #: src/audio_out/audio_oss_out.c:889 #, c-format @@ -234,10 +312,12 @@ msgid "" "%d bytes\n" "audio_oss_out: ...there may be audio/video synchronization issues\n" msgstr "" +"%d bytes\n" +"audio_oss_out: ...puede haber problemas de sincronización audio/vÃdeo\n" #: src/audio_out/audio_oss_out.c:921 src/audio_out/audio_alsa_out.c:1459 msgid "speaker arrangement" -msgstr "" +msgstr "disposición de altavoces" #: src/audio_out/audio_oss_out.c:922 src/audio_out/audio_alsa_out.c:1460 msgid "" @@ -270,10 +350,42 @@ msgid "" "xine. You need to connect a digital surround decoder capable of decoding the " "formats you want to play to your sound card's digital output." msgstr "" +"Seleccione como están dispuestos sus altavoces, esto determina que altavoces " +"usará xine para la salida de sonido. Los valores individuales son:\n" +"\n" +"Mono 1.0: Tiene únicamente un altavoz.\n" +"Estéreo 2.0: Tiene dos altavoces, para el canal izquierdo y derecho.\n" +"Auriculares 2.0: Usa auriculares.\n" +"Estéreo 2.1: Tiene dos altavoces, para el canal izquierdo y derecho, y un " +"superbajos para las frecuencias bajas.\n" +"Envolvente 3.0: Tiene tres altavoces, para los canales izquierdo, derecho y " +"trasero.\n" +"Envolvente 4.0: Tiene cuatro altavoces para los canales izquierdo y derecho " +"delanteros, e izquierdo y derecho traseros.\n" +"Envolvente 4.1: Tiene cuatro altavoces para los canales izquierdo y derecho " +"delanteros, e izquierdo y derecho traseros, y un superbajos para las " +"frecuencias bajas.\n" +"Envolvente 5.0: Tiene cinco altavoces para los canales izquierdo centro y " +"derecho delanteros, e izquierdo y derecho traseros.\n" +"Envolvente 5.1: Tiene cinco altavoces para los canales izquierdo centro y " +"derecho delanteros, e izquierdo y derecho traseros, y un superbajos para las " +"frecuencias bajas.\n" +"Envolvente 6.0: Tiene cinco altavoces para los canales izquierdo centro y " +"derecho delanteros, e izquierdo centro y derecho traseros.\n" +"Envolvente 6.1: Tiene seis altavoces para los canales izquierdo centro y " +"derecho delanteros, e izquierdo centro y derecho traseros, y un superbajos " +"para las frecuencias bajas.\n" +"Envolvente 7.1: Tiene siete altavoces para los canales izquierdo centro y " +"derecho delanteros, izquierdo y derecho, e izquierdo y derecho traseros, y " +"un superbajos para las frecuencias bajas.\n" +"Paso libre: Su sistema de sonido recibirá sonido digital sin decodificar de " +"xine. Necesita conectar un decodificador digital envolvente capaz de " +"decodificar los formatos que quiera reproducir mediate la salida digital de " +"su tarjeta de sonido." #: src/audio_out/audio_oss_out.c:1018 msgid "OSS audio mixer number, -1 for none" -msgstr "" +msgstr "número de mezclador audio OSS, -1 para ninguno" #: src/audio_out/audio_oss_out.c:1019 msgid "" @@ -284,269 +396,290 @@ msgid "" "The range of this value is -1 or 0-15. This setting is ignored, when the OSS " "audio device name is set to \"auto\"." msgstr "" +"El nombre completo del dispositivo mezclador se crea tomando el nombre del " +"dispositivo OSS, reemplazando \"dsp\" por \"mixer\" y añadiendo el número de " +"mezclador.\n" +"Si no necesita un número porque está contento con el dispositivo mezclador " +"por omisión de su sistema, ponga esto a -1.\n" +"El rango de este valor es -1 o 0-15. Este parámetro se ignora cuando el " +"nombre del dispositivo audio OSS está puesto a \"auto\"." #: src/audio_out/audio_oss_out.c:1076 -#, fuzzy, c-format +#, c-format msgid "audio_oss_out: open() mixer %s failed: %s\n" -msgstr "input_cda: falló open(%s): %s.\n" +msgstr "audio_oss_out: función open() mezclador %s falló: %s\n" #: src/audio_out/audio_oss_out.c:1149 msgid "xine audio output plugin using oss-compliant audio devices/drivers" msgstr "" +"complemento de xine de salida de audio usando dispositivos/drivers " +"compatibles OSS" #: src/audio_out/audio_file_out.c:364 -#, fuzzy msgid "xine file audio output plugin" -msgstr "plugin de entrada de stream de red http" +msgstr "complemento de xine de salida de audio a fichero" #: src/audio_out/audio_coreaudio_out.c:567 msgid "xine output plugin for Coreaudio/Mac OS X" -msgstr "" +msgstr "complemento de xine de salida de audio para Coreaudio/Mac OS X" -#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:919 -#, fuzzy, c-format +#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:920 +#, c-format msgid "audio_sun_out: opening audio device %s failed: %s\n" -msgstr "input_sun_out: fallo al abrir el servidor '%s:%d': %s\n" +msgstr "audio_sun_out: fallo al abrir el dispositivo audio %s: %s\n" -#: src/audio_out/audio_sun_out.c:894 +#: src/audio_out/audio_sun_out.c:895 msgid "Sun audio device name" -msgstr "" +msgstr "Nombre del dispositivo audio de Sun" -#: src/audio_out/audio_sun_out.c:895 +#: src/audio_out/audio_sun_out.c:896 msgid "" "Specifies the file name for the Sun audio device to be used.\n" "This setting is security critical, because when changed to a different file, " "xine can be used to fill this file with arbitrary content. So you should be " "careful that the value you enter really is a proper Sun audio device." msgstr "" +"Especifica el nombre de fichero del dispositivo audio de Sun que debe " +"usarse.\n" +"Este parámetro es crÃtico, porque cuando se cambia a un fichero diferente, " +"xine puede usarse para llenar este fichero con contenido arbitrario. Por " +"ello deberá ser usted cuidadoso de que el parámetro que introduzca sea " +"realmente un dispositivo audio de Sun." -#: src/audio_out/audio_sun_out.c:937 +#: src/audio_out/audio_sun_out.c:938 #, fuzzy, c-format msgid "audio_sun_out: audio ioctl on device %s failed: %s\n" -msgstr "input_sun_out: fallo al abrir el servidor '%s:%d': %s\n" +msgstr "audio_sun_out: fallo al abrir el dispositivo audio %s: %s\n" -#: src/audio_out/audio_sun_out.c:988 +#: src/audio_out/audio_sun_out.c:989 msgid "xine audio output plugin using sun-compliant audio devices/drivers" msgstr "" +"complemento de xine de salida de audio usando dispositivos/drivers " +"compatibles sun" #: src/audio_out/audio_directx2_out.c:166 msgid "Error" -msgstr "" +msgstr "Error" #: src/audio_out/audio_directx2_out.c:173 msgid "success" -msgstr "" +msgstr "éxito" #: src/audio_out/audio_directx2_out.c:175 msgid "access denied" -msgstr "" +msgstr "acceso denegado" #: src/audio_out/audio_directx2_out.c:177 msgid "resource is already in use" -msgstr "" +msgstr "el recurso ya está siendo utilizado" #: src/audio_out/audio_directx2_out.c:178 msgid "object was already initialized" -msgstr "" +msgstr "el objecto ya fué inicializado" #: src/audio_out/audio_directx2_out.c:179 msgid "specified wave format is not supported" -msgstr "" +msgstr "el formato de onda especificado no está soportado" #: src/audio_out/audio_directx2_out.c:180 msgid "memory buffer has been lost and must be restored" -msgstr "" +msgstr "el búfer en memoria se ha perdido y debe ser restaurado" #: src/audio_out/audio_directx2_out.c:181 msgid "requested buffer control is not available" -msgstr "" +msgstr "el control del búfer pedido no está disponible" #: src/audio_out/audio_directx2_out.c:182 msgid "undetermined error inside DirectSound subsystem" -msgstr "" +msgstr "error indeterminado dentro del subsistema DirectSound" #: src/audio_out/audio_directx2_out.c:184 msgid "DirectSound hardware device is unavailable" -msgstr "" +msgstr "dispositivo fÃsico DirectSound no disponible" #: src/audio_out/audio_directx2_out.c:186 msgid "function is not valid for the current state of the object" -msgstr "" +msgstr "función no válida para el estado actual del object" #: src/audio_out/audio_directx2_out.c:187 msgid "invalid parameter was passed" -msgstr "" +msgstr "se ha pasado un parámetro inválido" #: src/audio_out/audio_directx2_out.c:188 msgid "object doesn't support aggregation" -msgstr "" +msgstr "el objeto no soporta agregación" #: src/audio_out/audio_directx2_out.c:189 msgid "no sound driver available for use" -msgstr "" +msgstr "no hay driver de sonido disponible para su uso" #: src/audio_out/audio_directx2_out.c:190 msgid "requested COM interface not available" -msgstr "" +msgstr "interfase COM solicitada no disponible" #: src/audio_out/audio_directx2_out.c:191 msgid "another application has a higher priority level" -msgstr "" +msgstr "otra aplicación tiene un nivel de prioridad más alto" #: src/audio_out/audio_directx2_out.c:192 msgid "insufficient memory" -msgstr "" +msgstr "memoria insuficiente" #: src/audio_out/audio_directx2_out.c:193 msgid "low priority level for this function" -msgstr "" +msgstr "nivel de prioridad bajo para ésta función" #: src/audio_out/audio_directx2_out.c:194 msgid "DirectSound wasn't initialized" -msgstr "" +msgstr "DirectSound no fué inicializado" #: src/audio_out/audio_directx2_out.c:195 msgid "function is not supported" -msgstr "" +msgstr "función no soportada" #: src/audio_out/audio_directx2_out.c:196 msgid "unknown error" -msgstr "" +msgstr "error desconocido" #: src/audio_out/audio_directx2_out.c:206 +#, c-format msgid "Unable to create direct sound object." -msgstr "" +msgstr "Incapaz de crear el objeto de sonido directo." #: src/audio_out/audio_directx2_out.c:212 +#, c-format msgid "Could not set direct sound cooperative level." -msgstr "" +msgstr "No pude poner el nivel cooperativo del sonido directo." #: src/audio_out/audio_directx2_out.c:286 msgid "Unable to create secondary direct sound buffer" -msgstr "" +msgstr "Incapaz de crear búfer secundario de sonido directo" #: src/audio_out/audio_directx2_out.c:310 +#, c-format msgid "Unable to create buffer position events." -msgstr "" +msgstr "Incapaz de crear eventos posicionales de búfer." #: src/audio_out/audio_directx2_out.c:318 msgid "Unable to get notification interface" -msgstr "" +msgstr "Incapaz de conseguir interfase de notificación" #: src/audio_out/audio_directx2_out.c:323 msgid "Unable to set notification positions" -msgstr "" +msgstr "Incapaz de poner posiciones de notificación" #: src/audio_out/audio_directx2_out.c:343 msgid "Couldn't play sound buffer" -msgstr "" +msgstr "No pude tocar el búfer de sonido" #: src/audio_out/audio_directx2_out.c:355 msgid "Couldn't stop sound buffer" -msgstr "" +msgstr "No pude parar el búfer de sonido" #: src/audio_out/audio_directx2_out.c:368 msgid "Can't get buffer position" -msgstr "" +msgstr "No puedo conseguir la posición del búfer" #: src/audio_out/audio_directx2_out.c:382 msgid "Can't set buffer position" -msgstr "" +msgstr "No puedo poner la posición del búfer" #: src/audio_out/audio_directx2_out.c:414 msgid "Can't set sound volume" -msgstr "" +msgstr "No puedo poner el volumen de sonido" #: src/audio_out/audio_directx2_out.c:432 +#, c-format msgid ": buffer lost, tryig to restore\n" -msgstr "" +msgstr ": búfer perdido, intentando restaurar\n" #: src/audio_out/audio_directx2_out.c:436 msgid "Couldn't lock direct sound buffer" -msgstr "" +msgstr "No pude bloquear el búfer de sonido directo" #: src/audio_out/audio_directx2_out.c:447 msgid "Couldn't unlock direct sound buffer" -msgstr "" +msgstr "No pude desbloquear el búfer de sonido directo" #: src/audio_out/audio_directx2_out.c:544 -#, fuzzy +#, c-format msgid "Unable to create primary direct sound buffer." -msgstr "no se puede ubicar el búfer de entrada.\n" +msgstr "Incapaz de crear el búfer primario de sonido directo." #: src/audio_out/audio_directx2_out.c:637 +#, c-format msgid ": play cursor overran, flushing buffers\n" -msgstr "" +msgstr ": cursor de ejecución desbordado, vaciando búffers\n" #: src/audio_out/audio_directx2_out.c:655 #, c-format msgid ": delayed by %ld msec\n" -msgstr "" +msgstr ": retrasado en %ld msec\n" #: src/audio_out/audio_directx2_out.c:759 -#, fuzzy, c-format +#, c-format msgid ": can't create pthread condition: %s\n" -msgstr "video_out: no se puede crear un hilo (%s)\n" +msgstr ": no puedo crear condición pthread: %s\n" #: src/audio_out/audio_directx2_out.c:763 -#, fuzzy, c-format +#, c-format msgid ": can't create pthread mutex: %s\n" -msgstr "video_out: no se puede crear un hilo (%s)\n" +msgstr ": no puedo crear mutex pthread: %s\n" #: src/audio_out/audio_directx2_out.c:770 -#, fuzzy, c-format +#, c-format msgid ": can't create buffer pthread: %s\n" -msgstr "demux_ts: no se puede crear un hilo nuevo (%s)\n" +msgstr ": no puedo crear búfer pthread: %s\n" #: src/audio_out/audio_directx2_out.c:877 -#, fuzzy, c-format +#, c-format msgid ": can't destroy buffer pthread: %s\n" -msgstr "demux_ts: no se puede crear un hilo nuevo (%s)\n" +msgstr ": no puedo destruir búfer: %s\n" #: src/audio_out/audio_directx2_out.c:884 #, c-format msgid ": can't destroy pthread condition: %s\n" -msgstr "" +msgstr ": no puedo crear condición pthread: %s\n" #: src/audio_out/audio_directx2_out.c:887 -#, fuzzy, c-format +#, c-format msgid ": can't destroy pthread mutex: %s\n" -msgstr "video_out: no se puede crear un hilo (%s)\n" +msgstr ": no puedo destruir mutex pthread: %s\n" #: src/audio_out/audio_directx2_out.c:947 #, c-format msgid ": unknown control command %d\n" -msgstr "" +msgstr ": comando de control desconocido %d\n" #: src/audio_out/audio_directx2_out.c:1003 -#, fuzzy msgid "second xine audio output plugin using directx" -msgstr "plugin de entrada de stream de red http" +msgstr "segundo complemento de xine de salida de audio usando directx" #: src/audio_out/audio_arts_out.c:373 msgid "xine audio output plugin using kde artsd" -msgstr "" +msgstr "complemento de xine de salida de audio usando artsd de kde" #: src/audio_out/audio_none_out.c:225 msgid "xine dummy audio output plugin" -msgstr "" +msgstr "complemento ficticio de xine de salida de audio " #: src/audio_out/audio_directx_out.c:829 msgid "xine audio output plugin for win32 using directx" -msgstr "" +msgstr "segundo complemento de xine de salida de audio para win32 usando directx" #: src/audio_out/audio_alsa_out.c:355 +#, c-format msgid "audio_alsa_out:Already open...WHY!" -msgstr "" +msgstr "audio_alsa_out:Ya está abierto...¡PORQUÉ!" #: src/audio_out/audio_alsa_out.c:383 #, c-format msgid "audio_alsa_out: snd_pcm_open() of %s failed: %s\n" -msgstr "" +msgstr "audio_alsa_out: snd_pcm_open() de %s falló: %s\n" #: src/audio_out/audio_alsa_out.c:385 msgid "audio_alsa_out: >>> check if another program already uses PCM <<<\n" -msgstr "" +msgstr "audio_alsa_out: >>> comprobar si otro programa ya usa PCM <<<\n" #: src/audio_out/audio_alsa_out.c:398 #, c-format @@ -554,10 +687,12 @@ msgid "" "audio_alsa_out: broken configuration for this PCM: no configurations " "available: %s\n" msgstr "" +"audio_alsa_out: configuración rota para éste PCM: no hay configuraciones " +"disponibles: %s\n" #: src/audio_out/audio_alsa_out.c:1286 msgid "notify changes to the hardware mixer" -msgstr "" +msgstr "notificar cambios al mezclador en hardware" #: src/audio_out/audio_alsa_out.c:1287 msgid "" @@ -565,15 +700,18 @@ msgid "" "notification so that it can update its graphical representation of the mixer " "settings on the fly." msgstr "" +"Cuando el mezclador en hardware cambia, su aplicación recibirá una " +"notificiación de modo que pueda actualizar su representación gráfica de los " +"ajustes del mezclador al vuelo." #: src/audio_out/audio_alsa_out.c:1350 #, c-format msgid "snd_lib_error_set_handler() failed: %d" -msgstr "" +msgstr "snd_lib_error_set_handler() falló: %d" #: src/audio_out/audio_alsa_out.c:1357 msgid "sound card can do mmap" -msgstr "" +msgstr "la tarjeta de sonido puede hacer mmap" #: src/audio_out/audio_alsa_out.c:1358 msgid "" @@ -581,40 +719,51 @@ msgid "" "You can try enabling it and check, if everything works. If it does, this " "will increase performance." msgstr "" +"Active esto, si su tarjeta de sonido y el driver soporta ES mapeada en " +"memoria.\n" +"Puede probar a activarlo y verficar, si todo funciona. Si lo hace, esto " +"aumentará el rendimiento." #: src/audio_out/audio_alsa_out.c:1367 msgid "device used for mono output" -msgstr "" +msgstr "dispositivo usado para salida mono" #: src/audio_out/audio_alsa_out.c:1368 msgid "" "xine will use this alsa device to output mono sound.\n" "See the alsa documentation for information on alsa devices." msgstr "" +"xine usará éste dispositivo para generar sonido monofónico.\n" +"Vea la documentación de alsa para información de dispositivos alsa." #: src/audio_out/audio_alsa_out.c:1376 msgid "device used for stereo output" -msgstr "" +msgstr "dispositivo usado para salida estéreo" #: src/audio_out/audio_alsa_out.c:1377 msgid "" "xine will use this alsa device to output stereo sound.\n" "See the alsa documentation for information on alsa devices." msgstr "" +"xine usará este dispositivo alsa para la salida de sonido estereo.\n" +"Vea la documentación de alsa para información de dispositivos alsa." #: src/audio_out/audio_alsa_out.c:1385 msgid "device used for 4-channel output" -msgstr "" +msgstr "dispositivo usado para salida de cuatro canales" #: src/audio_out/audio_alsa_out.c:1386 msgid "" "xine will use this alsa device to output 4 channel (4.0) surround sound.\n" "See the alsa documentation for information on alsa devices." msgstr "" +"xine usará este dispositivo alsa para la salida de sonido envolvente de 4 " +"canales (4.0).\n" +"Vea la documentación de alsa para información de dispositivos alsa." #: src/audio_out/audio_alsa_out.c:1395 src/audio_out/audio_alsa_out.c:1405 msgid "device used for 5.1-channel output" -msgstr "" +msgstr "dispositivo usado para salida de 5.1 canales" #: src/audio_out/audio_alsa_out.c:1396 msgid "" @@ -622,6 +771,9 @@ msgid "" "sound.\n" "See the alsa documentation for information on alsa devices." msgstr "" +"xine usará este dispositivo alsa para la salida de sonido envolvente de 5 " +"canales más LFE (5.1).\n" +"Vea la documentación de alsa para información de dispositivos alsa." #: src/audio_out/audio_alsa_out.c:1406 msgid "" @@ -629,101 +781,109 @@ msgid "" "This can be used be external surround decoders.\n" "See the alsa documentation for information on alsa devices." msgstr "" +"xine usará este dispositivo alsa para la salida de sonido digital envolvente " +"sin decodificar. Esto puede usarse en decodificadores envolventes externos.\n" +"Vea la documentación de alsa para información de dispositivos alsa." #: src/audio_out/audio_alsa_out.c:1426 -#, fuzzy, c-format +#, c-format msgid "snd_pcm_open() failed:%d:%s\n" -msgstr "input_cda: falló open(%s): %s.\n" +msgstr "snd_pcm_open() falló:%d:%s\n" #: src/audio_out/audio_alsa_out.c:1428 +#, c-format msgid ">>> Check if another program already uses PCM <<<\n" -msgstr "" +msgstr ">>> Comprobar si otro programa está ya usando PCM <<<\n" #: src/audio_out/audio_alsa_out.c:1489 msgid "audio_alsa_out : supported modes are " -msgstr "" +msgstr "audio_alsa_out : los modos soportados son " #: src/audio_out/audio_alsa_out.c:1492 msgid "8bit " -msgstr "" +msgstr "8bit " #: src/audio_out/audio_alsa_out.c:1497 msgid "16bit " -msgstr "" +msgstr "16bit " #: src/audio_out/audio_alsa_out.c:1501 msgid "24bit " -msgstr "" +msgstr "24bit " #: src/audio_out/audio_alsa_out.c:1505 msgid "32bit " -msgstr "" +msgstr "32bit " #: src/audio_out/audio_alsa_out.c:1509 msgid "mono " -msgstr "" +msgstr "mono " #: src/audio_out/audio_alsa_out.c:1513 msgid "stereo " -msgstr "" +msgstr "estéreo " #: src/audio_out/audio_alsa_out.c:1518 msgid "4-channel " -msgstr "" +msgstr "4-canales " #: src/audio_out/audio_alsa_out.c:1521 msgid "(4-channel not enabled in xine config) " -msgstr "" +msgstr "(4-canales no activado en la configuración de xine) " #: src/audio_out/audio_alsa_out.c:1526 msgid "4.1-channel " -msgstr "" +msgstr "4.1-canales " #: src/audio_out/audio_alsa_out.c:1529 msgid "(4.1-channel not enabled in xine config) " -msgstr "" +msgstr "(4.1-canales no activado en la configuración de xine) " #: src/audio_out/audio_alsa_out.c:1534 msgid "5-channel " -msgstr "" +msgstr "5-canales " #: src/audio_out/audio_alsa_out.c:1537 msgid "(5-channel not enabled in xine config) " -msgstr "" +msgstr "(5-canales no activado en la configuración de xine) " #: src/audio_out/audio_alsa_out.c:1542 msgid "5.1-channel " -msgstr "" +msgstr "5.1-canales " #: src/audio_out/audio_alsa_out.c:1545 msgid "(5.1-channel not enabled in xine config) " -msgstr "" +msgstr "(5.1-canales no activado en la configuración de xine) " #: src/audio_out/audio_alsa_out.c:1568 msgid "a/52 and DTS pass-through\n" -msgstr "" +msgstr "travesÃa a/52 y DTS\n" #: src/audio_out/audio_alsa_out.c:1571 msgid "(a/52 and DTS pass-through not enabled in xine config)\n" -msgstr "" +msgstr "(travesÃa a/52 and DTS no activada en la configuración de xine)\n" #: src/audio_out/audio_alsa_out.c:1578 msgid "alsa mixer device" -msgstr "" +msgstr "dispositivo mezclador alsa" #: src/audio_out/audio_alsa_out.c:1579 msgid "" "xine will use this alsa mixer device to change the volume.\n" "See the alsa documentation for information on alsa devices." msgstr "" +"xine usará este dispositivo mezclador alsa para cambiar el volumen.\n" +"Vea la documentación de alsa para información de dispositivos alsa." #: src/audio_out/audio_alsa_out.c:1653 msgid "xine audio output plugin using alsa-compliant audio devices/drivers" msgstr "" +"complemento de xine de salida de audio usando dispositvos/drivers " +"compatibles alsa" #: src/audio_out/audio_irixal_out.c:387 msgid "irixal audio output maximum gap length" -msgstr "" +msgstr "máxima longitud de intervalo en salida de sonido irixal" #: src/audio_out/audio_irixal_out.c:388 msgid "" @@ -732,68 +892,77 @@ msgid "" "The unit of this value is one PTS tick, which is the 90000th part of a " "second." msgstr "" +"Puede especificar la máxima distancia entre el audio y el video que xine " +"tolerará antes de que trate de resincronizarlos.\n" +"La unidad del valor es un tick PTS tick, que es 1/90000 de segundo." #: src/audio_out/audio_irixal_out.c:417 msgid "xine audio output plugin using IRIX libaudio" -msgstr "" +msgstr "complemento de xine de salida de audio usando libaudio IRIX" #: src/audio_out/audio_esd_out.c:167 #, c-format msgid "audio_esd_out: connecting to ESD server %s: %s\n" -msgstr "" +msgstr "audio_esd_out: conectando al servidor ESD %s: %s\n" #: src/audio_out/audio_esd_out.c:499 msgid "audio_esd_out: connecting to esd server...\n" -msgstr "" +msgstr "audio_esd_out: conectando al servidor esd...\n" #: src/audio_out/audio_esd_out.c:511 #, c-format msgid "audio_esd_out: can't connect to %s ESD server: %s\n" -msgstr "" +msgstr "audio_esd_out: no puedo conectar al servidor ESD %s: %s\n" #: src/audio_out/audio_esd_out.c:541 msgid "esd audio output latency (adjust a/v sync)" -msgstr "" +msgstr "latencia de salida de audio esd (ajustar sincronismo a/v)" #: src/audio_out/audio_esd_out.c:574 msgid "xine audio output plugin using esound" -msgstr "" +msgstr "complemento de xine de salida de audio usando esound" #: src/audio_out/audio_pulse_out.c:511 +#, fuzzy msgid "device used for pulseaudio" -msgstr "" +msgstr "dispositivo usado para polypaudio" #: src/audio_out/audio_pulse_out.c:512 +#, fuzzy msgid "use 'server[:sink]' for setting the pulseaudio sink device." -msgstr "" +msgstr "use 'server[:sink]' para definir el sumidero del dispositivo polypaudio." #: src/audio_out/audio_pulse_out.c:557 #, fuzzy msgid "xine audio output plugin using pulseaudio sound server" -msgstr "plugin de entrada de stream de red http" +msgstr "complemento de xine de salida de audio usando servidor de sonido polypaudio" #: src/xine-engine/io_helper.c:252 +#, c-format msgid "io_helper: waiting abandoned\n" msgstr "" #: src/xine-engine/io_helper.c:259 -#, fuzzy, c-format +#, c-format msgid "io_helper: waiting failed: %s\n" -msgstr "input_cda: falló fopen(%s): %s\n" +msgstr "" #: src/xine-engine/io_helper.c:314 msgid "failed to get status of socket" msgstr "" #: src/xine-engine/io_helper.c:388 +#, c-format msgid "io_helper: Permission denied\n" msgstr "" #: src/xine-engine/io_helper.c:392 +#, c-format msgid "io_helper: File not found\n" msgstr "" #: src/xine-engine/io_helper.c:396 +#, c-format msgid "io_helper: Connection Refused\n" msgstr "" @@ -836,128 +1005,127 @@ msgid "" "accelerated, this can dramatically reduce CPU usage." msgstr "" -#: src/xine-engine/xine.c:696 src/xine-engine/xine.c:803 -#: src/xine-engine/xine.c:842 src/xine-engine/xine.c:878 -#: src/xine-engine/xine.c:890 src/xine-engine/xine.c:903 -#: src/xine-engine/xine.c:916 src/xine-engine/xine.c:929 -#: src/xine-engine/xine.c:955 src/xine-engine/xine.c:980 -#: src/xine-engine/xine.c:1015 +#: src/xine-engine/xine.c:704 src/xine-engine/xine.c:811 +#: src/xine-engine/xine.c:850 src/xine-engine/xine.c:886 +#: src/xine-engine/xine.c:898 src/xine-engine/xine.c:911 +#: src/xine-engine/xine.c:924 src/xine-engine/xine.c:937 +#: src/xine-engine/xine.c:963 src/xine-engine/xine.c:988 +#: src/xine-engine/xine.c:1023 msgid "xine: error while parsing mrl\n" msgstr "" -#: src/xine-engine/xine.c:732 -#, fuzzy, c-format +#: src/xine-engine/xine.c:740 +#, c-format msgid "xine: found input plugin : %s\n" -msgstr "xine: no se puede encontrar el plugin de entrada para este MRL\n" +msgstr "" -#: src/xine-engine/xine.c:750 -#, fuzzy, c-format +#: src/xine-engine/xine.c:758 +#, c-format msgid "xine: input plugin cannot open MRL [%s]\n" -msgstr "usando el plugin de entrada '%s' para el MRL '%s'\n" +msgstr "" -#: src/xine-engine/xine.c:766 -#, fuzzy, c-format +#: src/xine-engine/xine.c:774 +#, c-format msgid "xine: cannot find input plugin for MRL [%s]\n" -msgstr "xine: no se puede encontrar el plugin de entrada para este MRL\n" +msgstr "xine: no se puede encontrar el complemento de entrada para MRL [%s]\n" -#: src/xine-engine/xine.c:792 -#, fuzzy, c-format +#: src/xine-engine/xine.c:800 +#, c-format msgid "xine: specified demuxer %s failed to start\n" -msgstr "xine_play: fallo al iniciar el demultiplexor\n" +msgstr "xine_play: fallo al iniciar el demultiplexor %s especificado\n" -#: src/xine-engine/xine.c:828 -#, fuzzy +#: src/xine-engine/xine.c:836 +#, c-format msgid "xine: join rip input plugin\n" -msgstr "plugin de entrada de stream de red http" +msgstr "" -#: src/xine-engine/xine.c:835 -#, fuzzy +#: src/xine-engine/xine.c:843 msgid "xine: error opening rip input plugin instance\n" -msgstr "plugin de entrada de stream de red http" +msgstr "" -#: src/xine-engine/xine.c:866 -#, fuzzy, c-format +#: src/xine-engine/xine.c:874 +#, c-format msgid "xine: last_probed demuxer %s failed to start\n" -msgstr "xine_play: fallo al iniciar el demultiplexor\n" +msgstr "" -#: src/xine-engine/xine.c:895 +#: src/xine-engine/xine.c:903 msgid "ignoring video\n" msgstr "" -#: src/xine-engine/xine.c:908 +#: src/xine-engine/xine.c:916 msgid "ignoring audio\n" msgstr "" -#: src/xine-engine/xine.c:921 +#: src/xine-engine/xine.c:929 msgid "ignoring subpicture\n" msgstr "" -#: src/xine-engine/xine.c:934 +#: src/xine-engine/xine.c:942 msgid "input cache plugin disabled\n" msgstr "" -#: src/xine-engine/xine.c:1005 +#: src/xine-engine/xine.c:1013 #, c-format msgid "subtitle mrl opened '%s'\n" msgstr "" -#: src/xine-engine/xine.c:1009 -#, fuzzy +#: src/xine-engine/xine.c:1017 msgid "xine: error opening subtitle mrl\n" -msgstr "input_dvd: no se puede abrir el archivo >%s<\n" +msgstr "" -#: src/xine-engine/xine.c:1041 +#: src/xine-engine/xine.c:1049 +#, c-format msgid "xine: error while parsing MRL\n" msgstr "" -#: src/xine-engine/xine.c:1048 +#: src/xine-engine/xine.c:1056 #, c-format msgid "xine: changing option '%s' from MRL isn't permitted\n" msgstr "" -#: src/xine-engine/xine.c:1068 -#, fuzzy, c-format +#: src/xine-engine/xine.c:1076 +#, c-format msgid "xine: couldn't find demux for >%s<\n" -msgstr "xine: no se pudo encontrar el demultiplexor para >%s<\n" +msgstr "xine: no se pudo encontrar un demultiplexor para >%s<\n" -#: src/xine-engine/xine.c:1084 -#, fuzzy, c-format +#: src/xine-engine/xine.c:1092 +#, c-format msgid "xine: found demuxer plugin: %s\n" -msgstr "xine: no se pudo encontrar el demultiplexor para >%s<\n" +msgstr "xine: encontrado complemento demultiplexor: %s\n" -#: src/xine-engine/xine.c:1104 -#, fuzzy +#: src/xine-engine/xine.c:1112 +#, c-format msgid "xine: demuxer failed to start\n" -msgstr "xine_play: fallo al iniciar el demultiplexor\n" +msgstr "xine: fallo al iniciar el demultiplexor\n" -#: src/xine-engine/xine.c:1167 -#, fuzzy +#: src/xine-engine/xine.c:1177 +#, c-format msgid "xine_play: no demux available\n" -msgstr "xine_play: fallo al iniciar el demultiplexor\n" +msgstr "xine_play: no hay disponible un demultiplexor\n" -#: src/xine-engine/xine.c:1237 -#, fuzzy +#: src/xine-engine/xine.c:1247 +#, c-format msgid "xine_play: demux failed to start\n" msgstr "xine_play: fallo al iniciar el demultiplexor\n" -#: src/xine-engine/xine.c:1508 +#: src/xine-engine/xine.c:1523 #, c-format msgid "xine: The specified save_dir \"%s\" might be a security risk.\n" msgstr "" -#: src/xine-engine/xine.c:1513 +#: src/xine-engine/xine.c:1528 msgid "The specified save_dir might be a security risk." msgstr "" -#: src/xine-engine/xine.c:1539 +#: src/xine-engine/xine.c:1554 msgid "xine: locale not supported by C library\n" msgstr "" -#: src/xine-engine/xine.c:1548 +#: src/xine-engine/xine.c:1563 msgid "media format detection strategy" msgstr "" -#: src/xine-engine/xine.c:1549 +#: src/xine-engine/xine.c:1564 msgid "" "xine offers various methods to detect the media format of input to play. The " "individual values are:\n" @@ -975,11 +1143,11 @@ msgid "" "Detect by file name extension only.\n" msgstr "" -#: src/xine-engine/xine.c:1567 +#: src/xine-engine/xine.c:1582 msgid "directory for saving streams" msgstr "" -#: src/xine-engine/xine.c:1568 +#: src/xine-engine/xine.c:1583 msgid "" "When using the stream save feature, files will be written only into this " "directory.\n" @@ -989,11 +1157,11 @@ msgid "" "content in any file." msgstr "" -#: src/xine-engine/xine.c:1579 +#: src/xine-engine/xine.c:1594 msgid "allow implicit changes to the configuration (e.g. by MRL)" msgstr "" -#: src/xine-engine/xine.c:1580 +#: src/xine-engine/xine.c:1595 msgid "" "If enabled, you allow xine to change your configuration without explicit " "actions from your side. For example configuration changes demanded by MRLs " @@ -1003,103 +1171,108 @@ msgid "" "configuration, you might end with a totally messed up xine." msgstr "" -#: src/xine-engine/xine.c:1594 +#: src/xine-engine/xine.c:1609 msgid "Timeout for network stream reading (in seconds)" msgstr "" -#: src/xine-engine/xine.c:1595 +#: src/xine-engine/xine.c:1610 msgid "" "Specifies the timeout when reading from network streams, in seconds. Too low " "values might stop streaming when the source is slow or the bandwidth is " "occupied, too high values will freeze the player if the connection is lost." msgstr "" -#: src/xine-engine/xine.c:1946 +#: src/xine-engine/xine.c:1962 msgid "messages" msgstr "mensajes" -#: src/xine-engine/xine.c:1947 +#: src/xine-engine/xine.c:1963 msgid "plugin" -msgstr "plugin" +msgstr "complemento" -#: src/xine-engine/xine.c:1948 +#: src/xine-engine/xine.c:1964 msgid "trace" -msgstr "" +msgstr "traza" #: src/xine-engine/input_rip.c:139 src/xine-engine/input_rip.c:259 -#, fuzzy, c-format +#, c-format msgid "input_rip: reading of saved data failed: %s\n" -msgstr "input_vcd: falló la lectura de datos\n" +msgstr "" #: src/xine-engine/input_rip.c:154 -#, fuzzy +#, c-format msgid "input_rip: reading by input plugin failed\n" -msgstr "input_dvd: error de lectura en plugin input_dvd\n" +msgstr "" #: src/xine-engine/input_rip.c:162 src/xine-engine/input_rip.c:291 -#: src/xine-engine/input_rip.c:643 -#, fuzzy, c-format +#: src/xine-engine/input_rip.c:657 +#, c-format msgid "input_rip: error writing to file %<PRIdMAX> bytes: %s\n" -msgstr "input_dvd: no se puede abrir el archivo >%s<\n" +msgstr "" #: src/xine-engine/input_rip.c:183 +#, c-format msgid "input_rip: open() function should never be called\n" msgstr "" #: src/xine-engine/input_rip.c:314 src/xine-engine/input_rip.c:419 -#, fuzzy +#, c-format msgid "input_rip: seeking failed\n" -msgstr "input_vcd: falló la lectura de datos\n" +msgstr "" #: src/xine-engine/input_rip.c:371 src/xine-engine/input_rip.c:389 -#, fuzzy, c-format +#, c-format msgid "input_rip: seeking failed: %s\n" -msgstr "input_cda: falló fopen(%s): %s\n" +msgstr "" #: src/xine-engine/input_rip.c:397 #, c-format msgid "input_rip: %<PRIdMAX> bytes dropped\n" msgstr "" -#: src/xine-engine/input_rip.c:548 +#: src/xine-engine/input_rip.c:562 +#, c-format msgid "input_rip: input plugin not defined!\n" msgstr "" -#: src/xine-engine/input_rip.c:554 +#: src/xine-engine/input_rip.c:568 +#, c-format msgid "" "input_rip: target directory wasn't specified, please fill out the option " "'media.capture.save_dir'\n" msgstr "" -#: src/xine-engine/input_rip.c:556 +#: src/xine-engine/input_rip.c:570 msgid "" "The stream save feature is disabled until you set media.capture.save_dir in " "the configuration." msgstr "" -#: src/xine-engine/input_rip.c:563 +#: src/xine-engine/input_rip.c:577 +#, c-format msgid "input_rip: ripping/caching of this source is not permitted!\n" msgstr "" -#: src/xine-engine/input_rip.c:565 +#: src/xine-engine/input_rip.c:579 msgid "" "xine is not allowed to save from this source. (possibly copyrighted " "material?)" msgstr "" -#: src/xine-engine/input_rip.c:571 +#: src/xine-engine/input_rip.c:585 +#, c-format msgid "input_rip: file name not given!\n" msgstr "" -#: src/xine-engine/input_rip.c:613 -#, fuzzy, c-format +#: src/xine-engine/input_rip.c:627 +#, c-format msgid "input_rip: error opening file %s: %s\n" -msgstr "input_dvd: no se puede abrir el archivo >%s<\n" +msgstr "" #: src/xine-engine/audio_decoder.c:366 -#, fuzzy, c-format +#, c-format msgid "audio_decoder: no plugin available to handle '%s'\n" -msgstr "encontrado plugin decodificador de audio: %s\n" +msgstr "" #: src/xine-engine/audio_decoder.c:383 #, c-format @@ -1119,7 +1292,7 @@ msgstr "" #: src/xine-engine/alphablend.c:2123 msgid "disable exact alpha blending of overlays" -msgstr "" +msgstr "desactivar la mezcla alfa exacta de superposiciones" #: src/xine-engine/alphablend.c:2124 msgid "" @@ -1129,136 +1302,143 @@ msgid "" "The result is that alpha blending of overlays is less accurate than before, " "but the CPU usage will be decreased as well." msgstr "" +"Si experimenta un impacto en el rendimiento cuando la Visualización En " +"Pantalla u otras superposiciones como los subtÃtulos de DVD están activos, " +"entonces quizás quiera activar esta opción\n" +"El resultado es que la mezcla alfa de superposiciones son menos precisos que " +"antes, pero el uso de la CPU también disminuirá." #: src/xine-engine/input_cache.c:167 +#, c-format msgid ": open() function should never be called\n" msgstr "" #: src/xine-engine/input_cache.c:349 -#, fuzzy +#, c-format msgid ": input plugin not defined!\n" -msgstr "usando el plugin de entrada '%s' para el MRL '%s'\n" +msgstr "" -#: src/xine-engine/osd.c:739 +#: src/xine-engine/osd.c:745 #, c-format msgid "font '%s-%d' already loaded, weird.\n" msgstr "" -#: src/xine-engine/osd.c:751 +#: src/xine-engine/osd.c:757 #, c-format msgid "font '%s' loading failed (%d < %d)\n" msgstr "" -#: src/xine-engine/osd.c:761 +#: src/xine-engine/osd.c:767 #, c-format msgid "wrong version for font '%s'. expected %d found %d.\n" msgstr "" -#: src/xine-engine/osd.c:828 +#: src/xine-engine/osd.c:834 msgid "osd: cannot initialize ft2 library\n" msgstr "" -#: src/xine-engine/osd.c:851 +#: src/xine-engine/osd.c:857 #, c-format msgid "osd: error matching font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:865 +#: src/xine-engine/osd.c:871 #, c-format msgid "osd: error loading font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:868 +#: src/xine-engine/osd.c:874 #, c-format msgid "osd: error looking up font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:889 +#: src/xine-engine/osd.c:895 #, c-format msgid "osd: error loading font %s with ft2\n" msgstr "" -#: src/xine-engine/osd.c:899 +#: src/xine-engine/osd.c:905 msgid "osd: error setting font size (no scalable font?)\n" msgstr "" -#: src/xine-engine/osd.c:1015 +#: src/xine-engine/osd.c:1021 #, c-format msgid "" "osd: unknown sequence starting with byte 0x%02X in encoding \"%s\", " "skipping\n" msgstr "" -#: src/xine-engine/osd.c:1071 +#: src/xine-engine/osd.c:1077 msgid "osd: can't find out current locale character set\n" msgstr "" -#: src/xine-engine/osd.c:1081 +#: src/xine-engine/osd.c:1087 #, c-format msgid "osd: unsupported conversion %s -> %s, no conversion performed\n" msgstr "" -#: src/xine-engine/osd.c:1136 src/xine-engine/osd.c:1304 +#: src/xine-engine/osd.c:1142 src/xine-engine/osd.c:1310 msgid "osd: font isn't defined\n" msgstr "" -#: src/xine-engine/osd.c:1175 +#: src/xine-engine/osd.c:1181 msgid "osd: error loading glyph\n" msgstr "" -#: src/xine-engine/osd.c:1181 +#: src/xine-engine/osd.c:1187 msgid "osd: error in rendering glyph\n" msgstr "" -#: src/xine-engine/osd.c:1341 +#: src/xine-engine/osd.c:1347 #, c-format msgid "osd: error loading glyph %i\n" msgstr "" -#: src/xine-engine/osd.c:1348 +#: src/xine-engine/osd.c:1354 msgid "osd: error in rendering\n" msgstr "" -#: src/xine-engine/osd.c:1596 +#: src/xine-engine/osd.c:1602 msgid "palette (foreground-border-background) to use for subtitles and OSD" msgstr "" -#: src/xine-engine/osd.c:1597 +#: src/xine-engine/osd.c:1603 msgid "" "The palette for on-screen-display and some subtitle formats that do not " "specify any colouring themselves. The palettes are listed in the form: " "foreground-border-background." msgstr "" -#: src/xine-engine/configfile.c:896 +#: src/xine-engine/configfile.c:924 +#, c-format msgid "The current config file has been modified by a newer version of xine." msgstr "" -#: src/xine-engine/configfile.c:1001 +#: src/xine-engine/configfile.c:1029 #, c-format msgid "configfile: WARNING: backing up configfile to %s failed\n" msgstr "" -#: src/xine-engine/configfile.c:1002 +#: src/xine-engine/configfile.c:1030 msgid "configfile: WARNING: your configuration will not be saved\n" msgstr "" -#: src/xine-engine/configfile.c:1101 +#: src/xine-engine/configfile.c:1129 #, c-format msgid "configfile: WARNING: writing configuration to %s failed\n" msgstr "" -#: src/xine-engine/configfile.c:1102 +#: src/xine-engine/configfile.c:1130 #, c-format msgid "configfile: WARNING: removing possibly broken config file %s\n" msgstr "" -#: src/xine-engine/configfile.c:1103 +#: src/xine-engine/configfile.c:1131 #, c-format msgid "configfile: WARNING: you should check the backup file %s\n" msgstr "" -#: src/xine-engine/configfile.c:1237 +#: src/xine-engine/configfile.c:1266 #, c-format msgid "configfile: entry '%s' mustn't be modified from MRL\n" msgstr "" @@ -1269,52 +1449,61 @@ msgid "%d frames delivered, %d frames skipped, %d frames discarded\n" msgstr "%d marcos llegados, %d frames saltados, %d frames descartados\n" #: src/xine-engine/video_out.c:811 -#, fuzzy, c-format +#, c-format msgid "" "video_out: throwing away image with pts %<PRId64> because it's too old " "(diff : %<PRId64>).\n" msgstr "" -"video_out: descartando imagen con pts %lld porque es antigua (dif : %lld).\n" -#: src/xine-engine/video_out.c:1818 +#: src/xine-engine/video_out.c:1790 +msgid "default number of video frames" +msgstr "" + +#: src/xine-engine/video_out.c:1791 +msgid "" +"The default number of video frames to request from xine video out driver. " +"Some drivers will override this setting with their own values." +msgstr "" + +#: src/xine-engine/video_out.c:1830 msgid "percentage of skipped frames to tolerate" msgstr "" -#: src/xine-engine/video_out.c:1819 +#: src/xine-engine/video_out.c:1831 msgid "" "When more than this percentage of frames are not shown, because they were " "not decoded in time, xine sends a notification." msgstr "" -#: src/xine-engine/video_out.c:1824 +#: src/xine-engine/video_out.c:1836 msgid "percentage of discarded frames to tolerate" msgstr "" -#: src/xine-engine/video_out.c:1825 +#: src/xine-engine/video_out.c:1837 msgid "" "When more than this percentage of frames are not shown, because they were " "not scheduled for display in time, xine sends a notification." msgstr "" -#: src/xine-engine/video_out.c:1859 +#: src/xine-engine/video_out.c:1871 msgid "video_out: sorry, this should not happen. please restart xine.\n" -msgstr "video_out: esto no deberÃa ocurrir. Por favor, reinicie xine.\n" +msgstr "video_out: Lo siento, esto no deberÃa ocurrir. Por favor, reinicie xine.\n" -#: src/xine-engine/video_decoder.c:374 -#, fuzzy, c-format +#: src/xine-engine/video_decoder.c:380 +#, c-format msgid "video_decoder: no plugin available to handle '%s'\n" -msgstr "encontrado plugin decodificador de vÃdeo: %s\n" +msgstr "" -#: src/xine-engine/video_decoder.c:453 +#: src/xine-engine/video_decoder.c:459 #, c-format msgid "video_decoder: error, unknown buffer type: %08x\n" msgstr "" -#: src/xine-engine/video_decoder.c:489 +#: src/xine-engine/video_decoder.c:495 msgid "number of video buffers" msgstr "" -#: src/xine-engine/video_decoder.c:490 +#: src/xine-engine/video_decoder.c:496 msgid "" "The number of video buffers (each is 8k in size) xine uses in its internal " "queue. Higher values mean smoother playback for unreliable inputs, but also " @@ -1327,91 +1516,91 @@ msgstr "" #: src/xine-engine/info_helper.c:244 #, c-format -msgid "" -"info_helper: unsupported conversion %s -> UTF-8, no conversion performed\n" +msgid "info_helper: unsupported conversion %s -> UTF-8, no conversion performed\n" msgstr "" -#: src/xine-engine/xine_interface.c:918 +#: src/xine-engine/xine_interface.c:934 msgid "Warning:" msgstr "" -#: src/xine-engine/xine_interface.c:919 +#: src/xine-engine/xine_interface.c:935 +#, fuzzy msgid "Unknown host:" -msgstr "" +msgstr "error desconocido" -#: src/xine-engine/xine_interface.c:920 +#: src/xine-engine/xine_interface.c:936 +#, fuzzy msgid "Unknown device:" -msgstr "" +msgstr "Tipo de evento desconocido: " -#: src/xine-engine/xine_interface.c:921 +#: src/xine-engine/xine_interface.c:937 msgid "Network unreachable" msgstr "" -#: src/xine-engine/xine_interface.c:922 +#: src/xine-engine/xine_interface.c:938 msgid "Connection refused:" msgstr "" -#: src/xine-engine/xine_interface.c:923 +#: src/xine-engine/xine_interface.c:939 #, fuzzy msgid "File not found:" -msgstr "input_file: error de lectura (%s)\n" +msgstr "input_file: Fichero no encontrado: >%s<\n" -#: src/xine-engine/xine_interface.c:924 +#: src/xine-engine/xine_interface.c:940 msgid "Read error from:" msgstr "" -#: src/xine-engine/xine_interface.c:925 +#: src/xine-engine/xine_interface.c:941 msgid "Error loading library:" msgstr "" -#: src/xine-engine/xine_interface.c:926 +#: src/xine-engine/xine_interface.c:942 #, fuzzy msgid "Encrypted media stream detected" msgstr "ogg: detectado stream de audio vorbis\n" -#: src/xine-engine/xine_interface.c:927 +#: src/xine-engine/xine_interface.c:943 msgid "Security message:" msgstr "" -#: src/xine-engine/xine_interface.c:928 +#: src/xine-engine/xine_interface.c:944 #, fuzzy msgid "Audio device unavailable" -msgstr "fifo no disponible (%d)\n" +msgstr "nombre del dispositivo de audio OSS" -#: src/xine-engine/xine_interface.c:929 +#: src/xine-engine/xine_interface.c:945 msgid "Permission error" msgstr "" -#: src/xine-engine/xine_interface.c:930 +#: src/xine-engine/xine_interface.c:946 msgid "File is empty:" msgstr "" -#: src/xine-engine/audio_out.c:1074 -msgid "" -"audio_out: delay calculation impossible with an unavailable audio device\n" +#: src/xine-engine/audio_out.c:1072 +msgid "audio_out: delay calculation impossible with an unavailable audio device\n" msgstr "" -#: src/xine-engine/audio_out.c:1216 +#: src/xine-engine/audio_out.c:1214 msgid "write to sound card failed. Was a USB device unplugged ?\n" msgstr "" -#: src/xine-engine/audio_out.c:1369 +#: src/xine-engine/audio_out.c:1367 msgid "8 bits not supported by driver, converting to 16 bits.\n" msgstr "" -#: src/xine-engine/audio_out.c:1377 +#: src/xine-engine/audio_out.c:1375 msgid "mono not supported by driver, converting to stereo.\n" msgstr "" -#: src/xine-engine/audio_out.c:1383 +#: src/xine-engine/audio_out.c:1381 msgid "stereo not supported by driver, converting to mono.\n" msgstr "" -#: src/xine-engine/audio_out.c:2028 +#: src/xine-engine/audio_out.c:2033 msgid "method to sync audio and video" msgstr "" -#: src/xine-engine/audio_out.c:2029 +#: src/xine-engine/audio_out.c:2034 msgid "" "When playing audio and video, there are at least two clocks involved: The " "system clock, to which video frames are synchronized and the clock in your " @@ -1434,11 +1623,11 @@ msgid "" "form." msgstr "" -#: src/xine-engine/audio_out.c:2057 +#: src/xine-engine/audio_out.c:2062 msgid "enable resampling" msgstr "" -#: src/xine-engine/audio_out.c:2058 +#: src/xine-engine/audio_out.c:2063 msgid "" "When the sample rate of the decoded audio does not match the capabilities of " "your sound hardware, an adaptation called \"resampling\" is required. Here " @@ -1446,33 +1635,33 @@ msgid "" "automatically when necessary." msgstr "" -#: src/xine-engine/audio_out.c:2065 +#: src/xine-engine/audio_out.c:2070 msgid "always resample to this rate (0 to disable)" msgstr "" -#: src/xine-engine/audio_out.c:2066 +#: src/xine-engine/audio_out.c:2071 msgid "" "Some audio drivers do not correctly announce the capabilities of the audio " "hardware. By setting a value other than zero here, you can force the audio " "stream to be resampled to the given rate." msgstr "" -#: src/xine-engine/audio_out.c:2075 +#: src/xine-engine/audio_out.c:2080 msgid "offset for digital passthrough" msgstr "" -#: src/xine-engine/audio_out.c:2076 +#: src/xine-engine/audio_out.c:2081 msgid "" "If you use an external surround decoder and audio is ahead or behind video, " "you can enter a fixed offset here to compensate.\n" "The unit of the value is one PTS tick, which is the 90000th part of a second." msgstr "" -#: src/xine-engine/audio_out.c:2085 +#: src/xine-engine/audio_out.c:2090 msgid "play audio even on slow/fast speeds" msgstr "" -#: src/xine-engine/audio_out.c:2086 +#: src/xine-engine/audio_out.c:2091 msgid "" "If you enable this option, the audio will be heard even when playback speed " "is different than 1X. Of course, it will sound distorted (lower/higher " @@ -1480,35 +1669,34 @@ msgid "" "audio post plugin instead." msgstr "" -#: src/xine-engine/audio_out.c:2157 +#: src/xine-engine/audio_out.c:2162 msgid "startup audio volume" msgstr "" -#: src/xine-engine/audio_out.c:2158 +#: src/xine-engine/audio_out.c:2163 msgid "The overall audio volume set at xine startup." msgstr "" -#: src/xine-engine/audio_out.c:2161 +#: src/xine-engine/audio_out.c:2166 msgid "restore volume level at startup" msgstr "" -#: src/xine-engine/audio_out.c:2162 +#: src/xine-engine/audio_out.c:2167 msgid "If disabled, xine will not modify any mixer settings at startup." msgstr "" -#: src/xine-engine/audio_out.c:2192 -#, fuzzy +#: src/xine-engine/audio_out.c:2197 msgid "audio_out: sorry, this should not happen. please restart xine.\n" -msgstr "video_out: esto no deberÃa ocurrir. Por favor, reinicie xine.\n" +msgstr "" #: src/xine-engine/load_plugins.c:212 +#, c-format msgid "map_decoder_list: no space for decoder, skipped.\n" msgstr "" #: src/xine-engine/load_plugins.c:327 #, c-format -msgid "" -"load_plugins: ignoring plugin %s, wrong iface version %d (should be %d)\n" +msgid "load_plugins: ignoring plugin %s, wrong iface version %d (should be %d)\n" msgstr "" #: src/xine-engine/load_plugins.c:384 @@ -1538,97 +1726,85 @@ msgid "" msgstr "" #: src/xine-engine/load_plugins.c:496 -#, fuzzy, c-format +#, c-format msgid "load_plugins: plugin %s found\n" -msgstr "load_plugins: encontrado plugin de entrada: %s\n" +msgstr "load_plugins: encontrado complemento %s\n" #: src/xine-engine/load_plugins.c:499 -#, fuzzy +#, c-format msgid "load_plugins: static plugin found\n" -msgstr "load_plugins: encontrado plugin de entrada: %s\n" +msgstr "load_plugins: encontrado complemento estático\n" #: src/xine-engine/load_plugins.c:506 -#, fuzzy, c-format +#, c-format msgid "load_plugins: plugin limit reached, %s could not be loaded\n" -msgstr "load_plugins: encontrado plugin de entrada: %s\n" +msgstr "" #: src/xine-engine/load_plugins.c:509 -#, fuzzy +#, c-format msgid "load_plugins: plugin limit reached, static plugin could not be loaded\n" -msgstr "load_plugins: encontrado plugin de entrada: %s\n" +msgstr "" #: src/xine-engine/load_plugins.c:526 -#, fuzzy, c-format +#, c-format msgid "load_plugins: unknown plugin type %d in %s\n" -msgstr "load_plugins: encontrado plugin de entrada: %s\n" +msgstr "" #: src/xine-engine/load_plugins.c:530 -#, fuzzy, c-format +#, c-format msgid "load_plugins: unknown statically linked plugin type %d\n" -msgstr "load_plugins: encontrado plugin de entrada: %s\n" +msgstr "" #: src/xine-engine/load_plugins.c:590 -#, fuzzy, c-format +#, c-format msgid "load_plugins: unable to stat %s\n" msgstr "" -"load_plugins: fallo al cargar el plugin %s:\n" -"%s\n" #: src/xine-engine/load_plugins.c:631 -#, fuzzy, c-format +#, c-format msgid "" "load_plugins: cannot open plugin lib %s:\n" "%s\n" msgstr "" -"load_plugins: no se puede abrir el plugin demultiplexor %s:\n" -"%s\n" #: src/xine-engine/load_plugins.c:646 -#, fuzzy, c-format +#, c-format msgid "" "load_plugins: can't get plugin info from %s:\n" "%s\n" msgstr "" -"load_plugins: no se puede abrir el plugin de entrada %s:\n" -"%s\n" #: src/xine-engine/load_plugins.c:664 -#, fuzzy, c-format +#, c-format msgid "load_plugins: skipping unreadable plugin directory %s.\n" -msgstr "load_plugins: encontrado plugin de entrada: %s\n" +msgstr "" #: src/xine-engine/load_plugins.c:713 -#, fuzzy, c-format +#, c-format msgid "" "load_plugins: cannot (stage 2) open plugin lib %s:\n" "%s\n" msgstr "" -"load_plugins: no se puede abrir el plugin demultiplexor %s:\n" -"%s\n" #: src/xine-engine/load_plugins.c:739 -#, fuzzy, c-format +#, c-format msgid "load_plugins: Yikes! %s doesn't contain plugin info.\n" msgstr "" -"load_plugins: no se puede abrir el plugin de entrada %s:\n" -"%s\n" #: src/xine-engine/load_plugins.c:1305 -#, fuzzy, c-format +#, c-format msgid "load_plugins: unknown content detection strategy %d\n" -msgstr "load_plugins: encontrado plugin de entrada: %s\n" +msgstr "" #: src/xine-engine/load_plugins.c:1415 -#, fuzzy, c-format +#, c-format msgid "load_plugins: using demuxer '%s'\n" -msgstr "load_plugins: encontrado plugin de entrada: %s\n" +msgstr "" #: src/xine-engine/load_plugins.c:1726 -#, fuzzy, c-format +#, c-format msgid "load_plugins: failed to load audio output plugin <%s>\n" msgstr "" -"load_plugins: fallo al cargar el plugin %s:\n" -"%s\n" #: src/xine-engine/load_plugins.c:1729 msgid "" @@ -1637,13 +1813,11 @@ msgid "" msgstr "" #: src/xine-engine/load_plugins.c:2032 -#, fuzzy, c-format +#, c-format msgid "" "load_plugins: cannot unload plugin lib %s:\n" "%s\n" msgstr "" -"load_plugins: no se puede abrir el plugin demultiplexor %s:\n" -"%s\n" #: src/xine-utils/memcpy.c:479 msgid "memcopy method used by xine" @@ -1712,15 +1886,14 @@ msgid "" msgstr "" #: src/video_out/video_out_syncfb.c:1060 -msgid "" -"xine video output plugin using the SyncFB module for Matrox G200/G400 cards" +msgid "xine video output plugin using the SyncFB module for Matrox G200/G400 cards" msgstr "" -#: src/video_out/video_out_syncfb.c:1077 +#: src/video_out/video_out_syncfb.c:1078 msgid "SyncFB device name" msgstr "" -#: src/video_out/video_out_syncfb.c:1078 +#: src/video_out/video_out_syncfb.c:1079 msgid "" "Specifies the file name for the SyncFB (TeleTux) device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -1730,50 +1903,50 @@ msgstr "" #: src/video_out/video_out_stk.c:454 msgid "xine video output plugin using the Libstk Surface Set-top Toolkit" -msgstr "" +msgstr "xine video output plugin using the Libstk Surface Set-top Toolkit" #: src/video_out/video_out_xvmc.c:1446 src/video_out/video_out_pgx64.c:1464 -#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1436 +#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1437 msgid "video overlay colour key" -msgstr "" +msgstr "llave de color de superposición de vÃdeo" #: src/video_out/video_out_xvmc.c:1447 src/video_out/video_out_xxmc.c:2431 #: src/video_out/video_out_vidix.c:1159 src/video_out/video_out_vidix.c:1166 -#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1437 +#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1438 msgid "" "The colour key is used to tell the graphics card where to overlay the video " "image. Try different values, if you experience windows becoming transparent." msgstr "" #: src/video_out/video_out_xvmc.c:1455 src/video_out/video_out_xxmc.c:2439 -#: src/video_out/video_out_xv.c:1445 +#: src/video_out/video_out_xv.c:1446 msgid "autopaint colour key" msgstr "" #: src/video_out/video_out_xvmc.c:1456 src/video_out/video_out_xxmc.c:2440 -#: src/video_out/video_out_xv.c:1446 +#: src/video_out/video_out_xv.c:1447 msgid "Make Xv autopaint its colorkey." msgstr "" #: src/video_out/video_out_xvmc.c:1461 src/video_out/video_out_xxmc.c:2463 -#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1469 +#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1470 #: src/video_out/video_out_opengl.c:1918 msgid "enable double buffering" -msgstr "" +msgstr "activar doble tamponeado" #: src/video_out/video_out_xvmc.c:1462 src/video_out/video_out_xxmc.c:2464 -#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1470 +#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1471 msgid "" "Double buffering will synchronize the update of the video image to the " "repainting of the entire screen (\"vertical retrace\"). This eliminates " "flickering and tearing artifacts, but will use more graphics memory." msgstr "" -#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1537 +#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1538 msgid "deinterlace method (deprecated)" msgstr "" -#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1538 +#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1539 msgid "" "This config setting is deprecated. You should use the new deinterlacing post " "processing settings instead.\n" @@ -1851,53 +2024,60 @@ msgstr "" #: src/video_out/video_out_directx.c:1238 msgid "xine video output plugin for win32 using directx" -msgstr "" +msgstr "complemento de xine de salida de vÃdeo para win32 usando directx" #: src/video_out/video_out_pgx64.c:281 msgid "video_out_pgx64: Error: can't grab DGA drawable for video window\n" msgstr "" +"video_out_pgx64: Error: no puedo coger el DGA pintable para la ventana de " +"vÃdeo\n" #: src/video_out/video_out_pgx64.c:299 -#, fuzzy, c-format +#, c-format msgid "video_out_pgx64: Error: can't open framebuffer device '%s'\n" -msgstr "input_dvd: no se puede abrir la unidad de dvd (%s): %s\n" +msgstr "" +"video_out_pgx64: Error: no puedo abrir el dispositivo tampón de cuadro " +"(framebuffer) '%s'\n" #: src/video_out/video_out_pgx64.c:306 #, c-format -msgid "" -"video_out_pgx64: Error: ioctl failed (VIS_GETIDENTIFIER), bad device (%s)\n" +msgid "video_out_pgx64: Error: ioctl failed (VIS_GETIDENTIFIER), bad device (%s)\n" msgstr "" +"video_out_pgx64: Error: falló ioctl (VIS_GETIDENTIFIER), mal dispositivo (%" +"s)\n" #: src/video_out/video_out_pgx64.c:319 #, c-format -msgid "" -"video_out_pgx64: Error: '%s' is not a xvr100/pgx64/pgx24 framebuffer device\n" +msgid "video_out_pgx64: Error: '%s' is not a xvr100/pgx64/pgx24 framebuffer device\n" msgstr "" +"video_out_pgx64: Error: '%s' no es un dispositivo framebuffer (tampón de " +"cuadro) xvr100/pgx64/pgx24 \n" #: src/video_out/video_out_pgx64.c:340 -msgid "" -"video_out_pgx64: Error: video overlay on this screen is already in use\n" +msgid "video_out_pgx64: Error: video overlay on this screen is already in use\n" msgstr "" +"video_out_pgx64: Error: la superposición de vÃdeo (overlay) en esta pantalla " +"ya está en uso\n" #: src/video_out/video_out_pgx64.c:355 msgid "video_out_pgx64: Error: unable to set window properties\n" -msgstr "" +msgstr "video_out_pgx64: Error: incapaz de poner las propiedades de ventana\n" #: src/video_out/video_out_pgx64.c:811 msgid "video_out_pgx64: Warning: low video memory, multi-buffering disabled\n" -msgstr "" +msgstr "video_out_pgx64: Aviso: memoria de vÃdeo baja, multi-tamponeado desactivado\n" #: src/video_out/video_out_pgx64.c:843 msgid "video_out_pgx64: Error: insuffucient video memory\n" -msgstr "" +msgstr "video_out_pgx64: Error: memoria de vÃdeo insuficiente\n" #: src/video_out/video_out_pgx64.c:859 msgid "video_out_pgx64: Warning: low video memory, double-buffering disabled\n" -msgstr "" +msgstr "video_out_pgx64: Aviso: memoria de vÃdeo baja, tamponeado-doble desactivado\n" #: src/video_out/video_out_pgx64.c:1397 msgid "video_out_pgx64: Error: ioctl failed (FBIOGATTR)\n" -msgstr "" +msgstr "video_out_pgx64: Error: falló ioctl (FBIOGATTR)\n" #: src/video_out/video_out_pgx64.c:1465 msgid "" @@ -1905,26 +2085,33 @@ msgid "" "video image. Try using different values if you see the video showing through " "other windows." msgstr "" +"La llave de color se usa para decirle a la tarjeta gráfica donde puede " +"superponer la imagen de vÃdeo. Pruebe usando diferentes valores si ve que el " +"vÃdeo asoma a través de otras ventanas." #: src/video_out/video_out_pgx64.c:1472 msgid "enable chroma keying" -msgstr "" +msgstr "activa llave croma (chroma keying)" #: src/video_out/video_out_pgx64.c:1473 msgid "" "Draw OSD graphics on top of the overlay colour key rather than blend them " "into each frame." msgstr "" +"Dibuja gráficos VEP (OSD) encima de la llave de color de la superposición de " +"vÃdeo en vez de mezclarlos en cada cuadro." #: src/video_out/video_out_pgx64.c:1476 msgid "enable multi-buffering" -msgstr "" +msgstr "activa multi-tamponeado" #: src/video_out/video_out_pgx64.c:1477 msgid "" "Multi buffering increases performance at the expense of using more graphics " "memory." msgstr "" +"Multi-tamponeado incrementa el rendimiento a costa de usar más memoria " +"gráfica." #: src/video_out/video_out_xxmc.c:645 msgid "" @@ -1969,11 +2156,11 @@ msgid "" "conversion and scaling.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1453 +#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1454 msgid "bilinear scaling mode" msgstr "" -#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1454 +#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1455 msgid "" "Selects the bilinear scaling mode for Permedia cards. The individual values " "are:\n" @@ -1996,11 +2183,11 @@ msgstr "" msgid "video_out_xxmc: this adaptor supports the yuy2 format.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1530 +#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1531 msgid "pitch alignment workaround" msgstr "" -#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1531 +#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1532 msgid "Some buggy video drivers need a workaround to function properly." msgstr "" @@ -2046,7 +2233,7 @@ msgid "" "Alternate between top and bottom field at double the frame rate.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1611 +#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1612 msgid "xine video output plugin using the MIT X video extension" msgstr "" @@ -2113,7 +2300,7 @@ msgstr "" #: src/video_out/video_out_vidix.c:1239 src/video_out/video_out_fb.c:852 msgid "framebuffer device name" -msgstr "" +msgstr "nombre del dispositivo framebuffer" #: src/video_out/video_out_vidix.c:1240 src/video_out/video_out_fb.c:853 msgid "" @@ -2122,6 +2309,12 @@ msgid "" "xine can be used to fill this file with arbitrary content. So you should be " "careful that the value you enter really is a proper framebuffer device." msgstr "" +"Especifica el nombre de fichero del dispositivo framebuffer (tampón de " +"cuadro) a usarse.\n" +"Este ajuste es crÃtico para la seguridad, porque cuando se cambia a un " +"fichero diferente, xine puede usarse para llenar este fichero con contenido " +"arbitrario. De modo que deberÃa ser cuidadoso de que el valor que introduzca " +"es realmente un verdadero dispositivo framebuffer." #: src/video_out/video_out_vidix.c:1286 msgid "xine video output plugin using libvidix for linux frame buffer" @@ -2130,10 +2323,12 @@ msgstr "" #: src/video_out/video_out_aa.c:311 msgid "xine video output plugin using the ascii-art library" msgstr "" +"Complemento de xine de salida de vÃdeo usando la librerÃa de arte ascii " +"(ascii-art)" #: src/video_out/video_out_sdl.c:482 msgid "use hardware acceleration if available" -msgstr "" +msgstr "use aceleración gráfica si está disponible" #: src/video_out/video_out_sdl.c:483 msgid "" @@ -2141,22 +2336,27 @@ msgid "" "graphics hardware will be used. This might not work, so you can disable it, " "if things go wrong." msgstr "" +"Cuando su sistema lo soporta, se usará aceleración en hardware suministrada " +"por su hardware gráfico. Esto podrÃa no funcionar, asà que lo puede " +"desactivar, si las cosas van mal." #: src/video_out/video_out_sdl.c:525 msgid "sdl has to emulate a 16 bit surfaces, that will slow things down.\n" -msgstr "" +msgstr "sdl tiene que emular superficies de16 bit, que enlentecerán las cosas.\n" #: src/video_out/video_out_sdl.c:562 msgid "video_out_sdl: fullscreen mode is NOT supported\n" msgstr "" +# CER, traducción incierta #: src/video_out/video_out_sdl.c:573 +#, fuzzy msgid "xine video output plugin using the Simple Direct Media Layer" -msgstr "" +msgstr "complemento de xine de salida de vÃdeo usando la Capa Simple Media Directo" #: src/video_out/video_out_none.c:279 msgid "xine video output plugin which displays nothing" -msgstr "" +msgstr "Complemento de xine de salida de vÃdeo que no muestra nada" #: src/video_out/video_out_xv.c:291 msgid "" @@ -2183,35 +2383,35 @@ msgid "" "video_out_xv: => not using MIT Shared Memory extension.\n" msgstr "" -#: src/video_out/video_out_xv.c:1282 +#: src/video_out/video_out_xv.c:1283 msgid "video_out_xv: Xv extension not present.\n" msgstr "" -#: src/video_out/video_out_xv.c:1319 +#: src/video_out/video_out_xv.c:1320 msgid "" "video_out_xv: Xv extension is present but I couldn't find a usable yuv12 " "port.\n" " Looks like your graphics hardware driver doesn't support Xv?!\n" msgstr "" -#: src/video_out/video_out_xv.c:1328 +#: src/video_out/video_out_xv.c:1329 #, c-format msgid "" "video_out_xv: using Xv port %ld from adaptor %s for hardware colorspace " "conversion and scaling.\n" msgstr "" -#: src/video_out/video_out_xv.c:1503 +#: src/video_out/video_out_xv.c:1504 msgid "video_out_xv: this adaptor supports the yv12 format.\n" msgstr "" -#: src/video_out/video_out_xv.c:1508 +#: src/video_out/video_out_xv.c:1509 msgid "video_out_xv: this adaptor supports the yuy2 format.\n" msgstr "" #: src/video_out/video_out_opengl.c:1889 msgid "OpenGL renderer" -msgstr "" +msgstr "renderizador OpenGL" #: src/video_out/video_out_opengl.c:1890 msgid "" @@ -2241,16 +2441,45 @@ msgid "" "Environment_Mapped_Torus\n" "Show images reflected in a spinning torus. Way cool =)" msgstr "" +"El complemento OpenGL provee varios módulos de renderizado (convertir datos " +"en imagen):\n" +"\n" +"2D_Tex_Fragprog\n" +"Este módulo descarga las imágenes como texturas YUV 2D y las renderiza como " +"rodajas\n" +"texturizadas usando fragmentos de programas para reconstruir RGB.\n" +"Este es el método mejor y más rápido en las tarjetas gráficas modernas\n" +"\n" +"2D_Tex\n" +"Este módulo descarga las imágenes como texturas 2D y las renderiza como " +"rodajas texturizadas.\n" +"2D_Tex_Tiled\n" +"Este módulo descarga las imágenes como multiple 2D textures y las renderiza " +"como rodajas \n" +"texturizadas. Asà esto funciona también con tamaños máximos de textura más " +"pequeños.\n" +"Image_Pipeline\n" +"Este módulo usa glDraw() para renderizar las imágenes.\n" +"Sólo está acelerado en unos pocos drivers.\n" +"No interpola al escalar.\n" +"\n" +"Cylinder\n" +"Muestra imágenes en un cilindro rotando.Bonito efecto :)\n" +"\n" +"Environment_Mapped_Torus\n" +"Muestra las imágenes en un toro dando vueltas. Muy guais =)" #: src/video_out/video_out_opengl.c:1912 msgid "OpenGL minimum framerate" -msgstr "" +msgstr "frecuencia de cuadro mÃnima OpenGL" #: src/video_out/video_out_opengl.c:1913 msgid "" "Minimum framerate for animated render routines.\n" "Ignored for static render routines.\n" msgstr "" +"Frecuencia mÃnima de cuadro para rutinas animadas de renderizado.\n" +"Ignorado para rutinas estáticas de renderizado.\n" #: src/video_out/video_out_opengl.c:1919 msgid "" @@ -2258,10 +2487,13 @@ msgid "" "it also reduces flickering a lot.\n" "It should not have any performance impact." msgstr "" +"Para OpenGL el doble tamponeado no solo quita artefactos de rajado,\n" +"también reduce un montón el parpadeo.\n" +"No deberÃa impactar nada el rendimiento." #: src/video_out/video_out_opengl.c:1966 msgid "xine video output plugin using the OpenGL 3D graphics API" -msgstr "" +msgstr "Complemento de xine de salida de vÃdeo usando la API gráfica 3D OpenGL" #: src/video_out/x11osd.c:276 msgid "x11osd: XShape extension not available. unscaled overlay disabled.\n" @@ -2333,15 +2565,18 @@ msgid "" "video_out_fb: only packed truecolor/directcolor is supported (%d).\n" " Check 'fbset -i' or try 'fbset -depth 16'.\n" msgstr "" +"video_out_fb: sólo se soporta truecolor/directcolor (color verdadero / color " +"directo) empaquetado (%d).\n" +" Compruebe 'fbset -i' o pruebe 'fbset -depth 16'.\n" #: src/video_out/video_out_fb.c:927 msgid "video_out_fb: Your video mode was not recognized, sorry.\n" -msgstr "" +msgstr "video_out_fb: Lo sentimos, su modo de vÃdeo no fue reconocido .\n" #: src/video_out/video_out_fb.c:984 #, c-format msgid "video_out_fb: %d video RAM buffers are available.\n" -msgstr "" +msgstr "video_out_fb: están disponibles %d tampones de vÃdeo en RAM.\n" #: src/video_out/video_out_fb.c:990 #, c-format @@ -2351,12 +2586,22 @@ msgid "" " are available which is less than the recommended %d buffers. Lowering\n" " the frame buffer resolution might help.\n" msgstr "" +"AVISO: video_out_fb: Tampones Zero copy (copia Cero) están DESACTIVADOS " +"porque sólo %d tampones\n" +" están disponibles que son menos que los recomendados %d tampones. " +"Disminuyendo\n" +" la resolución del tampón de cuadro podrÃa ayudar.\n" #: src/video_out/video_out_fb.c:1001 +#, fuzzy msgid "" "WARNING: video_out_fb: Zero copy buffers are DISABLED because kernel driver\n" " do not support screen panning (used for frame flips).\n" msgstr "" +"AVISO: video_out_fb: Tampones Zero copy (copia Cero) están DESACTIVADOS " +"porque el driver del kernel\n" +" no soporta panoramizado (panning) de pantalla (usado para volteos de " +"cuadro (frame flips)).\n" #: src/video_out/video_out_fb.c:1070 #, c-format @@ -2365,354 +2610,396 @@ msgid "" " a depth of 16 bpp is recommended!\n" "\n" msgstr "" +"AVISO: video_out_fb: la profundidad actual de pantalla es %d. ¡Para tener " +"mejor rendimiento \n" +" se recomienda una profundidad de 16 bpp!\n" +"\n" #: src/video_out/video_out_fb.c:1101 msgid "Xine video output plugin using the Linux frame buffer device" msgstr "" +"Complemento de xine de salida de vÃdeo usando el dispositivo Linux tampón de " +"cuadro (frame buffer device)" #: src/video_out/video_out_caca.c:318 msgid "xine video output plugin using the Color AsCii Art library" msgstr "" +"Complemento de xine de salida de vÃdeo usando la librerÃa de arte ascii a " +"color" #: src/video_out/video_out_directfb.c:1341 msgid "video layer buffering mode" -msgstr "" +msgstr "modo de capa de vÃdeo tamponeado" #: src/video_out/video_out_directfb.c:1342 msgid "" "Select the buffering mode of the output layer. Double or triple buffering " "give a smoother playback, but consume more video memory." msgstr "" +"Seleccione el modo tamponeado de la capa de salida. Doble o triple " +"tamponeado (buffering) da una reproducción más suave, pero consume más " +"memoria de vÃdeo." #: src/video_out/video_out_directfb.c:1349 msgid "wait for vertical retrace" -msgstr "" +msgstr "esperar al retrazado vertical" #: src/video_out/video_out_directfb.c:1350 msgid "" "Enable synchronizing the update of the video image to the repainting of the " "entire screen (\"vertical retrace\")." msgstr "" +"Activa la sincronización de la actualización de la imagen de vÃdeo con el " +"repintado de la pantalla entera (\"retrazado vertical\")." #: src/video_out/video_out_directfb.c:1357 msgid "enable video color key" -msgstr "" +msgstr "activar llave de color de vÃdeo" #: src/video_out/video_out_directfb.c:1358 msgid "" "Enable using a color key to tell the graphics card where to overlay the " "video image." msgstr "" +"Activar el uso de una llave de color para decirle a la tarjeta gráfica dónde " +"superponer la imagen de vÃdeo." #: src/video_out/video_out_directfb.c:1364 msgid "video color key" -msgstr "" +msgstr "llave de color de vÃdeo" #: src/video_out/video_out_directfb.c:1365 msgid "" "The color key is used to tell the graphics card where to overlay the video " "image. Try different values, if you experience windows becoming transparent." msgstr "" +"La llave de color se usa para decirle a la tarjeta gráfica donde superponer " +"la imagen. Pruebe diferentes colores si observa que las ventanas se hacen " +"transparentes." #: src/video_out/video_out_directfb.c:1374 msgid "flicker filtering" -msgstr "" +msgstr "filtro de parpadeo" #: src/video_out/video_out_directfb.c:1375 msgid "Enable Flicker Filetring for a smooth output on an interlaced display." -msgstr "" +msgstr "Active Filtro de Parpadeo para una salida suave en una pantalla entrelazada." #: src/video_out/video_out_directfb.c:1382 msgid "field parity" -msgstr "" +msgstr "paridad de campo" #: src/video_out/video_out_directfb.c:1383 msgid "" "For an interlaced display, enable controlling the field parity (\"none" "\"=disabled)." msgstr "" +"para una pantalla entrelazada, activa el control de paridad de campo(\"none" +"\"=desactivado)." -#: src/video_out/video_out_directfb.c:1509 +#: src/video_out/video_out_directfb.c:1516 +#, fuzzy msgid "video_out_directfb: using hardware subpicture acceleration.\n" -msgstr "" +msgstr "video_out_directfb: usando escalado de imagen en hardware acelerado.\n" -#: src/video_out/video_out_directfb.c:1523 +#: src/video_out/video_out_directfb.c:1530 +#, fuzzy msgid "video_out_directfb: layer supports video output.\n" -msgstr "" +msgstr "video_out_directfb: ¡no se encontró una capa de salida usable!\n" -#: src/video_out/video_out_directfb.c:1532 +#: src/video_out/video_out_directfb.c:1539 +#, fuzzy msgid "video_out_directfb: layer doesn't support YV12!\n" -msgstr "" +msgstr "video_out_directfb: ¡no se encontró una capa de salida usable!\n" -#: src/video_out/video_out_directfb.c:1539 +#: src/video_out/video_out_directfb.c:1546 +#, fuzzy msgid "video_out_directfb: layer doesn't support YUY2!\n" -msgstr "" +msgstr "video_out_directfb: ¡no se encontró una capa de salida usable!\n" -#: src/video_out/video_out_directfb.c:1550 -msgid "" -"video_out_directfb:need at least DirectFB 0.9.25 to play on this layer!\n" +#: src/video_out/video_out_directfb.c:1557 +msgid "video_out_directfb:need at least DirectFB 0.9.25 to play on this layer!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1585 -#, c-format +#: src/video_out/video_out_directfb.c:1592 +#, fuzzy, c-format msgid "video_out_directfb: layer doesn't support buffermode %d!\n" -msgstr "" +msgstr "video_out_directfb: ¡no se encontró una capa de salida usable!\n" -#: src/video_out/video_out_directfb.c:1591 +#: src/video_out/video_out_directfb.c:1598 #, c-format msgid "video_out_directfb: layer doesn't support options 0x%08x!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1685 +#: src/video_out/video_out_directfb.c:1692 msgid "video_out_directfb: using hardware accelerated image scaling.\n" -msgstr "" +msgstr "video_out_directfb: usando escalado de imagen en hardware acelerado.\n" -#: src/video_out/video_out_directfb.c:1697 +#: src/video_out/video_out_directfb.c:1704 msgid "" "video_out_directfb: image scaling with deinterlacing is hardware " "accelerated.\n" msgstr "" +"video_out_directfb: escalado de imagen con desentrelazado es acelerado en " +"hardware.\n" -#: src/video_out/video_out_directfb.c:1775 +#: src/video_out/video_out_directfb.c:1782 +#, fuzzy msgid "video layer id (auto: -1)" -msgstr "" +msgstr "id de la capa de vÃdeo" -#: src/video_out/video_out_directfb.c:1776 +#: src/video_out/video_out_directfb.c:1783 msgid "Select the video output layer by its id." -msgstr "" +msgstr "Seleccione la capa de salida de vÃdeo por su id." -#: src/video_out/video_out_directfb.c:1797 -#: src/video_out/video_out_directfb.c:2006 -#, c-format +#: src/video_out/video_out_directfb.c:1804 +#: src/video_out/video_out_directfb.c:2013 +#, fuzzy, c-format msgid "video_out_directfb: using display layer #%d.\n" -msgstr "" +msgstr "video_out_directfb: ¡no se encontró una capa de superposición usable!\n" -#: src/video_out/video_out_directfb.c:1881 -#, fuzzy +#: src/video_out/video_out_directfb.c:1888 msgid "xine video output plugin using DirectFB." -msgstr "plugin de entrada de stream de red http" +msgstr "complemento de xine de salida de vÃdeo usando DirectFB." -#: src/video_out/video_out_directfb.c:1999 +#: src/video_out/video_out_directfb.c:2006 +#, fuzzy msgid "video_out_directfb: no usable display layer was found!\n" -msgstr "" +msgstr "video_out_directfb: ¡no se encontró una capa de superposición usable!\n" -#: src/video_out/video_out_directfb.c:2088 -#, fuzzy +#: src/video_out/video_out_directfb.c:2095 msgid "xine video output plugin using DirectFB under XDirectFB." -msgstr "plugin de entrada de stream de red http" +msgstr "complemento de xine de salida de vÃdeo usando DirectFB bajo XDirectFB." #: src/video_out/video_out_pgx32.c:190 msgid "video_out_pgx32: Error: can't grab DGA drawable for video window\n" msgstr "" +"video_out_pgx32: Error: no puedo coger el DGA pintable para la ventana de " +"vÃdeo\n" #: src/video_out/video_out_pgx32.c:209 src/video_out/video_out_pgx32.c:223 -#, fuzzy, c-format +#, c-format msgid "video_out_pgx32: Error: ioctl failed, bad device (%s)\n" -msgstr "input_dvd: no se puede abrir la unidad de dvd (%s): %s\n" +msgstr "video_out_pgx32: Error: falló ioctl, mal dispositivo (%s)\n" #: src/video_out/video_out_pgx32.c:216 #, c-format msgid "video_out_pgx32: Error: '%s' is not a pgx32 framebuffer device\n" msgstr "" +"video_out_pgx32: Error: '%s' no es un dispositivo tampón de cuadro " +"(framebuffer) pgx32\n" -#: src/libmusepack/xine_decoder.c:237 +#: src/libmusepack/xine_decoder.c:241 #, c-format msgid "libmusepack: mpc_streaminfo_read failed: %d\n" -msgstr "" +msgstr "libmusepack: falló lectura mpc_streaminfo_read: %d\n" -#: src/libmusepack/xine_decoder.c:311 +#: src/libmusepack/xine_decoder.c:315 msgid "libmusepack: data after last frame ignored\n" -msgstr "" +msgstr "libmusepack: datos después de la última trama ignorados\n" -#: src/libmusepack/xine_decoder.c:322 +#: src/libmusepack/xine_decoder.c:326 msgid "libmusepack: mpc_decoder_initialise failed\n" -msgstr "" +msgstr "libmusepack: falló mpc_decoder_initialise\n" -#: src/libmusepack/xine_decoder.c:342 src/libmusepack/xine_decoder.c:357 +#: src/libmusepack/xine_decoder.c:346 src/libmusepack/xine_decoder.c:361 #, c-format msgid "libmusepack: mpc_decoder_decode failed: %d\n" -msgstr "" +msgstr "libmusepack: falló mpc_decoder_decode: %d\n" #: src/libspucc/xine_decoder.c:192 msgid "display closed captions in MPEG-2 streams" -msgstr "" +msgstr "mostrar los subtÃtulos en flujos MPEG-2" #: src/libspucc/xine_decoder.c:193 -msgid "" -"Closed Captions are subtitles mostly meant to help the hearing impaired." +msgid "Closed Captions are subtitles mostly meant to help the hearing impaired." msgstr "" +"Son subtÃtulos (Closed Captions) pensados mayormente para ayudar a las " +"personas con deficiencias auditivas." #: src/libspucc/xine_decoder.c:200 msgid "closed-captioning foreground/background scheme" -msgstr "" +msgstr "esquema de subtitulado en primer o segundo plano" #: src/libspucc/xine_decoder.c:201 msgid "Choose your favourite rendering of the closed captions." -msgstr "" +msgstr "Escoja su renderizado favorito de los subtÃtulos." #: src/libspucc/xine_decoder.c:207 msgid "standard closed captioning font" -msgstr "" +msgstr "tipografÃa estándard de subtitulado" #: src/libspucc/xine_decoder.c:208 msgid "Choose the font for standard closed captions text." -msgstr "" +msgstr "Escoja la fuente tipográfica estándard para el texto del subtitulado." #: src/libspucc/xine_decoder.c:214 msgid "italic closed captioning font" -msgstr "" +msgstr "tipografÃa cursiva de subtitulado" #: src/libspucc/xine_decoder.c:215 msgid "Choose the font for italic closed captions text." -msgstr "" +msgstr "Escoja la fuente tipográfica cursiva para el texto del subtitulado." #: src/libspucc/xine_decoder.c:221 msgid "closed captioning font size" -msgstr "" +msgstr "tamaño de la tipografÃa del subtitulado" #: src/libspucc/xine_decoder.c:222 msgid "Choose the font size for closed captions text." -msgstr "" +msgstr "Escoja el tamaño de la fuente tipográfica para el texto del subtitulado." #: src/libspucc/xine_decoder.c:226 msgid "center-adjust closed captions" -msgstr "" +msgstr "subtitulado ajustado al centro " #: src/libspucc/xine_decoder.c:227 msgid "" "When enabled, closed captions will be positioned by the center of the " "individual lines." msgstr "" +"Cuando se activa, el subtitulado se posicionará en el centro de las lineas " +"individuales." #: src/libspucmml/xine_decoder.c:480 msgid "font for external subtitles" -msgstr "" +msgstr "tipografÃa para subtÃtulos externos" #: src/libspucmml/xine_decoder.c:486 msgid "subtitle vertical offset (relative window size)" -msgstr "" +msgstr "desplazamiento vertical de los subtÃtulos (relativo al tamaño de ventana)" #: src/libspucmml/xine_decoder.c:532 msgid "encoding of subtitles" -msgstr "" +msgstr "codificado de los subtÃtulos" -#: src/input/vcd/vcdio.c:211 -#, fuzzy +#: src/input/vcd/vcdio.c:223 msgid "SEEK_CUR not implemented for non-zero offset" -msgstr "input_vcd: SEEK_CUR no implementado para desplazamientos != 0\n" +msgstr "SEEK_CUR no ha sido implementado para desplazamiento no nulo" -#: src/input/vcd/vcdio.c:239 +#: src/input/vcd/vcdio.c:251 msgid "SEEK_END not implemented yet." -msgstr "" +msgstr "SEEK_END no ha sido implementado todavÃa." -#: src/input/vcd/vcdio.c:242 +#: src/input/vcd/vcdio.c:254 msgid "seek not implemented yet for" -msgstr "" +msgstr "seek no ha sido implementado todavÃa para" #: src/input/vcd/xineplug_inp_vcd.c:191 msgid "failed to find a device with a VCD" -msgstr "" +msgstr "falló en encontrar un dispositivo con un VCD" -#: src/input/vcd/xineplug_inp_vcd.c:327 +#: src/input/vcd/xineplug_inp_vcd.c:328 msgid "was passed a null class parameter" -msgstr "" +msgstr "se pasó un parámetro de clase nula" -#: src/input/vcd/xineplug_inp_vcd.c:967 +#: src/input/vcd/xineplug_inp_vcd.c:972 msgid "Invalid current entry type" -msgstr "" +msgstr "Tipo de entrada actual incorrecta" -#: src/input/vcd/xineplug_inp_vcd.c:991 -msgid "" -"Video CD plugin with PBC and support for: (X)VCD, (X)SVCD, HQVCD, CVD ... " +#: src/input/vcd/xineplug_inp_vcd.c:996 +msgid "Video CD plugin with PBC and support for: (X)VCD, (X)SVCD, HQVCD, CVD ... " msgstr "" +"Complemento de entrada Video CD con PBC y soporte para: (X)VCD, (X)SVCD, " +"HQVCD, CVD ... " -#: src/input/vcd/xineplug_inp_vcd.c:1092 +#: src/input/vcd/xineplug_inp_vcd.c:1097 msgid "selection has no RETURN entry" -msgstr "" +msgstr "la selección no tiene entrada RETURN" -#: src/input/vcd/xineplug_inp_vcd.c:1121 +#: src/input/vcd/xineplug_inp_vcd.c:1126 msgid "DEFAULT selected, but PBC is not on." -msgstr "" +msgstr "se seleccionó DEFAULT, pero PBC no está activado." -#: src/input/vcd/xineplug_inp_vcd.c:1126 +#: src/input/vcd/xineplug_inp_vcd.c:1131 msgid "selection has no NEXT entry" -msgstr "" +msgstr "la selección no tiene entrada NEXT" -#: src/input/vcd/xineplug_inp_vcd.c:1134 +#: src/input/vcd/xineplug_inp_vcd.c:1139 msgid "selection has no PREVIOUS entry" -msgstr "" +msgstr "la selección no tiene entrada PREVIOUS" -#: src/input/vcd/xineplug_inp_vcd.c:1141 +#: src/input/vcd/xineplug_inp_vcd.c:1146 msgid "Unknown event type: " -msgstr "" +msgstr "Tipo de evento desconocido: " -#: src/input/vcd/xineplug_inp_vcd.c:1441 src/input/vcd/xineplug_inp_vcd.c:1488 +#: src/input/vcd/xineplug_inp_vcd.c:1446 src/input/vcd/xineplug_inp_vcd.c:1493 msgid "The above message had unknown vcdimager log level" -msgstr "" +msgstr "El mensaje de arriba tenÃa nivel de registro vcdimager desconocido" -#: src/input/vcd/xineplug_inp_vcd.c:1819 +#: src/input/vcd/xineplug_inp_vcd.c:1824 msgid "VCD default type to use on autoplay" -msgstr "" +msgstr "tipo por defecto VCD a usar en autoreproducción" -#: src/input/vcd/xineplug_inp_vcd.c:1820 +#: src/input/vcd/xineplug_inp_vcd.c:1825 msgid "" "The VCD play unit to use when none is specified in an MRL, e.g. vcd:// or " "vcd:///dev/dvd:" msgstr "" +"La unidad de reproducción VCD a usar cuando ninguna se especifica en un MRL, " +"p.e. vcd:// o vcd:///dev/dvd:" -#: src/input/vcd/xineplug_inp_vcd.c:1830 +#: src/input/vcd/xineplug_inp_vcd.c:1835 msgid "CD-ROM drive used for VCD when none given" -msgstr "" +msgstr "Unidad de CD-ROM usada para VCD cuando no se da ninguno" -#: src/input/vcd/xineplug_inp_vcd.c:1831 +#: src/input/vcd/xineplug_inp_vcd.c:1836 msgid "" "What to use if no drive specified. If the setting is empty, xine will scan " "for CD drives." msgstr "" +"Que usar si no se especifica unidad. Si la configuración está vacÃa, xine " +"buscará unidades CD." -#: src/input/vcd/xineplug_inp_vcd.c:1841 +#: src/input/vcd/xineplug_inp_vcd.c:1846 msgid "VCD position slider range" -msgstr "" +msgstr "rango de la barra deslizadora de posiciones del VCD" -#: src/input/vcd/xineplug_inp_vcd.c:1842 -msgid "" -"range that the stream playback position slider represents playing a VCD." +#: src/input/vcd/xineplug_inp_vcd.c:1847 +msgid "range that the stream playback position slider represents playing a VCD." msgstr "" +"rango que la barra deslizadora de posiciones del flujo de bits representa al " +"reproducir un VCD." -#: src/input/vcd/xineplug_inp_vcd.c:1850 +#: src/input/vcd/xineplug_inp_vcd.c:1855 msgid "VCD read-ahead caching?" -msgstr "" +msgstr "¿Memoria intermedia de lectura adelantada del VCD?" -#: src/input/vcd/xineplug_inp_vcd.c:1851 +#: src/input/vcd/xineplug_inp_vcd.c:1856 msgid "Class may lead to jerky playback on low-end machines." -msgstr "" +msgstr "La clase puede llevar a reproducción temblorosa en máquinas de gama inferior." -#: src/input/vcd/xineplug_inp_vcd.c:1861 +#: src/input/vcd/xineplug_inp_vcd.c:1866 msgid "automatically advance VCD track/entry" -msgstr "" +msgstr "automáticamente avanzar pista/entrada en el VCD" -#: src/input/vcd/xineplug_inp_vcd.c:1862 +#: src/input/vcd/xineplug_inp_vcd.c:1867 msgid "" "If enabled, we should automatically advance to the next entry or track. Used " "only when playback control (PBC) is disabled." msgstr "" +"Si se activa, deberÃamos avanzar automáticamente a la siguiente entrada o " +"pista. Se usa sólo cuando el control de reproducción (PBC) está desactivado." -#: src/input/vcd/xineplug_inp_vcd.c:1871 +#: src/input/vcd/xineplug_inp_vcd.c:1876 msgid "show 'rejected' VCD LIDs" -msgstr "" +msgstr "mostrar LIDs de VCD 'rechazados' " -#: src/input/vcd/xineplug_inp_vcd.c:1872 +#: src/input/vcd/xineplug_inp_vcd.c:1877 msgid "" "Some playback list IDs (LIDs) are marked not showable, but you can see them " "in the MRL list if this is set. Rejected entries are marked with an asterisk " "(*) appended to the MRL." msgstr "" +"Algunas listas de IDs de reproducción (LIDs) se marcan como no mostrables, " +"pero puede verlas en la lista de MRL si se activa esto. Las entradas " +"rechazadas se marcan con un asterisco (*) anexado al MRL." -#: src/input/vcd/xineplug_inp_vcd.c:1883 +#: src/input/vcd/xineplug_inp_vcd.c:1888 msgid "VCD format string for display banner" -msgstr "" +msgstr "Cadena de formato VCD para pantalla banderola" -#: src/input/vcd/xineplug_inp_vcd.c:1884 +#: src/input/vcd/xineplug_inp_vcd.c:1889 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are:\n" @@ -2732,24 +3019,48 @@ msgid "" " A number between 1 and the volume count.\n" " %% : a %\n" msgstr "" +"formato VCD usado en el tÃtulo del GUI. Similar al comando Unix date. Los " +"especificadores de formato empiezan con un sÃmbolo de porcentaje. Los " +"especificadores son:\n" +" %A : Información del álbum \n" +" %C : Contador del volúmenes VCD - el número de CDs en la colección.\n" +" %c : Número del volúmen VCD - el número del CD en la colección.\n" +" %F : El formato VCD, p.e.: VCD 1.0, VCD 1.1, VCD 2.0, o SVCD\n" +" %I : El tipo de la entrada/segmento/reproducción actual, p.e:. ENTRY, " +"TRACK, ...\n" +" %L : El ID de la lista de ejecución con el prifijo \" LID\" si existe\n" +" %N : El número actual de lo de arriba - un número decimal\n" +" %P : El ID del editor\n" +" %p : El ID del preparador\n" +" %S : Si estamos en segmento (menú), el tipo de segmento\n" +" %T : El número de pista\n" +" %V : El ID del juego de volúmenes\n" +" %v : El ID del volúmen\n" +" Un número entre 1 y el contador de volúmenes.\n" +" %% : a %\n" -#: src/input/vcd/xineplug_inp_vcd.c:1909 +#: src/input/vcd/xineplug_inp_vcd.c:1914 msgid "VCD format string for stream comment field" -msgstr "" +msgstr "Cadena de formato VCD para campo de comentario" -#: src/input/vcd/xineplug_inp_vcd.c:1910 +#: src/input/vcd/xineplug_inp_vcd.c:1915 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are %A, %C, %c, %F, %I, %L, " "%N, %P, %p, %S, %T, %V, %v, and %%.\n" "See the help for the title_format for the meanings of these." msgstr "" +"Formato VCD usado en el el tÃtulo del GUI. Similar al comando Unix date. Los " +"especificadores de formato empiezan con un sÃmbolo de porcentaje. Los " +"especificadores son %A, %C, %c, %F, %I, %L, %N, %P, %p, %S, %T, %V, %v, y %" +"%.\n" +"Vea la ayuda para title_format para ver su significado." -#: src/input/vcd/xineplug_inp_vcd.c:1922 +#: src/input/vcd/xineplug_inp_vcd.c:1927 msgid "VCD debug flag mask" -msgstr "" +msgstr "Máscara de banderas de depuración VCD" -#: src/input/vcd/xineplug_inp_vcd.c:1923 +#: src/input/vcd/xineplug_inp_vcd.c:1928 msgid "" "For tracking down bugs in the VCD plugin. Mask values are:\n" " 1: Meta information\n" @@ -2765,141 +3076,158 @@ msgid "" "1024: Still-frame\n" "2048: Debugging from VCDINFO\n" msgstr "" +"Para depurar errores en el complemento VCD. Los valores de la máscara son:\n" +" 1: Meta información\n" +" 2: Eventos de entrada (teclado/ratón) \n" +" 4: Análisis sintáctico de MRL\n" +" 8: Llamadas a rutinas externas\n" +" 16: Llamadas a rutinas\n" +" 32: Cambios en LSN\n" +" 64: Control de reproducción\n" +" 128: Depurando desde CDIO\n" +" 256: Búsquedas a localización determinada\n" +" 512: Búsquedas para encontrar la localización actual\n" +"1024: Cuadro congelado\n" +"2048: Depurando desde VCDINFO\n" #: src/input/vcd/vcdplayer.c:88 msgid "bad item type" -msgstr "" +msgstr "mal tipo de artÃculo" #: src/input/vcd/vcdplayer.c:452 msgid "bad entry number" -msgstr "" +msgstr "mal número de entrada" #: src/input/vcd/vcdplayer.c:485 msgid "bad segment number" -msgstr "" +msgstr "mal número de segmento" #: src/input/vcd/vcdplayer.c:495 msgid "Error in getting current segment number" -msgstr "" +msgstr "Error en conseguir número de segmento actual" #: src/input/vcd/vcdplayer.c:583 msgid "Should have converted this above" -msgstr "" +msgstr "DeberÃa haber convertido esto arriba" #: src/input/input_pvr.c:603 -#, fuzzy, c-format +#, c-format msgid "input_pvr: error creating pvr file (%s)\n" -msgstr "input_dvd: no se puede abrir el archivo >%s<\n" +msgstr "input_pvr: error al crear el archivo pvr (%s)\n" #: src/input/input_pvr.c:760 -#, fuzzy, c-format +#, c-format msgid "input_pvr: error opening pvr file (%s)\n" -msgstr "input_dvd: no se puede abrir el archivo >%s<\n" +msgstr "input_pvr: error al abrir el archivo pvr (%s)\n" #: src/input/input_pvr.c:836 -#, fuzzy, c-format +#, c-format msgid "input_pvr: read error (%s)\n" -msgstr "input_http: error de lectura (%s)\n" +msgstr "input_pvr: error de lectura (%s)\n" #: src/input/input_pvr.c:1152 src/input/input_pvr.c:1405 -#, fuzzy, c-format +#, c-format msgid "input_pvr: error opening device %s\n" -msgstr "input_dvd: no se puede abrir el archivo >%s<\n" +msgstr "input_pvr: error al abrir el dispositivo %s\n" #: src/input/input_pvr.c:1158 src/input/input_pvr.c:1411 msgid "input_pvr: IVTV_IOC_G_CODEC failed, maybe API changed?\n" msgstr "" +"input_pvr: IVTV_IOC_G_CODEC falló, ¿quizás cambió la API? (interfase para " +"programación de aplicaciones)\n" #: src/input/input_pvr.c:1166 src/input/input_pvr.c:1420 msgid "input_pvr: IVTV_IOC_S_CODEC failed, maybe API changed?\n" msgstr "" +"input_pvr: IVTV_IOC_S_CODEC falló, ¿quizás cambió la API? (interfase para " +"programación de aplicaciones)\n" #: src/input/input_pvr.c:1528 msgid "WinTV-PVR 250/350 input plugin" -msgstr "" +msgstr "complemento de entrada para WinTV-PVR 250/350" #: src/input/input_pvr.c:1554 msgid "device used for WinTV-PVR 250/350 (pvr plugin)" -msgstr "" +msgstr "dispositivo usado para WinTV-PVR 250/350 (complemento pvr)" #: src/input/input_pvr.c:1555 msgid "The path to the device of your WinTV card." -msgstr "" +msgstr "El camino al dispositivo de su tarjeta WinTV." #: src/input/input_gnome_vfs.c:218 -#, fuzzy msgid "gnome-vfs input plugin as shipped with xine" -msgstr "plugin de entrada de red incluido en xine" +msgstr "complemento de entrada gnome-vfs tal como vino con xine" #: src/input/input_gnome_vfs.c:292 src/input/input_file.c:442 -#, fuzzy, c-format +#, c-format msgid "input_file: File empty: >%s<\n" -msgstr "input_file: error de lectura (%s)\n" +msgstr "input_file: Fichero vacÃo: >%s<\n" #: src/input/input_vcd.c:850 -#, fuzzy msgid "input_vcd: malformed MRL. Use vcdo:/<track #>\n" -msgstr "input_vcd: MRL mal formada. Use vcd://<núm. pista>\n" +msgstr "input_vcd: MRL mal formada. Use vcdo:/<núm. pista>\n" #: src/input/input_vcd.c:856 #, c-format msgid "input_vcd: invalid track %d (valid range: 0 .. %d)\n" -msgstr "input_vcd: pista no válida %d (rango válido: 0 .. %d)\n" +msgstr "input_vcd: pista %d no válida (rango válido: 0 .. %d)\n" #: src/input/input_vcd.c:923 -#, fuzzy msgid "Video CD input plugin" -msgstr "plugin de entrada de stream de red http" +msgstr "Complemento de entrada de vÃdeo CD" #: src/input/input_vcd.c:968 #, c-format msgid "unable to open %s: %s.\n" -msgstr "no se puede abrir %s: %s.\n" +msgstr "incapaz de abrir %s: %s.\n" #: src/input/input_vcd.c:1044 -#, fuzzy, c-format +#, c-format msgid "input_vcd: unable to open %s: %s.\n" -msgstr "input_dvd: no se puede abrir la unidad de dvd (%s): %s\n" +msgstr "input_vcd: incapaz de abrir %s: %s.\n" #: src/input/input_vcd.c:1098 msgid "device used for VCD playback" -msgstr "" +msgstr "dispositivo usado para reproducción de VCD" #: src/input/input_vcd.c:1099 msgid "" "The path to the device, usually a CD or DVD drive, you intend to play your " "VideoCDs with." msgstr "" +"El camino al dispositivo, usualmente una unidad de CD o DVD, que quiere usar " +"para reproducir sus VideoCDes." #: src/input/input_dvd.c:595 msgid "input_dvd: values of \\beta will give rise to dom!\n" -msgstr "" +msgstr "input_dvd: ¡valores de \\beta darán lugar a 'dom'!\n" #: src/input/input_dvd.c:614 #, c-format msgid "input_dvd: Error getting next block from DVD (%s)\n" -msgstr "" +msgstr "input_dvd: Error al conseguir el siguiente bloque desde el DVD (%s)\n" #: src/input/input_dvd.c:1502 -#, fuzzy msgid "input_dvd: Error opening DVD device\n" -msgstr "input_dvd: no se puede abrir el archivo >%s<\n" +msgstr "input_dvd: Error abriendo dispositivo DVD\n" #: src/input/input_dvd.c:1785 msgid "device used for DVD playback" -msgstr "" +msgstr "dispositivo usado para reproducción de DVD" #: src/input/input_dvd.c:1786 msgid "" "The path to the device, usually a DVD drive, which you intend to use for " "playing DVDs." msgstr "" +"El camino al dispositivo, usualmente una unidad de DVD, que desea usar para " +"reproducir DVDs." -#: src/input/input_dvd.c:1803 +#: src/input/input_dvd.c:1804 msgid "raw device set up for DVD access" -msgstr "" +msgstr "dispositivo bruto usado para acceso al DVD" -#: src/input/input_dvd.c:1804 +#: src/input/input_dvd.c:1805 msgid "" "If this points to a raw device connected to your DVD device, xine will use " "the raw device for playback. This has the advantage of being slightly faster " @@ -2909,23 +3237,34 @@ msgid "" "once.\n" "See the documentation on raw device setup (man raw) for further information." msgstr "" +"Si esto apunta a un dispositvo en bruto conectado a su dispositivo DVD, sine " +"usará el dispositivo en bruto para reproducción. Esto tiene la ventaja de " +"ser ligeramente más rapido y de saltarse el caché del dispositivo de " +"bloques, lo que evita tirar contenido importante del caché al mantener los " +"datos del DVD cacheados. Usar el caché del dispositivo de bloques para DVDs " +"es inútil, porque casi todos los datos del DVD serán usados una única vez.\n" +"Vea la documentación de configuración de dispositivos en bruto (man raw) " +"para más información." -#: src/input/input_dvd.c:1817 +#: src/input/input_dvd.c:1818 msgid "CSS decryption method" -msgstr "" +msgstr "método de desencriptación CSS" -#: src/input/input_dvd.c:1818 +#: src/input/input_dvd.c:1819 msgid "" "Selects the decryption method libdvdcss will use to descramble copy " "protected DVDs. Try the various methods, if you have problems playing " "scrambled DVDs." msgstr "" +"Selecciona el método de desencriptado que libdvdcss usará para descifrar " +"DVDs protegidos de copia. Pruebe los varios métodos, si tiene problemas " +"reproduciendo DVDs cifrados." -#: src/input/input_dvd.c:1826 +#: src/input/input_dvd.c:1827 msgid "path to the title key cache" -msgstr "" +msgstr "camino al caché de claves de tÃtulos" -#: src/input/input_dvd.c:1827 +#: src/input/input_dvd.c:1828 msgid "" "Since cracking the copy protection of scrambled DVDs can be quite time " "consuming, libdvdcss will cache the cracked keys in this directory.\n" @@ -2933,45 +3272,60 @@ msgid "" "will be created in this directory. Be sure to use a dedicated directory not " "used for anything but DVD key caching." msgstr "" +"Puesto que rompler la protección de copia de DVDs crifrados puede consumir " +"bastante tiempo, libdvdcss almacenará las claves rotas en éste directorio.\n" +"Esta configuración es de seguridad crÃtica, porque en este directorio se " +"crearán ficheros con nombres incontrolables. Asegúrse de usar un directorio " +"dedicado que no se use para otra cosa excepto cacheado de claves de DVDs." -#: src/input/input_dvd.c:1849 +#: src/input/input_dvd.c:1850 msgid "region the DVD player claims to be in (1 to 8)" -msgstr "" +msgstr "Región a la cual el reproductor de DVDs dice pertenecer (1 a 8)" -#: src/input/input_dvd.c:1850 +#: src/input/input_dvd.c:1851 msgid "" "This only needs to be changed if your DVD jumps to a screen complaining " "about a wrong region code. It has nothing to do with the region code set in " "DVD drives, this is purely software." msgstr "" +"Esto solo necesita cambiarse si su DVD salta a una pantalla quejándose de un " +"código regional equivocado. No tiene nada ue ver con el código regional " +"puesto en los reproductores de DVD, esto es puramente software." -#: src/input/input_dvd.c:1856 +#: src/input/input_dvd.c:1857 msgid "default language for DVD playback" -msgstr "" +msgstr "idioma por defecto para reproducción de DVD" -#: src/input/input_dvd.c:1857 +#: src/input/input_dvd.c:1858 msgid "" "xine tries to use this language as a default for DVD playback. As far as the " "DVD supports it, menus and audio tracks will be presented in this language.\n" "The value must be a two character ISO639 language code." msgstr "" +"xine intenta usar este idioma por defecto para reproducción de DVD. Mientras " +"el DVD lo soporte, los menús y pistas de audio se presentarán en este " +"idioma.\n" +"El valor debe ser un código de idioma de dos caracteres según ISO639." -#: src/input/input_dvd.c:1863 +#: src/input/input_dvd.c:1864 msgid "read-ahead caching" -msgstr "" +msgstr "caché de lectura adelantada" -#: src/input/input_dvd.c:1864 +#: src/input/input_dvd.c:1865 msgid "" "xine can use a read ahead cache for DVD drive access.\n" "This may lead to jerky playback on slow drives, but it improves the impact " "of the DVD layer change on faster drives." msgstr "" +"xine puede usar un caché de lectura adelantada para acceso al DVD.\n" +"Esto puede dar lugar a reproducción a golpes en unidades lentas, pero mejora " +"el impacto del cambio de capa del DVD en unidades más rápidas." -#: src/input/input_dvd.c:1870 +#: src/input/input_dvd.c:1871 msgid "unit for the skip action" -msgstr "" +msgstr "unidad para la acción de salto (skip)" -#: src/input/input_dvd.c:1871 +#: src/input/input_dvd.c:1872 msgid "" "You can configure the behaviour when issuing a skip command (using the skip " "buttons for example). The individual values mean:\n" @@ -2989,12 +3343,29 @@ msgid "" "will skip a DVD title, which is a structural unit representing entire " "features on the DVD" msgstr "" +"Puede configurar el comportamiento cuando use el comando \"skip\" (por " +"ejemplo, usando los botones de skip). Los valores individuales significan:\n" +"\n" +"skip program (saltar programa)\n" +"se saltará un programa del DVD, que es una unidad navegacional similar a las " +"marcas de Ãndice en un CD de audio CD; éste es el comportamiento normal de " +"los reproductores de DVD\n" +"\n" +"skip part (saltar parte)\n" +"saltará una parte del DVD, que es una unidad estructural similar a las " +"marcas de pista (¿canción?) en un CD de audio; las partes usualmente " +"coinciden con los programas, pero las partes pueden ser mayores que los " +"programas\n" +"\n" +"skip title (saltar tÃtulo)\n" +"saltará un tÃtulo del DVD, que es una unidad estructural representando " +"piezas completas en el DVD" -#: src/input/input_dvd.c:1886 +#: src/input/input_dvd.c:1887 msgid "unit for seeking" -msgstr "" +msgstr "unidad para búsqueda" -#: src/input/input_dvd.c:1887 +#: src/input/input_dvd.c:1888 msgid "" "You can configure the domain spanned by the seek slider. The individual " "values mean:\n" @@ -3007,12 +3378,23 @@ msgid "" "seeking will span a DVD program, which is a navigational unit representing a " "chapter of the current feature" msgstr "" +"Puede configurar el dominio abarcado por el deslizador de búsqueda. Los " +"valores individuales significan:\n" +"\n" +"seek in program chain (búsqueda en la cadena de programas)\n" +"la búsqueda abarcará la cadena entera de programas del DVD, que es una " +"unidad navigacional representando el flujo de video entero de la feature " +"actual\n" +"\n" +"seek in program (búsqueda en programa)\n" +"la busqueda abarcará un programa del DVD, que es una unidad navigacional " +"representando un capÃtulo de la feature actual" -#: src/input/input_dvd.c:1898 +#: src/input/input_dvd.c:1899 msgid "play mode when title/chapter is given" -msgstr "" +msgstr "modo de ejecución cuando se da el tÃtulo/capÃtulo" -#: src/input/input_dvd.c:1899 +#: src/input/input_dvd.c:1900 msgid "" "You can configure the behaviour when playing a dvd from a given title/" "chapter (eg. using MRL 'dvd:/1.2'). The individual values mean:\n" @@ -3023,6 +3405,15 @@ msgid "" "one chapter\n" "play just the specified title/chapter and then stop" msgstr "" +"Puede configurar el comportamiento cuando se reproduce un DVD de un tÃtulo/" +"capÃtulo dado (p.e.: usando MRL 'dvd:/1.2'). Los valores individuales " +"significan:\n" +"\n" +"dvd entero\n" +"reproducir el dvd completo empezando en la posición especificada.\n" +"\n" +"un capÃtulo\n" +"reproducir únicamente el tÃtulo capÃtulo especificado y entonces parar" #: src/input/input_file.c:203 #, c-format @@ -3030,175 +3421,192 @@ msgid "input_file: read error (%s)\n" msgstr "input_file: error de lectura (%s)\n" #: src/input/input_file.c:405 -#, fuzzy, c-format +#, c-format msgid "input_file: Permission denied: >%s<\n" -msgstr "input_cda: falló fopen(%s): %s\n" +msgstr "input_file: Permiso denegado: >%s<\n" #: src/input/input_file.c:410 -#, fuzzy, c-format +#, c-format msgid "input_file: File not found: >%s<\n" -msgstr "input_file: error de lectura (%s)\n" +msgstr "input_file: Fichero no encontrado: >%s<\n" #: src/input/input_file.c:663 msgid "file input plugin" -msgstr "" +msgstr "complemento de fichero entrada" #: src/input/input_file.c:1032 msgid "file browsing start location" -msgstr "" +msgstr "localización de comienzo de ojeado de ficheros" #: src/input/input_file.c:1033 msgid "The browser to select the file to play will start at this location." msgstr "" +"El ojeador para seleccionar el fichero a reproducir comenzará en esta " +"localización." #: src/input/input_file.c:1040 msgid "list hidden files" -msgstr "" +msgstr "listar ficheros ocultos" #: src/input/input_file.c:1041 msgid "" "If enabled, the browser to select the file to play will also show hidden " "files." msgstr "" +"si se activa. el ojeador para seleccionar el fichero a reproducir también " +"mostrará los ficheros ocultos." #: src/input/net_buf_ctrl.c:89 msgid "Buffering..." -msgstr "" +msgstr "Tamponeando..." #: src/input/input_stdin_fifo.c:166 #, c-format msgid "stdin: cannot seek back! (%<PRIdMAX> > %<PRIdMAX>)\n" -msgstr "" +msgstr "stdin: ¡no puedo ir hacia atrás! (%<PRIdMAX> > %<PRIdMAX>)\n" #: src/input/input_stdin_fifo.c:254 -#, fuzzy, c-format +#, c-format msgid "stdin: failed to open '%s'\n" -msgstr "input_http: falló al abrir el socket\n" +msgstr "stdin: falló al abrir '%s'\n" #: src/input/input_stdin_fifo.c:350 -#, fuzzy msgid "stdin streaming input plugin" -msgstr "plugin de entrada de stream de red http" +msgstr "complemento de entrada de flujo de bits" #: src/input/input_dvb.c:881 -#, fuzzy, c-format +#, c-format msgid "input_dvb: failed to open dvb channel file '%s'\n" -msgstr "input_file: intentando abrir el archivo de subtÃtulos '%s'\n" +msgstr "input_dvb: failló al abrir el fichero de canales DVB '%s'\n" #: src/input/input_dvb.c:2077 src/input/input_dvb.c:2905 -#, fuzzy msgid "input_dvb: tuner_set_channel failed\n" -msgstr "input_vcd: falló la lectura de datos\n" +msgstr "input_dvb: falló tuner_set_channel\n" #: src/input/input_dvb.c:2705 -#, fuzzy msgid "input_dvb: cannot open dvb device\n" -msgstr "input_dvd: no se puede abrir la unidad de dvd >%s<\n" +msgstr "input_dvb: no puedo abrir dispositivo DVB\n" #: src/input/input_dvb.c:2729 #, c-format msgid "input_dvb: channel %d out of range, defaulting to 0\n" -msgstr "" +msgstr "input_dvb: canal %d fuera de rango, poniendo a 0\n" #: src/input/input_dvb.c:2740 -#, fuzzy, c-format +#, c-format msgid "input_dvb: searching for channel %s\n" -msgstr "input_file: intentando abrir el archivo de subtÃtulos '%s'\n" +msgstr "input_dvb: buscando el canal %s\n" #: src/input/input_dvb.c:2763 #, c-format msgid "input_dvb: exact match for %s not found: trying partial matches\n" msgstr "" +"input_dvb: no encontrada una coincidencia exacta para %s: probando " +"coincidencias parciales\n" #: src/input/input_dvb.c:2770 -#, fuzzy, c-format +#, c-format msgid "input_dvb: found matching channel %s\n" -msgstr "input_file: intentando abrir el archivo de subtÃtulos '%s'\n" +msgstr "input_dvb: encontrado el canal correspondiente %s\n" +# Cer: (temporal) "valores por defecto" no es la traducción exacta #: src/input/input_dvb.c:2783 -#, c-format +#, fuzzy, c-format msgid "input_dvb: channel %s not found in channels.conf, defaulting.\n" msgstr "" +"input_dvb: canal %s no encontrado en channels.conf, yendo a valores por " +"defecto.\n" #: src/input/input_dvb.c:2789 msgid "" "input_dvb: invalid channel specification, defaulting to last viewed " "channel.\n" msgstr "" +"input_dvb: especificación de canal inválida, usaremos el ultimo canal " +"visualizado.\n" #: src/input/input_dvb.c:2795 msgid "input_dvb: invalid channel specification, defaulting to channel 0\n" -msgstr "" +msgstr "input_dvb: especificación de canal inválida, usaremos el canal 0.\n" #: src/input/input_dvb.c:2807 msgid "" "input_dvb: dvbs mrl specified but the tuner doesn't appear to be QPSK (DVB-" "S)\n" msgstr "" +"input_dvb: se especificó MRL DVBS pero el sintonizador no aparenta ser QPSK " +"(DVB-S)\n" #: src/input/input_dvb.c:2827 msgid "" "input_dvb: dvbt mrl specified but the tuner doesn't appear to be OFDM (DVB-" "T)\n" msgstr "" +"input_dvb: se especificó MRL DVBT pero el sintonizador no aparenta ser OFDM " +"(DVB-T)\n" #: src/input/input_dvb.c:2850 src/input/input_dvb.c:2876 msgid "" "input_dvb: dvbc mrl specified but the tuner doesn't appear to be QAM (DVB-" "C)\n" msgstr "" +"input_dvb: se especificó MRL DVBC pero el sintonizador no aparenta ser QAM " +"(DVB-C)\n" #: src/input/input_dvb.c:2911 -#, fuzzy, c-format +#, c-format msgid "input_dvb: cannot open dvr device '%s'\n" -msgstr "input_dvd: no se puede abrir la unidad de dvd >%s<\n" +msgstr "input_dvb: no se puede abrir el dispositivo DVR '%s'\n" #: src/input/input_dvb.c:2933 -#, fuzzy msgid "input_dvb: cannot create EPG updater thread\n" -msgstr "input_rtp: no se puede crear un hilo nuevo (%s)\n" +msgstr "input_dvb: no se puede crear el hilo actualizador de EPG\n" #: src/input/input_dvb.c:2995 msgid "use DVB 'center cutout' (zoom)" -msgstr "" +msgstr "usar corte de la zona central del DVB (zoom)" #: src/input/input_dvb.c:2996 msgid "" "This will allow fullscreen playback of 4:3 content transmitted in a 16:9 " "frame." msgstr "" +"Esto permitirá reproducción a pantalla completa de contenido en formato 4:3 " +"transmitido en un cuadro 16:9." #: src/input/input_dvb.c:3089 -#, fuzzy msgid "DVB (Digital TV) input plugin" -msgstr "plugin de entrada de stream de red http" +msgstr "complemento de entrada DVB (TV Digital)" -#: src/input/input_dvb.c:3238 +#: src/input/input_dvb.c:3237 msgid "Remember last DVB channel watched" -msgstr "" +msgstr "Recordar el último canal DVB visto" -#: src/input/input_dvb.c:3239 +#: src/input/input_dvb.c:3238 msgid "" "On autoplay, xine will remember and switch to the channel indicated in media." "dvb.last_channel. " msgstr "" +"En autoejecución, xine recordará y cambiará al canal indicado en media.dvb." +"last_channel. " -#: src/input/input_dvb.c:3246 +#: src/input/input_dvb.c:3245 msgid "Last DVB channel viewed" -msgstr "" +msgstr "Último canal DVB visto" -#: src/input/input_dvb.c:3247 +#: src/input/input_dvb.c:3246 msgid "If enabled xine will remember and switch to this channel. " -msgstr "" +msgstr "Si se activa xine recordará y cambiará a este canal. " -#: src/input/input_dvb.c:3253 +#: src/input/input_dvb.c:3252 msgid "Number of dvb card to use." -msgstr "" +msgstr "Número de tarjeta DVB a usar." -#: src/input/input_dvb.c:3254 -msgid "" -"Leave this at zero unless you really have more than 1 card in your system." +#: src/input/input_dvb.c:3253 +msgid "Leave this at zero unless you really have more than 1 card in your system." msgstr "" +"Dejar esto a cero a menos que realmemte tenga más de 1 tarjeta en sus " +"sistema." #: src/input/input_net.c:123 src/input/input_net.c:153 #, c-format @@ -3222,40 +3630,42 @@ msgstr "input_net: no se puede conectar a '%s'.\n" #: src/input/input_net.c:510 msgid "net input plugin as shipped with xine" -msgstr "plugin de entrada de red incluido en xine" +msgstr "complemento de entrada de red incluido en xine" #: src/input/input_cdda.c:1541 -#, fuzzy, c-format +#, c-format msgid "%s: can't connect to %s:%d\n" -msgstr "http: no se puede conectar a >%s<\n" +msgstr "%s: no se puede conectar a %s:%d\n" #: src/input/input_cdda.c:1588 -#, fuzzy, c-format +#, c-format msgid "input_cdda: successfuly connected to cddb server '%s:%d'.\n" -msgstr "input_cda: servidor '%s:%d' conectado con éxito.\n" +msgstr "input_cdda: conectado con éxito al servidor cddb '%s:%d'.\n" #: src/input/input_cdda.c:1593 -#, fuzzy, c-format +#, c-format msgid "input_cdda: failed to connect to cddb server '%s:%d' (%s).\n" -msgstr "input_net: no se puede conectar a '%s'.\n" +msgstr "input_cdda: falló al conectar al servidor cddb '%s:%d' (%s).\n" #: src/input/input_cdda.c:2627 msgid "CD Digital Audio (aka. CDDA)" -msgstr "" +msgstr "audio CD digital (alias CDDA)" #: src/input/input_cdda.c:2680 msgid "device used for CD audio" -msgstr "" +msgstr "dispositivo usado para audio CD" #: src/input/input_cdda.c:2681 msgid "" "The path to the device, usually a CD or DVD drive, which you intend to use " "for playing audio CDs." msgstr "" +"El camino al dispositivo, normalmente un lector de de CD o DVD, que desea " +"usar para reproducir CDs de audio." #: src/input/input_cdda.c:2687 msgid "query CDDB" -msgstr "" +msgstr "consultar la CDDB" #: src/input/input_cdda.c:2687 msgid "" @@ -3265,10 +3675,15 @@ msgid "" "retrieved from an internet server which might collect a profile of your " "listening habits." msgstr "" +"Activa conslutas a la base de datos CDDB, que le dará titulos y nombres de " +"pista adecuados para sus CDs de audio\n" +"Recuerde que, a menos que use su base de datos CDDB privada, esta " +"información se obtiene de un servidor en Internet que podrÃa sacar un perfil " +"de sus hábitos de escucha." #: src/input/input_cdda.c:2695 msgid "CDDB server name" -msgstr "" +msgstr "nombre del servidor CDDB" #: src/input/input_cdda.c:2695 msgid "" @@ -3277,18 +3692,23 @@ msgid "" "information about your listening habits and could answer the queries with " "malicious replies. Be sure to enter a server you can trust." msgstr "" +"El servidor CDDB usado para obtener la información de tÃtulo y pista.\n" +"Esta configuración es crÃtica para su seguridad, porque el servidor recibirá " +"información acerca de sus hábitos de escucha y podrÃa responder sus " +"consultas con respuestas maliciosas. Asegúrese de poner un servidor del que " +"se pueda fiar." #: src/input/input_cdda.c:2703 msgid "CDDB server port" -msgstr "" +msgstr "puerto del servidor CDDB" #: src/input/input_cdda.c:2703 msgid "The server port used to retrieve the title and track information from." -msgstr "" +msgstr "El puerto del servidor usado para obtener la información de tÃtulo y pista." #: src/input/input_cdda.c:2709 msgid "CDDB cache directory" -msgstr "" +msgstr "directorio caché del CDDB" #: src/input/input_cdda.c:2709 msgid "" @@ -3297,10 +3717,15 @@ msgid "" "will be created in this directory. Be sure to use a dedicated directory not " "used for anything but CDDB caching." msgstr "" +"Las respuestas del servidor CDDB serán almacenadas temporalmente en este " +"directorio.\n" +"Esta configuración es crÃtica para su seguridad, porque nombres sin control " +"serán creados en este directorio. Asegúrese de poner un directorio dedicado " +"que no se use para ninguna otra cosa que el cacheado del CDDB." #: src/input/input_cdda.c:2717 msgid "slow down disc drive to this speed factor" -msgstr "" +msgstr "enlentecer la unidad de disco a este factor de velocidad" #: src/input/input_cdda.c:2718 msgid "" @@ -3310,189 +3735,208 @@ msgid "" "so the slowdown should not affect playback performance.\n" "A value of zero here will disable the slowdown." msgstr "" +"Puesto que algunas unidades lectoras de CD o DVD hacen un ruido considerable " +"a causa de la alta velocidad de rotación del disco, xine intentará " +"enlentecerlas. Con la reproducción estándar de CD o DVD, los grandes flujos " +"de datos que requieren la alta velocidad de rotación no son necesarios, asà " +"que el enlentecimiento no afectarÃa el rendimiento de la reproducción.\n" +"Un valor de cero desactivará el enlentecimiento." -#: src/input/input_rtp.c:182 +#: src/input/input_rtp.c:185 #, c-format msgid "socket(): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:192 +#: src/input/input_rtp.c:195 msgid "IP address specified is multicast\n" -msgstr "" +msgstr "La dirección IP especificada es multidifusión\n" -#: src/input/input_rtp.c:201 -#, fuzzy, c-format +#: src/input/input_rtp.c:204 +#, c-format msgid "setsockopt(SO_RCVBUF): %s.\n" -msgstr "socket(): %s.\n" +msgstr "setsockopt(SO_RCVBUF): %s.\n" -#: src/input/input_rtp.c:209 -#, fuzzy, c-format +#: src/input/input_rtp.c:212 +#, c-format msgid "setsockopt(SO_REUSEADDR): %s.\n" -msgstr "socket(): %s.\n" +msgstr "setsockopt(SO_REUSEADDR): %s.\n" -#: src/input/input_rtp.c:216 +#: src/input/input_rtp.c:219 #, c-format msgid "bind(): %s.\n" msgstr "bind(): %s.\n" -#: src/input/input_rtp.c:236 +#: src/input/input_rtp.c:239 #, c-format msgid "Can't find address for iface %s:%s\n" -msgstr "" +msgstr "No se puede encontrar la dirección para la interfase %s:%s\n" -#: src/input/input_rtp.c:254 +#: src/input/input_rtp.c:257 #, c-format msgid "setsockopt(IP_ADD_MEMBERSHIP) failed (multicast kernel?): %s.\n" -msgstr "setsockopt(IP_ADD_MEMBERSHIP) falló (¿kernel multicast?): %s.\n" +msgstr "setsockopt(IP_ADD_MEMBERSHIP) falló (¿kernel multidifusión?): %s.\n" -#: src/input/input_rtp.c:276 +#: src/input/input_rtp.c:279 #, c-format msgid "unable to resolve '%s'.\n" msgstr "no se puede resolver '%s'.\n" -#: src/input/input_rtp.c:286 -#, fuzzy, c-format +#: src/input/input_rtp.c:289 +#, c-format msgid "unable to bind to '%s'.\n" -msgstr "no se puede conectar a '%s'.\n" +msgstr "incapaz de conectar a '%s'.\n" -#: src/input/input_rtp.c:314 -#, fuzzy, c-format +#: src/input/input_rtp.c:317 +#, c-format msgid "recv(): %s.\n" -msgstr "socket(): %s.\n" +msgstr "recv(): %s.\n" -#: src/input/input_rtp.c:602 +#: src/input/input_rtp.c:605 msgid "RTP: stopping reading thread...\n" -msgstr "" +msgstr "RTP: parando el hilo de lectura...\n" -#: src/input/input_rtp.c:605 +#: src/input/input_rtp.c:608 msgid "RTP: reading thread terminated\n" -msgstr "" +msgstr "RTP: hilo de lectura terminado\n" -#: src/input/input_rtp.c:620 -#, c-format +# Cer: no esoy seguro del formato. +#: src/input/input_rtp.c:623 +#, fuzzy, c-format msgid "Opening >filename:%s port:%d interface:%s<\n" -msgstr "" +msgstr "Abriendo >fichero:%s puerto:%d interfase:%s<\n" -#: src/input/input_rtp.c:637 +#: src/input/input_rtp.c:640 #, c-format msgid "input_rtp: can't create new thread (%s)\n" msgstr "input_rtp: no se puede crear un hilo nuevo (%s)\n" -#: src/input/input_rtp.c:743 -#, fuzzy +#: src/input/input_rtp.c:746 msgid "RTP and UDP input plugin as shipped with xine" -msgstr "plugin de entrada de red incluido en xine" +msgstr "complemento de entrada RTP y UDP original de xine" #: src/input/librtsp/rtsp.c:450 #, c-format msgid "rtsp: bad mrl: %s\n" -msgstr "" +msgstr "rtsp: mal mrl: %s\n" #: src/input/librtsp/rtsp.c:510 -#, fuzzy, c-format +#, c-format msgid "rtsp: failed to connect to '%s'\n" -msgstr "http: no se puede conectar a >%s<\n" +msgstr "rtsp: falló en conectar a '%s'\n" -#: src/input/librtsp/rtsp_session.c:84 -#, fuzzy, c-format +#: src/input/librtsp/rtsp_session.c:93 src/input/input_mms.c:479 +msgid "network bandwidth" +msgstr "ancho de banda de red" + +#: src/input/librtsp/rtsp_session.c:94 src/input/input_mms.c:480 +msgid "" +"Specify the bandwidth of your internet connection here. This will be used " +"when streaming servers offer different versions with different bandwidth " +"requirements of the same stream." +msgstr "" +"Especifique aquà el ancho de banda de su conexión a Internet aquÃ. Esto se " +"usará cuando servidores de flujos de bits ofrezcan diferentes versiones con " +"diferentes requisitos de ancho de banda del mismo flujo." + +#: src/input/librtsp/rtsp_session.c:109 +#, c-format msgid "rtsp_session: failed to connect to server %s\n" -msgstr "http: no se puede conectar a >%s<\n" +msgstr "rtsp_session: falló en conectar al servidor %s\n" -#: src/input/librtsp/rtsp_session.c:118 +#: src/input/librtsp/rtsp_session.c:143 msgid "rtsp_session: session can not be established.\n" -msgstr "" +msgstr "rtsp_session: la sesión no pudo establecerse.\n" -#: src/input/librtsp/rtsp_session.c:135 +#: src/input/librtsp/rtsp_session.c:161 #, c-format msgid "rtsp_session: rtsp server type '%s' not supported yet. sorry.\n" -msgstr "" +msgstr "rtsp_session: servidor rtsp tipo '%s' no se porta todavÃa. Lo sentimos.\n" #: src/input/input_v4l.c:379 msgid "Buffer underrun..." -msgstr "" +msgstr "Memoria intermedia vacÃa..." #: src/input/input_v4l.c:383 msgid "Buffer overrun..." -msgstr "" +msgstr "Memoria intermedia rebosando..." #: src/input/input_v4l.c:386 msgid "Adjusting..." -msgstr "" +msgstr "Ajustando..." #: src/input/input_v4l.c:660 msgid "Tuner name not found\n" -msgstr "" +msgstr "Nombre del sintonizador no encontrado\n" #: src/input/input_v4l.c:1876 -#, fuzzy msgid "v4l tv input plugin" -msgstr "plugin de entrada de stream de red http" +msgstr "Complemento de entrada v4l tv" #: src/input/input_v4l.c:1880 -#, fuzzy msgid "v4l radio input plugin" -msgstr "plugin de entrada de stream de red http" +msgstr "Complemento de entrada v4l radio" #: src/input/input_v4l.c:1912 msgid "v4l video device" -msgstr "" +msgstr "dispositivo vÃdeo v4l" #: src/input/input_v4l.c:1913 msgid "The path to your Video4Linux video device." -msgstr "" +msgstr "El camino a su dispositivo de vÃdeo Video4Linux." #: src/input/input_v4l.c:1938 msgid "v4l radio device" -msgstr "" +msgstr "dispositivo audio v4l" #: src/input/input_v4l.c:1939 msgid "The path to your Video4Linux radio device." -msgstr "" +msgstr "El camino a su dispositivo de radio Video4Linux." #: src/input/input_pnm.c:262 -#, fuzzy msgid "pnm streaming input plugin" -msgstr "plugin de entrada de stream de red http" +msgstr "complemento de flujo de bits pnm de entrada" -#: src/input/mmsh.c:195 -#, fuzzy +#: src/input/mmsh.c:201 msgid "libmmsh: send error\n" -msgstr "input_http: error de lectura\n" +msgstr "libmmsh: error de envÃo\n" -#: src/input/mmsh.c:240 +#: src/input/mmsh.c:246 +#, c-format msgid "libmmsh: bad response format\n" -msgstr "" +msgstr "libmmsh: mal formato de respuesta\n" -#: src/input/mmsh.c:246 -#, fuzzy, c-format +#: src/input/mmsh.c:252 +#, c-format msgid "libmmsh: 3xx redirection not implemented: >%d %s<\n" -msgstr "input_http: redirección 3xx no implementada: >%d %s<\n" +msgstr "libmmsh: redirección 3xx no implementada: >%d %s<\n" -#: src/input/mmsh.c:253 -#, fuzzy, c-format +#: src/input/mmsh.c:259 +#, c-format msgid "libmmsh: http status not 2xx: >%d %s<\n" -msgstr "input_http: el estado de http no es 2xx: >%d %s<\n" +msgstr "libmmsh: estado http no 2xx: >%d %s<\n" -#: src/input/mmsh.c:261 -#, fuzzy +#: src/input/mmsh.c:267 +#, c-format msgid "libmmsh: Location redirection not implemented\n" -msgstr "input_http: Redirección de \"location\" no implementada\n" +msgstr "libmmsh: redirección de localización no implementada\n" -#: src/input/mmsh.c:471 +#: src/input/mmsh.c:476 msgid "Connecting MMS server (over http)..." -msgstr "" +msgstr "Conectando a servidor MMS (sobre http)..." -#: src/input/mmsh.c:639 +#: src/input/mmsh.c:657 +#, c-format msgid "invalid url\n" -msgstr "" +msgstr "URL inválida\n" -#: src/input/mmsh.c:644 +#: src/input/mmsh.c:662 +#, c-format msgid "unsupported protocol\n" -msgstr "" +msgstr "protocolo no soportado\n" -#: src/input/mms.c:537 +#: src/input/mms.c:561 msgid "Connecting MMS server (over tcp)..." -msgstr "" +msgstr "Conectando a servidor MMS (sobre tcp)..." #: src/input/pnm.c:617 #, c-format @@ -3500,226 +3944,250 @@ msgid "" "input_pnm: got message from server while reading stream:\n" "%s\n" msgstr "" +"input_pnm: se recibió un mensaje del servidor mientras se leÃa el flujo de " +"bits:\n" +"%s\n" #: src/input/pnm.c:755 -#, fuzzy, c-format +#, c-format msgid "input_pnm: failed to connect '%s'\n" -msgstr "input_net: no se puede conectar a '%s'.\n" +msgstr "input_pnm: falló en conectar '%s'\n" #: src/input/pnm.c:766 -#, fuzzy msgid "input_pnm: failed to set up stream\n" -msgstr "input_http: falló al abrir el socket\n" +msgstr "input_pnm: falló en poner el flujo de bits\n" -#: src/input/input_smb.c:154 +#: src/input/input_smb.c:158 msgid "CIFS/SMB input plugin based on libsmbclient" -msgstr "" +msgstr "Complemento de entrada CIFS/SMB basado en libsmbclient" -#: src/input/input_mms.c:420 -#, fuzzy +#: src/input/input_mms.c:443 msgid "mms streaming input plugin" -msgstr "plugin de entrada de stream de red http" +msgstr "complemento de flujo de bits mms" -#: src/input/input_mms.c:456 -msgid "network bandwidth" -msgstr "" - -#: src/input/input_mms.c:457 -msgid "" -"Specify the bandwidth of your internet connection here. This will be used " -"when streaming servers offer different versions with different bandwidth " -"requirements of the same stream." -msgstr "" - -#: src/input/input_mms.c:466 +#: src/input/input_mms.c:489 msgid "MMS protocol" -msgstr "" +msgstr "protocolo MMS" -#: src/input/input_mms.c:467 +#: src/input/input_mms.c:490 msgid "" "Select the protocol to encapsulate MMS.\n" "TCP is better but you may need HTTP behind a firewall." msgstr "" +"Seleccione el protocolo para encapsular MMS.\n" +"TCP es mejor pero puede que necesite HTTP detrás de un cortafuegos." #: src/input/input_http.c:174 -#, fuzzy, c-format +#, c-format msgid "input_http: gethostbyname(%s) failed: %s\n" -msgstr "input_cda: falló fopen(%s): %s\n" +msgstr "input_http: gethostbyname(%s) falló: %s\n" -#: src/input/input_http.c:403 src/input/input_http.c:949 -#, fuzzy, c-format +#: src/input/input_http.c:400 src/input/input_http.c:941 +#, c-format msgid "input_http: read error %d\n" -msgstr "input_http: error de lectura\n" +msgstr "input_http: error de lectura %d\n" -#: src/input/input_http.c:630 +#: src/input/input_http.c:627 msgid "Connecting HTTP server..." -msgstr "" +msgstr "Conectando servidor HTTP..." -#: src/input/input_http.c:824 +#: src/input/input_http.c:816 +#, c-format msgid "input_http: invalid http answer\n" msgstr "input_http: respuesta http no válida\n" -#: src/input/input_http.c:831 -#, fuzzy, c-format +#: src/input/input_http.c:823 +#, c-format msgid "input_http: 3xx redirection: >%d %s<\n" -msgstr "input_http: redirección 3xx no implementada: >%d %s<\n" +msgstr "input_http: redirección 3xx: >%d %s<\n" -#: src/input/input_http.c:836 src/input/input_http.c:842 -#: src/input/input_http.c:849 +#: src/input/input_http.c:828 src/input/input_http.c:834 +#: src/input/input_http.c:841 #, c-format msgid "input_http: http status not 2xx: >%d %s<\n" msgstr "input_http: el estado de http no es 2xx: >%d %s<\n" -#: src/input/input_http.c:859 -#, fuzzy, c-format +#: src/input/input_http.c:851 +#, c-format msgid "input_http: content length = %<PRIdMAX> bytes\n" -msgstr "input_http: longitud del contenido = %Ld bytes\n" +msgstr "input_http: longitud del contenido = %<PRIdMAX> bytes\n" -#: src/input/input_http.c:928 +#: src/input/input_http.c:920 #, fuzzy, c-format msgid "input_http: buffer exhausted after %d bytes." -msgstr "input_http: error de lectura\n" +msgstr "input_http: error de lectura %d\n" -#: src/input/input_http.c:1002 -#, fuzzy +#: src/input/input_http.c:994 msgid "http input plugin" -msgstr "plugin de entrada de stream de red http" +msgstr "complemento de entrada http" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "HTTP proxy host" -msgstr "" +msgstr "Servidor delegado de HTTP" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "The hostname of the HTTP proxy." -msgstr "" +msgstr "El nombre del servidor delegado (\"proxy\") de HTTP." -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "HTTP proxy port" -msgstr "" +msgstr "Puerto del servidor delegado de HTTP" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "The port number of the HTTP proxy." -msgstr "" +msgstr "El número de puerto en el servidor delegado (\"proxy\") de HTTP." -#: src/input/input_http.c:1082 +#: src/input/input_http.c:1074 msgid "HTTP proxy username" -msgstr "" +msgstr "Usuario en el servidor delegado de HTTP" -#: src/input/input_http.c:1083 +#: src/input/input_http.c:1075 msgid "The user name for the HTTP proxy." -msgstr "" +msgstr "El nombre de usuario en el servidor delegado de HTTP." -#: src/input/input_http.c:1086 +#: src/input/input_http.c:1078 msgid "HTTP proxy password" -msgstr "" +msgstr "Contraseña en el servidor delegado de HTTP" -#: src/input/input_http.c:1087 +#: src/input/input_http.c:1079 msgid "The password for the HTTP proxy." -msgstr "" +msgstr "La contraseña en el servidor delegado de HTTP." -#: src/input/input_http.c:1090 +#: src/input/input_http.c:1082 msgid "Domains for which to ignore the HTTP proxy" -msgstr "" +msgstr "Dominios para los cuales se ignorará el servidor HTTP delegado" -#: src/input/input_http.c:1091 +#: src/input/input_http.c:1083 msgid "" "A comma-separated list of domain names for which the proxy is to be " "ignored.\n" "If a domain name is prefixed with '=' then it is treated as a host name only " "(full match required)." msgstr "" +"Una lista separada por comas de nombres de dominio para los cuales el " +"servidor delegado de HTTP sea ignorado.\n" +"Si un nombre de dominio se antecede con '=' entonces se trata como un " +"nombre de servidor sólamente (se requiere coincidencia completa)." #: src/input/media_helper.c:148 #, c-format msgid "input_dvd: Device %s failed to open during eject calls\n" -msgstr "" +msgstr "input_dvd: Dispositivo %s falló al abrir durante las llamadas para ejectar\n" -#: src/input/input_rtsp.c:274 -#, fuzzy +#: src/input/input_rtsp.c:284 msgid "rtsp streaming input plugin" -msgstr "plugin de entrada de stream de red http" +msgstr "complemento de flujo de bits de entrada rtsp" #: src/libspudvb/xine_decoder.c:621 -#, fuzzy msgid "dvbsub: cannot create timer thread\n" -msgstr "demux_ts: no se puede crear un hilo nuevo (%s)\n" +msgstr "dvbsub: no puedo crear hilo temporizador\n" #: src/libxinevdec/bitplane.c:1272 +#, c-format msgid "bitplane: error doing ByteRun1 decompression\n" -msgstr "" +msgstr "bitplane: error haciendo descompresión ByteRun1\n" #: src/libxinevdec/bitplane.c:1331 +#, c-format msgid "bitplane: Anim Opt 1 is not supported at the moment\n" -msgstr "" +msgstr "bitplane: Anim Opt 1 no está soportado de momento\n" #: src/libxinevdec/bitplane.c:1338 +#, c-format msgid "bitplane: Anim Opt 2 is not supported at the moment\n" -msgstr "" +msgstr "bitplane: Anim Opt 2 no está soportado de momento\n" #: src/libxinevdec/bitplane.c:1388 +#, c-format msgid "bitplane: Anim ASCIIJ is not supported at the moment\n" -msgstr "" +msgstr "bitplane: Anim ASCIIJ no está soportado de momento\n" #: src/libxinevdec/bitplane.c:1394 +#, c-format msgid "bitplane: This anim-type is not supported at the moment\n" -msgstr "" +msgstr "bitplane: Este tipo anim no está soportado de momento\n" -#: src/libsputext/demux_sputext.c:1507 +#: src/libsputext/demux_sputext.c:1506 msgid "default duration of subtitle display in seconds" -msgstr "" +msgstr "duración por defecto de la exhibición de los subtÃtulos en segundos" -#: src/libsputext/demux_sputext.c:1508 +#: src/libsputext/demux_sputext.c:1507 msgid "" "Some subtitle formats do not explicitly give a duration for each subtitle. " "For these, you can set a default duration here. Setting to zero will result " "in the subtitle being shown until the next one takes over." msgstr "" +"Algunos formatos de subtÃtulos no dan explÃcitamente una duración para cada " +"subtÃtulo. Para estos, puede definir aquà una duración por defecto. Ponerla " +"a cero hará que el subtÃtulo se siga mostrando hasta que aparezca el " +"siguiente." -#: src/libsputext/xine_decoder.c:913 +#: src/libsputext/xine_decoder.c:948 msgid "subtitle size" -msgstr "" +msgstr "tamaño de subtÃtulo " -#: src/libsputext/xine_decoder.c:914 +#: src/libsputext/xine_decoder.c:949 msgid "" "You can adjust the subtitle size here. The setting will be evaluated " "relative to the window size." msgstr "" +"Puede ajustar el tamaño de los subtÃtulos aquÃ. El ajuste será evaluado " +"relativo al tamaño de la ventana." -#: src/libsputext/xine_decoder.c:920 +#: src/libsputext/xine_decoder.c:955 msgid "subtitle vertical offset" -msgstr "" +msgstr "desplazamiento vertical de los subtÃtulos" -#: src/libsputext/xine_decoder.c:921 +#: src/libsputext/xine_decoder.c:956 msgid "" "You can adjust the vertical position of the subtitle. The setting will be " "evaluated relative to the window size." msgstr "" +"Puede ajustar la posición vertical de los subtÃtulos aquÃ. El ajuste será " +"evaluado relativo al tamaño de la ventana." -#: src/libsputext/xine_decoder.c:927 +#: src/libsputext/xine_decoder.c:962 src/libsputext/xine_decoder.c:971 msgid "font for subtitles" -msgstr "" +msgstr "tipografÃa para los subtÃtulos" -#: src/libsputext/xine_decoder.c:928 +#: src/libsputext/xine_decoder.c:963 msgid "A font from the xine font directory to be used for the subtitle text." msgstr "" +"TipografÃa del directorio de xine que será usada para el texto de los " +"subtÃtulos." -#: src/libsputext/xine_decoder.c:935 -msgid "encoding of the subtitles" +#: src/libsputext/xine_decoder.c:972 +#, fuzzy +msgid "An outline font file (e.g. a .ttf) to be used for the subtitle text." msgstr "" +"TipografÃa del directorio de xine que será usada para el texto de los " +"subtÃtulos." + +#: src/libsputext/xine_decoder.c:978 +msgid "whether to use a freetype font" +msgstr "" + +#: src/libsputext/xine_decoder.c:985 +msgid "encoding of the subtitles" +msgstr "codificación de los subtÃtulos" -#: src/libsputext/xine_decoder.c:936 +#: src/libsputext/xine_decoder.c:986 msgid "" "The encoding of the subtitle text in the stream. This setting is used to " "render non-ASCII characters correctly. If non-ASCII characters are not " "displayed as you expect, ask the creator of the subtitles what encoding was " "used." msgstr "" +"La codificación del texto de los subtÃtulos en el flujo de datos. Este " +"ajuste se usa para generar caracteres no ASCII correctamente. Si los " +"caracteres no ASCII no se muestran de la forma que usted espera, pregúntele " +"al creador de los subtÃtulos que codificación se usó." -#: src/libsputext/xine_decoder.c:944 +#: src/libsputext/xine_decoder.c:994 msgid "use unscaled OSD if possible" -msgstr "" +msgstr "use OSD sin escalar si es posible" -#: src/libsputext/xine_decoder.c:945 +#: src/libsputext/xine_decoder.c:995 msgid "" "The unscaled OSD will be rendered independently of the video frame and will " "always be sharp, even if the video is magnified. This will look better, but " @@ -3727,76 +4195,89 @@ msgid "" "which will become blurry, if you enlarge a low resolution video to " "fullscreen, but it works with all graphics cards." msgstr "" +"La visualización en pantalla (OSD) se generará independientemente del cuadro " +"de video y siempre será nÃtida, incluso aunque el vÃdeo esté magnificado. " +"Esto tendrá mejor apariencia, pero no funciona con todos los equipos " +"gráficos. La alternativa es OSD escalado, que será borroso si aumenta una " +"vista a baja resolución a pantalla completa, pero trabaja con todas las " +"tarjetas." #: src/dxr3/dxr3_decode_spu.c:253 #, c-format msgid "dxr3_decode_spu: Failed to open spu device %s (%s)\n" -msgstr "" +msgstr "dxr3_decode_spu: Falló la apertura de dispositivo spu %s (%s)\n" #: src/dxr3/dxr3_decode_spu.c:663 msgid "requested button not available\n" -msgstr "" +msgstr "botón pedido no disponible\n" #: src/dxr3/dxr3_mpeg_encoders.c:124 msgid "dxr3_mpeg_encoder: failed to init librte\n" -msgstr "" +msgstr "dxr3_mpeg_encoder: falló al inicializar librte\n" #: src/dxr3/dxr3_mpeg_encoders.c:159 msgid "" "dxr3_mpeg_encoder: rte only handles video dimensions which are multiples of " "16\n" msgstr "" +"dxr3_mpeg_encoder: rte sólo maneja dimensiones de vÃdeo que son múltiplos de " +"16\n" #: src/dxr3/dxr3_mpeg_encoders.c:169 msgid "dxr3_mpeg_encoder: failed to get rte context.\n" -msgstr "" +msgstr "dxr3_mpeg_encoder: falló en conseguir el contexto de rte.\n" #: src/dxr3/dxr3_mpeg_encoders.c:180 msgid "dxr3_mpeg_encoder: could not create codec.\n" -msgstr "" +msgstr "dxr3_mpeg_encoder: no pudo crear el códec.\n" #: src/dxr3/dxr3_mpeg_encoders.c:188 msgid "rte mpeg output bitrate (kbit/s)" -msgstr "" +msgstr "frecuencia de bits rte de salida mpeg (kbit/s)" #: src/dxr3/dxr3_mpeg_encoders.c:189 msgid "" "The bitrate the mpeg encoder library librte should use for DXR3's encoding " "mode. Higher values will increase quality and CPU usage." msgstr "" +"La frecuencia de bits del codificador mpeg que que la librerÃa librte " +"debiera usar para el modo codificación DXR3's. Los valores más altos " +"aumentarán la calidad y el uso de CPU." #: src/dxr3/dxr3_mpeg_encoders.c:233 #, c-format msgid "dxr3_mpeg_encoder: cannot init the context: %s\n" -msgstr "" +msgstr "dxr3_mpeg_encoder: no puedo inicializar el contexto: %s\n" #: src/dxr3/dxr3_mpeg_encoders.c:241 #, c-format msgid "dxr3_mpeg_encoder: cannot start encoding: %s\n" -msgstr "" +msgstr "dxr3_mpeg_encoder: no puedo empezar a codificar: %s\n" #: src/dxr3/dxr3_mpeg_encoders.c:371 msgid "dxr3_mpeg_encoder: Couldn't start the FAME library\n" -msgstr "" +msgstr "dxr3_mpeg_encoder: No pude arrancar la librerÃa FAME\n" #: src/dxr3/dxr3_mpeg_encoders.c:386 msgid "fame mpeg encoding quality" -msgstr "" +msgstr "calidad del codificador fame mpeg" #: src/dxr3/dxr3_mpeg_encoders.c:387 msgid "" "The encoding quality of the libfame mpeg encoder library. Lower is faster " "but gives noticeable artifacts. Higher is better but slower." msgstr "" +"La calidad del codificador mpeg de la librerÃa fame. Más baja es más rápido " +"pero da \"artefactos\" visibles. Más alta es mejor pero más lento." #: src/dxr3/dxr3_decode_video.c:250 #, c-format msgid "dxr3_decode_video: Failed to open control device %s (%s)\n" -msgstr "" +msgstr "dxr3_decode_video: Fallà la apertura del dispositivo de control %s (%s)\n" #: src/dxr3/dxr3_decode_video.c:256 msgid "use Pan & Scan info" -msgstr "" +msgstr "use información Pan & Scan" #: src/dxr3/dxr3_decode_video.c:257 msgid "" @@ -3813,10 +4294,25 @@ msgid "" "Enable Pan & Scan based on information embedded in DVB streams. This makes " "use of the Active Format Descriptor (AFD) used in some European DVB channels." msgstr "" +"\"Pan & Scan\" (panorámica y escaneado) es un modo especial de visualización " +"que se usa algunas veces en material codificado en MPEG. Usted puede " +"especificar aquà como desea manejar ese contenido.\n" +"\n" +"only when forced (sólo cuando se fuerza)\n" +"Use Pan & Scan sólo, cuando el contenido que esté visualizando lo fuerce.\n" +"\n" +"use MPEG hint (sugerencia use MPEG )\n" +"Active Pan & Scan basado en la información incluida en el flujo de bits de " +"video MPEG.\n" +"\n" +"use DVB hint (sugerencia use DVB)\n" +"Active Pan & Scan basado en la información incluida en el flujo de bits DVB. " +"Esto hace uso del Descriptor de Formato Activo (AFD) usado en algunos " +"canales DVB europeos." #: src/dxr3/dxr3_decode_video.c:276 msgid "try to sync video every frame" -msgstr "" +msgstr "probar de sincronizar video en cada cuadro" #: src/dxr3/dxr3_decode_video.c:277 msgid "" @@ -3825,18 +4321,23 @@ msgid "" "every now and then.\n" "This is relevant for progressive video only (most PAL films)." msgstr "" +"Intenta poner una marca de tiempo de sincronización para cada cuadro. " +"Normalmente esto no es necesario, porque sync es suficiente incluso cuando " +"la marca de tiempo se pone sólo de vez en cuando.\n" +"Esto es relevante sólo para video progresivo (la mayorÃa de las pelÃculas " +"PAL)." #: src/dxr3/dxr3_decode_video.c:283 msgid "use smooth play mode" -msgstr "" +msgstr "use modo visualización suave (smooth play)" #: src/dxr3/dxr3_decode_video.c:284 msgid "Enabling this option will utilise a smoother play mode." -msgstr "" +msgstr "Activando esta opción se utilizará unmodo de visualización más suave." #: src/dxr3/dxr3_decode_video.c:287 msgid "correct frame durations in broken streams" -msgstr "" +msgstr "corregir las duraciones de los cuadros en flujos de bits rotos" #: src/dxr3/dxr3_decode_video.c:288 msgid "" @@ -3845,44 +4346,52 @@ msgid "" "erroneously labeled as PAL streams is implemented. Enable only, when you " "encounter such streams." msgstr "" +"Activa una pequeña lógica que corrige la duración de los cuadros de algunos " +"flujos de bits mpeg con códigos de frecuencia de cuadro equivocados. " +"Actualmente se implementa una corrección de flujos de bits NTSC erróneamente " +"etiquetada como PAL. ActÃvelo únicamente cuando se encuentre un flujo de " +"bits de esa clase." #: src/dxr3/dxr3_decode_video.c:547 -#, fuzzy, c-format +#, c-format msgid "dxr3_decode_video: Failed to open video device %s (%s)\n" -msgstr "input_dvd: no se puede abrir la unidad de dvd (%s): %s\n" +msgstr "dxr3_decode_video: Falló al abrir el dispositivo de vÃdeo %s (%s)\n" #: src/dxr3/dxr3_decode_video.c:615 msgid "dxr3_decode_video: write to device would block. flushing\n" -msgstr "" +msgstr "dxr3_decode_video: escribir al dispositivo se bloquearÃa. Vaciando\n" #: src/dxr3/dxr3_decode_video.c:619 #, c-format msgid "dxr3_decode_video: video device write failed (%s)\n" -msgstr "" +msgstr "dxr3_decode_video: escritura al dispositivo de vÃdeo falló (%s)\n" #: src/dxr3/dxr3_decode_video.c:734 #, c-format msgid "dxr3_decode_video: WARNING: unknown frame rate code %d\n" -msgstr "" +msgstr "dxr3_decode_video: AVISO: código de frecuencia de cuadro desconocido %d\n" #: src/dxr3/dxr3_decode_video.c:762 -msgid "" -"dxr3_decode_video: WARNING: correcting frame rate code from PAL to NTSC\n" +msgid "dxr3_decode_video: WARNING: correcting frame rate code from PAL to NTSC\n" msgstr "" +"dxr3_decode_video: AVISO: corrigiendo código de frecuencia de cuadro de de " +"PAL a NTSC\n" #: src/dxr3/dxr3.h:32 msgid "DXR3 device number" -msgstr "" +msgstr "número de dispositivo DXR3" #: src/dxr3/dxr3.h:33 msgid "" "If you have more than one DXR3 in your computer, you can specify which one " "to use here." msgstr "" +"Si tiene más de un DXR3 en su computadora, puede especificar cual debe " +"usarse aquÃ." #: src/dxr3/dxr3_scr.c:98 msgid "SCR plugin priority" -msgstr "" +msgstr "Prioridad del complemento SCR" #: src/dxr3/dxr3_scr.c:99 msgid "" @@ -3890,10 +4399,13 @@ msgid "" "system timer will be used. Values greater 5 force to use DXR3's internal " "clock as sync source." msgstr "" +"Prioridad del complemento DXR3 SCR. Valores menores de 5 significan que se " +"usará el temporizador del sistema unix. Valores mayores de 5 fuerzan a usar " +"el reloj interno del DXR3's como fuente de sincronismo." #: src/dxr3/video_out_dxr3.c:262 msgid "swap odd and even lines" -msgstr "" +msgstr "intercambiar lineas impares y pares" #: src/dxr3/video_out_dxr3.c:263 msgid "" @@ -3901,39 +4413,46 @@ msgid "" "Enable this option for non-MPEG material which produces a vertical jitter on " "screen." msgstr "" +"Intercambia los campos pares e impares de la imagen.\n" +"Active esta opción para material no MPEG que produce una inestabilidad " +"vertical en la pantalla." #: src/dxr3/video_out_dxr3.c:267 msgid "add black bars to correct aspect ratio" -msgstr "" +msgstr "añade barras negras para corregir la razón de aspecto" #: src/dxr3/video_out_dxr3.c:268 msgid "" "Adds black bars when the image has an aspect ratio the card cannot handle " "natively. This is needed to maintain proper image proportions." msgstr "" +"Añade barras negras cuando la imagen tiene una razón de aspecto que la " +"tarjeta no puede manejar por si misma Esto es necesario para mantener las " +"proporciones de imagen adecuadas." #: src/dxr3/video_out_dxr3.c:273 msgid "use smooth play mode for mpeg encoder playback" -msgstr "" +msgstr "use modo de ejecución suave para reproducción con codificador mpeg" #: src/dxr3/video_out_dxr3.c:274 -msgid "" -"Enabling this option will utilise a smoother play mode for non-MPEG content." +msgid "Enabling this option will utilise a smoother play mode for non-MPEG content." msgstr "" +"Activando esta opción utilizará un modo de ejecución más suave para " +"contenido no MPEG." #: src/dxr3/video_out_dxr3.c:282 -#, fuzzy, c-format +#, c-format msgid "video_out_dxr3: Failed to open control device %s (%s)\n" -msgstr "input_dvd: no se puede abrir la unidad de dvd (%s): %s\n" +msgstr "video_out_dxr3: Falló la apertura del dispositivo de control %s (%s)\n" #: src/dxr3/video_out_dxr3.c:290 -#, fuzzy, c-format +#, c-format msgid "video_out_dxr3: Failed to open video device %s (%s)\n" -msgstr "input_dvd: no se puede abrir la unidad de dvd (%s): %s\n" +msgstr "video_out_dxr3: Falló la apertura del dispositivo de vÃdeo %s (%s)\n" #: src/dxr3/video_out_dxr3.c:336 msgid "encoder for non mpeg content" -msgstr "" +msgstr "codificador para contenido no mpeg" #: src/dxr3/video_out_dxr3.c:337 msgid "" @@ -3948,18 +4467,28 @@ msgid "" "\"fame\" and \"rte\" are still there, but xine support for them is outdated, " "so these might fail to work." msgstr "" +"El contenido distinto que MPEG tiene que pasar otra etapa adicional de " +"codificación, porque el dxr3 sólo maneja MPEG.\n" +"Dependiendo de que sea soportado por su xine, este ajuste puede ser \"fame" +"\", \"rte\", \"libavcodec\" or \"none\".\n" +"El codificador \"libavcodec\" hace uso del complemento ffmpeg que viene ya " +"con xine, de modo que no necesita instalar una librerÃa adicional para ello. " +"Incluso mejor es que libavcodec también proporciona alta calidad con poco " +"uso de la CPU. El uso de \"libavcodec\" es por tanto muy recomendado.\n" +"\"fame\" y \"rte\" siguen estando, pero su soporte por xine es anticuado, " +"asà que pueden fallar." #: src/dxr3/video_out_dxr3.c:348 msgid "video_out_dxr3: Mpeg encoder libavcodec failed to init.\n" -msgstr "" +msgstr "video_out_dxr3: el codificador de MPEG libavcodec falló al iniciarse.\n" #: src/dxr3/video_out_dxr3.c:354 msgid "video_out_dxr3: Mpeg encoder rte failed to init.\n" -msgstr "" +msgstr "video_out_dxr3: el codificador de MPEG rte falló al iniciarse.\n" #: src/dxr3/video_out_dxr3.c:361 msgid "video_out_dxr3: Mpeg encoder fame failed to init.\n" -msgstr "" +msgstr "video_out_dxr3: el codificador de MPEG fame falló al iniciarse.\n" #: src/dxr3/video_out_dxr3.c:367 msgid "" @@ -3970,6 +4499,13 @@ msgid "" "video_out_dxr3: driver. See the README.dxr3 for details on configuring an " "encoder.\n" msgstr "" +"video_out_dxr3: codificación MPEG deshabilitada.\n" +"video_out_dxr3: no pasa nada, no lo necesita para video MPEG como los DVDs, " +"pero\n" +"video_out_dxr3: no podrá reproducir contenido no MPEG usando éste driver de " +"salida\n" +"video_out_dxr3: de vÃdeo. Vea README.dxr3 para detalles de como configurar " +"un codificador.\n" #: src/dxr3/video_out_dxr3.c:373 msgid "" @@ -3980,10 +4516,18 @@ msgid "" "video_out_dxr3: driver. See the README.dxr3 for details on configuring an " "encoder.\n" msgstr "" +"video_out_dxr3: No se ha compilado ningún codificador MPEG.\n" +"video_out_dxr3: no pasa nada, no lo necesita para video MPEG como los DVDs, " +"pero\n" +"video_out_dxr3: no podrá reproducir contenido no MPEG usando éste driver de " +"salida\n" +"video_out_dxr3: de vÃdeo. Vea README.dxr3 para detalles de como configurar " +"un codificador.\n" +# Overlay? #: src/dxr3/video_out_dxr3.c:388 msgid "video output mode (TV or overlay)" -msgstr "" +msgstr "modo de salida de vÃdeo (TV u overlay)" #: src/dxr3/video_out_dxr3.c:389 msgid "" @@ -4016,10 +4560,38 @@ msgid "" "switching to TV out by hiding the video window. This is the common variant " "of DXR3 overlay." msgstr "" +"La manera en la que el DXR3 saca el vÃdeo final puede configurarse aquÃ. Los " +"valores individuales son:\n" +"\n" +"letterboxed tv (TV en forma de buzón)\n" +"EnvÃa el vÃdeo solamente al conector de salida de TV. Éste es el modo usado " +"para el televisor normal formato 4:3. El vÃdeo anamórfico (16:9) se verá " +"mostrado como en forma de buzón , material pan&scan recortará la imagen a " +"izquierda y derecha. Ésta es la configuración normal para ver la TV y actúa " +"como un reproductor DVD de salón.\n" +"\n" +"widescreen tv (TV en pantalla ancha)\n" +"EnvÃa el vÃdeo solamente al conector de salida de TV. Éste modo está " +"previsto para televisores de pantalla ancha formato 16:9. Contenido " +"anamórfico y pan&scan llenará toda la pantalla, pero tendrá que ajustar la " +"razón de aspecto del televisor manualmente a 16:9.\n" +"\n" +"letterboxed overlay (TV superpuesta en forma de buzón)\n" +"Superponer la salida de vÃdeo en la pantalla del ordenador con la opción de " +"conmutar al vuelo a salida de TV escondiendo la ventana de vÃdeo. La " +"superposición se mostrará con bordes negros si es anamórfica (16:9).\n" +"Este ajuste sólo es útil en el caso raro de un canal de subtÃtulos de un DVD " +"que sólo visualicen adecuadamente en modo buzón. Un buen ejemplo son las " +"siluetas animadas del comentador en \"Ghostbusters\".\n" +"\n" +"widescreen overlay (TV superpuesta en pantalla ancha)\n" +"Superponer la salida de vÃdeo en la pantalla del ordenador con la opción de " +"conmutar al vuelo a salida de TV escondiendo la ventana de vÃdeo. Esta es la " +"variante común de superposición DXR3." #: src/dxr3/video_out_dxr3.c:436 msgid "overlay colorkey value" -msgstr "" +msgstr "superponer valor del código de color" #: src/dxr3/video_out_dxr3.c:436 msgid "" @@ -4027,10 +4599,13 @@ msgid "" "You can try different values, if you experience windows becoming transparent " "when using DXR3 overlay mode." msgstr "" +"Valor hexadecimal del código de color RGB.\n" +"Puede probar diferentes valores, si observa que las ventanas se vuelven " +"transparentes cuando usa modo superpuesto DXR3." #: src/dxr3/video_out_dxr3.c:441 msgid "overlay colorkey tolerance" -msgstr "" +msgstr "tolerancia de código de color de superposición" #: src/dxr3/video_out_dxr3.c:441 msgid "" @@ -4039,24 +4614,30 @@ msgid "" "when using DXR3 overlay mode, but parts of the image borders may disappear " "when using a too low setting." msgstr "" +"Un valor mayor amplÃa la toleracia del código de color superpuesto.\n" +"Puede probar valores más bajos, si observa que las ventanas se vuelven " +"transparentes cuando usa modo superpuesto DXR3, pero partes de los bordes de " +"la imagen pueden desaparecer cuando use un ajuste demasiado bajo." #: src/dxr3/video_out_dxr3.c:447 msgid "crop the overlay area at top and bottom" -msgstr "" +msgstr "cortar el area de superposición arriba y abajo" #: src/dxr3/video_out_dxr3.c:448 msgid "" "Removes one pixel line from the top and bottom of the overlay. Enable this, " "if you see green lines at the top or bottom of the overlay." msgstr "" +"Quita una linea de pixels encima y debajo de la superposición. Active esto " +"si observa lineas verdes encima y debajo de la superposición." #: src/dxr3/video_out_dxr3.c:452 msgid "video_out_dxr3: please run autocal, overlay disabled\n" -msgstr "" +msgstr "video_out_dxr3: por favor, ejecute autocal, superposición desactivada\n" #: src/dxr3/video_out_dxr3.c:462 msgid "preferred tv mode" -msgstr "" +msgstr "modo preferido de TV" #: src/dxr3/video_out_dxr3.c:462 msgid "" @@ -4067,45 +4648,59 @@ msgid "" "pal60: PAL at 60Hz\n" "default: keep the card's setting" msgstr "" +"Selecciona el modo de TV que será usado por el DXR3. Los valores " +"significan:\n" +"\n" +"ntsc: NTSC a 60Hz\n" +"pal: PAL a 50Hz\n" +"pal60: PAL a 60Hz\n" +"default: mantener la configuración de la tarjeta" #: src/dxr3/video_out_dxr3.c:484 msgid "video_out_dxr3: setting video mode failed.\n" -msgstr "" +msgstr "video_out_dxr3: falló el establecimiento del modo de video..\n" #: src/dxr3/video_out_dxr3.c:714 msgid "" "video_out_dxr3: Need an mpeg encoder to play non-mpeg videos on dxr3\n" "video_out_dxr3: Read the README.dxr3 for details.\n" msgstr "" +"video_out_dxr3: Se necesita un codificador mpeg para reproducir vÃdeos no " +"mpeg en DXR3\n" +"video_out_dxr3: Lea el README.dxr3 para más detalles.\n" #: src/dxr3/video_out_dxr3.c:1373 msgid "video_out_dxr3: ERROR Reading overlay init file. Run autocal!\n" msgstr "" +"video_out_dxr3: ERROR leyendo en fichero de inicialización de la " +"superposición. ¡Ejecute autocal!\n" #: src/libreal/audio_decoder.c:211 #, c-format msgid "libareal: (audio) Cannot resolve symbols - incompatible dll: %s\n" -msgstr "" +msgstr "libareal: (audio) No puedo resolver sÃmbolos - dll incompatible: %s\n" #: src/libreal/audio_decoder.c:368 #, c-format msgid "libareal: decoder init failed, error code: 0x%x\n" -msgstr "" +msgstr "libareal: falló la inicialización del decodificador, código de error: 0x%x\n" #: src/libreal/audio_decoder.c:382 #, c-format msgid "libareal: decoder flavor setup failed, error code: 0x%x\n" msgstr "" +"libareal: falló la configuración de tipo de decodificador, código de error: " +"0x%x\n" #: src/libreal/audio_decoder.c:419 msgid "libareal: oups, real can do more than 2 channels ?\n" -msgstr "" +msgstr "libareal: Ostras, ¿puede real hacer más de dos canales?\n" -#: src/libreal/audio_decoder.c:745 src/libreal/xine_decoder.c:638 +#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 msgid "path to RealPlayer codecs" -msgstr "" +msgstr "camino a los codificadores RealPlayer" -#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 +#: src/libreal/audio_decoder.c:747 src/libreal/xine_decoder.c:640 msgid "" "If you have RealPlayer installed, specify the path to its codec directory " "here. You can easily find the codec directory by looking for a file named " @@ -4113,12 +4708,19 @@ msgid "" "them to decode RealPlayer content for you. Consult the xine FAQ for more " "information on how to install the codecs." msgstr "" +"Si tiene instalado RealPlayer, indique aquà el camino a su directorio de " +"codificadores (códecs). Puede encontrar facilmente el directorio de " +"cofidicadores buscando un fichero llamado \"drv3.so.6.0\". Si xine puede " +"encontrar los códecs de RealPlayer, los usará para decodificar contenido " +"RealPlayer para usted. Consulte el FAQ de xine FAQ para más información " +"sobre cómo instalar los codificadores." #: src/libreal/xine_decoder.c:212 msgid "libreal: Error resolving symbols! (version incompatibility?)\n" -msgstr "" +msgstr "libreal: ¡Error resolviendo sÃmbolos! (¿incompatibilidad de versión?)\n" #: src/post/deinterlace/xine_plugin.c:204 +#, fuzzy msgid "" "Advanced tvtime/deinterlacer plugin with pulldown detection\n" "This plugin aims to provide deinterlacing mechanisms comparable to high " @@ -4170,12 +4772,70 @@ msgid "" "Deinterlacing methods: (Not all methods are available for all plataforms)\n" "\n" msgstr "" +"Complemento avanzado tvtime/desentrelazador con detección de despliegue de " +"menú {pulldown}\n" +"Este complemento trata de suministrar mecanismos de desentrelazado " +"comparables a reproductores progresivos de DVD y los asà llamados dobladores " +"de linea, para usar con monitores de ordenador, proyectores y otros " +"dispositivos de visualización progresiva.\n" +" \n" +"Parámetros\n" +"\n" +" Method (método): Seleccione el método/algoritmo de desentrelazado a usar; " +"ver abajo para explicación de cada método.\n" +"\n" +" Enabled (activado): Activar/desactivar el complemento.\n" +"\n" +" Pulldown (despliegue): Escoger el algoritmo de detección de despliegue 2-3 " +"{de menú?}. Las pelÃculas de 24 CPS (cuadros por segundo) que han sido " +"convertidas a NTSC pueden ser detectadas e inteligentemente reconstruidas a " +"sus cuadros originales (no entrelazados).\n" +"\n" +" Framerate_mode (modo de cadencia de cuadro): Seleccionar 'full' (completo) " +"desentrelazará cada campo a un único cuadro en calidad de televisión y más " +"allá. Esta caracterÃstica efectivamente dobla la cadencia de cuadro, " +"mejorando la suavidad. Note, sin embargo, que los 59.94 CPS no son posibles " +"con un kernel Linux 2.4 (que usa una frecuencia de interrupción de 100Hz). " +"Un RedHat más moderno y los kernels 2.6 usan una frecuencia mayor (512 y " +"1000, respectivamente) y deberÃan funcionar bien.\n" +"\n" +" Judder_correction (corrección de vibración): Una vez que despliegue 2-3 " +"está activado y se detecta que tenemos una pelÃcula, es posible reducir la " +"cadencia de cuadro a la original (24 CPS). Esto distribuirá los cuadros " +"uniformemente en el tiempo, coincidiendo con la velocidad con que fueron " +"rodados y eliminando el efecto de vibración.\n" +"\n" +" Use_progressive_frame_flag (bandera de usar cuadro progresivo): Flujos de " +"datos MPEG2 bien creados usan una bandera para indicar material progresivo. " +"Este ajuste controla si nos fiamos de esta bandera o no (algunos flujos de " +"datos mpeg2 raros y erróneos la ponen mal).\n" +"\n" +" Chroma_filter: DVD/MPEG2 usa un formato de imagen entrelazado que tiene " +"una resolución cromática vertical muy pobre. Sobremuestreando el croma con " +"propósitos de desentrelazar puede causar la ocurrencia de algunos artefactos " +"(pe, bandas de color). Use esta opción para emborronar el croma " +"verticalmente después de desentrelazar para quitar los artefactos. Aviso: " +"usa intensivamente la cpu\n" +"\n" +" Cheap_mode (modo barato): Esto saltará la compleja conversión de imagen " +"YV12->YUY2, engañando a las rutinas tvtime/dscaler como si estuvieran " +"todavÃa manejando imágenes YUY2. Por supuesto, esto no es correto, no todos " +"los pÃxeles serán evaluados por los algoritmos para decidir las regiones a " +"desentrelazar y el croma se procesará por separado. No obstante, permite a " +"la gente con sistemas no tan rápidos probar algoritmos desentrelazantes, en " +"un toma y daca entre calidad y uso de cpu.\n" +"\n" +"* Usa varios algoritmos de los proyectos tvtime y dscaler.\n" +"Deinterlacing methods (métodos de desentrelazado): (No todos los métodos " +"está disponibles para todas las plataformas)\n" +"\n" #: src/post/deinterlace/xine_plugin.c:325 msgid "tvtime: No deinterlacing methods available, exiting.\n" -msgstr "" +msgstr "tvtime: No hay métodos de desentrelazado disponibles, saliendo.\n" #: src/post/planar/denoise3d.c:136 +#, fuzzy msgid "" "This filter aims to reduce image noise producing smooth images and making " "still images really still (This should enhance compressibility.). It can be " @@ -4189,6 +4849,17 @@ msgid "" "\n" "* mplayer's denoise3d (C) 2003 Daniel Moreno\n" msgstr "" +"Este filtro trata de reducir el ruido de imagen produciendo imágenes suaves " +"y haciendo la foto fija realmente fija (esto deberÃa mejorar la " +"comprensibilidad). Puede dársele de 0 a 3 parámetros. Si omite un parámetro, " +"se inferirá un valor razonable\n" +"\n" +"Parámetros\n" +" Luma (¿luminancia)?: Fuerza espacial de luma (por defecto = 4)\n" +" Chroma (crominancia): Fuerza espacial de chroma (por defecto = 3)\n" +" Time (tiempo): Fuerza temporal (por defecto = 6)\n" +"\n" +"* mplayer's denoise3d (C) 2003 Daniel Moreno\n" #: src/post/planar/unsharp.c:220 msgid "" @@ -4217,6 +4888,31 @@ msgid "" "\n" "* mplayer's unsharp (C) 2002 Remi Guyomarch\n" msgstr "" +"Unsharp mask / gaussian blur (Máscara de des-nitidez / borrosidad " +"gaussiana)\n" +"Es posible ajustar el ancho y altura de la matriz, tamaño impar en ambas " +"direcciones (min = 3x3, máx = 13x11 o 11x13, usualmente algo entre 3x3 y " +"7x7) y la cantidad relativa de nitidez/borrosidad a añadir a la imagen (un " +"rango adecuado serÃa -1.5 - 1.5).\n" +"\n" +"Parámetros\n" +"\n" +" Luma_matrix_width: Anchura de la matriz (debe ser impar)\n" +"\n" +" Luma_matrix_height: Altura de la matriz (debe ser impar)\n" +"\n" +" Luma_amount: Cantidad relativa de nitidez/borrosidad (=0 disable, <0 blur, " +">0 sharpen)\n" +"\n" +" Chroma_matrix_width: Anchura de la matriz (debe ser impar)\n" +"\n" +" Chroma_matrix_height: Altura de la matriz (debe ser impar)\n" +"\n" +" Chroma_amount: Cantidad relativa de nitidez/borrosidad (=0 disable, <0 " +"blur, >0 sharpen)\n" +"\n" +"\n" +"* mplayer's unsharp (C) 2002 Remi Guyomarch\n" #: src/post/planar/pp.c:108 msgid "" @@ -4225,12 +4921,18 @@ msgid "" "Parameters\n" "\n" msgstr "" +"Complemento FFmpeg libpostprocess.\n" +"\n" +"Parámetros\n" +"\n" #: src/post/planar/pp.c:114 msgid "" "\n" "* libpostprocess (C) Michael Niedermayer\n" msgstr "" +"\n" +"* libpostprocess (C) Michael Niedermayer\n" #: src/post/planar/eq2.c:359 msgid "" @@ -4255,6 +4957,26 @@ msgid "" "\n" "* mplayer's eq2 (C) Hampa Hug, Daniel Moreno, Richard Felker\n" msgstr "" +"Ecualizador en software alternativo que usa tablas de búsqueda (muy lento), " +"permitiendo corrección gamma además de ajustes simples de brillo, contraste " +"y saturación.\n" +"Observe que usa el mÃsmo código optimizado para MMX que 'eq' si todos los " +"valores gamma son 1.0\n" +"\n" +"Parámetros\n" +" gamma\n" +" brightness (brillo)\n" +" contrast (contraste)\n" +" saturation (saturación)\n" +" rgamma (gamma para el componente rojo)\n" +" ggamma (gamma para el componente verde)\n" +" bgamma (gamma para el componente azul)\n" +"\n" +"Los rangos de valores son 0.1 - 10 para los gammas, -2 - 2 para contraste " +"(valores negativos producen una imagen negativa), -1 - 1 para brillo y 0 - 3 " +"para saturación.\n" +"\n" +"* mplayer's eq2 (C) Hampa Hug, Daniel Moreno, Richard Felker\n" #: src/post/planar/noise.c:402 msgid "" @@ -4287,6 +5009,18 @@ msgid "" " aspect: The target aspect ratio (default 4:3)\n" "\n" msgstr "" +"El complemento expand (expansor) está pensado para tomar cuadros de razón de " +"aspecto arbitrario y convertirlos a una razón de aspecto diferente (4:3 por " +"defecto) añadiendo barras negras arriba y abajo del cuadro. Esto nos permite " +"desplazar superposiciones abajo en la zona negra de modo que no cubran la " +"imagen\n" +"\n" +"Parámetros (ARREGLADME: mejor ayuda)\n" +" Enable_automatic_shift: Activar desplazamiento automático de la " +"superposición\n" +" Overlay_y_offset: Manualmente desplazar la superposición verticalmente\n" +" aspect: La razón de aspecto resultante deseada (4:3 por defecto)\n" +"\n" #: src/post/planar/eq.c:186 msgid "" @@ -4303,6 +5037,18 @@ msgid "" "\n" "* mplayer's eq (C) Richard Felker\n" msgstr "" +"Ecualizador en software con controles interactivos justo como el ecualizador " +"en hardware, para tarjetas/drivers que no soportan controles de brillo y " +"contraste en hardware.\n" +"\n" +"Parámetros\n" +" brightness (brillo)\n" +" contrast (contraste)\n" +"\n" +"Note: es posible usar los la ventana de control de la interfaz para ajustar " +"estos parámetros.\n" +"\n" +"* mplayer's eq (C) Richard Felker\n" #: src/post/planar/boxblur.c:103 msgid "" @@ -4314,6 +5060,13 @@ msgid "" "\n" "* mplayer's boxblur (C) 2002 Michael Niedermayer\n" msgstr "" +"Box blur (caja borrosa) hace un emborronamiento simple de la imagen.\n" +"\n" +"Parámetros\n" +" Radius (radio): tamaño del filtro\n" +" Power (potencia): qué a menudo deberÃa ser aplicado el filtro\n" +"\n" +"* mplayer's boxblur (C) 2002 Michael Niedermayer\n" #: src/post/mosaico/switch.c:230 msgid "" @@ -4322,6 +5075,11 @@ msgid "" "Parameters\n" " select: the number of the input which will be passed to the output\n" msgstr "" +"Switch (conmutador) puede ser usado para conmutar rápidamente entre " +"múltiples entradas.\n" +"\n" +"Parámetros\n" +" select (seleccionar): el número de la entrada que se pasará a la salida\n" #: src/post/mosaico/mosaico.c:273 msgid "" @@ -4334,6 +5092,15 @@ msgid "" " w: the width of the picture\n" " h: the height of the picture\n" msgstr "" +"Mosaico hace efectos simples de imagen en imagen.\n" +"\n" +"Parámetros\n" +" pip_num: el número de la ranura {slot} de la imagen a la que aplica los " +"siguientes ajustes\n" +" x: la coordenada x de la esquina superior izquierda de la imagen\n" +" y: la coordenada y de la esquina superior izquierda de la imagen\n" +" w: anchura de la imagen\n" +" h: altura de la imagen\n" #: src/post/audio/upmix.c:137 msgid "" @@ -4345,6 +5112,14 @@ msgid "" "parameters.\n" "\n" msgstr "" +"Funciones upmix (mezclador mejorador). p.e:. Tomar la entrada estereo y " +"generar salida Surround 5.1.\n" +"Parámetros\n" +" cut_off_freq\n" +"\n" +"Nota: es posible usar la ventana de control de la interfaz para ajustar " +"estos parámetros.\n" +"\n" #: src/post/audio/volnorm.c:150 msgid "" @@ -4362,21 +5137,24 @@ msgid "" "Alternatively, one may use this plugin to listen just one channel of a given " "stream.\n" msgstr "" +"Este filtro mezclador mejorará {upmix} un flujo de datos mono a estéreo, " +"duplicando los canales. Alternativamente, uno puede usar este complemento " +"para escuchar sólo un canal de un flujo de datos dado.\n" #: src/post/audio/upmix_mono.c:147 msgid ": upmixing Mono to Stereo.\n" -msgstr "" +msgstr ": mejorando Mono a Stereo.\n" #: src/post/audio/upmix_mono.c:152 -#, c-format +#, fuzzy, c-format msgid ": upmixing a single channel from original %d channel stream.\n" msgid_plural ": upmixing a single channel from original %d channels stream.\n" -msgstr[0] "" -msgstr[1] "" +msgstr[0] ": mejorando un canal simple desde los %d canales del flujo original.\n" +msgstr[1] ": mejorando un canal simple desde los %d canales del flujo original.\n" #: src/post/audio/upmix_mono.c:157 msgid ": audio device not capable of AO_CAP_MODE_STEREO.\n" -msgstr "" +msgstr ": dispositivo audio incapaz de AO_CAP_MODE_STEREO.\n" #: src/post/audio/stretch.c:264 msgid "" @@ -4384,116 +5162,136 @@ msgid "" "by a factor. Pitch is optionally preserved, so it is possible, for example, " "to use it to watch a movie in less time than it was originaly shot.\n" msgstr "" +"Este filtro estirará el tiempo, reproduciendo el flujo de datos mas rápido o " +"más lento por un factor.Es paso se puede preservar opcionalmente, de modo " +"que es posible, por ejemplo, usarlo para visualizar una pelÃcula en menos " +"tiempo del que fué originalmente rodada.\n" #: src/post/goom/xine_goom.c:204 msgid "frames per second to generate" -msgstr "" +msgstr "cuadros por segundo a generar" #: src/post/goom/xine_goom.c:205 msgid "" "With more frames per second, the animation will get smoother and faster, but " "will also require more CPU power." msgstr "" +"Con más cuadros por segundo, la animación será más suave y rápida, pero " +"también requiere más potencia de CPU." #: src/post/goom/xine_goom.c:210 +#, fuzzy msgid "goom image width" -msgstr "" +msgstr "anchura de imagen goom" #: src/post/goom/xine_goom.c:211 msgid "The width in pixels of the image to be generated." -msgstr "" +msgstr "La anchura en pÃxeles de la imagen a ser generada." #: src/post/goom/xine_goom.c:215 +#, fuzzy msgid "goom image height" -msgstr "" +msgstr "altura de imagen goom" #: src/post/goom/xine_goom.c:216 msgid "The height in pixels of the image to be generated." -msgstr "" +msgstr "La altura en pÃxeles de la imagen a ser generada." #: src/post/goom/xine_goom.c:222 msgid "colorspace conversion method" -msgstr "" +msgstr "método de conversión del espacio de color" #: src/post/goom/xine_goom.c:223 +#, fuzzy msgid "" "You can choose the colorspace conversion method used by goom.\n" "The available selections should be self-explaining." msgstr "" +"Puede escoger el método de conversión del espacio de color usado por goom.\n" +"Las selecciones disponibles deberÃan ser autoexplicativas." #: src/demuxers/demux_avi.c:533 src/demuxers/demux_avi.c:647 msgid "Restoring index..." -msgstr "" +msgstr "Restaurando Ãndice..." #: src/demuxers/demux_avi.c:633 src/demuxers/demux_avi.c:1688 #, c-format msgid "demux_avi: invalid avi chunk \"%c%c%c%c\" at pos %<PRIdMAX>\n" -msgstr "" +msgstr "demux_avi: bloque avi inválido \"%c%c%c%c\" en posición %<PRIdMAX>\n" #: src/demuxers/demux_avi.c:828 +#, c-format msgid "demux_avi: avi index is broken\n" msgstr "demux_avi: el Ãndice del avi está roto\n" #: src/demuxers/demux_avi.c:836 -#, fuzzy, c-format +#, c-format msgid "demux_avi: failed to seek to the next chunk (pos %<PRIdMAX>)\n" -msgstr "demux_avi: falló el posicionamiento de vÃdeo al inicio\n" +msgstr "demux_avi: falló el posicionamiento al siguiente bloque (pos %<PRIdMAX>)\n" #: src/demuxers/demux_mpc.c:212 msgid "demux_mpc: frame too big for buffer" -msgstr "" +msgstr "demux_mpc: marco demasiado grande para el búfer" #: src/demuxers/demux_film.c:188 +#, c-format msgid "invalid FILM chunk size\n" -msgstr "" +msgstr "tamaño de bloque FILM inválido\n" #: src/demuxers/demux_film.c:342 +#, c-format msgid "unrecognized FILM chunk\n" -msgstr "" +msgstr "bloque FILM no reconocido\n" -#: src/demuxers/demux_asf.c:423 +#: src/demuxers/demux_asf.c:425 #, c-format msgid "demux_asf: warning: The stream id=%d is encrypted.\n" -msgstr "" +msgstr "demux_asf: aviso: El flujo de bits (stream) id=%d está encriptado.\n" -#: src/demuxers/demux_asf.c:425 +#: src/demuxers/demux_asf.c:427 msgid "Media stream scrambled/encrypted" -msgstr "" +msgstr "Flujo de bits del medio revuelto/encriptado" -#: src/demuxers/demux_asf.c:1633 -#, fuzzy, c-format +#: src/demuxers/demux_asf.c:1634 +#, c-format msgid "demux_asf: Wrong ASX version: %s\n" -msgstr "demux_asf: copyright : %s\n" +msgstr "demux_asf: Versión ASX equivocada: %s\n" #: src/demuxers/demux_iff.c:235 #, c-format msgid "iff-8svx/16sv: unknown compression: %d\n" -msgstr "" +msgstr "iff-8svx/16sv: compresión desconocida: %d\n" #: src/demuxers/demux_iff.c:369 #, c-format msgid "iff-ilbm: unknown compression: %d\n" -msgstr "" +msgstr "iff-ilbm: compresión desconocida: %d\n" #: src/demuxers/demux_iff.c:570 #, c-format msgid "iff: unknown Chunk: %s\n" -msgstr "" +msgstr "iff: Bloque no reconocido: %s\n" #: src/demuxers/demux_voc.c:105 #, c-format msgid "unknown VOC block type (0x%02X); please report to xine developers\n" msgstr "" +"tipo de bloque VOC desconocido (0x%02X); Por favor, repórtelo a los " +"desarrolladores de xine\n" #: src/demuxers/demux_voc.c:120 #, c-format -msgid "" -"unknown VOC compression type (0x%02X); please report to xine developers\n" +msgid "unknown VOC compression type (0x%02X); please report to xine developers\n" msgstr "" +"tipo de compresión VOC desconocida (0x%02X); Por favor, repórtelo a los " +"desarrolladores de xine\n" -#: src/demuxers/demux_ogg.c:797 +#: src/demuxers/demux_ogg.c:801 +#, c-format msgid "ogg: vorbis audio track indicated but no vorbis stream header found.\n" msgstr "" +"ogg: pista de audio vorbis indicada pero cabecera de flujo de bits vorbis no " +"encontrada.\n" #: src/demuxers/demux_mpeg_block.c:297 #, c-format @@ -4501,24 +5299,30 @@ msgid "" "xine-lib:demux_mpeg_block: Unrecognised stream_id 0x%02x. Please report this " "to xine developers.\n" msgstr "" +"xine-lib:demux_mpeg_block: Identificador de flujo de bits no reconocido, " +"stream_id 0x%02x. Por favor, repórtelo a los desarrolladores de xine.\n" #: src/demuxers/demux_mpeg_block.c:308 -msgid "" -"demux_mpeg_block: error! freeing. Please report this to xine developers.\n" +msgid "demux_mpeg_block: error! freeing. Please report this to xine developers.\n" msgstr "" +"demux_mpeg_block: ¡error! liberando. Por favor, repórtelo a los " +"desarrolladores de xine.\n" #: src/demuxers/demux_mpeg_block.c:640 +#, c-format msgid "demux_mpeg_block: warning: PES header reserved 10 bits not found\n" msgstr "" +"demux_mpeg_block: aviso: 10 bits reservados de la cabecera PES no " +"encontrados\n" #: src/demuxers/demux_mpeg_block.c:650 -#, fuzzy, c-format +#, c-format msgid "" "demux_mpeg_block: warning: PES header indicates that this stream may be " "encrypted (encryption mode %d)\n" msgstr "" -"demux_mpeg_block: aviso: la cabecera pes indica que este stream puede\n" -" estar encriptado (modo de encriptación %d)\n" +"demux_mpeg_block: aviso: la cabecera PES indica que este flujo de bits puede " +"estar encriptado (modo de encriptación %d)\n" #: src/demuxers/demux_mpeg_pes.c:383 #, c-format @@ -4526,24 +5330,27 @@ msgid "" "xine-lib:demux_mpeg_pes: Unrecognised stream_id 0x%02x. Please report this " "to xine developers.\n" msgstr "" +"xine-lib:demux_mpeg_pes: Identificador de flujo de bits no reconocido 0x%" +"02x. Por favor, repórtelo a los desarrolladores de xine.\n" #: src/demuxers/demux_mpeg_pes.c:392 #, c-format msgid "demux_mpeg_pes: warning: PACK stream id=0x%x decode failed.\n" -msgstr "" +msgstr "demux_mpeg_pes: aviso: decodificado del flujo de bits PACK id=0x%x falló.\n" #: src/demuxers/demux_mpeg_pes.c:771 +#, c-format msgid "demux_mpeg_pes: warning: PES header reserved 10 bits not found\n" -msgstr "" +msgstr "demux_mpeg_pes: aviso: 10 bits reservados de la cabecera PES no encontrados\n" #: src/demuxers/demux_mpeg_pes.c:781 -#, fuzzy, c-format +#, c-format msgid "" "demux_mpeg_pes: warning: PES header indicates that this stream may be " "encrypted (encryption mode %d)\n" msgstr "" -"demux_mpeg_block: aviso: la cabecera pes indica que este stream puede\n" -" estar encriptado (modo de encriptación %d)\n" +"demux_mpeg_pes: aviso: la cabecera PES indica que este flujo de bits puede " +"estar encriptado (modo de encriptación %d)\n" #: src/demuxers/demux_mpeg_pes.c:1055 #, c-format @@ -4551,28 +5358,32 @@ msgid "" "demux_mpeg_pes:Unrecognised private stream 1 0x%02x. Please report this to " "xine developers.\n" msgstr "" +"demux_mpeg_pes:flujo de bits privado 1 0x%02x. Por favor, repórtelo a los " +"desarrolladores de xine.\n" #: src/demuxers/demux_wc3movie.c:192 #, c-format msgid "demux_wc3movie: SHOT chunk referenced invalid palette (%d >= %d)\n" -msgstr "" +msgstr "demux_wc3movie: bloque SHOT referenció una paleta inválida (%d >= %d)\n" #: src/demuxers/demux_wc3movie.c:406 +#, c-format msgid "demux_wc3movie: There was a problem while loading palette chunks\n" -msgstr "" +msgstr "demux_wc3movie: Hubo un problema mientras se cargaban bloques de paleta\n" #: src/demuxers/demux_snd.c:104 +#, c-format msgid "demux_snd: bad header parameters\n" -msgstr "" +msgstr "demux_snd: parámetros de cabecera malos\n" #: src/demuxers/demux_snd.c:149 -#, fuzzy, c-format +#, c-format msgid "demux_snd: unsupported audio type: %d\n" -msgstr "demux_avi: tipo de audio desconocido 0x%lx\n" +msgstr "demux_snd: tipo de audio no soportado: %d\n" #: src/libffmpeg/xine_encoder.c:167 msgid "libavcodec mpeg output bitrate (kbit/s)" -msgstr "" +msgstr "tasa de bits salida mpeg de libavcodec (kbit/s)" #: src/libffmpeg/xine_encoder.c:168 msgid "" @@ -4580,10 +5391,15 @@ msgid "" "Higher values will increase quality and CPU usage.\n" "This setting is only considered, when constant quality mode is disabled." msgstr "" +"La velocidad de salida (tasa de bits) que el codificador mpeg de libavcodec " +"deberÃa usar para el modo de codificado de DXR3. Valores más altos " +"aumentarán la calidad y el uso de CPU.\n" +"Este ajuste sólo se considera cuando el modo de calidad constante está " +"desactivado." #: src/libffmpeg/xine_encoder.c:175 msgid "constant quality mode" -msgstr "" +msgstr "modo de calidad constante" #: src/libffmpeg/xine_encoder.c:176 msgid "" @@ -4591,77 +5407,91 @@ msgid "" "compressing the images based on their complexity. When disabled, libavcodec " "will use constant bitrate mode." msgstr "" +"Cuando se activa, libavcodec usará un modo de calidad constante " +"dinámicamente comprimiendo las imágenes basado en su complejidad. Cuando se " +"desactiva, libavcodec usará el modo de tasa de bits constante." #: src/libffmpeg/xine_encoder.c:183 msgid "minimum compression" -msgstr "" +msgstr "compresión mÃnima" #: src/libffmpeg/xine_encoder.c:184 msgid "The minimum compression to apply to an image in constant quality mode." -msgstr "" +msgstr "La mÃnima compresión a aplicar a una imagen en el modo de calidad constante." #: src/libffmpeg/xine_encoder.c:189 msgid "maximum quantizer" -msgstr "" +msgstr "cuantificador máximo" #: src/libffmpeg/xine_encoder.c:190 msgid "The maximum compression to apply to an image in constant quality mode." -msgstr "" +msgstr "La máxima compresión a aplicar a una imagen en modo de calidad constante." -#: src/libffmpeg/audio_decoder.c:117 +#: src/libffmpeg/audio_decoder.c:120 #, c-format msgid "ffmpeg_audio_dec: increasing buffer to %d to avoid overflow.\n" msgstr "" +"ffmpeg_audio_dec: incrementando el tamaño de la memoria tampón a %d para " +"evitar el desbordamiento.\n" -#: src/libffmpeg/audio_decoder.c:161 +#: src/libffmpeg/audio_decoder.c:164 #, c-format msgid "ffmpeg_audio_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" +"ffmpeg_audio_dec: no pude encontrar el decodificador ffmpeg para el tipo de " +"tampón 0x%X\n" -#: src/libffmpeg/audio_decoder.c:253 +#: src/libffmpeg/audio_decoder.c:256 +#, fuzzy msgid "ffmpeg_audio_dec: trying to open null codec\n" -msgstr "" +msgstr "ffmpeg_audio_dec: no pude abrir el decodificador\n" -#: src/libffmpeg/audio_decoder.c:262 +#: src/libffmpeg/audio_decoder.c:265 msgid "ffmpeg_audio_dec: couldn't open decoder\n" -msgstr "" +msgstr "ffmpeg_audio_dec: no pude abrir el decodificador\n" -#: src/libffmpeg/dvaudio_decoder.c:302 +#: src/libffmpeg/dvaudio_decoder.c:286 #, c-format msgid "dvaudio: increasing buffer to %d to avoid overflow.\n" msgstr "" +"dvaudio: incrementando el tamaño de la memoria tampón a %d para evitar el " +"desbordamiento.\n" -#: src/libffmpeg/video_decoder.c:153 +#: src/libffmpeg/video_decoder.c:156 msgid "ffmpeg_video_dec: unsupported frame format, DR1 disabled.\n" -msgstr "" +msgstr "ffmpeg_video_dec: formato de cuadro no soportado, DR1 desactivado.\n" -#: src/libffmpeg/video_decoder.c:171 +#: src/libffmpeg/video_decoder.c:174 msgid "ffmpeg_video_dec: unsupported frame dimensions, DR1 disabled.\n" -msgstr "" +msgstr "ffmpeg_video_dec: dimensiones de cuadro no soportadas, DR1 desactivado.\n" -#: src/libffmpeg/video_decoder.c:319 +#: src/libffmpeg/video_decoder.c:334 #, c-format msgid "ffmpeg_video_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" +"ffmpeg_video_dec: no pude encontrar el decodificador ffmpeg para el tipo de " +"tampón 0x%X\n" -#: src/libffmpeg/video_decoder.c:348 +#: src/libffmpeg/video_decoder.c:363 msgid "ffmpeg_video_dec: couldn't open decoder\n" -msgstr "" +msgstr "ffmpeg_video_dec: no pude abrir el decodificador\n" -#: src/libffmpeg/video_decoder.c:383 +#: src/libffmpeg/video_decoder.c:398 msgid "ffmpeg_video_dec: direct rendering enabled\n" -msgstr "" +msgstr "ffmpeg_video_dec: renderizado directo activado\n" -#: src/libffmpeg/video_decoder.c:802 +#: src/libffmpeg/video_decoder.c:817 #, c-format msgid "ffmpeg_video_dec: increasing buffer to %d to avoid overflow.\n" msgstr "" +"ffmpeg_video_dec: incrementando el tamaño de la memoria tampón a %d para " +"evitar el desbordamiento.\n" -#: src/libffmpeg/video_decoder.c:1474 +#: src/libffmpeg/video_decoder.c:1510 msgid "MPEG-4 postprocessing quality" -msgstr "" +msgstr "calidad de postprocesado MPEG-4" -#: src/libffmpeg/video_decoder.c:1475 +#: src/libffmpeg/video_decoder.c:1511 msgid "" "You can adjust the amount of post processing applied to MPEG-4 video.\n" "Higher values result in better quality, but need more CPU. Lower values may " @@ -4669,1173 +5499,49 @@ msgid "" "heavy post processing can actually make the image worse by blurring it too " "much." msgstr "" +"Puede ajustar la cantidad de postprocesado aplicado a video MPEG-4.\n" +"Valores más altos pueden resultar en mejor calidad, pero necesitarán más " +"CPU. Valores más bajos resultarán en defectos de imagen como artefactos de " +"bloque. Para contenido de alta calidad, demasiado postprocesado puede de " +"hecho hacer la imagen peor emborronándola demasiado." #: src/libfaad/xine_decoder.c:131 msgid "libfaad: libfaad NeAACDecOpen() failed.\n" -msgstr "" +msgstr "libfaad: libfaad NeAACDecOpen() falló.\n" #: src/libfaad/xine_decoder.c:140 msgid "libfaad: libfaad NeAACDecInit2 failed.\n" -msgstr "" +msgstr "libfaad: libfaad NeAACDecInit2 falló.\n" #: src/libfaad/xine_decoder.c:151 msgid "libfaad: libfaad NeAACDecInit failed.\n" -msgstr "" +msgstr "libfaad: libfaad NeAACDecInit falló.\n" #: lib/hstrerror.c:17 +#, fuzzy msgid "No error" -msgstr "" +msgstr "error desconocido" #: lib/hstrerror.c:18 +#, fuzzy msgid "Unknown host" -msgstr "" +msgstr "error desconocido" #: lib/hstrerror.c:19 msgid "No address associated with name" msgstr "" #: lib/hstrerror.c:20 +#, fuzzy msgid "Unknown server error" -msgstr "" +msgstr "error desconocido" #: lib/hstrerror.c:21 msgid "Host name lookup failure" msgstr "" #: lib/hstrerror.c:22 -msgid "Unknown error" -msgstr "" - -#, fuzzy -#~ msgid "audio_oss_out: open() %s failed: %s\n" -#~ msgstr "input_cda: falló open(%s): %s.\n" - -#, fuzzy -#~ msgid "input_cdda: cannot connect to host.\n" -#~ msgstr "input_http: no se puede conectar al host\n" - -#, fuzzy -#~ msgid "input_cdda: unable to resolve '%s'.\n" -#~ msgstr "input_net: no se puede resolver '%s'.\n" - -#, fuzzy -#~ msgid "input_cdda: unable to connect to '%s'.\n" -#~ msgstr "input_net: no se puede conectar a '%s'.\n" - -#~ msgid "" -#~ "demux_mpeg_block: too many errors, stopping playback. Maybe this stream " -#~ "is scrambled?\n" -#~ msgstr "" -#~ "demux_mpeg_block: demasiado errores, deteniendo la reproducción.\n" -#~ " ¿Puede estar corrupto el stream?\n" - -#~ msgid "Opening >%s<\n" -#~ msgstr "Abriendo >%s<\n" - -#, fuzzy -#~ msgid "demux_wc3movie: encountered unknown chunk: %c%c%c%c\n" -#~ msgstr "demux_qt: codec de vÃdeo desconocido '%s'\n" - -#~ msgid "input_http: unable to resolve >%s<\n" -#~ msgstr "input_http: no se puede resolver >%s<\n" - -#, fuzzy -#~ msgid "input_http: timeout\n" -#~ msgstr "input_http: error de lectura\n" - -#~ msgid "input_http: opening >/%s< on host >%s<" -#~ msgstr "input_http: abriendo >/%s< en el host >%s<" - -#~ msgid "%s via proxy >%s<" -#~ msgstr "%s via proxy >%s<" - -#~ msgid "input_http: EAGAIN\n" -#~ msgstr "input_http: EAGAIN\n" - -#~ msgid "OUCH - ran out of buffers\n" -#~ msgstr "UY - fuera de los búfers\n" - -#~ msgid "OUCH - dropped input packet %d %d\n" -#~ msgstr "UY - se descartó el paquete de entrada %d %d\n" - -#~ msgid "rtp input plugin as shipped with xine" -#~ msgstr "plugin de entrada de rtp incluido en xine" - #, fuzzy -#~ msgid "demux_mpgaudio: no audio driver!\n" -#~ msgstr "demux_avi: tipo de audio desconocido 0x%lx\n" - -#~ msgid "input_cda: ioctl(CDROM_MEDIA_CHANGED) failed: %s.\n" -#~ msgstr "input_cda: falló ioctl(CDROM_MEDIA_CHANGED): %s.\n" - -#~ msgid "input_cda: ioctl(CDROMSUBCHNL) failed: %s.\n" -#~ msgstr "input_cda: falló ioctl(CDROMSUBCHNL): %s.\n" - -#~ msgid "input_cda: ioctl(CDIOCSTART) failed: %s.\n" -#~ msgstr "input_cda: falló ioctl(CDIOCSTART): %s.\n" - -#~ msgid "input_cda: ioctl(CDROMSTART) failed: %s.\n" -#~ msgstr "input_cda: falló ioctl(CDROMSTART): %s.\n" - -#~ msgid "input_cda: ioctl(CDIOCPLAYMSF) failed: %s.\n" -#~ msgstr "input_cda: falló ioctl(CDIOCPLAYMSF): %s.\n" - -#~ msgid "input_cda: ioctl(CDROMPLAYMSF) failed: %s.\n" -#~ msgstr "input_cda: falló ioctl(CDROMPLAYMSF): %s.\n" - -#~ msgid "input_cda: No rights to open %s.\n" -#~ msgstr "input_cda: No tiene derechos para abrir %s.\n" - -#~ msgid "input_cda: ioctl(CDROMCLOSETRAY) failed: %s\n" -#~ msgstr "input_cda: falló ioctl(CDROMCLOSETRAY): %s\n" - -#~ msgid "input_cda: ioctl(CDROMEJECT) failed: %s\n" -#~ msgstr "input_cda: falló ioctl(CDROMEJECT): %s\n" - -#~ msgid "input_cda: ioctl(CDROM_DRIVE_STATUS) failed: %s\n" -#~ msgstr "input_cda: falló ioctl(CDROM_DRIVE_STATUS): %s\n" - -#~ msgid "input_cda: ioctl(CDROMALLOW) failed: %s\n" -#~ msgstr "input_cda: falló ioctl(CDROMALLOW): %s\n" - -#~ msgid "input_cda: ioctl(CDIOREADTOCHEADER) failed: %s.\n" -#~ msgstr "input_cda: falló ioctl(CDIOREADTOCHEADER): %s.\n" - -#~ msgid "input_cda: ioctl(CDROMREADTOCHDR) failed: %s.\n" -#~ msgstr "input_cda: falló ioctl(CDROMREADTOCHDR): %s.\n" - -#~ msgid "input_cda: ioctl(CDIOREADTOCENTRYS) failed: %s.\n" -#~ msgstr "input_cda: falló ioctl(CDIOREADTOCENTRYS): %s.\n" - -#~ msgid "input_cda: ioctl(CDROMREADTOCENTRY) failed: %s.\n" -#~ msgstr "input_cda: falló ioctl(CDROMREADTOCENTRY): %s.\n" - -#, fuzzy -#~ msgid "input_cda: malformed MRL. Use cda:/<track #>\n" -#~ msgstr "input_cda: MRL mal formada. Use cda://<núm. pista>\n" - -#~ msgid "input_cda: invalid track %d (valid range: 1 .. %d)\n" -#~ msgstr "input_cda: pista no válida %d (rango válido: 1 .. %d)\n" - -#~ msgid "input_cda: error seek to origin %d not implemented!\n" -#~ msgstr "" -#~ "input_cda: erro de posicionamiento en el origen %d no implementado\n" - -#~ msgid "cd audio plugin as shipped with xine" -#~ msgstr "plugin de cd audio incluido en xine" - -#, fuzzy -#~ msgid "demux_qt: '%c%c%c%c' audio @ %d Hz, %d bits, %d %s\n" -#~ msgstr "" -#~ "demux_qt: codec de vÃdeo %s (%f fps), codec de audio %s (%ld Hz, %d " -#~ "bits)\n" - -#, fuzzy -#~ msgid "demux_fli: %d frames, %dx%d\n" -#~ msgstr "demux_fli: %d tamaño del marco de vÃdeo %d x %d\n" - -#, fuzzy -#~ msgid "demux_smjpeg: '%c%c%c%c' video @ %dx%d\n" -#~ msgstr "demux_smjpeg: codec de vÃdeo %c%c%c%c, (%d Hz, %d bits, %d %s)\n" - -#, fuzzy -#~ msgid "demux_smjpeg: '%c%c%c%c' audio @ %d Hz, %d bits, %d %s\n" -#~ msgstr "demux_smjpeg: codec de vÃdeo %c%c%c%c, (%d Hz, %d bits, %d %s)\n" - -#, fuzzy -#~ msgid "demux_wav: format 0x%X audio, %d Hz, %d bits/sample, %d %s\n" -#~ msgstr "demux_wav: codec de audio 0x%X (%d Hz, %d bits, %d %s)\n" - -#, fuzzy -#~ msgid "demux_wav: running time = %lld min, %lld sec\n" -#~ msgstr "demux_avi: tamaño del marco de vÃdeo %ld x %ld\n" - -#, fuzzy -#~ msgid "demux_aiff: %d Hz, %d channels, %d bits, %d frames\n" -#~ msgstr "" -#~ "demux_qt: codec de vÃdeo %s (%f fps), codec de audio %s (%ld Hz, %d " -#~ "bits)\n" - -#, fuzzy -#~ msgid "demux_aiff: running time: %d min, %d sec\n" -#~ msgstr "demux_avi: tamaño del marco de vÃdeo %ld x %ld\n" - -#, fuzzy -#~ msgid "demux_snd: %d Hz, %d channels, %d bits, %d frames\n" -#~ msgstr "" -#~ "demux_qt: codec de vÃdeo %s (%f fps), codec de audio %s (%ld Hz, %d " -#~ "bits)\n" - -#, fuzzy -#~ msgid "demux_snd: running time: %d min, %d sec\n" -#~ msgstr "demux_avi: tamaño del marco de vÃdeo %ld x %ld\n" - -#, fuzzy -#~ msgid "" -#~ "demux_voc: VOC format 0x%X audio, %d Hz, running time: %d min, %d sec\n" -#~ msgstr "demux_wav: codec de audio 0x%X (%d Hz, %d bits, %d %s)\n" - -#~ msgid "demux_ts: FIXME: (unsupported )PAT spans multiple TS packets\n" -#~ msgstr "" -#~ "demux_ts: ARREGLAR: (no soportado)PAT abarca múltiples paquetes TS\n" - -#~ msgid "" -#~ "demux_ts: FIXME: (unsupported) PAT consists of multiple (%d) sections\n" -#~ msgstr "" -#~ "demux_ts: ARREGLAR: (no soportado)PAT consiste en múltiples secciones (%" -#~ "d)\n" - -#~ msgid "" -#~ "demux_ts: demux error! PAT with invalid CRC32: packet_crc32: %.8x " -#~ "calc_crc32: %.8x\n" -#~ msgstr "" -#~ "demux_ts: ¡error demux! PAT con CRC32 no válido: packet_crc32: %.8x " -#~ "calc_crc32: %.8x\n" - -#~ msgid "demux_ts: error %02x %02x %02x (should be 0x000001)\n" -#~ msgstr "demux_ts: error %02x %02x %02x (deberÃa ser 0x000001)\n" - -#, fuzzy -#~ msgid "demux_ts: unexpected cc %d (expected %d)\n" -#~ msgstr "demux_ts: paquete de entrada cc descartado: %d esperado: %d\n" - -#, fuzzy -#~ msgid "demux_ts: corrupted pes encountered\n" -#~ msgstr "demux_ts: pes roto encontrado\n" - -#~ msgid "demux error! PMT with invalid pointer\n" -#~ msgstr "¡error demux! PMT con puntero no válido\n" - -#~ msgid "" -#~ "demux_ts: demux error! PMT with invalid CRC32: packet_crc32: %#.8x " -#~ "calc_crc32: %#.8x\n" -#~ msgstr "" -#~ "demux_ts: ¡error demux! PMT con CRC32 no válido: packet_crc32: %#.8x " -#~ "calc_crc32: %#.8x\n" - -#~ msgid "demux error! PMT with inconsistent progInfo length\n" -#~ msgstr "¡error demux! PMT con longitud de progInfo inconsistente\n" - -#~ msgid "demux error! PMT with inconsistent streamInfo length\n" -#~ msgstr "¡error demux! PMT con longitud de streamInfo inconsistente\n" - -#~ msgid "demux error! invalid ts sync byte %.2x\n" -#~ msgstr "¡error demux! byte de sincronización ts no válido %.2x\n" - -#~ msgid "demux error! transport error\n" -#~ msgstr "¡error demux! error de transporte\n" - -#~ msgid "demux_ts: demux error! invalid payload size %d\n" -#~ msgstr "demux_ts: ¡error demux! tamaño de payload %d no válido\n" - -#~ msgid "demux %u ts_open!\n" -#~ msgstr "¡demux %u ts_open!\n" - -#~ msgid "demux_mpeg: please specify mpeg(mpeg1/mpeg2) stream type.\n" -#~ msgstr "" -#~ "demux_mpeg: por favor, especifique el tipo de stream mpeg (mpeg1/mpeg2).\n" - -#~ msgid "stdin/fifo input plugin as shipped with xine" -#~ msgstr "plugin de entrada stdin/fifo incluido en xine" - -#~ msgid "input_vcd : error in ioctl CDROMREADTOCHDR\n" -#~ msgstr "input_vcd : error en ioctl CDROMREADTOCHDR\n" - -#~ msgid "input_vcd: error in ioctl CDROMREADTOCENTRY for track %d\n" -#~ msgstr "input_vcd: error en ioct CDROMREADTOCENTRY para la pista %d\n" - -#~ msgid "input_vcd: error in ioctl CDROMREADTOCENTRY for lead-out\n" -#~ msgstr "input_vcd: error en CDROMREADTOCENTRY por lead-out\n" - -#~ msgid "input_vcd: error in ioctl CDROMREADTOCENTRY\n" -#~ msgstr "input_vcd: error en ioctl CDROMREADTOCENTRY\n" - -#~ msgid "scsi command failed with status %d\n" -#~ msgstr "el comando scsi falló con estado %d\n" - -#~ msgid "input_vcd: error in CDRIOCSETBLOCKSIZE %d\n" -#~ msgstr "input_vcd: error en CDRIOCSETBLOCKSIZE %d\n" - -#~ msgid "input_vcd: error in CDROMREADRAW\n" -#~ msgstr "input_vcd: error en CDROMREADRAW\n" - -#~ msgid "input_vcd: seek error %d\n" -#~ msgstr "input_vcd: error de posicionamiento %d\n" - -#~ msgid "input_vcd: read error %d\n" -#~ msgstr "input_vcd: error de lectura %d\n" - -#~ msgid "input_vcd: error seek to origin %d not implemented!\n" -#~ msgstr "input_vcd: error de posicionamiento al origen %d no implementado\n" - -#~ msgid "input_vcd: CDROMCLOSETRAY failed: %s\n" -#~ msgstr "input_vcd: falló CDROMCLOSETRAY: %s\n" - -#~ msgid "input_vcd: CDROMEJECT failed: %s\n" -#~ msgstr "input_vcd: falló CDROMEJECT: %s\n" - -#~ msgid "input_vcd: CDROM_DRIVE_STATUS failed: %s\n" -#~ msgstr "input_vcd: falló CDROM_DRIVE_STATUS: %s\n" - -#~ msgid "vcd device input plugin as shipped with xine" -#~ msgstr "plugin de entrada del dispositivo de vcd incluido en xine" - -#~ msgid "vcd_read_toc failed\n" -#~ msgstr "falló vcd_read_toc\n" - -#, fuzzy -#~ msgid "demux_film: unknown video codec %c%c%c%c\n" -#~ msgstr "demux_qt: codec de vÃdeo desconocido '%s'\n" - -#, fuzzy -#~ msgid "demux_vqa: running time: %d min, %d sec\n" -#~ msgstr "demux_avi: tamaño del marco de vÃdeo %ld x %ld\n" - -#~ msgid "lstat failed for %s{%s}\n" -#~ msgstr "lstat falló por %s{%s}\n" - -#~ msgid "%s(%d): readlink() failed: %s\n" -#~ msgstr "%s(%d): falló readlink(): %s\n" - -#~ msgid "plain file input plugin as shipped with xine" -#~ msgstr "plugin de entrada de archivo plano incluido en xine" - -#~ msgid "input_file: get optional data, type %08x, sub %p\n" -#~ msgstr "input_file: obtener datos opcionales, tipo %08x, sub %p\n" - -#~ msgid "xine_notify_stream_finished: can't create new thread (%s)\n" -#~ msgstr "xine_notify_stream_finished: no se puede crear un hilo nuevo (%s)\n" - -#, fuzzy -#~ msgid "demux_avi: video format = %s\n" -#~ msgstr "demux_asf: formato de vÃdeo: %s\n" - -#~ msgid "demux_avi: video frame size %ld x %ld\n" -#~ msgstr "demux_avi: tamaño del marco de vÃdeo %ld x %ld\n" - -#, fuzzy -#~ msgid "demux_avi: audio format[%d] = 0x%lx\n" -#~ msgstr "demux_avi: formato de vÃdeo = %s, formato de audio = 0x%lx\n" - -#~ msgid "demux_avi: unknown audio type 0x%lx\n" -#~ msgstr "demux_avi: tipo de audio desconocido 0x%lx\n" - -#~ msgid "demux_avi: audio type %s (wFormatTag 0x%x)\n" -#~ msgstr "demux_avi: tipo de audio %s (wFormatTag 0x%x)\n" - -#, fuzzy -#~ msgid "demux_avi: unknown video codec '%.4s'\n" -#~ msgstr "demux_qt: codec de vÃdeo desconocido '%s'\n" - -#, fuzzy -#~ msgid "demux_avi: video codec is '%s'\n" -#~ msgstr "demux_avi: codec de vÃdeo >%s<\n" - -#, fuzzy -#~ msgid "ogg: vorbis avg. bitrate %d, samplerate %d\n" -#~ msgstr "ogg: detectado stream de audio vorbis\n" - -#, fuzzy -#~ msgid "ogg: video format %.4s, frame size %d x %d, %d fps\n" -#~ msgstr "demux_avi: tamaño del marco de vÃdeo %ld x %ld\n" - -#, fuzzy -#~ msgid "" -#~ "ogg: unknown stream type (signature >%.8s<). hex dump of bos packet " -#~ "follows:\n" -#~ msgstr "ogg: tipo de stream desconocido (firma > %.8s<)\n" - -#~ msgid "demux_asf: audio format : %s (wFormatTag 0x%x)\n" -#~ msgstr "demux_asf: formato de audio: %s (wFormatTag 0x%x)\n" - -#~ msgid "demux_asf: video format : %s\n" -#~ msgstr "demux_asf: formato de vÃdeo: %s\n" - -#~ msgid "demux_asf: stream length is %d sec, rate is %d bytes/sec\n" -#~ msgstr "" -#~ "demux_asf: la longitud del stream es de %d seg, la media es de %d bytes/" -#~ "seg\n" - -#~ msgid "demux_asf: title : %s\n" -#~ msgstr "demux_asf: tÃtulo : %s\n" - -#~ msgid "demux_asf: author : %s\n" -#~ msgstr "demux_asf: autor : %s\n" - -#~ msgid "demux_asf: comment : %s\n" -#~ msgstr "demux_asf: comentario : %s\n" - -#~ msgid "system layer format '%s' detected.\n" -#~ msgstr "detectado el formato de capa del sistema '%s'.\n" - -#~ msgid "stream format" -#~ msgstr "formato de stream" - -#, fuzzy -#~ msgid "" -#~ "demux_ts: plugin doesn't support plugin API version %d.\n" -#~ " This means there's a version mismatch between xine and this " -#~ "demuxer plugin.\n" -#~ " Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ts: el plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que hay una versión que no coincide entre xine " -#~ "y\n" -#~ " este plugin demultiplexor.\n" -#~ "Instalar los plugins demux actuales deberÃa ser de ayuda.\n" - -#~ msgid "" -#~ "demux_avi: this plugin doesn't support plugin API version %d.\n" -#~ "demux_avi: this means there's a version mismatch between xine and this " -#~ "demux_avi: demuxer plugin.\n" -#~ "Installing current demuxer plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_elem: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_mpeg: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_pes: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_qt: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#~ msgid "" -#~ "demux_ogg: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_asf: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_cda: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_film: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin. Installing current demux plugins should " -#~ "help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_mpeg_block: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_roq: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_idcin: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_idcin: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre " -#~ "xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_smjpeg: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin. Installing current demux plugins " -#~ "should help.\n" -#~ msgstr "" -#~ "demux_smjpeg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre " -#~ "xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_wav: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_wav: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_aiff: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_snd: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_voc: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_vqa: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "demux_wc3movie: plugin doesn't support plugin API version %d.\n" -#~ " this means there's a version mismatch between xine and " -#~ "this demuxer plugin.\n" -#~ "Installing current demux plugins should help.\n" -#~ msgstr "" -#~ "demux_idcin: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre " -#~ "xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#~ msgid "" -#~ "net input plugin doesn't support plugin API version %d.\n" -#~ "PLUGIN DISABLED.\n" -#~ "This means there's a version mismatch between xine and this inputplugin.\n" -#~ "Installing current input plugins should help.\n" -#~ msgstr "" -#~ "el plugin de entrada de red no admite esta versión %d del API de " -#~ "plugins.\n" -#~ "PLUGIN DESACTIVADO.\n" -#~ "Esto significa que no hay una versión que coincida entre xine y este " -#~ "plugin\n" -#~ "de entrada.\n" -#~ "Instalar los plugins de entrada actuales deberÃa ser de ayuda.\n" - -#~ msgid "" -#~ "rtp input plugin doesn't support plugin API version %d.\n" -#~ "PLUGIN DISABLED.\n" -#~ "This means there's a version mismatch between xine and this inputplugin.\n" -#~ "Installing current input plugins should help.\n" -#~ msgstr "" -#~ "el plugin de entrada rtp no admite esta versión %d del API de plugins.\n" -#~ "PLUGIN DESACTIVADO.\n" -#~ "Esto significa que no hay una versión que coincida entre xine y este " -#~ "plugin\n" -#~ "de entrada.\n" -#~ "Instalar los plugins de entrada actuales deberÃa ser de ayuda.\n" - -#~ msgid "" -#~ "stdin/fifo input plugin doesn't support plugin API version %d.\n" -#~ "PLUGIN DISABLED.\n" -#~ "This means there's a version mismatch between xine and this inputplugin.\n" -#~ "Installing current input plugins should help.\n" -#~ msgstr "" -#~ "el plugin de entrada stdin/fifo no admite esta versión %d del API de " -#~ "plugins.\n" -#~ "PLUGIN DESACTIVADO.\n" -#~ "Esto significa que no hay una versión que coincida entre xine y este " -#~ "plugin\n" -#~ "de entrada.\n" -#~ "Instalar los plugins de entrada actuales deberÃa ser de ayuda.\n" - -#~ msgid "" -#~ "file input plugin doesn't support plugin API version %d.\n" -#~ "PLUGIN DISABLED.\n" -#~ "This means there's a version mismatch between xine and this inputplugin.\n" -#~ "Installing current input plugins should help.\n" -#~ msgstr "" -#~ "el plugin de entrada de archivo no admite esta versión %d del API de " -#~ "plugins.\n" -#~ "PLUGIN DESACTIVADO.\n" -#~ "Esto significa que no hay una versión que coincida entre xine y este " -#~ "plugin\n" -#~ "de entrada.\n" -#~ "Instalar los plugins de entrada actuales deberÃa ser de ayuda.\n" - -#~ msgid "" -#~ "vcd input plugin doesn't support plugin API version %d.\n" -#~ "PLUGIN DISABLED.\n" -#~ "This means there's a version mismatch between xine and this inputplugin.\n" -#~ "Installing current input plugins should help.\n" -#~ msgstr "" -#~ "el plugin de entrada de vcd no admite esta versión %d del API de " -#~ "plugins.\n" -#~ "PLUGIN DESACTIVADO.\n" -#~ "Esto significa que no hay una versión que coincida entre xine y este " -#~ "plugin\n" -#~ "de entrada.\n" -#~ "Instalar los plugins de entrada actuales deberÃa ser de ayuda.\n" - -#~ msgid "" -#~ "http input plugin doesn't support plugin API version %d.\n" -#~ "PLUGIN DISABLED.\n" -#~ "This means there's a version mismatch between xine and this inputplugin.\n" -#~ "Installing current input plugins should help.\n" -#~ msgstr "" -#~ "el plugin de entrada http no admite esta versión %d del API de plugins.\n" -#~ "PLUGIN DESACTIVADO.\n" -#~ "Esto significa que no hay una versión que coincida entre xine y este " -#~ "plugin\n" -#~ "de entrada.\n" -#~ "Instalar los plugins de entrada actuales deberÃa ser de ayuda.\n" - -#~ msgid "" -#~ "cda input plugin doesn't support plugin API version %d.\n" -#~ "PLUGIN DISABLED.\n" -#~ "This means there's a version mismatch between xine and this inputplugin.\n" -#~ "Installing current input plugins should help.\n" -#~ msgstr "" -#~ "el plugin de entrada cda no admite esta versión %d del API de plugins.\n" -#~ "PLUGIN DESACTIVADO.\n" -#~ "Esto significa que no hay una versión que coincida entre xine y este " -#~ "plugin\n" -#~ "de entrada.\n" -#~ "Instalar los plugins de entrada actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "libmpeg2: plugin doesn't support plugin API version %d.\n" -#~ "libmpeg2: this means there's a version mismatch between xine and this " -#~ "libmpeg2: decoder plugin.\n" -#~ "Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "libmpg123: plugin doesn't support plugin API version %d.\n" -#~ "libmpg123: this means there's a version mismatch between xine and this " -#~ "libmpg123: decoder plugin.\n" -#~ "Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "libspudec: Doesn't support plugin API version %d.\n" -#~ "libspudec: This means there is a version mismatch between XINE and\n" -#~ "libspudec: this plugin.\n" -#~ msgstr "" -#~ "el plugin de entrada de archivo no admite esta versión %d del API de " -#~ "plugins.\n" -#~ "PLUGIN DESACTIVADO.\n" -#~ "Esto significa que no hay una versión que coincida entre xine y este " -#~ "plugin\n" -#~ "de entrada.\n" -#~ "Instalar los plugins de entrada actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "w32codec: plugin doesn't support plugin API version %d.\n" -#~ "w32codec: this means there's a version mismatch between xine and this " -#~ "w32codec: decoder plugin.\n" -#~ "Installing current decoder plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#~ msgid "%s(%d) wrong first stage = %d !!\n" -#~ msgstr "%s(%d) primera fase incorrecta = %d\n" - -#~ msgid "%s(%s@%d): parameter should be non null, exiting\n" -#~ msgstr "%s(%s@%d): el parámetro no deberÃa ser nulo, terminando\n" - -#~ msgid "load_plugins: demux plugin found : %s\n" -#~ msgstr "load_plugins: encontrado plugin demultiplexor : %s\n" - -#~ msgid "load_plugins: too many demux plugins installed, exiting.\n" -#~ msgstr "" -#~ "load_plugins: demasiados plugins demultiplexores instalados, saliendo.\n" - -#~ msgid "" -#~ "load_plugins: %s is no valid input plugin (lacks init_input_plugin() " -#~ "function)\n" -#~ msgstr "" -#~ "load_plugins: %s no es un plugin válido (carece de la función " -#~ "init_input_plugin())\n" - -#~ msgid "%s(%d): too many input plugins installed, exiting.\n" -#~ msgstr "%s(%d): demasiados plugins de entrada instalados, saliendo.\n" - -#~ msgid "" -#~ "load_plugins: no input plugins found in %s! - Did you install xine " -#~ "correctly??\n" -#~ msgstr "" -#~ "load_plugins: no se encontraron plugins de entrada en %s - ¿Instaló xine " -#~ "correctamente?\n" - -#~ msgid "spu decoder plugin found : %s\n" -#~ msgstr "encontrado plugin decodificador spu: %s\n" - -#, fuzzy -#~ msgid "" -#~ "liblpcm: plugin doesn't support plugin API version %d.\n" -#~ "liblpcm: this means there's a version mismatch between xine and this " -#~ "liblpcm: decoder plugin.\n" -#~ "Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "ffmpeg: plugin doesn't support plugin API version %d.\n" -#~ "ffmpeg: this means there's a version mismatch between xine and this " -#~ "ffmpeg: decoder plugin.\n" -#~ "Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "dxr3_decode_spu: plugin doesn't support plugin API version %d.\n" -#~ "dxr3_decode_spu: this means there's a version mismatch between xine and " -#~ "this dxr3_decode_spu: decoder plugin. Installing current plugins should " -#~ "help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "dxr3_decode_video: plugin doesn't support plugin API version %d.\n" -#~ "dxr3_decode_video: this means there's a version mismatch between xine and " -#~ "this\n" -#~ "dxr3_decode_video: decoder plugin. Installing current plugins should " -#~ "help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "libmad: plugin doesn't support plugin API version %d.\n" -#~ "libmad: this means there's a version mismatch between xine and this " -#~ "libmad: decoder plugin.\n" -#~ "Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "liba52: plugin doesn't support plugin API version %d.\n" -#~ "liba52: this means there's a version mismatch between xine and this " -#~ "liba52: decoder plugin.\n" -#~ "Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "libdts: plugin doesn't support plugin API version %d.\n" -#~ "libdts: this means there's a version mismatch between xine and this " -#~ "libdts: decoder plugin.\n" -#~ "Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "divx4: plugin doesn't support plugin API version %d.\n" -#~ "divx4: this means there's a version mismatch between xine and this divx4: " -#~ "decoder plugin.\n" -#~ "Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "libvorbis: plugin doesn't support plugin API version %d.\n" -#~ "libvorbis: this means there's a version mismatch between xine and this " -#~ "libvorbis: decoder plugin.\n" -#~ "Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "libsputext: doesn't support plugin api version %d.\n" -#~ "libsputext: This means there is a version mismatch between xine and\n" -#~ "libsputext: this plugin.\n" -#~ msgstr "" -#~ "el plugin de entrada de archivo no admite esta versión %d del API de " -#~ "plugins.\n" -#~ "PLUGIN DESACTIVADO.\n" -#~ "Esto significa que no hay una versión que coincida entre xine y este " -#~ "plugin\n" -#~ "de entrada.\n" -#~ "Instalar los plugins de entrada actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "libspucc: doesn't support plugin api version %d.\n" -#~ "libspucc: This means there is a version mismatch between xine and\n" -#~ "libspucc: this plugin.\n" -#~ msgstr "" -#~ "el plugin de entrada de archivo no admite esta versión %d del API de " -#~ "plugins.\n" -#~ "PLUGIN DESACTIVADO.\n" -#~ "Esto significa que no hay una versión que coincida entre xine y este " -#~ "plugin\n" -#~ "de entrada.\n" -#~ "Instalar los plugins de entrada actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "xvid: plugin doesn't support plugin API version %d.\n" -#~ "xvid: this means there's a version mismatch between xine and this\n" -#~ "xvid: decoder plugin. Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "cinepak: plugin doesn't support plugin API version %d.\n" -#~ "cinepak: this means there's a version mismatch between xine and this " -#~ "cinepak: decoder plugin.\n" -#~ "Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "RoQ: plugin doesn't support plugin API version %d.\n" -#~ "RoQ: this means there's a version mismatch between xine and this RoQ: " -#~ "decoder plugin.\n" -#~ "Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_ogg: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "RoQ Audio: plugin doesn't support plugin API version %d.\n" -#~ "RoQ Audio: this means there's a version mismatch between xine and this\n" -#~ "RoQ Audio: decoder plugin.\n" -#~ "Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#, fuzzy -#~ msgid "" -#~ "libfaad: plugin doesn't support plugin API version %d.\n" -#~ "libfaad: this means there's a version mismatch between xine and this " -#~ "libfaad: decoder plugin.\n" -#~ "Installing current plugins should help.\n" -#~ msgstr "" -#~ "demux_avi: este plugin no admite la versión del API de plugins %d.\n" -#~ " esto significa que no hay una versión que coincida entre xine\n" -#~ " y este plugin demultiplexor.\n" -#~ "Instalar los plugins demultiplexores actuales deberÃa ser de ayuda.\n" - -#~ msgid "USCSICMD dvd_read_copyright: %s" -#~ msgstr "USCSICMD dvd_read_copyright: %s" - -#~ msgid "bad status: READ DVD STRUCTURE (copyright)\n" -#~ msgstr "mal estado: LECTURA DE LA ESTRUCTURA DEL DVD (copyright)\n" - -#~ msgid "input_dvd: Could not read Copyright Structure\n" -#~ msgstr "input_dvd: No se puede leer la estructura del copyright\n" - -#~ msgid "" -#~ "input_dvd: Could not read Copyright Structure.\n" -#~ " Assuming disk is not encrypted.\n" -#~ msgstr "" -#~ "input_dvd: No se pudo leer la estructura del copyright.\n" -#~ " Asumiendo que el disco no está encriptado.\n" - -#, fuzzy -#~ msgid "" -#~ "\n" -#~ "input_dvd: Sorry, this plugin doesn't play encrypted DVDs. The legal " -#~ "status\n" -#~ " of CSS decryption is unclear and we can't provide such code.\n" -#~ " Please check http://dvd.sf.net for more information.\n" -#~ msgstr "" -#~ "\n" -#~ "input_dvd: xine no reproduce DVDs encriptados. El estado legal de\n" -#~ " la desencriptación CSS no está claro y no proporcionamos\n" -#~ " tal código.\n" -#~ "\n" - -#~ msgid "input_dvd: Unable to find >%s< on dvd.\n" -#~ msgstr "input_dvd: No se puede encontrar >%s< en el dvd.\n" - -#~ msgid "input_dvd: error read: %Ld bytes is not a sector!\n" -#~ msgstr "input_dvd: error de lectura: %Ld bytes no es un sector\n" - -#~ msgid "input_dvd: read error in input_dvd plugin (%s)\n" -#~ msgstr "input_dvd: error de lectura en input_dvd plugin (%s)\n" - -#~ msgid "input_dvd: short read in input_dvd (%d != %d)\n" -#~ msgstr "input_dvd: lectura corta input_dvd (%d != %d)\n" - -#~ msgid "" -#~ "input_dvd: error in input_dvd plugin read: %Ld bytes is not a sector!\n" -#~ msgstr "" -#~ "input_dvd: error de lectura en plugin input_dvd: %Ld bytes no es un " -#~ "sector\n" - -#~ msgid "input_dvd: seek: %d is an unknown origin\n" -#~ msgstr "input_dvd: posición: %d es un origen desconocido\n" - -#~ msgid "input_dvd: CDROMCLOSETRAY failed: %s\n" -#~ msgstr "input_dvd: falló CDROMCLOSETRAY: %s\n" - -#~ msgid "input_dvd: CDROMEJECT failed: %s\n" -#~ msgstr "input_dvd: falló CDROMEJECT: %s\n" - -#~ msgid "input_dvd: CDROM_DRIVE_STATUS failed: %s\n" -#~ msgstr "input_dvd: falló CDROM_DRIVE_STATUS: %s\n" - -#~ msgid "ioctl(cdromallow): %s" -#~ msgstr "ioctl(cdromallow): %s" - -#~ msgid "ioctl(cdromeject): %s" -#~ msgstr "ioctl(cdromeject): %s" - -#~ msgid "dvd device input plugin as shipped with xine" -#~ msgstr "plugin de entra del dispositivo de dvd incluido en xine" - -#~ msgid "" -#~ "dvd input plugin doesn't support plugin API version %d.\n" -#~ "PLUGIN DISABLED.\n" -#~ "This means there's a version mismatch between xine and this inputplugin.\n" -#~ "Installing current input plugins should help.\n" -#~ msgstr "" -#~ "el plugin de entrada de dvd no admite esta versión %d del API de " -#~ "plugins.\n" -#~ "PLUGIN DESACTIVADO.\n" -#~ "Esto significa que no hay una versión que coincida entre xine y este " -#~ "plugin\n" -#~ "de entrada.\n" -#~ "Instalar los plugins de entrada actuales deberÃa ser de ayuda.\n" - -#~ msgid "unable to open %s: %s." -#~ msgstr "no se puede abrir %s: %s." - -#, fuzzy -#~ msgid "none" -#~ msgstr "hecho\n" - -#~ msgid "demux_ts: PUSI set but no PES header (corrupt stream?)\n" -#~ msgstr "demux_ts: PUSI puesto pero sin cabecera PES (¿stream corrupto?)\n" - -#~ msgid "RE-Sync failed\n" -#~ msgstr "Falló la resincronización\n" - -#~ msgid "mpgaudio: bitrate = %.2fkbps\n" -#~ msgstr "mpgaudio: bitrate = %.2fkbps\n" - -#~ msgid "demux_ts: stop...\n" -#~ msgstr "demux_ts: parada...\n" - -#~ msgid "demux_avi: reconstructing index" -#~ msgstr "demux_avi: reconstruyendo el Ãndice" - -#~ msgid "demux_avi: audio seek to start failed\n" -#~ msgstr "demux_avi: falló el posicionamiento del audio al inicio\n" - -#~ msgid "demux_avi: unknown avi format %.4s\n" -#~ msgstr "demux_avi: formato del avi desconocido %.4s\n" - -#~ msgid "demux_avi: text subtitle file available\n" -#~ msgstr "demux_avi: disponible archivo de subtÃtulo de texto\n" - -#~ msgid "demux_avi: can't create new thread (%s)\n" -#~ msgstr "demux_avi: no se puede crear un hilo nuevo (%s)\n" - -#~ msgid "input_http: answer: >%s<\n" -#~ msgstr "input_http: respuesta: >%s<\n" - -#~ msgid "input_http: end of headers\n" -#~ msgstr "input_http: fin de las cabeceras\n" - -#~ msgid "video_out: thread created\n" -#~ msgstr "video_out: hilo creado\n" - -#~ msgid "xine_stop\n" -#~ msgstr "xine_stop\n" - -#~ msgid "xine_stop ignored\n" -#~ msgstr "xine_stop ignorado\n" - -#~ msgid "xine_stop: stopping demuxer\n" -#~ msgstr "xine_stop: parando el demultiplexor\n" - -#~ msgid "xine_stop: done\n" -#~ msgstr "xine_stop: hecho\n" - -#~ msgid "xine_exit: shutdown audio\n" -#~ msgstr "xine_exit: apagar audio\n" - -#~ msgid "xine_exit: shutdown video\n" -#~ msgstr "xine_exit: apagar vÃdeo\n" - -#~ msgid "xine_exit: bye!\n" -#~ msgstr "xine_exit: hasta luego, Lucas\n" - -#~ msgid "xine: xine_get_current_position: no input source\n" -#~ msgstr "xine: xine_get_current_position: sin fuente de entrada\n" +msgid "Unknown error" +msgstr "error desconocido" -#~ msgid "xine: set_speed %d\n" -#~ msgstr "xine: velocidad_puesta %d\n" @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: xine-lib-1\n" "Report-Msgid-Bugs-To: xine-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2006-11-29 23:07+0100\n" +"POT-Creation-Date: 2007-01-26 18:31+0100\n" "PO-Revision-Date: 2005-02-17 14:29+0100\n" "Last-Translator: Piarres Beobide <pi@beobide.net>\n" "Language-Team: lubrezale <librezale@librezale.org>\n" @@ -101,6 +101,7 @@ msgstr "" "w32codec: huts deskodetzailea abiaraztean. '%s' instalaturik al dago?\n" #: src/libw32dll/w32codec.c:1221 +#, c-format msgid "w32codec: (ACM_Decoder) Unappropriate audio format\n" msgstr "w32codec: (ACM_Decoder) Okerreko audio formatua\n" @@ -110,10 +111,12 @@ msgid "w32codec: (ACM_Decoder) acmStreamOpen error %d\n" msgstr "w32codec: (ACM_Decoder) acmStreamOpen errorea %d\n" #: src/libw32dll/w32codec.c:1243 +#, c-format msgid "w32codec: Error initializing DirectShow Audio\n" msgstr "w32codec: Errorea DirectShow Audio abiarazterakoan\n" #: src/libw32dll/w32codec.c:1261 +#, c-format msgid "w32codec: Error initializing DMO Audio\n" msgstr "w32codec: Errorea DMO Audioa abiarazterakoan\n" @@ -394,16 +397,16 @@ msgstr "xine fitxategi audio irteera plugina" msgid "xine output plugin for Coreaudio/Mac OS X" msgstr "xine irteera plugina Coreaudio/Mac OS X-entzat" -#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:919 +#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:920 #, c-format msgid "audio_sun_out: opening audio device %s failed: %s\n" msgstr "audio_sun_out: huts %s audio gailua irekitzerakoan: %s\n" -#: src/audio_out/audio_sun_out.c:894 +#: src/audio_out/audio_sun_out.c:895 msgid "Sun audio device name" msgstr "Sun audio gailu izena" -#: src/audio_out/audio_sun_out.c:895 +#: src/audio_out/audio_sun_out.c:896 msgid "" "Specifies the file name for the Sun audio device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -415,12 +418,12 @@ msgstr "" "aldatzean, xine erbili daiteke fitxategi hau eduki arbitrarioez bete dezake. " "Beraz kontu izan behar duzu Sun audio gailu egoki bat ezartzea." -#: src/audio_out/audio_sun_out.c:937 +#: src/audio_out/audio_sun_out.c:938 #, fuzzy, c-format msgid "audio_sun_out: audio ioctl on device %s failed: %s\n" msgstr "audio_sun_out: huts %s audio gailua irekitzerakoan: %s\n" -#: src/audio_out/audio_sun_out.c:988 +#: src/audio_out/audio_sun_out.c:989 msgid "xine audio output plugin using sun-compliant audio devices/drivers" msgstr "" "xine audio irteera plugina sun-kompilaturiko audio gailu/kontrolatzailea" @@ -515,10 +518,12 @@ msgid "unknown error" msgstr "Errore ezezaguna" #: src/audio_out/audio_directx2_out.c:206 +#, c-format msgid "Unable to create direct sound object." msgstr "" #: src/audio_out/audio_directx2_out.c:212 +#, c-format msgid "Could not set direct sound cooperative level." msgstr "" @@ -527,6 +532,7 @@ msgid "Unable to create secondary direct sound buffer" msgstr "" #: src/audio_out/audio_directx2_out.c:310 +#, c-format msgid "Unable to create buffer position events." msgstr "" @@ -559,6 +565,7 @@ msgid "Can't set sound volume" msgstr "" #: src/audio_out/audio_directx2_out.c:432 +#, c-format msgid ": buffer lost, tryig to restore\n" msgstr "" @@ -571,10 +578,12 @@ msgid "Couldn't unlock direct sound buffer" msgstr "" #: src/audio_out/audio_directx2_out.c:544 +#, c-format msgid "Unable to create primary direct sound buffer." msgstr "" #: src/audio_out/audio_directx2_out.c:637 +#, c-format msgid ": play cursor overran, flushing buffers\n" msgstr "" @@ -636,6 +645,7 @@ msgid "xine audio output plugin for win32 using directx" msgstr "xine audio irteera plugina win32-arentzat directx erabiliaz" #: src/audio_out/audio_alsa_out.c:355 +#, c-format msgid "audio_alsa_out:Already open...WHY!" msgstr "audio_alsa_out:Dagoeneko irekirik...ZERGATIK!" @@ -760,6 +770,7 @@ msgid "snd_pcm_open() failed:%d:%s\n" msgstr "snd_pcm_open()-ek huts egin du:%d:%s\n" #: src/audio_out/audio_alsa_out.c:1428 +#, c-format msgid ">>> Check if another program already uses PCM <<<\n" msgstr ">>> Egiaztatu beste programa batek PCM darabilkien<<<\n" @@ -905,7 +916,7 @@ msgid "xine audio output plugin using pulseaudio sound server" msgstr "xine audio irteera plugina esound erabiliz" #: src/xine-engine/io_helper.c:252 -#, fuzzy +#, fuzzy, c-format msgid "io_helper: waiting abandoned\n" msgstr "io_helper: Baimena ukaturik\n" @@ -919,14 +930,17 @@ msgid "failed to get status of socket" msgstr "huts soket egoera eskuratzerakoan" #: src/xine-engine/io_helper.c:388 +#, c-format msgid "io_helper: Permission denied\n" msgstr "io_helper: Baimena ukaturik\n" #: src/xine-engine/io_helper.c:392 +#, c-format msgid "io_helper: File not found\n" msgstr "io_helper: Fitxategia ez da aurkitu\n" #: src/xine-engine/io_helper.c:396 +#, c-format msgid "io_helper: Connection Refused\n" msgstr "io_helper: Konexioa Ukaturik\n" @@ -969,125 +983,130 @@ msgid "" "accelerated, this can dramatically reduce CPU usage." msgstr "" -#: src/xine-engine/xine.c:696 src/xine-engine/xine.c:803 -#: src/xine-engine/xine.c:842 src/xine-engine/xine.c:878 -#: src/xine-engine/xine.c:890 src/xine-engine/xine.c:903 -#: src/xine-engine/xine.c:916 src/xine-engine/xine.c:929 -#: src/xine-engine/xine.c:955 src/xine-engine/xine.c:980 -#: src/xine-engine/xine.c:1015 +#: src/xine-engine/xine.c:704 src/xine-engine/xine.c:811 +#: src/xine-engine/xine.c:850 src/xine-engine/xine.c:886 +#: src/xine-engine/xine.c:898 src/xine-engine/xine.c:911 +#: src/xine-engine/xine.c:924 src/xine-engine/xine.c:937 +#: src/xine-engine/xine.c:963 src/xine-engine/xine.c:988 +#: src/xine-engine/xine.c:1023 msgid "xine: error while parsing mrl\n" msgstr "xine: errorea mrl analizatzerakoan\n" -#: src/xine-engine/xine.c:732 +#: src/xine-engine/xine.c:740 #, c-format msgid "xine: found input plugin : %s\n" msgstr "xine: input plugin-a aurkiturik : %s\n" -#: src/xine-engine/xine.c:750 +#: src/xine-engine/xine.c:758 #, c-format msgid "xine: input plugin cannot open MRL [%s]\n" msgstr "xine: sarrera pluginak ezin du MRL-a [%s] ireki\n" -#: src/xine-engine/xine.c:766 +#: src/xine-engine/xine.c:774 #, c-format msgid "xine: cannot find input plugin for MRL [%s]\n" msgstr "xine: ezin da [%s] MRL-aren plugina aurkitu\n" -#: src/xine-engine/xine.c:792 +#: src/xine-engine/xine.c:800 #, c-format msgid "xine: specified demuxer %s failed to start\n" msgstr "" -#: src/xine-engine/xine.c:828 +#: src/xine-engine/xine.c:836 +#, c-format msgid "xine: join rip input plugin\n" msgstr "" -#: src/xine-engine/xine.c:835 +#: src/xine-engine/xine.c:843 msgid "xine: error opening rip input plugin instance\n" msgstr "" -#: src/xine-engine/xine.c:866 +#: src/xine-engine/xine.c:874 #, c-format msgid "xine: last_probed demuxer %s failed to start\n" msgstr "" -#: src/xine-engine/xine.c:895 +#: src/xine-engine/xine.c:903 msgid "ignoring video\n" msgstr "bidoa alde batetara uzten\n" -#: src/xine-engine/xine.c:908 +#: src/xine-engine/xine.c:916 msgid "ignoring audio\n" msgstr "audioa alde batetara uzten\n" -#: src/xine-engine/xine.c:921 +#: src/xine-engine/xine.c:929 msgid "ignoring subpicture\n" msgstr "azpi-irudia alde batetara uzten\n" -#: src/xine-engine/xine.c:934 +#: src/xine-engine/xine.c:942 msgid "input cache plugin disabled\n" msgstr "" -#: src/xine-engine/xine.c:1005 +#: src/xine-engine/xine.c:1013 #, c-format msgid "subtitle mrl opened '%s'\n" msgstr "'%s' azpititulu mrl-a irekirik\n" -#: src/xine-engine/xine.c:1009 +#: src/xine-engine/xine.c:1017 msgid "xine: error opening subtitle mrl\n" msgstr "xine: errorea azpititulu mrl-a irekitzerakoan\n" -#: src/xine-engine/xine.c:1041 +#: src/xine-engine/xine.c:1049 +#, c-format msgid "xine: error while parsing MRL\n" msgstr "xine: errorea MRL-analizatzerakoan\n" -#: src/xine-engine/xine.c:1048 +#: src/xine-engine/xine.c:1056 #, c-format msgid "xine: changing option '%s' from MRL isn't permitted\n" msgstr "xine: MRL-ko '%s' aukera aldaketa ez da onartzen\n" -#: src/xine-engine/xine.c:1068 +#: src/xine-engine/xine.c:1076 #, c-format msgid "xine: couldn't find demux for >%s<\n" msgstr "" -#: src/xine-engine/xine.c:1084 +#: src/xine-engine/xine.c:1092 #, c-format msgid "xine: found demuxer plugin: %s\n" msgstr "" -#: src/xine-engine/xine.c:1104 +#: src/xine-engine/xine.c:1112 +#, c-format msgid "xine: demuxer failed to start\n" msgstr "" -#: src/xine-engine/xine.c:1167 +#: src/xine-engine/xine.c:1177 +#, c-format msgid "xine_play: no demux available\n" msgstr "" -#: src/xine-engine/xine.c:1237 +#: src/xine-engine/xine.c:1247 +#, c-format msgid "xine_play: demux failed to start\n" msgstr "" -#: src/xine-engine/xine.c:1508 +#: src/xine-engine/xine.c:1523 #, c-format msgid "xine: The specified save_dir \"%s\" might be a security risk.\n" msgstr "" "xine: Ezarritako \"%s\" gordetze karpeta (save_dir) segurtasun arrisku bat " "izan daiteke.\n" -#: src/xine-engine/xine.c:1513 +#: src/xine-engine/xine.c:1528 msgid "The specified save_dir might be a security risk." msgstr "" "Ezarritako gordetze karpeta (save_dir) segurtasun arrisku bat izan daiteke." -#: src/xine-engine/xine.c:1539 +#: src/xine-engine/xine.c:1554 msgid "xine: locale not supported by C library\n" msgstr "xine: lokala ez du C liburutegiak onartzen\n" -#: src/xine-engine/xine.c:1548 +#: src/xine-engine/xine.c:1563 msgid "media format detection strategy" msgstr "medio formatu atzemate modua" -#: src/xine-engine/xine.c:1549 +#: src/xine-engine/xine.c:1564 msgid "" "xine offers various methods to detect the media format of input to play. The " "individual values are:\n" @@ -1116,11 +1135,11 @@ msgstr "" "extension\n" "Izen luzapen bidez bakarrik atzemna.\n" -#: src/xine-engine/xine.c:1567 +#: src/xine-engine/xine.c:1582 msgid "directory for saving streams" msgstr "korronteak gordetzeko karpeta" -#: src/xine-engine/xine.c:1568 +#: src/xine-engine/xine.c:1583 msgid "" "When using the stream save feature, files will be written only into this " "directory.\n" @@ -1130,11 +1149,11 @@ msgid "" "content in any file." msgstr "" -#: src/xine-engine/xine.c:1579 +#: src/xine-engine/xine.c:1594 msgid "allow implicit changes to the configuration (e.g. by MRL)" msgstr "Onartu aldaketa inplizitoak konfiguraketan (adib. MRL bidez)" -#: src/xine-engine/xine.c:1580 +#: src/xine-engine/xine.c:1595 msgid "" "If enabled, you allow xine to change your configuration without explicit " "actions from your side. For example configuration changes demanded by MRLs " @@ -1144,26 +1163,26 @@ msgid "" "configuration, you might end with a totally messed up xine." msgstr "" -#: src/xine-engine/xine.c:1594 +#: src/xine-engine/xine.c:1609 msgid "Timeout for network stream reading (in seconds)" msgstr "" -#: src/xine-engine/xine.c:1595 +#: src/xine-engine/xine.c:1610 msgid "" "Specifies the timeout when reading from network streams, in seconds. Too low " "values might stop streaming when the source is slow or the bandwidth is " "occupied, too high values will freeze the player if the connection is lost." msgstr "" -#: src/xine-engine/xine.c:1946 +#: src/xine-engine/xine.c:1962 msgid "messages" msgstr "mezuak" -#: src/xine-engine/xine.c:1947 +#: src/xine-engine/xine.c:1963 msgid "plugin" msgstr "plugina" -#: src/xine-engine/xine.c:1948 +#: src/xine-engine/xine.c:1964 msgid "trace" msgstr "aztarna" @@ -1173,20 +1192,23 @@ msgid "input_rip: reading of saved data failed: %s\n" msgstr "input_rip: huts grabatutako datuak irakurtzerkaoan: %s\n" #: src/xine-engine/input_rip.c:154 +#, c-format msgid "input_rip: reading by input plugin failed\n" msgstr "input_rip: huts sarrera pluginetik irakirtzerakoan\n" #: src/xine-engine/input_rip.c:162 src/xine-engine/input_rip.c:291 -#: src/xine-engine/input_rip.c:643 +#: src/xine-engine/input_rip.c:657 #, fuzzy, c-format msgid "input_rip: error writing to file %<PRIdMAX> bytes: %s\n" msgstr "input_rip: errorea %lld fitxategian idazterakoan, byte-ak: %s\n" #: src/xine-engine/input_rip.c:183 +#, c-format msgid "input_rip: open() function should never be called\n" msgstr "input_rip: open() funtzioa ez zen inoiz deitu beharko\n" #: src/xine-engine/input_rip.c:314 src/xine-engine/input_rip.c:419 +#, c-format msgid "input_rip: seeking failed\n" msgstr "input_rip: bilaketak huts egin du\n" @@ -1200,17 +1222,19 @@ msgstr "input_rip: bilaketak huts egin du: %s\n" msgid "input_rip: %<PRIdMAX> bytes dropped\n" msgstr "input_rip: %lld byte alde batetara utzirik\n" -#: src/xine-engine/input_rip.c:548 +#: src/xine-engine/input_rip.c:562 +#, c-format msgid "input_rip: input plugin not defined!\n" msgstr "input_rip: sarrera pluginia ez ezarririk!\n" -#: src/xine-engine/input_rip.c:554 +#: src/xine-engine/input_rip.c:568 +#, c-format msgid "" "input_rip: target directory wasn't specified, please fill out the option " "'media.capture.save_dir'\n" msgstr "" -#: src/xine-engine/input_rip.c:556 +#: src/xine-engine/input_rip.c:570 msgid "" "The stream save feature is disabled until you set media.capture.save_dir in " "the configuration." @@ -1218,11 +1242,12 @@ msgstr "" "korreonte grabaketa aukera ezgaiturik dago konfigruaketan media.capture." "save_dir ezarri arte." -#: src/xine-engine/input_rip.c:563 +#: src/xine-engine/input_rip.c:577 +#, c-format msgid "input_rip: ripping/caching of this source is not permitted!\n" msgstr "" -#: src/xine-engine/input_rip.c:565 +#: src/xine-engine/input_rip.c:579 msgid "" "xine is not allowed to save from this source. (possibly copyrighted " "material?)" @@ -1230,11 +1255,12 @@ msgstr "" "xine ez dago jatorri horretatik grabatzeko gaiturik (kopia eskubidedun " "materiala agian?)" -#: src/xine-engine/input_rip.c:571 +#: src/xine-engine/input_rip.c:585 +#, c-format msgid "input_rip: file name not given!\n" msgstr "input_rip: ez da fitxategi izena eman!\n" -#: src/xine-engine/input_rip.c:613 +#: src/xine-engine/input_rip.c:627 #, c-format msgid "input_rip: error opening file %s: %s\n" msgstr "input_rip: errorea %s fitxategia irekitzerakoan: %s\n" @@ -1274,143 +1300,144 @@ msgid "" msgstr "" #: src/xine-engine/input_cache.c:167 -#, fuzzy +#, fuzzy, c-format msgid ": open() function should never be called\n" msgstr "input_rip: open() funtzioa ez zen inoiz deitu beharko\n" #: src/xine-engine/input_cache.c:349 -#, fuzzy +#, fuzzy, c-format msgid ": input plugin not defined!\n" msgstr "input_rip: sarrera pluginia ez ezarririk!\n" -#: src/xine-engine/osd.c:739 +#: src/xine-engine/osd.c:745 #, c-format msgid "font '%s-%d' already loaded, weird.\n" msgstr "'%s-%d' letra-tipoa dagoeneko kargaturik, bitxia.\n" -#: src/xine-engine/osd.c:751 +#: src/xine-engine/osd.c:757 #, c-format msgid "font '%s' loading failed (%d < %d)\n" msgstr "huts '%s' letra tipoa kargatzerakoan (%d < %d)\n" -#: src/xine-engine/osd.c:761 +#: src/xine-engine/osd.c:767 #, c-format msgid "wrong version for font '%s'. expected %d found %d.\n" msgstr "" "'%s' letra tipoaren okerreko bertsioa. %d espero zen baina %d aurkitu da.\n" -#: src/xine-engine/osd.c:828 +#: src/xine-engine/osd.c:834 msgid "osd: cannot initialize ft2 library\n" msgstr "osd: ezin da ft2 liburutegia abiarazi\n" -#: src/xine-engine/osd.c:851 +#: src/xine-engine/osd.c:857 #, c-format msgid "osd: error matching font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:865 +#: src/xine-engine/osd.c:871 #, fuzzy, c-format msgid "osd: error loading font %s with FontConfig" msgstr "osd: errorea glyph %i kargatzerakoan\n" -#: src/xine-engine/osd.c:868 +#: src/xine-engine/osd.c:874 #, c-format msgid "osd: error looking up font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:889 +#: src/xine-engine/osd.c:895 #, c-format msgid "osd: error loading font %s with ft2\n" msgstr "" -#: src/xine-engine/osd.c:899 +#: src/xine-engine/osd.c:905 msgid "osd: error setting font size (no scalable font?)\n" msgstr "" "osd: errorea letra-tipo tamaina ezarpenean (letra-tipo ez eskalagarria?)\n" -#: src/xine-engine/osd.c:1015 +#: src/xine-engine/osd.c:1021 #, c-format msgid "" "osd: unknown sequence starting with byte 0x%02X in encoding \"%s\", " "skipping\n" msgstr "" -#: src/xine-engine/osd.c:1071 +#: src/xine-engine/osd.c:1077 msgid "osd: can't find out current locale character set\n" msgstr "osd: ezin da irteera karaktere jokoa aurkitu\n" -#: src/xine-engine/osd.c:1081 +#: src/xine-engine/osd.c:1087 #, c-format msgid "osd: unsupported conversion %s -> %s, no conversion performed\n" msgstr "osd: ez da moldatzea onartzen: %s -> %s, ez da moldatuko\n" -#: src/xine-engine/osd.c:1136 src/xine-engine/osd.c:1304 +#: src/xine-engine/osd.c:1142 src/xine-engine/osd.c:1310 msgid "osd: font isn't defined\n" msgstr "osd: letra-tipoa ez dago ezarririk\n" -#: src/xine-engine/osd.c:1175 +#: src/xine-engine/osd.c:1181 msgid "osd: error loading glyph\n" msgstr "osd: errorea glyph kargatzerkaoan\n" -#: src/xine-engine/osd.c:1181 +#: src/xine-engine/osd.c:1187 msgid "osd: error in rendering glyph\n" msgstr "osd: errorea glyph reenderizatzerakoan\n" -#: src/xine-engine/osd.c:1341 +#: src/xine-engine/osd.c:1347 #, c-format msgid "osd: error loading glyph %i\n" msgstr "osd: errorea glyph %i kargatzerakoan\n" -#: src/xine-engine/osd.c:1348 +#: src/xine-engine/osd.c:1354 msgid "osd: error in rendering\n" msgstr "osd: errorea reenderizatzerakoan\n" -#: src/xine-engine/osd.c:1596 +#: src/xine-engine/osd.c:1602 msgid "palette (foreground-border-background) to use for subtitles and OSD" msgstr "" "OSD eta azpitituluetan erabiliko den paleta (aurreko-ertza-atzeko koloreak)" -#: src/xine-engine/osd.c:1597 +#: src/xine-engine/osd.c:1603 msgid "" "The palette for on-screen-display and some subtitle formats that do not " "specify any colouring themselves. The palettes are listed in the form: " "foreground-border-background." msgstr "" -#: src/xine-engine/configfile.c:896 +#: src/xine-engine/configfile.c:924 +#, c-format msgid "The current config file has been modified by a newer version of xine." msgstr "" "Konfigurazio fitxategia xine-ren bertsio berriagobategatik aldatua izan da." -#: src/xine-engine/configfile.c:1001 +#: src/xine-engine/configfile.c:1029 #, c-format msgid "configfile: WARNING: backing up configfile to %s failed\n" msgstr "" "configfile: ABISUA: %s-en konfigurazio fitxategia segurtasun kopia egiten\n" -#: src/xine-engine/configfile.c:1002 +#: src/xine-engine/configfile.c:1030 msgid "configfile: WARNING: your configuration will not be saved\n" msgstr "configfile: ABISUA: zure konfigurazioa ezin da gorde\n" -#: src/xine-engine/configfile.c:1101 +#: src/xine-engine/configfile.c:1129 #, c-format msgid "configfile: WARNING: writing configuration to %s failed\n" msgstr "configfile: ABISUA: huts %s konfigurazioa gordetzerakoan\n" -#: src/xine-engine/configfile.c:1102 +#: src/xine-engine/configfile.c:1130 #, c-format msgid "configfile: WARNING: removing possibly broken config file %s\n" msgstr "" "configfile: ABISUA: agian apurturiko %s konfigurazio fitxategia ezabatzen\n" -#: src/xine-engine/configfile.c:1103 +#: src/xine-engine/configfile.c:1131 #, c-format msgid "configfile: WARNING: you should check the backup file %s\n" msgstr "" "configfile: ABISUA: zuk segurtasun kopia %s fitxategia egiaztatu beharko " "zenuke\n" -#: src/xine-engine/configfile.c:1237 +#: src/xine-engine/configfile.c:1266 #, c-format msgid "configfile: entry '%s' mustn't be modified from MRL\n" msgstr "configfile: ¡'%s' sarrera ezin MRL-tik aldatu\n" @@ -1427,46 +1454,57 @@ msgid "" "(diff : %<PRId64>).\n" msgstr "" -#: src/xine-engine/video_out.c:1818 +#: src/xine-engine/video_out.c:1790 +#, fuzzy +msgid "default number of video frames" +msgstr "marko errepikatze lehenetsiriko kopurua" + +#: src/xine-engine/video_out.c:1791 +msgid "" +"The default number of video frames to request from xine video out driver. " +"Some drivers will override this setting with their own values." +msgstr "" + +#: src/xine-engine/video_out.c:1830 msgid "percentage of skipped frames to tolerate" msgstr "onartzen den alde batetara utziko marko kopuru ehunekoa" -#: src/xine-engine/video_out.c:1819 +#: src/xine-engine/video_out.c:1831 msgid "" "When more than this percentage of frames are not shown, because they were " "not decoded in time, xine sends a notification." msgstr "" -#: src/xine-engine/video_out.c:1824 +#: src/xine-engine/video_out.c:1836 msgid "percentage of discarded frames to tolerate" msgstr "onartzen den alde batetara utziko marko kopuru ehunekoa" -#: src/xine-engine/video_out.c:1825 +#: src/xine-engine/video_out.c:1837 msgid "" "When more than this percentage of frames are not shown, because they were " "not scheduled for display in time, xine sends a notification." msgstr "" -#: src/xine-engine/video_out.c:1859 +#: src/xine-engine/video_out.c:1871 msgid "video_out: sorry, this should not happen. please restart xine.\n" msgstr "" "video_out: barkatu, hau ez zen gertatu beharko. mesedez xine berrabiarazi.\n" -#: src/xine-engine/video_decoder.c:374 +#: src/xine-engine/video_decoder.c:380 #, c-format msgid "video_decoder: no plugin available to handle '%s'\n" msgstr "video_decoder: ez dago pluginik '%s' kudeatzeko\n" -#: src/xine-engine/video_decoder.c:453 +#: src/xine-engine/video_decoder.c:459 #, c-format msgid "video_decoder: error, unknown buffer type: %08x\n" msgstr "video_decoder: errorea, buffer mota ezezaguna: %08x\n" -#: src/xine-engine/video_decoder.c:489 +#: src/xine-engine/video_decoder.c:495 msgid "number of video buffers" msgstr "bideo buffer kopurua" -#: src/xine-engine/video_decoder.c:490 +#: src/xine-engine/video_decoder.c:496 msgid "" "The number of video buffers (each is 8k in size) xine uses in its internal " "queue. Higher values mean smoother playback for unreliable inputs, but also " @@ -1484,92 +1522,92 @@ msgid "" "info_helper: unsupported conversion %s -> UTF-8, no conversion performed\n" msgstr "osd: ez da moldatzea onartzen: %s -> %s, ez da moldatuko\n" -#: src/xine-engine/xine_interface.c:918 +#: src/xine-engine/xine_interface.c:934 msgid "Warning:" msgstr "" -#: src/xine-engine/xine_interface.c:919 +#: src/xine-engine/xine_interface.c:935 #, fuzzy msgid "Unknown host:" msgstr "ostalari ezezaguna" -#: src/xine-engine/xine_interface.c:920 +#: src/xine-engine/xine_interface.c:936 #, fuzzy msgid "Unknown device:" msgstr "gertaera mota ezezaguna: " -#: src/xine-engine/xine_interface.c:921 +#: src/xine-engine/xine_interface.c:937 msgid "Network unreachable" msgstr "" -#: src/xine-engine/xine_interface.c:922 +#: src/xine-engine/xine_interface.c:938 #, fuzzy msgid "Connection refused:" msgstr "io_helper: Konexioa Ukaturik\n" -#: src/xine-engine/xine_interface.c:923 +#: src/xine-engine/xine_interface.c:939 #, fuzzy msgid "File not found:" msgstr "io_helper: Fitxategia ez da aurkitu\n" -#: src/xine-engine/xine_interface.c:924 +#: src/xine-engine/xine_interface.c:940 msgid "Read error from:" msgstr "" -#: src/xine-engine/xine_interface.c:925 +#: src/xine-engine/xine_interface.c:941 #, fuzzy msgid "Error loading library:" msgstr "osd: errorea glyph kargatzerkaoan\n" -#: src/xine-engine/xine_interface.c:926 +#: src/xine-engine/xine_interface.c:942 msgid "Encrypted media stream detected" msgstr "" -#: src/xine-engine/xine_interface.c:927 +#: src/xine-engine/xine_interface.c:943 msgid "Security message:" msgstr "" -#: src/xine-engine/xine_interface.c:928 +#: src/xine-engine/xine_interface.c:944 #, fuzzy msgid "Audio device unavailable" msgstr "Sun audio gailu izena" -#: src/xine-engine/xine_interface.c:929 +#: src/xine-engine/xine_interface.c:945 msgid "Permission error" msgstr "" -#: src/xine-engine/xine_interface.c:930 +#: src/xine-engine/xine_interface.c:946 msgid "File is empty:" msgstr "" -#: src/xine-engine/audio_out.c:1074 +#: src/xine-engine/audio_out.c:1072 msgid "" "audio_out: delay calculation impossible with an unavailable audio device\n" msgstr "" "audio_out: atzerapena kalkulatzea ezinezko audio gailu eskuraezin batekin\n" -#: src/xine-engine/audio_out.c:1216 +#: src/xine-engine/audio_out.c:1214 msgid "write to sound card failed. Was a USB device unplugged ?\n" msgstr "" "Hus soinu txartelan idazterakoan. Konektatu gabeko USB gailu bat ote?\n" -#: src/xine-engine/audio_out.c:1369 +#: src/xine-engine/audio_out.c:1367 msgid "8 bits not supported by driver, converting to 16 bits.\n" msgstr "kontrolatzaileak ez du 8bit onartzen, 16bit-era bihurtzen.\n" -#: src/xine-engine/audio_out.c:1377 +#: src/xine-engine/audio_out.c:1375 msgid "mono not supported by driver, converting to stereo.\n" msgstr "kontrolatzaileak ez du mono onartzen, estereo-ra bihurtzen.\n" -#: src/xine-engine/audio_out.c:1383 +#: src/xine-engine/audio_out.c:1381 msgid "stereo not supported by driver, converting to mono.\n" msgstr "kontrolatzaileak ez du estereo onartzen, mono-ra bihurtzen.\n" -#: src/xine-engine/audio_out.c:2028 +#: src/xine-engine/audio_out.c:2033 msgid "method to sync audio and video" msgstr "audioa eta bideoa sinkronizatzeko metodoa" -#: src/xine-engine/audio_out.c:2029 +#: src/xine-engine/audio_out.c:2034 msgid "" "When playing audio and video, there are at least two clocks involved: The " "system clock, to which video frames are synchronized and the clock in your " @@ -1592,11 +1630,11 @@ msgid "" "form." msgstr "" -#: src/xine-engine/audio_out.c:2057 +#: src/xine-engine/audio_out.c:2062 msgid "enable resampling" msgstr "" -#: src/xine-engine/audio_out.c:2058 +#: src/xine-engine/audio_out.c:2063 msgid "" "When the sample rate of the decoded audio does not match the capabilities of " "your sound hardware, an adaptation called \"resampling\" is required. Here " @@ -1604,33 +1642,33 @@ msgid "" "automatically when necessary." msgstr "" -#: src/xine-engine/audio_out.c:2065 +#: src/xine-engine/audio_out.c:2070 msgid "always resample to this rate (0 to disable)" msgstr "" -#: src/xine-engine/audio_out.c:2066 +#: src/xine-engine/audio_out.c:2071 msgid "" "Some audio drivers do not correctly announce the capabilities of the audio " "hardware. By setting a value other than zero here, you can force the audio " "stream to be resampled to the given rate." msgstr "" -#: src/xine-engine/audio_out.c:2075 +#: src/xine-engine/audio_out.c:2080 msgid "offset for digital passthrough" msgstr "" -#: src/xine-engine/audio_out.c:2076 +#: src/xine-engine/audio_out.c:2081 msgid "" "If you use an external surround decoder and audio is ahead or behind video, " "you can enter a fixed offset here to compensate.\n" "The unit of the value is one PTS tick, which is the 90000th part of a second." msgstr "" -#: src/xine-engine/audio_out.c:2085 +#: src/xine-engine/audio_out.c:2090 msgid "play audio even on slow/fast speeds" msgstr "" -#: src/xine-engine/audio_out.c:2086 +#: src/xine-engine/audio_out.c:2091 msgid "" "If you enable this option, the audio will be heard even when playback speed " "is different than 1X. Of course, it will sound distorted (lower/higher " @@ -1638,29 +1676,30 @@ msgid "" "audio post plugin instead." msgstr "" -#: src/xine-engine/audio_out.c:2157 +#: src/xine-engine/audio_out.c:2162 msgid "startup audio volume" msgstr "abiarazterakoan audio bolumena" -#: src/xine-engine/audio_out.c:2158 +#: src/xine-engine/audio_out.c:2163 msgid "The overall audio volume set at xine startup." msgstr "Xine abiaraztean ezarriko den audio bolumena." -#: src/xine-engine/audio_out.c:2161 +#: src/xine-engine/audio_out.c:2166 msgid "restore volume level at startup" msgstr "berezarri tamaina maila abiaraztean" -#: src/xine-engine/audio_out.c:2162 +#: src/xine-engine/audio_out.c:2167 msgid "If disabled, xine will not modify any mixer settings at startup." msgstr "" "ezgaiturik badago, xine-k ez ditu nahasle ezarpenak aldatuko abiaraztean." -#: src/xine-engine/audio_out.c:2192 +#: src/xine-engine/audio_out.c:2197 msgid "audio_out: sorry, this should not happen. please restart xine.\n" msgstr "" "audio_out: barkatu, hau ez zen gertatu beharko. mesedez xine berrabiarazi.\n" #: src/xine-engine/load_plugins.c:212 +#, c-format msgid "map_decoder_list: no space for decoder, skipped.\n" msgstr "" @@ -1704,7 +1743,7 @@ msgid "load_plugins: plugin %s found\n" msgstr "load_plugins: %s plugin aurkitu dira\n" #: src/xine-engine/load_plugins.c:499 -#, fuzzy +#, fuzzy, c-format msgid "load_plugins: static plugin found\n" msgstr "load_plugins: %s plugin aurkitu dira\n" @@ -1714,7 +1753,7 @@ msgid "load_plugins: plugin limit reached, %s could not be loaded\n" msgstr "load_plugins: plugin muga gainditu da, %s ezin da kargatu\n" #: src/xine-engine/load_plugins.c:509 -#, fuzzy +#, fuzzy, c-format msgid "load_plugins: plugin limit reached, static plugin could not be loaded\n" msgstr "load_plugins: plugin muga gainditu da, %s ezin da kargatu\n" @@ -1878,11 +1917,11 @@ msgstr "" "xine bideo irteera plugina Matrox G200/G400 txartelen SyncFB modulua " "erabiliaz" -#: src/video_out/video_out_syncfb.c:1077 +#: src/video_out/video_out_syncfb.c:1078 msgid "SyncFB device name" msgstr "SyncFB gailu izena" -#: src/video_out/video_out_syncfb.c:1078 +#: src/video_out/video_out_syncfb.c:1079 msgid "" "Specifies the file name for the SyncFB (TeleTux) device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -1899,47 +1938,47 @@ msgid "xine video output plugin using the Libstk Surface Set-top Toolkit" msgstr "xine video output plugina \"Libstk Surface Set-top Toolkit\" erabiliaz" #: src/video_out/video_out_xvmc.c:1446 src/video_out/video_out_pgx64.c:1464 -#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1436 +#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1437 msgid "video overlay colour key" msgstr "" #: src/video_out/video_out_xvmc.c:1447 src/video_out/video_out_xxmc.c:2431 #: src/video_out/video_out_vidix.c:1159 src/video_out/video_out_vidix.c:1166 -#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1437 +#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1438 msgid "" "The colour key is used to tell the graphics card where to overlay the video " "image. Try different values, if you experience windows becoming transparent." msgstr "" #: src/video_out/video_out_xvmc.c:1455 src/video_out/video_out_xxmc.c:2439 -#: src/video_out/video_out_xv.c:1445 +#: src/video_out/video_out_xv.c:1446 msgid "autopaint colour key" msgstr "" #: src/video_out/video_out_xvmc.c:1456 src/video_out/video_out_xxmc.c:2440 -#: src/video_out/video_out_xv.c:1446 +#: src/video_out/video_out_xv.c:1447 msgid "Make Xv autopaint its colorkey." msgstr "" #: src/video_out/video_out_xvmc.c:1461 src/video_out/video_out_xxmc.c:2463 -#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1469 +#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1470 #: src/video_out/video_out_opengl.c:1918 msgid "enable double buffering" msgstr "gaitu buffer bikoitza" #: src/video_out/video_out_xvmc.c:1462 src/video_out/video_out_xxmc.c:2464 -#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1470 +#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1471 msgid "" "Double buffering will synchronize the update of the video image to the " "repainting of the entire screen (\"vertical retrace\"). This eliminates " "flickering and tearing artifacts, but will use more graphics memory." msgstr "" -#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1537 +#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1538 msgid "deinterlace method (deprecated)" msgstr "ez-elkarlituriko metodoa (zaharkiturik)" -#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1538 +#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1539 msgid "" "This config setting is deprecated. You should use the new deinterlacing post " "processing settings instead.\n" @@ -2148,11 +2187,11 @@ msgid "" "conversion and scaling.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1453 +#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1454 msgid "bilinear scaling mode" msgstr "eskalatze modu bilinearra" -#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1454 +#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1455 msgid "" "Selects the bilinear scaling mode for Permedia cards. The individual values " "are:\n" @@ -2177,11 +2216,11 @@ msgstr "video_out_xv: adaptadoreak yv12 formatua onartzen du.\n" msgid "video_out_xxmc: this adaptor supports the yuy2 format.\n" msgstr "video_out_xv: adaptadoreak yuy2 formatua onartzen du.\n" -#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1530 +#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1531 msgid "pitch alignment workaround" msgstr "" -#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1531 +#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1532 msgid "Some buggy video drivers need a workaround to function properly." msgstr "" @@ -2227,7 +2266,7 @@ msgid "" "Alternate between top and bottom field at double the frame rate.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1611 +#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1612 msgid "xine video output plugin using the MIT X video extension" msgstr "xine bideo irteera plugina MIT X bideo luzapena erabiltzen" @@ -2373,11 +2412,11 @@ msgid "" "video_out_xv: => not using MIT Shared Memory extension.\n" msgstr "" -#: src/video_out/video_out_xv.c:1282 +#: src/video_out/video_out_xv.c:1283 msgid "video_out_xv: Xv extension not present.\n" msgstr "video_out_xv: Xv luzapena ez dago.\n" -#: src/video_out/video_out_xv.c:1319 +#: src/video_out/video_out_xv.c:1320 msgid "" "video_out_xv: Xv extension is present but I couldn't find a usable yuv12 " "port.\n" @@ -2387,18 +2426,18 @@ msgstr "" "erabilgarririkaurkitu.\n" " Dirudienez zure txartela grafikoak ez du Xv onartzen?!\n" -#: src/video_out/video_out_xv.c:1328 +#: src/video_out/video_out_xv.c:1329 #, c-format msgid "" "video_out_xv: using Xv port %ld from adaptor %s for hardware colorspace " "conversion and scaling.\n" msgstr "" -#: src/video_out/video_out_xv.c:1503 +#: src/video_out/video_out_xv.c:1504 msgid "video_out_xv: this adaptor supports the yv12 format.\n" msgstr "video_out_xv: adaptadoreak yv12 formatua onartzen du.\n" -#: src/video_out/video_out_xv.c:1508 +#: src/video_out/video_out_xv.c:1509 msgid "video_out_xv: this adaptor supports the yuy2 format.\n" msgstr "video_out_xv: adaptadoreak yuy2 formatua onartzen du.\n" @@ -2630,75 +2669,75 @@ msgid "" "\"=disabled)." msgstr "" -#: src/video_out/video_out_directfb.c:1509 +#: src/video_out/video_out_directfb.c:1516 msgid "video_out_directfb: using hardware subpicture acceleration.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1523 +#: src/video_out/video_out_directfb.c:1530 #, fuzzy msgid "video_out_directfb: layer supports video output.\n" msgstr "video_out_vidix: egokigailuak yuy2 formatua onartzen du\n" -#: src/video_out/video_out_directfb.c:1532 +#: src/video_out/video_out_directfb.c:1539 #, fuzzy msgid "video_out_directfb: layer doesn't support YV12!\n" msgstr "video_out_syncfb: info. (SyncFB moduluak YUY2 onartzen du)\n" -#: src/video_out/video_out_directfb.c:1539 +#: src/video_out/video_out_directfb.c:1546 #, fuzzy msgid "video_out_directfb: layer doesn't support YUY2!\n" msgstr "video_out_syncfb: info. (SyncFB moduluak YUY2 onartzen du)\n" -#: src/video_out/video_out_directfb.c:1550 +#: src/video_out/video_out_directfb.c:1557 msgid "" "video_out_directfb:need at least DirectFB 0.9.25 to play on this layer!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1585 +#: src/video_out/video_out_directfb.c:1592 #, c-format msgid "video_out_directfb: layer doesn't support buffermode %d!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1591 +#: src/video_out/video_out_directfb.c:1598 #, c-format msgid "video_out_directfb: layer doesn't support options 0x%08x!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1685 +#: src/video_out/video_out_directfb.c:1692 msgid "video_out_directfb: using hardware accelerated image scaling.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1697 +#: src/video_out/video_out_directfb.c:1704 msgid "" "video_out_directfb: image scaling with deinterlacing is hardware " "accelerated.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1775 +#: src/video_out/video_out_directfb.c:1782 #, fuzzy msgid "video layer id (auto: -1)" msgstr "bideo saturazioa" -#: src/video_out/video_out_directfb.c:1776 +#: src/video_out/video_out_directfb.c:1783 msgid "Select the video output layer by its id." msgstr "" -#: src/video_out/video_out_directfb.c:1797 -#: src/video_out/video_out_directfb.c:2006 +#: src/video_out/video_out_directfb.c:1804 +#: src/video_out/video_out_directfb.c:2013 #, fuzzy, c-format msgid "video_out_directfb: using display layer #%d.\n" msgstr "video_out_vidix: erabilitako kontrolatzailea: %s, %s-rena\n" -#: src/video_out/video_out_directfb.c:1881 +#: src/video_out/video_out_directfb.c:1888 #, fuzzy msgid "xine video output plugin using DirectFB." msgstr "xine bideo irteera plugina DirectFB liburutegia erabiliaz" -#: src/video_out/video_out_directfb.c:1999 +#: src/video_out/video_out_directfb.c:2006 msgid "video_out_directfb: no usable display layer was found!\n" msgstr "" -#: src/video_out/video_out_directfb.c:2088 +#: src/video_out/video_out_directfb.c:2095 #, fuzzy msgid "xine video output plugin using DirectFB under XDirectFB." msgstr "xine bideo irteera plugina DirectFB liburutegia erabiliaz" @@ -2717,20 +2756,20 @@ msgstr "video_out_pgx32: Error: ioctl hutsa, okerreko gailua (%s)\n" msgid "video_out_pgx32: Error: '%s' is not a pgx32 framebuffer device\n" msgstr "video_out_pgx32: Errorea: '%s' ez da pgx32 framebuffer gailua\n" -#: src/libmusepack/xine_decoder.c:237 +#: src/libmusepack/xine_decoder.c:241 #, c-format msgid "libmusepack: mpc_streaminfo_read failed: %d\n" msgstr "" -#: src/libmusepack/xine_decoder.c:311 +#: src/libmusepack/xine_decoder.c:315 msgid "libmusepack: data after last frame ignored\n" msgstr "" -#: src/libmusepack/xine_decoder.c:322 +#: src/libmusepack/xine_decoder.c:326 msgid "libmusepack: mpc_decoder_initialise failed\n" msgstr "" -#: src/libmusepack/xine_decoder.c:342 src/libmusepack/xine_decoder.c:357 +#: src/libmusepack/xine_decoder.c:346 src/libmusepack/xine_decoder.c:361 #, c-format msgid "libmusepack: mpc_decoder_decode failed: %d\n" msgstr "" @@ -2802,16 +2841,16 @@ msgstr "azpititulu kokapen bertikala (panataila tamainaren arabera)" msgid "encoding of subtitles" msgstr "Apititulu kodifikatzea" -#: src/input/vcd/vcdio.c:211 +#: src/input/vcd/vcdio.c:223 #, fuzzy msgid "SEEK_CUR not implemented for non-zero offset" msgstr "SEEK_END ez dago oraindik inplementaturik." -#: src/input/vcd/vcdio.c:239 +#: src/input/vcd/vcdio.c:251 msgid "SEEK_END not implemented yet." msgstr "SEEK_END ez dago oraindik inplementaturik." -#: src/input/vcd/vcdio.c:242 +#: src/input/vcd/vcdio.c:254 msgid "seek not implemented yet for" msgstr "saltoa ez dago oraindik inplementaturik honentzat: " @@ -2819,52 +2858,52 @@ msgstr "saltoa ez dago oraindik inplementaturik honentzat: " msgid "failed to find a device with a VCD" msgstr "huts VCD bat duen gailu bat bilatzerakoan" -#: src/input/vcd/xineplug_inp_vcd.c:327 +#: src/input/vcd/xineplug_inp_vcd.c:328 msgid "was passed a null class parameter" msgstr "baliogabeko klase parametroa pasa zen" -#: src/input/vcd/xineplug_inp_vcd.c:967 +#: src/input/vcd/xineplug_inp_vcd.c:972 msgid "Invalid current entry type" msgstr "baliogabeko sarrera mota" -#: src/input/vcd/xineplug_inp_vcd.c:991 +#: src/input/vcd/xineplug_inp_vcd.c:996 msgid "" "Video CD plugin with PBC and support for: (X)VCD, (X)SVCD, HQVCD, CVD ... " msgstr "" "Bideo CD plugina PBC.rekin eta onarpen hauekin: (X)VCD, (X)SVCD, HQVCD, " "CVD ... " -#: src/input/vcd/xineplug_inp_vcd.c:1092 +#: src/input/vcd/xineplug_inp_vcd.c:1097 msgid "selection has no RETURN entry" msgstr "Aukerak ez du RETURN sarrerarik" -#: src/input/vcd/xineplug_inp_vcd.c:1121 +#: src/input/vcd/xineplug_inp_vcd.c:1126 #, fuzzy msgid "DEFAULT selected, but PBC is not on." msgstr "LEHENETSIRIKOA aukeraturik baina PBC ez dago gaiturik." -#: src/input/vcd/xineplug_inp_vcd.c:1126 +#: src/input/vcd/xineplug_inp_vcd.c:1131 msgid "selection has no NEXT entry" msgstr "Aukerak ez du HURRENGO sarrerarik" -#: src/input/vcd/xineplug_inp_vcd.c:1134 +#: src/input/vcd/xineplug_inp_vcd.c:1139 msgid "selection has no PREVIOUS entry" msgstr "Aukerak ez du AURREKO sarrerarik" -#: src/input/vcd/xineplug_inp_vcd.c:1141 +#: src/input/vcd/xineplug_inp_vcd.c:1146 msgid "Unknown event type: " msgstr "gertaera mota ezezaguna: " -#: src/input/vcd/xineplug_inp_vcd.c:1441 src/input/vcd/xineplug_inp_vcd.c:1488 +#: src/input/vcd/xineplug_inp_vcd.c:1446 src/input/vcd/xineplug_inp_vcd.c:1493 msgid "The above message had unknown vcdimager log level" msgstr "Goiko mezuak vcdimager arazpen maila ezezagun bat du" -#: src/input/vcd/xineplug_inp_vcd.c:1819 +#: src/input/vcd/xineplug_inp_vcd.c:1824 #, fuzzy msgid "VCD default type to use on autoplay" msgstr "VCD auto-erreproduzitzea erabiltzeko lehenetsiriko mota" -#: src/input/vcd/xineplug_inp_vcd.c:1820 +#: src/input/vcd/xineplug_inp_vcd.c:1825 #, fuzzy msgid "" "The VCD play unit to use when none is specified in an MRL, e.g. vcd:// or " @@ -2873,12 +2912,12 @@ msgstr "" "MRL-an ez ezarri ezkero erabiliko den erreprodukzio unitatea, adib. vcd:// " "edo vcd:///dev/dvd:" -#: src/input/vcd/xineplug_inp_vcd.c:1830 +#: src/input/vcd/xineplug_inp_vcd.c:1835 #, fuzzy msgid "CD-ROM drive used for VCD when none given" msgstr "Lehenetsiriko CD gailya VCD-entzat ematen ez denean" -#: src/input/vcd/xineplug_inp_vcd.c:1831 +#: src/input/vcd/xineplug_inp_vcd.c:1836 msgid "" "What to use if no drive specified. If the setting is empty, xine will scan " "for CD drives." @@ -2886,31 +2925,31 @@ msgstr "" "Zein erabili gailurik ez ezartzean. Ezarpen hau hutsik utzi ezkero xinek " "gailu guztietan bilatuko du." -#: src/input/vcd/xineplug_inp_vcd.c:1841 +#: src/input/vcd/xineplug_inp_vcd.c:1846 #, fuzzy msgid "VCD position slider range" msgstr "posizio graduatzaile bitartea" -#: src/input/vcd/xineplug_inp_vcd.c:1842 +#: src/input/vcd/xineplug_inp_vcd.c:1847 msgid "" "range that the stream playback position slider represents playing a VCD." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1850 +#: src/input/vcd/xineplug_inp_vcd.c:1855 #, fuzzy msgid "VCD read-ahead caching?" msgstr "irakuketa-goiburu gordetzea" -#: src/input/vcd/xineplug_inp_vcd.c:1851 +#: src/input/vcd/xineplug_inp_vcd.c:1856 msgid "Class may lead to jerky playback on low-end machines." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1861 +#: src/input/vcd/xineplug_inp_vcd.c:1866 #, fuzzy msgid "automatically advance VCD track/entry" msgstr "automatikoki aurrera pista/sarrera" -#: src/input/vcd/xineplug_inp_vcd.c:1862 +#: src/input/vcd/xineplug_inp_vcd.c:1867 msgid "" "If enabled, we should automatically advance to the next entry or track. Used " "only when playback control (PBC) is disabled." @@ -2918,24 +2957,24 @@ msgstr "" "Gaiturik dagoenean, hurrengo sarrera edo pista automatikoki erreproduzituko " "du. Erreprodukzio kontrola (PBC) ezgaiturik dagoenean bakarrik erabiliko da." -#: src/input/vcd/xineplug_inp_vcd.c:1871 +#: src/input/vcd/xineplug_inp_vcd.c:1876 #, fuzzy msgid "show 'rejected' VCD LIDs" msgstr "bistaratu ukaturiko LID-ak" -#: src/input/vcd/xineplug_inp_vcd.c:1872 +#: src/input/vcd/xineplug_inp_vcd.c:1877 msgid "" "Some playback list IDs (LIDs) are marked not showable, but you can see them " "in the MRL list if this is set. Rejected entries are marked with an asterisk " "(*) appended to the MRL." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1883 +#: src/input/vcd/xineplug_inp_vcd.c:1888 #, fuzzy msgid "VCD format string for display banner" msgstr "Bistaratze banerraren kate formatua" -#: src/input/vcd/xineplug_inp_vcd.c:1884 +#: src/input/vcd/xineplug_inp_vcd.c:1889 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are:\n" @@ -2956,12 +2995,12 @@ msgid "" " %% : a %\n" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1909 +#: src/input/vcd/xineplug_inp_vcd.c:1914 #, fuzzy msgid "VCD format string for stream comment field" msgstr "Korronte iruzkin eremuaren kate formatua" -#: src/input/vcd/xineplug_inp_vcd.c:1910 +#: src/input/vcd/xineplug_inp_vcd.c:1915 #, fuzzy msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " @@ -2973,12 +3012,12 @@ msgstr "" "Formatu espezifikazioakehuneko ikur bates hasten dira. Ezpezifikazioak: %A, %" "C, %c, %F, %I, %L, %N, %P, %p, %S, %T, %V, %v, eta %%." -#: src/input/vcd/xineplug_inp_vcd.c:1922 +#: src/input/vcd/xineplug_inp_vcd.c:1927 #, fuzzy msgid "VCD debug flag mask" msgstr "arazpen bandera maskara" -#: src/input/vcd/xineplug_inp_vcd.c:1923 +#: src/input/vcd/xineplug_inp_vcd.c:1928 msgid "" "For tracking down bugs in the VCD plugin. Mask values are:\n" " 1: Meta information\n" @@ -3122,11 +3161,11 @@ msgstr "" "DVD-ak erreproduzitzeko erabli nahi duzun, arruntean DVD gailu bat, gaiuaren " "bidea." -#: src/input/input_dvd.c:1803 +#: src/input/input_dvd.c:1804 msgid "raw device set up for DVD access" msgstr "DVD irakurleantzat gailu gordin (raw) ezarpenak" -#: src/input/input_dvd.c:1804 +#: src/input/input_dvd.c:1805 msgid "" "If this points to a raw device connected to your DVD device, xine will use " "the raw device for playback. This has the advantage of being slightly faster " @@ -3137,22 +3176,22 @@ msgid "" "See the documentation on raw device setup (man raw) for further information." msgstr "" -#: src/input/input_dvd.c:1817 +#: src/input/input_dvd.c:1818 msgid "CSS decryption method" msgstr "CSS desenkriptazio metodoa" -#: src/input/input_dvd.c:1818 +#: src/input/input_dvd.c:1819 msgid "" "Selects the decryption method libdvdcss will use to descramble copy " "protected DVDs. Try the various methods, if you have problems playing " "scrambled DVDs." msgstr "" -#: src/input/input_dvd.c:1826 +#: src/input/input_dvd.c:1827 msgid "path to the title key cache" msgstr "" -#: src/input/input_dvd.c:1827 +#: src/input/input_dvd.c:1828 msgid "" "Since cracking the copy protection of scrambled DVDs can be quite time " "consuming, libdvdcss will cache the cracked keys in this directory.\n" @@ -3161,11 +3200,11 @@ msgid "" "used for anything but DVD key caching." msgstr "" -#: src/input/input_dvd.c:1849 +#: src/input/input_dvd.c:1850 msgid "region the DVD player claims to be in (1 to 8)" msgstr "DVD erreproduktorean eskatzen duen erregioa (1 - 8)" -#: src/input/input_dvd.c:1850 +#: src/input/input_dvd.c:1851 msgid "" "This only needs to be changed if your DVD jumps to a screen complaining " "about a wrong region code. It has nothing to do with the region code set in " @@ -3175,11 +3214,11 @@ msgstr "" "bakarrik behar da hau. Honek ez du zerikusirik DVD gailuetan ezarritako " "erregio kodearekin, hau software hutsa da." -#: src/input/input_dvd.c:1856 +#: src/input/input_dvd.c:1857 msgid "default language for DVD playback" msgstr "DVD erreprodukzioaren lehenetsirako hizkuntza" -#: src/input/input_dvd.c:1857 +#: src/input/input_dvd.c:1858 msgid "" "xine tries to use this language as a default for DVD playback. As far as the " "DVD supports it, menus and audio tracks will be presented in this language.\n" @@ -3190,22 +3229,22 @@ msgstr "" "hizkuntza honetan emango dira.\n" "Balioak bi karaktereko ISO639 kode bat izan behar da." -#: src/input/input_dvd.c:1863 +#: src/input/input_dvd.c:1864 msgid "read-ahead caching" msgstr "irakuketa-goiburu gordetzea" -#: src/input/input_dvd.c:1864 +#: src/input/input_dvd.c:1865 msgid "" "xine can use a read ahead cache for DVD drive access.\n" "This may lead to jerky playback on slow drives, but it improves the impact " "of the DVD layer change on faster drives." msgstr "" -#: src/input/input_dvd.c:1870 +#: src/input/input_dvd.c:1871 msgid "unit for the skip action" msgstr "Ekintza egingo ez den unitatea" -#: src/input/input_dvd.c:1871 +#: src/input/input_dvd.c:1872 msgid "" "You can configure the behaviour when issuing a skip command (using the skip " "buttons for example). The individual values mean:\n" @@ -3224,11 +3263,11 @@ msgid "" "features on the DVD" msgstr "" -#: src/input/input_dvd.c:1886 +#: src/input/input_dvd.c:1887 msgid "unit for seeking" msgstr "Bilatuko den untitatea" -#: src/input/input_dvd.c:1887 +#: src/input/input_dvd.c:1888 msgid "" "You can configure the domain spanned by the seek slider. The individual " "values mean:\n" @@ -3242,11 +3281,11 @@ msgid "" "chapter of the current feature" msgstr "" -#: src/input/input_dvd.c:1898 +#: src/input/input_dvd.c:1899 msgid "play mode when title/chapter is given" msgstr "" -#: src/input/input_dvd.c:1899 +#: src/input/input_dvd.c:1900 msgid "" "You can configure the behaviour when playing a dvd from a given title/" "chapter (eg. using MRL 'dvd:/1.2'). The individual values mean:\n" @@ -3417,31 +3456,31 @@ msgstr "" msgid "DVB (Digital TV) input plugin" msgstr "DVB (Telebista Digitala) sarrera plugina" -#: src/input/input_dvb.c:3238 +#: src/input/input_dvb.c:3237 msgid "Remember last DVB channel watched" msgstr "" -#: src/input/input_dvb.c:3239 +#: src/input/input_dvb.c:3238 msgid "" "On autoplay, xine will remember and switch to the channel indicated in media." "dvb.last_channel. " msgstr "" -#: src/input/input_dvb.c:3246 +#: src/input/input_dvb.c:3245 #, fuzzy msgid "Last DVB channel viewed" msgstr "bistaratu DVB kanal izena" -#: src/input/input_dvb.c:3247 +#: src/input/input_dvb.c:3246 msgid "If enabled xine will remember and switch to this channel. " msgstr "" -#: src/input/input_dvb.c:3253 +#: src/input/input_dvb.c:3252 #, fuzzy msgid "Number of dvb card to use." msgstr "audio buffer kopurua" -#: src/input/input_dvb.c:3254 +#: src/input/input_dvb.c:3253 msgid "" "Leave this at zero unless you really have more than 1 card in your system." msgstr "" @@ -3577,74 +3616,74 @@ msgstr "" "geldoarazteak ez du ezertan txikiagotzen erreprodukzio kalitatea.\n" "Zero balioa poliagotzea ezgaitzen da." -#: src/input/input_rtp.c:182 +#: src/input/input_rtp.c:185 #, c-format msgid "socket(): %s.\n" msgstr "Socketa: %s.\n" -#: src/input/input_rtp.c:192 +#: src/input/input_rtp.c:195 msgid "IP address specified is multicast\n" msgstr "ezarritako IP helbidea multidifusioa (multicast) da\n" -#: src/input/input_rtp.c:201 +#: src/input/input_rtp.c:204 #, c-format msgid "setsockopt(SO_RCVBUF): %s.\n" msgstr "" -#: src/input/input_rtp.c:209 +#: src/input/input_rtp.c:212 #, c-format msgid "setsockopt(SO_REUSEADDR): %s.\n" msgstr "" -#: src/input/input_rtp.c:216 +#: src/input/input_rtp.c:219 #, c-format msgid "bind(): %s.\n" msgstr "" -#: src/input/input_rtp.c:236 +#: src/input/input_rtp.c:239 #, c-format msgid "Can't find address for iface %s:%s\n" msgstr "Ezin da %s interfazearen helbidea aurkitu:%s\n" -#: src/input/input_rtp.c:254 +#: src/input/input_rtp.c:257 #, c-format msgid "setsockopt(IP_ADD_MEMBERSHIP) failed (multicast kernel?): %s.\n" msgstr "" -#: src/input/input_rtp.c:276 +#: src/input/input_rtp.c:279 #, c-format msgid "unable to resolve '%s'.\n" msgstr "ezin da '%s' ebatzi.\n" -#: src/input/input_rtp.c:286 +#: src/input/input_rtp.c:289 #, c-format msgid "unable to bind to '%s'.\n" msgstr "Ezin da '%s' lotu.\n" -#: src/input/input_rtp.c:314 +#: src/input/input_rtp.c:317 #, c-format msgid "recv(): %s.\n" msgstr "recv(): %s.\n" -#: src/input/input_rtp.c:602 +#: src/input/input_rtp.c:605 msgid "RTP: stopping reading thread...\n" msgstr "RTP: geratu irakurketa haria...\n" -#: src/input/input_rtp.c:605 +#: src/input/input_rtp.c:608 msgid "RTP: reading thread terminated\n" msgstr "RTP: hari irakurketa amaiturik\n" -#: src/input/input_rtp.c:620 +#: src/input/input_rtp.c:623 #, c-format msgid "Opening >filename:%s port:%d interface:%s<\n" msgstr "Opening >fitxategia:%s ataka:%d interfazea:%s<\n" -#: src/input/input_rtp.c:637 +#: src/input/input_rtp.c:640 #, c-format msgid "input_rtp: can't create new thread (%s)\n" msgstr "input_rtp: Ezin da hari berria sortu (%s)\n" -#: src/input/input_rtp.c:743 +#: src/input/input_rtp.c:746 msgid "RTP and UDP input plugin as shipped with xine" msgstr "RTP eta UDP sarrera plugina, xinerekin banatzen dena" @@ -3658,16 +3697,30 @@ msgstr "rtsp: okerreko mrl-a: %s\n" msgid "rtsp: failed to connect to '%s'\n" msgstr "rtsp: huts '%s'-ra konektatzerakoan\n" -#: src/input/librtsp/rtsp_session.c:84 +#: src/input/librtsp/rtsp_session.c:93 src/input/input_mms.c:479 +msgid "network bandwidth" +msgstr "sare zabalera" + +#: src/input/librtsp/rtsp_session.c:94 src/input/input_mms.c:480 +msgid "" +"Specify the bandwidth of your internet connection here. This will be used " +"when streaming servers offer different versions with different bandwidth " +"requirements of the same stream." +msgstr "" +"Ezarri zure internet konexioaren zabalera hemen. Hau korronte zerbitzariek " +"korronte berdinaren konexio zabalera behar duten korronte bertsio ezberdinak " +"eskeintzean erabiliko da." + +#: src/input/librtsp/rtsp_session.c:109 #, c-format msgid "rtsp_session: failed to connect to server %s\n" msgstr "rtsp_session: huts %s zerbitzarira konektatzerakoan\n" -#: src/input/librtsp/rtsp_session.c:118 +#: src/input/librtsp/rtsp_session.c:143 msgid "rtsp_session: session can not be established.\n" msgstr "rtsp_session: ezin da saioa sortu.\n" -#: src/input/librtsp/rtsp_session.c:135 +#: src/input/librtsp/rtsp_session.c:161 #, c-format msgid "rtsp_session: rtsp server type '%s' not supported yet. sorry.\n" msgstr "" @@ -3717,41 +3770,45 @@ msgstr "Video4Linux irrati gailuaren bidea." msgid "pnm streaming input plugin" msgstr "pnm korronte sarrera plugina" -#: src/input/mmsh.c:195 +#: src/input/mmsh.c:201 msgid "libmmsh: send error\n" msgstr "libmmsh: bidalketa errorea\n" -#: src/input/mmsh.c:240 +#: src/input/mmsh.c:246 +#, c-format msgid "libmmsh: bad response format\n" msgstr "libmmsh: okerreko erantzun formatua\n" -#: src/input/mmsh.c:246 +#: src/input/mmsh.c:252 #, c-format msgid "libmmsh: 3xx redirection not implemented: >%d %s<\n" msgstr "libmmsh: 3xx berbideraketa ez da onartzen: >%d %s<\n" -#: src/input/mmsh.c:253 +#: src/input/mmsh.c:259 #, c-format msgid "libmmsh: http status not 2xx: >%d %s<\n" msgstr "libmmsh: http egoera ez da 2xx: >%d %s<\n" -#: src/input/mmsh.c:261 +#: src/input/mmsh.c:267 +#, c-format msgid "libmmsh: Location redirection not implemented\n" msgstr "libmmsh: Kokaleku nbirbideratzea ez da onartzen\n" -#: src/input/mmsh.c:471 +#: src/input/mmsh.c:476 msgid "Connecting MMS server (over http)..." msgstr "MMS zerbitzarira konektatzen (http bidez)..." -#: src/input/mmsh.c:639 +#: src/input/mmsh.c:657 +#, c-format msgid "invalid url\n" msgstr "url baliogabea\n" -#: src/input/mmsh.c:644 +#: src/input/mmsh.c:662 +#, c-format msgid "unsupported protocol\n" msgstr "onartzen ez den protokoloa\n" -#: src/input/mms.c:537 +#: src/input/mms.c:561 msgid "Connecting MMS server (over tcp)..." msgstr "MMS zerbitzarira konektatzen (tcp bidez),,," @@ -3773,33 +3830,19 @@ msgstr "input_pnm: ezin da '%s' konektatu\n" msgid "input_pnm: failed to set up stream\n" msgstr "input_pnm: huts korrotea ezartzerakoan\n" -#: src/input/input_smb.c:154 +#: src/input/input_smb.c:158 msgid "CIFS/SMB input plugin based on libsmbclient" msgstr "" -#: src/input/input_mms.c:420 +#: src/input/input_mms.c:443 msgid "mms streaming input plugin" msgstr "mms korronte sarrera plugina" -#: src/input/input_mms.c:456 -msgid "network bandwidth" -msgstr "sare zabalera" - -#: src/input/input_mms.c:457 -msgid "" -"Specify the bandwidth of your internet connection here. This will be used " -"when streaming servers offer different versions with different bandwidth " -"requirements of the same stream." -msgstr "" -"Ezarri zure internet konexioaren zabalera hemen. Hau korronte zerbitzariek " -"korronte berdinaren konexio zabalera behar duten korronte bertsio ezberdinak " -"eskeintzean erabiliko da." - -#: src/input/input_mms.c:466 +#: src/input/input_mms.c:489 msgid "MMS protocol" msgstr "MMS protokoloa" -#: src/input/input_mms.c:467 +#: src/input/input_mms.c:490 msgid "" "Select the protocol to encapsulate MMS.\n" "TCP is better but you may need HTTP behind a firewall." @@ -3812,82 +3855,83 @@ msgstr "" msgid "input_http: gethostbyname(%s) failed: %s\n" msgstr "input_http: gethostbyname(%s)-ek huts egin du: %s\n" -#: src/input/input_http.c:403 src/input/input_http.c:949 +#: src/input/input_http.c:400 src/input/input_http.c:941 #, c-format msgid "input_http: read error %d\n" msgstr "input_http: irekurketa errorea %d\n" -#: src/input/input_http.c:630 +#: src/input/input_http.c:627 msgid "Connecting HTTP server..." msgstr "HTTP zerbitzarira konektatzen..." -#: src/input/input_http.c:824 +#: src/input/input_http.c:816 +#, c-format msgid "input_http: invalid http answer\n" msgstr "input_http: http erantzun baliogabea\n" -#: src/input/input_http.c:831 +#: src/input/input_http.c:823 #, c-format msgid "input_http: 3xx redirection: >%d %s<\n" msgstr "input_http: 3xx birbideratzea: >%d %s<\n" -#: src/input/input_http.c:836 src/input/input_http.c:842 -#: src/input/input_http.c:849 +#: src/input/input_http.c:828 src/input/input_http.c:834 +#: src/input/input_http.c:841 #, c-format msgid "input_http: http status not 2xx: >%d %s<\n" msgstr "input_http: http egoera ez da 2xx: >%d %s<\n" -#: src/input/input_http.c:859 +#: src/input/input_http.c:851 #, fuzzy, c-format msgid "input_http: content length = %<PRIdMAX> bytes\n" msgstr "input_http: eduki luzera = %Ld bite\n" -#: src/input/input_http.c:928 +#: src/input/input_http.c:920 #, fuzzy, c-format msgid "input_http: buffer exhausted after %d bytes." msgstr "input_http: irekurketa errorea %d\n" -#: src/input/input_http.c:1002 +#: src/input/input_http.c:994 msgid "http input plugin" msgstr "http sarrera plugina" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "HTTP proxy host" msgstr "HTTP proxy ostalaria" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "The hostname of the HTTP proxy." msgstr "HTTP proxy-aren ostalari izena." -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "HTTP proxy port" msgstr "HTTP proxy ataka" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "The port number of the HTTP proxy." msgstr "HTTP proxy-aren ataka zenbakia." -#: src/input/input_http.c:1082 +#: src/input/input_http.c:1074 msgid "HTTP proxy username" msgstr "HTTP proxy erabiltzailea" -#: src/input/input_http.c:1083 +#: src/input/input_http.c:1075 msgid "The user name for the HTTP proxy." msgstr "HTTP proxy-aren erabiltzaile izena" -#: src/input/input_http.c:1086 +#: src/input/input_http.c:1078 msgid "HTTP proxy password" msgstr "HTTP proxy pasahitza" -#: src/input/input_http.c:1087 +#: src/input/input_http.c:1079 msgid "The password for the HTTP proxy." msgstr "HRRP proxy-aren pasahitza." -#: src/input/input_http.c:1090 +#: src/input/input_http.c:1082 #, fuzzy msgid "Domains for which to ignore the HTTP proxy" msgstr "Domeinuak, non ez den HTTP proxy-a erabiliko" -#: src/input/input_http.c:1091 +#: src/input/input_http.c:1083 msgid "" "A comma-separated list of domain names for which the proxy is to be " "ignored.\n" @@ -3902,7 +3946,7 @@ msgstr "" "input_dvd: %s gailuak huts egin du ateratzen ari den bitartean " "irekitzerakoan\n" -#: src/input/input_rtsp.c:274 +#: src/input/input_rtsp.c:284 msgid "rtsp streaming input plugin" msgstr "rtsp korronte sarrera plugina" @@ -3912,30 +3956,35 @@ msgid "dvbsub: cannot create timer thread\n" msgstr "input_rtp: Ezin da hari berria sortu (%s)\n" #: src/libxinevdec/bitplane.c:1272 +#, c-format msgid "bitplane: error doing ByteRun1 decompression\n" msgstr "bitplane: errorea ByteRun1 dekonpresioa egiterakoan\n" #: src/libxinevdec/bitplane.c:1331 +#, c-format msgid "bitplane: Anim Opt 1 is not supported at the moment\n" msgstr "bitplane: Anim Opt 1 ez da onartzen momentuz\n" #: src/libxinevdec/bitplane.c:1338 +#, c-format msgid "bitplane: Anim Opt 2 is not supported at the moment\n" msgstr "bitplane: Anim Opt 2 ez da onartzen momentuz\n" #: src/libxinevdec/bitplane.c:1388 +#, c-format msgid "bitplane: Anim ASCIIJ is not supported at the moment\n" msgstr "bitplane: Anim ASCIIJ ez da onartzen momentuz\n" #: src/libxinevdec/bitplane.c:1394 +#, c-format msgid "bitplane: This anim-type is not supported at the moment\n" msgstr "bitplane: Animazio-mota ahu ez da onartzen momentu honetan\n" -#: src/libsputext/demux_sputext.c:1507 +#: src/libsputext/demux_sputext.c:1506 msgid "default duration of subtitle display in seconds" msgstr "azpititulu bistaratze denbora segundutan" -#: src/libsputext/demux_sputext.c:1508 +#: src/libsputext/demux_sputext.c:1507 msgid "" "Some subtitle formats do not explicitly give a duration for each subtitle. " "For these, you can set a default duration here. Setting to zero will result " @@ -3945,11 +3994,11 @@ msgstr "" "Hauentzat lehenetsitako iraupena ezarri dezakezu hemen. Zero bezala " "ezartzean azpititulu bakoizta hurrengo azpititulu arte bistaraziko da." -#: src/libsputext/xine_decoder.c:913 +#: src/libsputext/xine_decoder.c:948 msgid "subtitle size" msgstr "azpititulu tamaina" -#: src/libsputext/xine_decoder.c:914 +#: src/libsputext/xine_decoder.c:949 msgid "" "You can adjust the subtitle size here. The setting will be evaluated " "relative to the window size." @@ -3957,11 +4006,11 @@ msgstr "" "Azpititulu tamaina ezarri dezakezi hemen. Ezarpenak panatailaren tamainaren " "arabera ulertuko dira." -#: src/libsputext/xine_decoder.c:920 +#: src/libsputext/xine_decoder.c:955 msgid "subtitle vertical offset" msgstr "azpititulu mugimetu bertikala" -#: src/libsputext/xine_decoder.c:921 +#: src/libsputext/xine_decoder.c:956 msgid "" "You can adjust the vertical position of the subtitle. The setting will be " "evaluated relative to the window size." @@ -3969,21 +4018,32 @@ msgstr "" "Azpitituluen kokapen bertikala ezarri dezakezu hemen.Ezarpenak panatailaren " "tamainaren arabera ulertuko dira." -#: src/libsputext/xine_decoder.c:927 +#: src/libsputext/xine_decoder.c:962 src/libsputext/xine_decoder.c:971 msgid "font for subtitles" msgstr "Azpitituluen letra-tipoa" -#: src/libsputext/xine_decoder.c:928 +#: src/libsputext/xine_decoder.c:963 msgid "A font from the xine font directory to be used for the subtitle text." msgstr "" "Xine letra-tipo karpetako letra-tipo bat erabili daiteke azpititulu " "testuetarako." -#: src/libsputext/xine_decoder.c:935 +#: src/libsputext/xine_decoder.c:972 +#, fuzzy +msgid "An outline font file (e.g. a .ttf) to be used for the subtitle text." +msgstr "" +"Xine letra-tipo karpetako letra-tipo bat erabili daiteke azpititulu " +"testuetarako." + +#: src/libsputext/xine_decoder.c:978 +msgid "whether to use a freetype font" +msgstr "" + +#: src/libsputext/xine_decoder.c:985 msgid "encoding of the subtitles" msgstr "azpitituluen kodifikazioa" -#: src/libsputext/xine_decoder.c:936 +#: src/libsputext/xine_decoder.c:986 msgid "" "The encoding of the subtitle text in the stream. This setting is used to " "render non-ASCII characters correctly. If non-ASCII characters are not " @@ -3995,11 +4055,11 @@ msgstr "" "badira zuk espero bezala bistaratzen, galdetu azpititulu sortzaileari zein " "kodeketa erabiltzen duen." -#: src/libsputext/xine_decoder.c:944 +#: src/libsputext/xine_decoder.c:994 msgid "use unscaled OSD if possible" msgstr "erabili eskalagabeko OSD posible bada" -#: src/libsputext/xine_decoder.c:945 +#: src/libsputext/xine_decoder.c:995 msgid "" "The unscaled OSD will be rendered independently of the video frame and will " "always be sharp, even if the video is magnified. This will look better, but " @@ -4460,11 +4520,11 @@ msgstr "" msgid "libareal: oups, real can do more than 2 channels ?\n" msgstr "" -#: src/libreal/audio_decoder.c:745 src/libreal/xine_decoder.c:638 +#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 msgid "path to RealPlayer codecs" msgstr "RealPlayer kodeken bidea" -#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 +#: src/libreal/audio_decoder.c:747 src/libreal/xine_decoder.c:640 msgid "" "If you have RealPlayer installed, specify the path to its codec directory " "here. You can easily find the codec directory by looking for a file named " @@ -4829,6 +4889,7 @@ msgid "demux_avi: invalid avi chunk \"%c%c%c%c\" at pos %<PRIdMAX>\n" msgstr "demux_avi: \"%c%c%c%c\" baliogabeko avi zatia %lld kokalekuan\n" #: src/demuxers/demux_avi.c:828 +#, c-format msgid "demux_avi: avi index is broken\n" msgstr "demux_avi: avi indizea hautsirik dago\n" @@ -4842,23 +4903,25 @@ msgid "demux_mpc: frame too big for buffer" msgstr "" #: src/demuxers/demux_film.c:188 +#, c-format msgid "invalid FILM chunk size\n" msgstr "baliogabeko FILMA zati tamaina\n" #: src/demuxers/demux_film.c:342 +#, c-format msgid "unrecognized FILM chunk\n" msgstr "FILMA zati ezezaguna\n" -#: src/demuxers/demux_asf.c:423 +#: src/demuxers/demux_asf.c:425 #, c-format msgid "demux_asf: warning: The stream id=%d is encrypted.\n" msgstr "demux_asf: abisua: id=%d korrontea enkriptaturik dago.\n" -#: src/demuxers/demux_asf.c:425 +#: src/demuxers/demux_asf.c:427 msgid "Media stream scrambled/encrypted" msgstr "Medioa korrontea nahasi/enkriptaturik" -#: src/demuxers/demux_asf.c:1633 +#: src/demuxers/demux_asf.c:1634 #, c-format msgid "demux_asf: Wrong ASX version: %s\n" msgstr "demux_asf: Okerreko ASX bertsioa: %s\n" @@ -4893,7 +4956,8 @@ msgstr "" "VOC konpresio mota (0x%02X) ezezaguna; mesedez erreportea eman xine " "garatzaileei\n" -#: src/demuxers/demux_ogg.c:797 +#: src/demuxers/demux_ogg.c:801 +#, c-format msgid "ogg: vorbis audio track indicated but no vorbis stream header found.\n" msgstr "" "ogg: vorbis audio pista esan da baina ez da vorbis korronte bururik " @@ -4915,6 +4979,7 @@ msgstr "" "demux_mpeg_block: errorea! askatzen. Mesedez abisua eman xine garatzaileei.\n" #: src/demuxers/demux_mpeg_block.c:640 +#, c-format msgid "demux_mpeg_block: warning: PES header reserved 10 bits not found\n" msgstr "" "demux_mpeg_block: abisua: PES buarentzat gorderiko 10 bit ez dira aurkitu\n" @@ -4944,6 +5009,7 @@ msgstr "" "demux_mpeg_pes: kontuz: PACK korronte -aid=0x%x dekodifikatzerakoan huts.\n" #: src/demuxers/demux_mpeg_pes.c:771 +#, c-format msgid "demux_mpeg_pes: warning: PES header reserved 10 bits not found\n" msgstr "" "demux_mpeg_pes: abisua: PES buruarentzat gorderiko 10 bit ez dira aurkitu\n" @@ -4972,10 +5038,12 @@ msgid "demux_wc3movie: SHOT chunk referenced invalid palette (%d >= %d)\n" msgstr "" #: src/demuxers/demux_wc3movie.c:406 +#, c-format msgid "demux_wc3movie: There was a problem while loading palette chunks\n" msgstr "demux_wc3movie: Arazo bat dago paleta zatiak kargatzerakoan\n" #: src/demuxers/demux_snd.c:104 +#, c-format msgid "demux_snd: bad header parameters\n" msgstr "demux_snd: okerreko goiburu parametroa\n" @@ -5024,62 +5092,62 @@ msgid "The maximum compression to apply to an image in constant quality mode." msgstr "" "Kalitate iraunkorreko kalitate moduko ezarriko den gehinezko konpresioa." -#: src/libffmpeg/audio_decoder.c:117 +#: src/libffmpeg/audio_decoder.c:120 #, c-format msgid "ffmpeg_audio_dec: increasing buffer to %d to avoid overflow.\n" msgstr "ffmpeg_audio_dec: bufferra%d-ra handitzen askieza sahiesteko.\n" -#: src/libffmpeg/audio_decoder.c:161 +#: src/libffmpeg/audio_decoder.c:164 #, c-format msgid "ffmpeg_audio_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" -#: src/libffmpeg/audio_decoder.c:253 +#: src/libffmpeg/audio_decoder.c:256 #, fuzzy msgid "ffmpeg_audio_dec: trying to open null codec\n" msgstr "ffmpeg_audio_dec: ezin da deskodetzailea ireki\n" -#: src/libffmpeg/audio_decoder.c:262 +#: src/libffmpeg/audio_decoder.c:265 msgid "ffmpeg_audio_dec: couldn't open decoder\n" msgstr "ffmpeg_audio_dec: ezin da deskodetzailea ireki\n" -#: src/libffmpeg/dvaudio_decoder.c:302 +#: src/libffmpeg/dvaudio_decoder.c:286 #, c-format msgid "dvaudio: increasing buffer to %d to avoid overflow.\n" msgstr "dvaudio: bufeera %d -ra handitzen askieza sahiesteko.\n" -#: src/libffmpeg/video_decoder.c:153 +#: src/libffmpeg/video_decoder.c:156 msgid "ffmpeg_video_dec: unsupported frame format, DR1 disabled.\n" msgstr "ffmpeg_video_dec: marko formatu onartezina, DR1 ezgaiturik.\n" -#: src/libffmpeg/video_decoder.c:171 +#: src/libffmpeg/video_decoder.c:174 #, fuzzy msgid "ffmpeg_video_dec: unsupported frame dimensions, DR1 disabled.\n" msgstr "ffmpeg_video_dec: marko formatu onartezina, DR1 ezgaiturik.\n" -#: src/libffmpeg/video_decoder.c:319 +#: src/libffmpeg/video_decoder.c:334 #, c-format msgid "ffmpeg_video_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" -#: src/libffmpeg/video_decoder.c:348 +#: src/libffmpeg/video_decoder.c:363 msgid "ffmpeg_video_dec: couldn't open decoder\n" msgstr "ffmpeg_video_dec: ezin da deskodetzailea ireki\n" -#: src/libffmpeg/video_decoder.c:383 +#: src/libffmpeg/video_decoder.c:398 msgid "ffmpeg_video_dec: direct rendering enabled\n" msgstr "ffmpeg_video_dec: direct reenderizazioa gaiturik\n" -#: src/libffmpeg/video_decoder.c:802 +#: src/libffmpeg/video_decoder.c:817 #, c-format msgid "ffmpeg_video_dec: increasing buffer to %d to avoid overflow.\n" msgstr "ffmpeg_video_dec: bufferra %d -ra handitzen askieza saiesteko.\n" -#: src/libffmpeg/video_decoder.c:1474 +#: src/libffmpeg/video_decoder.c:1510 msgid "MPEG-4 postprocessing quality" msgstr "MPEG-4 postprozesatze kalitatea" -#: src/libffmpeg/video_decoder.c:1475 +#: src/libffmpeg/video_decoder.c:1511 msgid "" "You can adjust the amount of post processing applied to MPEG-4 video.\n" "Higher values result in better quality, but need more CPU. Lower values may " @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: xine-lib 0.9.13\n" "Report-Msgid-Bugs-To: xine-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2006-11-29 23:07+0100\n" +"POT-Creation-Date: 2007-01-26 18:31+0100\n" "PO-Revision-Date: 2002-06-07 15:08 +0200\n" "Last-Translator: Daniel Caujolle-Bert <segfault@club-internet.fr>\n" "Language-Team: French <fr@li.org>\n" @@ -92,6 +92,7 @@ msgid "w32codec: decoder failed to start. Is '%s' installed?\n" msgstr "" #: src/libw32dll/w32codec.c:1221 +#, c-format msgid "w32codec: (ACM_Decoder) Unappropriate audio format\n" msgstr "" @@ -101,10 +102,12 @@ msgid "w32codec: (ACM_Decoder) acmStreamOpen error %d\n" msgstr "" #: src/libw32dll/w32codec.c:1243 +#, c-format msgid "w32codec: Error initializing DirectShow Audio\n" msgstr "" #: src/libw32dll/w32codec.c:1261 +#, c-format msgid "w32codec: Error initializing DMO Audio\n" msgstr "" @@ -305,16 +308,16 @@ msgstr "plugin de sortie audio de xine utilisant esd" msgid "xine output plugin for Coreaudio/Mac OS X" msgstr "plugin de sortie audio de xine utilisant esd" -#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:919 +#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:920 #, c-format msgid "audio_sun_out: opening audio device %s failed: %s\n" msgstr "" -#: src/audio_out/audio_sun_out.c:894 +#: src/audio_out/audio_sun_out.c:895 msgid "Sun audio device name" msgstr "" -#: src/audio_out/audio_sun_out.c:895 +#: src/audio_out/audio_sun_out.c:896 msgid "" "Specifies the file name for the Sun audio device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -322,12 +325,12 @@ msgid "" "careful that the value you enter really is a proper Sun audio device." msgstr "" -#: src/audio_out/audio_sun_out.c:937 +#: src/audio_out/audio_sun_out.c:938 #, fuzzy, c-format msgid "audio_sun_out: audio ioctl on device %s failed: %s\n" msgstr "input_cda: open(%s) a échoué: %s.\n" -#: src/audio_out/audio_sun_out.c:988 +#: src/audio_out/audio_sun_out.c:989 msgid "xine audio output plugin using sun-compliant audio devices/drivers" msgstr "plugin de sortie audio de xine utilisant les pilotes/périphériques sun" @@ -416,10 +419,12 @@ msgid "unknown error" msgstr "" #: src/audio_out/audio_directx2_out.c:206 +#, c-format msgid "Unable to create direct sound object." msgstr "" #: src/audio_out/audio_directx2_out.c:212 +#, c-format msgid "Could not set direct sound cooperative level." msgstr "" @@ -428,6 +433,7 @@ msgid "Unable to create secondary direct sound buffer" msgstr "" #: src/audio_out/audio_directx2_out.c:310 +#, c-format msgid "Unable to create buffer position events." msgstr "" @@ -460,6 +466,7 @@ msgid "Can't set sound volume" msgstr "" #: src/audio_out/audio_directx2_out.c:432 +#, c-format msgid ": buffer lost, tryig to restore\n" msgstr "" @@ -472,11 +479,12 @@ msgid "Couldn't unlock direct sound buffer" msgstr "" #: src/audio_out/audio_directx2_out.c:544 -#, fuzzy +#, fuzzy, c-format msgid "Unable to create primary direct sound buffer." msgstr "incapable d'allouer le buffer d'entrée.\n" #: src/audio_out/audio_directx2_out.c:637 +#, c-format msgid ": play cursor overran, flushing buffers\n" msgstr "" @@ -541,6 +549,7 @@ msgid "xine audio output plugin for win32 using directx" msgstr "plugin de sortie audio de xine utilisant esd" #: src/audio_out/audio_alsa_out.c:355 +#, c-format msgid "audio_alsa_out:Already open...WHY!" msgstr "" @@ -641,6 +650,7 @@ msgid "snd_pcm_open() failed:%d:%s\n" msgstr "input_cda: open(%s) a échoué: %s.\n" #: src/audio_out/audio_alsa_out.c:1428 +#, c-format msgid ">>> Check if another program already uses PCM <<<\n" msgstr "" @@ -786,6 +796,7 @@ msgid "xine audio output plugin using pulseaudio sound server" msgstr "plugin de sortie audio de xine utilisant esd" #: src/xine-engine/io_helper.c:252 +#, c-format msgid "io_helper: waiting abandoned\n" msgstr "" @@ -799,14 +810,17 @@ msgid "failed to get status of socket" msgstr "" #: src/xine-engine/io_helper.c:388 +#, c-format msgid "io_helper: Permission denied\n" msgstr "" #: src/xine-engine/io_helper.c:392 +#, c-format msgid "io_helper: File not found\n" msgstr "" #: src/xine-engine/io_helper.c:396 +#, c-format msgid "io_helper: Connection Refused\n" msgstr "" @@ -849,124 +863,129 @@ msgid "" "accelerated, this can dramatically reduce CPU usage." msgstr "" -#: src/xine-engine/xine.c:696 src/xine-engine/xine.c:803 -#: src/xine-engine/xine.c:842 src/xine-engine/xine.c:878 -#: src/xine-engine/xine.c:890 src/xine-engine/xine.c:903 -#: src/xine-engine/xine.c:916 src/xine-engine/xine.c:929 -#: src/xine-engine/xine.c:955 src/xine-engine/xine.c:980 -#: src/xine-engine/xine.c:1015 +#: src/xine-engine/xine.c:704 src/xine-engine/xine.c:811 +#: src/xine-engine/xine.c:850 src/xine-engine/xine.c:886 +#: src/xine-engine/xine.c:898 src/xine-engine/xine.c:911 +#: src/xine-engine/xine.c:924 src/xine-engine/xine.c:937 +#: src/xine-engine/xine.c:963 src/xine-engine/xine.c:988 +#: src/xine-engine/xine.c:1023 msgid "xine: error while parsing mrl\n" msgstr "" -#: src/xine-engine/xine.c:732 +#: src/xine-engine/xine.c:740 #, fuzzy, c-format msgid "xine: found input plugin : %s\n" msgstr "plugin de sortie video de xine pour cartes dxr3" -#: src/xine-engine/xine.c:750 +#: src/xine-engine/xine.c:758 #, fuzzy, c-format msgid "xine: input plugin cannot open MRL [%s]\n" msgstr "input_dvd: ne peux pas ouvrir le fichier >%s<\n" -#: src/xine-engine/xine.c:766 +#: src/xine-engine/xine.c:774 #, fuzzy, c-format msgid "xine: cannot find input plugin for MRL [%s]\n" msgstr "plugin de sortie video de xine pour cartes dxr3" -#: src/xine-engine/xine.c:792 +#: src/xine-engine/xine.c:800 #, c-format msgid "xine: specified demuxer %s failed to start\n" msgstr "" -#: src/xine-engine/xine.c:828 +#: src/xine-engine/xine.c:836 +#, c-format msgid "xine: join rip input plugin\n" msgstr "" -#: src/xine-engine/xine.c:835 +#: src/xine-engine/xine.c:843 #, fuzzy msgid "xine: error opening rip input plugin instance\n" msgstr "input_dvd: erreur de lecture dans le plugin input_dvd\n" -#: src/xine-engine/xine.c:866 +#: src/xine-engine/xine.c:874 #, c-format msgid "xine: last_probed demuxer %s failed to start\n" msgstr "" -#: src/xine-engine/xine.c:895 +#: src/xine-engine/xine.c:903 msgid "ignoring video\n" msgstr "" -#: src/xine-engine/xine.c:908 +#: src/xine-engine/xine.c:916 msgid "ignoring audio\n" msgstr "" -#: src/xine-engine/xine.c:921 +#: src/xine-engine/xine.c:929 msgid "ignoring subpicture\n" msgstr "" -#: src/xine-engine/xine.c:934 +#: src/xine-engine/xine.c:942 msgid "input cache plugin disabled\n" msgstr "" -#: src/xine-engine/xine.c:1005 +#: src/xine-engine/xine.c:1013 #, c-format msgid "subtitle mrl opened '%s'\n" msgstr "" -#: src/xine-engine/xine.c:1009 +#: src/xine-engine/xine.c:1017 #, fuzzy msgid "xine: error opening subtitle mrl\n" msgstr "input_dvd: ne peux pas ouvrir le fichier >%s<\n" -#: src/xine-engine/xine.c:1041 +#: src/xine-engine/xine.c:1049 +#, c-format msgid "xine: error while parsing MRL\n" msgstr "" -#: src/xine-engine/xine.c:1048 +#: src/xine-engine/xine.c:1056 #, c-format msgid "xine: changing option '%s' from MRL isn't permitted\n" msgstr "" -#: src/xine-engine/xine.c:1068 +#: src/xine-engine/xine.c:1076 #, c-format msgid "xine: couldn't find demux for >%s<\n" msgstr "" -#: src/xine-engine/xine.c:1084 +#: src/xine-engine/xine.c:1092 #, c-format msgid "xine: found demuxer plugin: %s\n" msgstr "" -#: src/xine-engine/xine.c:1104 +#: src/xine-engine/xine.c:1112 +#, c-format msgid "xine: demuxer failed to start\n" msgstr "" -#: src/xine-engine/xine.c:1167 +#: src/xine-engine/xine.c:1177 +#, c-format msgid "xine_play: no demux available\n" msgstr "" -#: src/xine-engine/xine.c:1237 +#: src/xine-engine/xine.c:1247 +#, c-format msgid "xine_play: demux failed to start\n" msgstr "" -#: src/xine-engine/xine.c:1508 +#: src/xine-engine/xine.c:1523 #, c-format msgid "xine: The specified save_dir \"%s\" might be a security risk.\n" msgstr "" -#: src/xine-engine/xine.c:1513 +#: src/xine-engine/xine.c:1528 msgid "The specified save_dir might be a security risk." msgstr "" -#: src/xine-engine/xine.c:1539 +#: src/xine-engine/xine.c:1554 msgid "xine: locale not supported by C library\n" msgstr "" -#: src/xine-engine/xine.c:1548 +#: src/xine-engine/xine.c:1563 msgid "media format detection strategy" msgstr "" -#: src/xine-engine/xine.c:1549 +#: src/xine-engine/xine.c:1564 msgid "" "xine offers various methods to detect the media format of input to play. The " "individual values are:\n" @@ -984,11 +1003,11 @@ msgid "" "Detect by file name extension only.\n" msgstr "" -#: src/xine-engine/xine.c:1567 +#: src/xine-engine/xine.c:1582 msgid "directory for saving streams" msgstr "" -#: src/xine-engine/xine.c:1568 +#: src/xine-engine/xine.c:1583 msgid "" "When using the stream save feature, files will be written only into this " "directory.\n" @@ -998,11 +1017,11 @@ msgid "" "content in any file." msgstr "" -#: src/xine-engine/xine.c:1579 +#: src/xine-engine/xine.c:1594 msgid "allow implicit changes to the configuration (e.g. by MRL)" msgstr "" -#: src/xine-engine/xine.c:1580 +#: src/xine-engine/xine.c:1595 msgid "" "If enabled, you allow xine to change your configuration without explicit " "actions from your side. For example configuration changes demanded by MRLs " @@ -1012,26 +1031,26 @@ msgid "" "configuration, you might end with a totally messed up xine." msgstr "" -#: src/xine-engine/xine.c:1594 +#: src/xine-engine/xine.c:1609 msgid "Timeout for network stream reading (in seconds)" msgstr "" -#: src/xine-engine/xine.c:1595 +#: src/xine-engine/xine.c:1610 msgid "" "Specifies the timeout when reading from network streams, in seconds. Too low " "values might stop streaming when the source is slow or the bandwidth is " "occupied, too high values will freeze the player if the connection is lost." msgstr "" -#: src/xine-engine/xine.c:1946 +#: src/xine-engine/xine.c:1962 msgid "messages" msgstr "messages" -#: src/xine-engine/xine.c:1947 +#: src/xine-engine/xine.c:1963 msgid "plugin" msgstr "" -#: src/xine-engine/xine.c:1948 +#: src/xine-engine/xine.c:1964 msgid "trace" msgstr "" @@ -1041,22 +1060,23 @@ msgid "input_rip: reading of saved data failed: %s\n" msgstr "input_cda: l'ouverture du serveur '%s:%d' a échouée: %s\n" #: src/xine-engine/input_rip.c:154 -#, fuzzy +#, fuzzy, c-format msgid "input_rip: reading by input plugin failed\n" msgstr "input_dvd: erreur de lecture dans le plugin input_dvd\n" #: src/xine-engine/input_rip.c:162 src/xine-engine/input_rip.c:291 -#: src/xine-engine/input_rip.c:643 +#: src/xine-engine/input_rip.c:657 #, fuzzy, c-format msgid "input_rip: error writing to file %<PRIdMAX> bytes: %s\n" msgstr "input_dvd: ne peux pas ouvrir le fichier >%s<\n" #: src/xine-engine/input_rip.c:183 +#, c-format msgid "input_rip: open() function should never be called\n" msgstr "" #: src/xine-engine/input_rip.c:314 src/xine-engine/input_rip.c:419 -#, fuzzy +#, fuzzy, c-format msgid "input_rip: seeking failed\n" msgstr "input_cda: fopen(%s) à échoué: %s\n" @@ -1070,37 +1090,41 @@ msgstr "input_cda: fopen(%s) à échoué: %s\n" msgid "input_rip: %<PRIdMAX> bytes dropped\n" msgstr "" -#: src/xine-engine/input_rip.c:548 +#: src/xine-engine/input_rip.c:562 +#, c-format msgid "input_rip: input plugin not defined!\n" msgstr "" -#: src/xine-engine/input_rip.c:554 +#: src/xine-engine/input_rip.c:568 +#, c-format msgid "" "input_rip: target directory wasn't specified, please fill out the option " "'media.capture.save_dir'\n" msgstr "" -#: src/xine-engine/input_rip.c:556 +#: src/xine-engine/input_rip.c:570 msgid "" "The stream save feature is disabled until you set media.capture.save_dir in " "the configuration." msgstr "" -#: src/xine-engine/input_rip.c:563 +#: src/xine-engine/input_rip.c:577 +#, c-format msgid "input_rip: ripping/caching of this source is not permitted!\n" msgstr "" -#: src/xine-engine/input_rip.c:565 +#: src/xine-engine/input_rip.c:579 msgid "" "xine is not allowed to save from this source. (possibly copyrighted " "material?)" msgstr "" -#: src/xine-engine/input_rip.c:571 +#: src/xine-engine/input_rip.c:585 +#, c-format msgid "input_rip: file name not given!\n" msgstr "" -#: src/xine-engine/input_rip.c:613 +#: src/xine-engine/input_rip.c:627 #, fuzzy, c-format msgid "input_rip: error opening file %s: %s\n" msgstr "input_dvd: ne peux pas ouvrir le fichier >%s<\n" @@ -1140,134 +1164,136 @@ msgid "" msgstr "" #: src/xine-engine/input_cache.c:167 +#, c-format msgid ": open() function should never be called\n" msgstr "" #: src/xine-engine/input_cache.c:349 -#, fuzzy +#, fuzzy, c-format msgid ": input plugin not defined!\n" msgstr "input_dvd: ne peux pas ouvrir le fichier >%s<\n" -#: src/xine-engine/osd.c:739 +#: src/xine-engine/osd.c:745 #, c-format msgid "font '%s-%d' already loaded, weird.\n" msgstr "" -#: src/xine-engine/osd.c:751 +#: src/xine-engine/osd.c:757 #, c-format msgid "font '%s' loading failed (%d < %d)\n" msgstr "" -#: src/xine-engine/osd.c:761 +#: src/xine-engine/osd.c:767 #, c-format msgid "wrong version for font '%s'. expected %d found %d.\n" msgstr "" -#: src/xine-engine/osd.c:828 +#: src/xine-engine/osd.c:834 msgid "osd: cannot initialize ft2 library\n" msgstr "" -#: src/xine-engine/osd.c:851 +#: src/xine-engine/osd.c:857 #, c-format msgid "osd: error matching font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:865 +#: src/xine-engine/osd.c:871 #, c-format msgid "osd: error loading font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:868 +#: src/xine-engine/osd.c:874 #, c-format msgid "osd: error looking up font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:889 +#: src/xine-engine/osd.c:895 #, c-format msgid "osd: error loading font %s with ft2\n" msgstr "" -#: src/xine-engine/osd.c:899 +#: src/xine-engine/osd.c:905 msgid "osd: error setting font size (no scalable font?)\n" msgstr "" -#: src/xine-engine/osd.c:1015 +#: src/xine-engine/osd.c:1021 #, c-format msgid "" "osd: unknown sequence starting with byte 0x%02X in encoding \"%s\", " "skipping\n" msgstr "" -#: src/xine-engine/osd.c:1071 +#: src/xine-engine/osd.c:1077 msgid "osd: can't find out current locale character set\n" msgstr "" -#: src/xine-engine/osd.c:1081 +#: src/xine-engine/osd.c:1087 #, c-format msgid "osd: unsupported conversion %s -> %s, no conversion performed\n" msgstr "" -#: src/xine-engine/osd.c:1136 src/xine-engine/osd.c:1304 +#: src/xine-engine/osd.c:1142 src/xine-engine/osd.c:1310 msgid "osd: font isn't defined\n" msgstr "" -#: src/xine-engine/osd.c:1175 +#: src/xine-engine/osd.c:1181 msgid "osd: error loading glyph\n" msgstr "" -#: src/xine-engine/osd.c:1181 +#: src/xine-engine/osd.c:1187 msgid "osd: error in rendering glyph\n" msgstr "" -#: src/xine-engine/osd.c:1341 +#: src/xine-engine/osd.c:1347 #, c-format msgid "osd: error loading glyph %i\n" msgstr "" -#: src/xine-engine/osd.c:1348 +#: src/xine-engine/osd.c:1354 msgid "osd: error in rendering\n" msgstr "" -#: src/xine-engine/osd.c:1596 +#: src/xine-engine/osd.c:1602 msgid "palette (foreground-border-background) to use for subtitles and OSD" msgstr "" -#: src/xine-engine/osd.c:1597 +#: src/xine-engine/osd.c:1603 msgid "" "The palette for on-screen-display and some subtitle formats that do not " "specify any colouring themselves. The palettes are listed in the form: " "foreground-border-background." msgstr "" -#: src/xine-engine/configfile.c:896 +#: src/xine-engine/configfile.c:924 +#, c-format msgid "The current config file has been modified by a newer version of xine." msgstr "" -#: src/xine-engine/configfile.c:1001 +#: src/xine-engine/configfile.c:1029 #, c-format msgid "configfile: WARNING: backing up configfile to %s failed\n" msgstr "" -#: src/xine-engine/configfile.c:1002 +#: src/xine-engine/configfile.c:1030 msgid "configfile: WARNING: your configuration will not be saved\n" msgstr "" -#: src/xine-engine/configfile.c:1101 +#: src/xine-engine/configfile.c:1129 #, c-format msgid "configfile: WARNING: writing configuration to %s failed\n" msgstr "" -#: src/xine-engine/configfile.c:1102 +#: src/xine-engine/configfile.c:1130 #, c-format msgid "configfile: WARNING: removing possibly broken config file %s\n" msgstr "" -#: src/xine-engine/configfile.c:1103 +#: src/xine-engine/configfile.c:1131 #, c-format msgid "configfile: WARNING: you should check the backup file %s\n" msgstr "" -#: src/xine-engine/configfile.c:1237 +#: src/xine-engine/configfile.c:1266 #, c-format msgid "configfile: entry '%s' mustn't be modified from MRL\n" msgstr "" @@ -1284,45 +1310,55 @@ msgid "" "(diff : %<PRId64>).\n" msgstr "" -#: src/xine-engine/video_out.c:1818 +#: src/xine-engine/video_out.c:1790 +msgid "default number of video frames" +msgstr "" + +#: src/xine-engine/video_out.c:1791 +msgid "" +"The default number of video frames to request from xine video out driver. " +"Some drivers will override this setting with their own values." +msgstr "" + +#: src/xine-engine/video_out.c:1830 msgid "percentage of skipped frames to tolerate" msgstr "" -#: src/xine-engine/video_out.c:1819 +#: src/xine-engine/video_out.c:1831 msgid "" "When more than this percentage of frames are not shown, because they were " "not decoded in time, xine sends a notification." msgstr "" -#: src/xine-engine/video_out.c:1824 +#: src/xine-engine/video_out.c:1836 msgid "percentage of discarded frames to tolerate" msgstr "" -#: src/xine-engine/video_out.c:1825 +#: src/xine-engine/video_out.c:1837 msgid "" "When more than this percentage of frames are not shown, because they were " "not scheduled for display in time, xine sends a notification." msgstr "" -#: src/xine-engine/video_out.c:1859 +#: src/xine-engine/video_out.c:1871 msgid "video_out: sorry, this should not happen. please restart xine.\n" msgstr "" -#: src/xine-engine/video_decoder.c:374 +#: src/xine-engine/video_decoder.c:380 #, c-format msgid "video_decoder: no plugin available to handle '%s'\n" msgstr "" -#: src/xine-engine/video_decoder.c:453 +#: src/xine-engine/video_decoder.c:459 #, c-format msgid "video_decoder: error, unknown buffer type: %08x\n" msgstr "" -#: src/xine-engine/video_decoder.c:489 +#: src/xine-engine/video_decoder.c:495 msgid "number of video buffers" msgstr "" -#: src/xine-engine/video_decoder.c:490 +#: src/xine-engine/video_decoder.c:496 msgid "" "The number of video buffers (each is 8k in size) xine uses in its internal " "queue. Higher values mean smoother playback for unreliable inputs, but also " @@ -1339,89 +1375,89 @@ msgid "" "info_helper: unsupported conversion %s -> UTF-8, no conversion performed\n" msgstr "" -#: src/xine-engine/xine_interface.c:918 +#: src/xine-engine/xine_interface.c:934 msgid "Warning:" msgstr "" -#: src/xine-engine/xine_interface.c:919 +#: src/xine-engine/xine_interface.c:935 msgid "Unknown host:" msgstr "" -#: src/xine-engine/xine_interface.c:920 +#: src/xine-engine/xine_interface.c:936 msgid "Unknown device:" msgstr "" -#: src/xine-engine/xine_interface.c:921 +#: src/xine-engine/xine_interface.c:937 msgid "Network unreachable" msgstr "" -#: src/xine-engine/xine_interface.c:922 +#: src/xine-engine/xine_interface.c:938 msgid "Connection refused:" msgstr "" -#: src/xine-engine/xine_interface.c:923 +#: src/xine-engine/xine_interface.c:939 #, fuzzy msgid "File not found:" msgstr "input_file: erreur de lecture (%s)\n" -#: src/xine-engine/xine_interface.c:924 +#: src/xine-engine/xine_interface.c:940 msgid "Read error from:" msgstr "" -#: src/xine-engine/xine_interface.c:925 +#: src/xine-engine/xine_interface.c:941 msgid "Error loading library:" msgstr "" -#: src/xine-engine/xine_interface.c:926 +#: src/xine-engine/xine_interface.c:942 #, fuzzy msgid "Encrypted media stream detected" msgstr "" "ogg: flux audio vorbis detecté\n" "\n" -#: src/xine-engine/xine_interface.c:927 +#: src/xine-engine/xine_interface.c:943 msgid "Security message:" msgstr "" -#: src/xine-engine/xine_interface.c:928 +#: src/xine-engine/xine_interface.c:944 #, fuzzy msgid "Audio device unavailable" msgstr "fifo non disponible (%d)\n" -#: src/xine-engine/xine_interface.c:929 +#: src/xine-engine/xine_interface.c:945 msgid "Permission error" msgstr "" -#: src/xine-engine/xine_interface.c:930 +#: src/xine-engine/xine_interface.c:946 msgid "File is empty:" msgstr "" -#: src/xine-engine/audio_out.c:1074 +#: src/xine-engine/audio_out.c:1072 msgid "" "audio_out: delay calculation impossible with an unavailable audio device\n" msgstr "" -#: src/xine-engine/audio_out.c:1216 +#: src/xine-engine/audio_out.c:1214 msgid "write to sound card failed. Was a USB device unplugged ?\n" msgstr "" -#: src/xine-engine/audio_out.c:1369 +#: src/xine-engine/audio_out.c:1367 msgid "8 bits not supported by driver, converting to 16 bits.\n" msgstr "" -#: src/xine-engine/audio_out.c:1377 +#: src/xine-engine/audio_out.c:1375 msgid "mono not supported by driver, converting to stereo.\n" msgstr "" -#: src/xine-engine/audio_out.c:1383 +#: src/xine-engine/audio_out.c:1381 msgid "stereo not supported by driver, converting to mono.\n" msgstr "" -#: src/xine-engine/audio_out.c:2028 +#: src/xine-engine/audio_out.c:2033 msgid "method to sync audio and video" msgstr "" -#: src/xine-engine/audio_out.c:2029 +#: src/xine-engine/audio_out.c:2034 msgid "" "When playing audio and video, there are at least two clocks involved: The " "system clock, to which video frames are synchronized and the clock in your " @@ -1444,11 +1480,11 @@ msgid "" "form." msgstr "" -#: src/xine-engine/audio_out.c:2057 +#: src/xine-engine/audio_out.c:2062 msgid "enable resampling" msgstr "" -#: src/xine-engine/audio_out.c:2058 +#: src/xine-engine/audio_out.c:2063 msgid "" "When the sample rate of the decoded audio does not match the capabilities of " "your sound hardware, an adaptation called \"resampling\" is required. Here " @@ -1456,33 +1492,33 @@ msgid "" "automatically when necessary." msgstr "" -#: src/xine-engine/audio_out.c:2065 +#: src/xine-engine/audio_out.c:2070 msgid "always resample to this rate (0 to disable)" msgstr "" -#: src/xine-engine/audio_out.c:2066 +#: src/xine-engine/audio_out.c:2071 msgid "" "Some audio drivers do not correctly announce the capabilities of the audio " "hardware. By setting a value other than zero here, you can force the audio " "stream to be resampled to the given rate." msgstr "" -#: src/xine-engine/audio_out.c:2075 +#: src/xine-engine/audio_out.c:2080 msgid "offset for digital passthrough" msgstr "" -#: src/xine-engine/audio_out.c:2076 +#: src/xine-engine/audio_out.c:2081 msgid "" "If you use an external surround decoder and audio is ahead or behind video, " "you can enter a fixed offset here to compensate.\n" "The unit of the value is one PTS tick, which is the 90000th part of a second." msgstr "" -#: src/xine-engine/audio_out.c:2085 +#: src/xine-engine/audio_out.c:2090 msgid "play audio even on slow/fast speeds" msgstr "" -#: src/xine-engine/audio_out.c:2086 +#: src/xine-engine/audio_out.c:2091 msgid "" "If you enable this option, the audio will be heard even when playback speed " "is different than 1X. Of course, it will sound distorted (lower/higher " @@ -1490,27 +1526,28 @@ msgid "" "audio post plugin instead." msgstr "" -#: src/xine-engine/audio_out.c:2157 +#: src/xine-engine/audio_out.c:2162 msgid "startup audio volume" msgstr "" -#: src/xine-engine/audio_out.c:2158 +#: src/xine-engine/audio_out.c:2163 msgid "The overall audio volume set at xine startup." msgstr "" -#: src/xine-engine/audio_out.c:2161 +#: src/xine-engine/audio_out.c:2166 msgid "restore volume level at startup" msgstr "" -#: src/xine-engine/audio_out.c:2162 +#: src/xine-engine/audio_out.c:2167 msgid "If disabled, xine will not modify any mixer settings at startup." msgstr "" -#: src/xine-engine/audio_out.c:2192 +#: src/xine-engine/audio_out.c:2197 msgid "audio_out: sorry, this should not happen. please restart xine.\n" msgstr "" #: src/xine-engine/load_plugins.c:212 +#, c-format msgid "map_decoder_list: no space for decoder, skipped.\n" msgstr "" @@ -1552,7 +1589,7 @@ msgid "load_plugins: plugin %s found\n" msgstr "" #: src/xine-engine/load_plugins.c:499 -#, fuzzy +#, fuzzy, c-format msgid "load_plugins: static plugin found\n" msgstr "input_net: impossible de se connecter à '%s'.\n" @@ -1562,6 +1599,7 @@ msgid "load_plugins: plugin limit reached, %s could not be loaded\n" msgstr "" #: src/xine-engine/load_plugins.c:509 +#, c-format msgid "load_plugins: plugin limit reached, static plugin could not be loaded\n" msgstr "" @@ -1710,11 +1748,11 @@ msgid "" "xine video output plugin using the SyncFB module for Matrox G200/G400 cards" msgstr "" -#: src/video_out/video_out_syncfb.c:1077 +#: src/video_out/video_out_syncfb.c:1078 msgid "SyncFB device name" msgstr "" -#: src/video_out/video_out_syncfb.c:1078 +#: src/video_out/video_out_syncfb.c:1079 msgid "" "Specifies the file name for the SyncFB (TeleTux) device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -1728,47 +1766,47 @@ msgid "xine video output plugin using the Libstk Surface Set-top Toolkit" msgstr "plugin de sortie video de xine utilisant la librairie ascii-art" #: src/video_out/video_out_xvmc.c:1446 src/video_out/video_out_pgx64.c:1464 -#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1436 +#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1437 msgid "video overlay colour key" msgstr "" #: src/video_out/video_out_xvmc.c:1447 src/video_out/video_out_xxmc.c:2431 #: src/video_out/video_out_vidix.c:1159 src/video_out/video_out_vidix.c:1166 -#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1437 +#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1438 msgid "" "The colour key is used to tell the graphics card where to overlay the video " "image. Try different values, if you experience windows becoming transparent." msgstr "" #: src/video_out/video_out_xvmc.c:1455 src/video_out/video_out_xxmc.c:2439 -#: src/video_out/video_out_xv.c:1445 +#: src/video_out/video_out_xv.c:1446 msgid "autopaint colour key" msgstr "" #: src/video_out/video_out_xvmc.c:1456 src/video_out/video_out_xxmc.c:2440 -#: src/video_out/video_out_xv.c:1446 +#: src/video_out/video_out_xv.c:1447 msgid "Make Xv autopaint its colorkey." msgstr "" #: src/video_out/video_out_xvmc.c:1461 src/video_out/video_out_xxmc.c:2463 -#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1469 +#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1470 #: src/video_out/video_out_opengl.c:1918 msgid "enable double buffering" msgstr "" #: src/video_out/video_out_xvmc.c:1462 src/video_out/video_out_xxmc.c:2464 -#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1470 +#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1471 msgid "" "Double buffering will synchronize the update of the video image to the " "repainting of the entire screen (\"vertical retrace\"). This eliminates " "flickering and tearing artifacts, but will use more graphics memory." msgstr "" -#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1537 +#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1538 msgid "deinterlace method (deprecated)" msgstr "" -#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1538 +#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1539 msgid "" "This config setting is deprecated. You should use the new deinterlacing post " "processing settings instead.\n" @@ -1966,11 +2004,11 @@ msgid "" "conversion and scaling.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1453 +#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1454 msgid "bilinear scaling mode" msgstr "" -#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1454 +#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1455 msgid "" "Selects the bilinear scaling mode for Permedia cards. The individual values " "are:\n" @@ -1993,11 +2031,11 @@ msgstr "" msgid "video_out_xxmc: this adaptor supports the yuy2 format.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1530 +#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1531 msgid "pitch alignment workaround" msgstr "" -#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1531 +#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1532 msgid "Some buggy video drivers need a workaround to function properly." msgstr "" @@ -2043,7 +2081,7 @@ msgid "" "Alternate between top and bottom field at double the frame rate.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1611 +#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1612 msgid "xine video output plugin using the MIT X video extension" msgstr "plugin de sortie video de xine utilisant l'extension video MIT X" @@ -2186,29 +2224,29 @@ msgid "" "video_out_xv: => not using MIT Shared Memory extension.\n" msgstr "" -#: src/video_out/video_out_xv.c:1282 +#: src/video_out/video_out_xv.c:1283 msgid "video_out_xv: Xv extension not present.\n" msgstr "" -#: src/video_out/video_out_xv.c:1319 +#: src/video_out/video_out_xv.c:1320 msgid "" "video_out_xv: Xv extension is present but I couldn't find a usable yuv12 " "port.\n" " Looks like your graphics hardware driver doesn't support Xv?!\n" msgstr "" -#: src/video_out/video_out_xv.c:1328 +#: src/video_out/video_out_xv.c:1329 #, c-format msgid "" "video_out_xv: using Xv port %ld from adaptor %s for hardware colorspace " "conversion and scaling.\n" msgstr "" -#: src/video_out/video_out_xv.c:1503 +#: src/video_out/video_out_xv.c:1504 msgid "video_out_xv: this adaptor supports the yv12 format.\n" msgstr "" -#: src/video_out/video_out_xv.c:1508 +#: src/video_out/video_out_xv.c:1509 msgid "video_out_xv: this adaptor supports the yuy2 format.\n" msgstr "" @@ -2439,71 +2477,71 @@ msgid "" "\"=disabled)." msgstr "" -#: src/video_out/video_out_directfb.c:1509 +#: src/video_out/video_out_directfb.c:1516 msgid "video_out_directfb: using hardware subpicture acceleration.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1523 +#: src/video_out/video_out_directfb.c:1530 msgid "video_out_directfb: layer supports video output.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1532 +#: src/video_out/video_out_directfb.c:1539 msgid "video_out_directfb: layer doesn't support YV12!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1539 +#: src/video_out/video_out_directfb.c:1546 msgid "video_out_directfb: layer doesn't support YUY2!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1550 +#: src/video_out/video_out_directfb.c:1557 msgid "" "video_out_directfb:need at least DirectFB 0.9.25 to play on this layer!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1585 +#: src/video_out/video_out_directfb.c:1592 #, c-format msgid "video_out_directfb: layer doesn't support buffermode %d!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1591 +#: src/video_out/video_out_directfb.c:1598 #, c-format msgid "video_out_directfb: layer doesn't support options 0x%08x!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1685 +#: src/video_out/video_out_directfb.c:1692 msgid "video_out_directfb: using hardware accelerated image scaling.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1697 +#: src/video_out/video_out_directfb.c:1704 msgid "" "video_out_directfb: image scaling with deinterlacing is hardware " "accelerated.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1775 +#: src/video_out/video_out_directfb.c:1782 msgid "video layer id (auto: -1)" msgstr "" -#: src/video_out/video_out_directfb.c:1776 +#: src/video_out/video_out_directfb.c:1783 msgid "Select the video output layer by its id." msgstr "" -#: src/video_out/video_out_directfb.c:1797 -#: src/video_out/video_out_directfb.c:2006 +#: src/video_out/video_out_directfb.c:1804 +#: src/video_out/video_out_directfb.c:2013 #, c-format msgid "video_out_directfb: using display layer #%d.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1881 +#: src/video_out/video_out_directfb.c:1888 #, fuzzy msgid "xine video output plugin using DirectFB." msgstr "plugin de sortie audio de xine utilisant libvidix" -#: src/video_out/video_out_directfb.c:1999 +#: src/video_out/video_out_directfb.c:2006 msgid "video_out_directfb: no usable display layer was found!\n" msgstr "" -#: src/video_out/video_out_directfb.c:2088 +#: src/video_out/video_out_directfb.c:2095 #, fuzzy msgid "xine video output plugin using DirectFB under XDirectFB." msgstr "plugin de sortie audio de xine utilisant libvidix" @@ -2522,20 +2560,20 @@ msgstr "input_dvd: impossible d'ouvrir le périphérique dvd (%s): %s\n" msgid "video_out_pgx32: Error: '%s' is not a pgx32 framebuffer device\n" msgstr "" -#: src/libmusepack/xine_decoder.c:237 +#: src/libmusepack/xine_decoder.c:241 #, c-format msgid "libmusepack: mpc_streaminfo_read failed: %d\n" msgstr "" -#: src/libmusepack/xine_decoder.c:311 +#: src/libmusepack/xine_decoder.c:315 msgid "libmusepack: data after last frame ignored\n" msgstr "" -#: src/libmusepack/xine_decoder.c:322 +#: src/libmusepack/xine_decoder.c:326 msgid "libmusepack: mpc_decoder_initialise failed\n" msgstr "" -#: src/libmusepack/xine_decoder.c:342 src/libmusepack/xine_decoder.c:357 +#: src/libmusepack/xine_decoder.c:346 src/libmusepack/xine_decoder.c:361 #, c-format msgid "libmusepack: mpc_decoder_decode failed: %d\n" msgstr "" @@ -2603,15 +2641,15 @@ msgstr "" msgid "encoding of subtitles" msgstr "" -#: src/input/vcd/vcdio.c:211 +#: src/input/vcd/vcdio.c:223 msgid "SEEK_CUR not implemented for non-zero offset" msgstr "" -#: src/input/vcd/vcdio.c:239 +#: src/input/vcd/vcdio.c:251 msgid "SEEK_END not implemented yet." msgstr "" -#: src/input/vcd/vcdio.c:242 +#: src/input/vcd/vcdio.c:254 msgid "seek not implemented yet for" msgstr "" @@ -2619,106 +2657,106 @@ msgstr "" msgid "failed to find a device with a VCD" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:327 +#: src/input/vcd/xineplug_inp_vcd.c:328 msgid "was passed a null class parameter" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:967 +#: src/input/vcd/xineplug_inp_vcd.c:972 msgid "Invalid current entry type" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:991 +#: src/input/vcd/xineplug_inp_vcd.c:996 msgid "" "Video CD plugin with PBC and support for: (X)VCD, (X)SVCD, HQVCD, CVD ... " msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1092 +#: src/input/vcd/xineplug_inp_vcd.c:1097 msgid "selection has no RETURN entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1121 +#: src/input/vcd/xineplug_inp_vcd.c:1126 msgid "DEFAULT selected, but PBC is not on." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1126 +#: src/input/vcd/xineplug_inp_vcd.c:1131 msgid "selection has no NEXT entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1134 +#: src/input/vcd/xineplug_inp_vcd.c:1139 msgid "selection has no PREVIOUS entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1141 +#: src/input/vcd/xineplug_inp_vcd.c:1146 msgid "Unknown event type: " msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1441 src/input/vcd/xineplug_inp_vcd.c:1488 +#: src/input/vcd/xineplug_inp_vcd.c:1446 src/input/vcd/xineplug_inp_vcd.c:1493 msgid "The above message had unknown vcdimager log level" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1819 +#: src/input/vcd/xineplug_inp_vcd.c:1824 msgid "VCD default type to use on autoplay" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1820 +#: src/input/vcd/xineplug_inp_vcd.c:1825 msgid "" "The VCD play unit to use when none is specified in an MRL, e.g. vcd:// or " "vcd:///dev/dvd:" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1830 +#: src/input/vcd/xineplug_inp_vcd.c:1835 msgid "CD-ROM drive used for VCD when none given" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1831 +#: src/input/vcd/xineplug_inp_vcd.c:1836 msgid "" "What to use if no drive specified. If the setting is empty, xine will scan " "for CD drives." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1841 +#: src/input/vcd/xineplug_inp_vcd.c:1846 msgid "VCD position slider range" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1842 +#: src/input/vcd/xineplug_inp_vcd.c:1847 msgid "" "range that the stream playback position slider represents playing a VCD." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1850 +#: src/input/vcd/xineplug_inp_vcd.c:1855 msgid "VCD read-ahead caching?" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1851 +#: src/input/vcd/xineplug_inp_vcd.c:1856 msgid "Class may lead to jerky playback on low-end machines." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1861 +#: src/input/vcd/xineplug_inp_vcd.c:1866 msgid "automatically advance VCD track/entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1862 +#: src/input/vcd/xineplug_inp_vcd.c:1867 msgid "" "If enabled, we should automatically advance to the next entry or track. Used " "only when playback control (PBC) is disabled." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1871 +#: src/input/vcd/xineplug_inp_vcd.c:1876 msgid "show 'rejected' VCD LIDs" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1872 +#: src/input/vcd/xineplug_inp_vcd.c:1877 msgid "" "Some playback list IDs (LIDs) are marked not showable, but you can see them " "in the MRL list if this is set. Rejected entries are marked with an asterisk " "(*) appended to the MRL." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1883 +#: src/input/vcd/xineplug_inp_vcd.c:1888 msgid "VCD format string for display banner" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1884 +#: src/input/vcd/xineplug_inp_vcd.c:1889 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are:\n" @@ -2739,11 +2777,11 @@ msgid "" " %% : a %\n" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1909 +#: src/input/vcd/xineplug_inp_vcd.c:1914 msgid "VCD format string for stream comment field" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1910 +#: src/input/vcd/xineplug_inp_vcd.c:1915 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are %A, %C, %c, %F, %I, %L, " @@ -2751,11 +2789,11 @@ msgid "" "See the help for the title_format for the meanings of these." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1922 +#: src/input/vcd/xineplug_inp_vcd.c:1927 msgid "VCD debug flag mask" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1923 +#: src/input/vcd/xineplug_inp_vcd.c:1928 msgid "" "For tracking down bugs in the VCD plugin. Mask values are:\n" " 1: Meta information\n" @@ -2902,11 +2940,11 @@ msgid "" "playing DVDs." msgstr "" -#: src/input/input_dvd.c:1803 +#: src/input/input_dvd.c:1804 msgid "raw device set up for DVD access" msgstr "" -#: src/input/input_dvd.c:1804 +#: src/input/input_dvd.c:1805 msgid "" "If this points to a raw device connected to your DVD device, xine will use " "the raw device for playback. This has the advantage of being slightly faster " @@ -2917,22 +2955,22 @@ msgid "" "See the documentation on raw device setup (man raw) for further information." msgstr "" -#: src/input/input_dvd.c:1817 +#: src/input/input_dvd.c:1818 msgid "CSS decryption method" msgstr "" -#: src/input/input_dvd.c:1818 +#: src/input/input_dvd.c:1819 msgid "" "Selects the decryption method libdvdcss will use to descramble copy " "protected DVDs. Try the various methods, if you have problems playing " "scrambled DVDs." msgstr "" -#: src/input/input_dvd.c:1826 +#: src/input/input_dvd.c:1827 msgid "path to the title key cache" msgstr "" -#: src/input/input_dvd.c:1827 +#: src/input/input_dvd.c:1828 msgid "" "Since cracking the copy protection of scrambled DVDs can be quite time " "consuming, libdvdcss will cache the cracked keys in this directory.\n" @@ -2941,44 +2979,44 @@ msgid "" "used for anything but DVD key caching." msgstr "" -#: src/input/input_dvd.c:1849 +#: src/input/input_dvd.c:1850 msgid "region the DVD player claims to be in (1 to 8)" msgstr "" -#: src/input/input_dvd.c:1850 +#: src/input/input_dvd.c:1851 msgid "" "This only needs to be changed if your DVD jumps to a screen complaining " "about a wrong region code. It has nothing to do with the region code set in " "DVD drives, this is purely software." msgstr "" -#: src/input/input_dvd.c:1856 +#: src/input/input_dvd.c:1857 msgid "default language for DVD playback" msgstr "" -#: src/input/input_dvd.c:1857 +#: src/input/input_dvd.c:1858 msgid "" "xine tries to use this language as a default for DVD playback. As far as the " "DVD supports it, menus and audio tracks will be presented in this language.\n" "The value must be a two character ISO639 language code." msgstr "" -#: src/input/input_dvd.c:1863 +#: src/input/input_dvd.c:1864 msgid "read-ahead caching" msgstr "" -#: src/input/input_dvd.c:1864 +#: src/input/input_dvd.c:1865 msgid "" "xine can use a read ahead cache for DVD drive access.\n" "This may lead to jerky playback on slow drives, but it improves the impact " "of the DVD layer change on faster drives." msgstr "" -#: src/input/input_dvd.c:1870 +#: src/input/input_dvd.c:1871 msgid "unit for the skip action" msgstr "" -#: src/input/input_dvd.c:1871 +#: src/input/input_dvd.c:1872 msgid "" "You can configure the behaviour when issuing a skip command (using the skip " "buttons for example). The individual values mean:\n" @@ -2997,11 +3035,11 @@ msgid "" "features on the DVD" msgstr "" -#: src/input/input_dvd.c:1886 +#: src/input/input_dvd.c:1887 msgid "unit for seeking" msgstr "" -#: src/input/input_dvd.c:1887 +#: src/input/input_dvd.c:1888 msgid "" "You can configure the domain spanned by the seek slider. The individual " "values mean:\n" @@ -3015,11 +3053,11 @@ msgid "" "chapter of the current feature" msgstr "" -#: src/input/input_dvd.c:1898 +#: src/input/input_dvd.c:1899 msgid "play mode when title/chapter is given" msgstr "" -#: src/input/input_dvd.c:1899 +#: src/input/input_dvd.c:1900 msgid "" "You can configure the behaviour when playing a dvd from a given title/" "chapter (eg. using MRL 'dvd:/1.2'). The individual values mean:\n" @@ -3178,29 +3216,29 @@ msgstr "" msgid "DVB (Digital TV) input plugin" msgstr "" -#: src/input/input_dvb.c:3238 +#: src/input/input_dvb.c:3237 msgid "Remember last DVB channel watched" msgstr "" -#: src/input/input_dvb.c:3239 +#: src/input/input_dvb.c:3238 msgid "" "On autoplay, xine will remember and switch to the channel indicated in media." "dvb.last_channel. " msgstr "" -#: src/input/input_dvb.c:3246 +#: src/input/input_dvb.c:3245 msgid "Last DVB channel viewed" msgstr "" -#: src/input/input_dvb.c:3247 +#: src/input/input_dvb.c:3246 msgid "If enabled xine will remember and switch to this channel. " msgstr "" -#: src/input/input_dvb.c:3253 +#: src/input/input_dvb.c:3252 msgid "Number of dvb card to use." msgstr "" -#: src/input/input_dvb.c:3254 +#: src/input/input_dvb.c:3253 msgid "" "Leave this at zero unless you really have more than 1 card in your system." msgstr "" @@ -3317,74 +3355,74 @@ msgid "" "A value of zero here will disable the slowdown." msgstr "" -#: src/input/input_rtp.c:182 +#: src/input/input_rtp.c:185 #, c-format msgid "socket(): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:192 +#: src/input/input_rtp.c:195 msgid "IP address specified is multicast\n" msgstr "" -#: src/input/input_rtp.c:201 +#: src/input/input_rtp.c:204 #, fuzzy, c-format msgid "setsockopt(SO_RCVBUF): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:209 +#: src/input/input_rtp.c:212 #, fuzzy, c-format msgid "setsockopt(SO_REUSEADDR): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:216 +#: src/input/input_rtp.c:219 #, c-format msgid "bind(): %s.\n" msgstr "bind(): %s.\n" -#: src/input/input_rtp.c:236 +#: src/input/input_rtp.c:239 #, c-format msgid "Can't find address for iface %s:%s\n" msgstr "" -#: src/input/input_rtp.c:254 +#: src/input/input_rtp.c:257 #, c-format msgid "setsockopt(IP_ADD_MEMBERSHIP) failed (multicast kernel?): %s.\n" msgstr "setsockopt(IP_ADD_MEMBERSHIP) a échoué (noyau multicast ?): %s.\n" -#: src/input/input_rtp.c:276 +#: src/input/input_rtp.c:279 #, c-format msgid "unable to resolve '%s'.\n" msgstr "incapable de resoudre '%s'.\n" -#: src/input/input_rtp.c:286 +#: src/input/input_rtp.c:289 #, fuzzy, c-format msgid "unable to bind to '%s'.\n" msgstr "incapable de se connecter à '%s'.\n" -#: src/input/input_rtp.c:314 +#: src/input/input_rtp.c:317 #, fuzzy, c-format msgid "recv(): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:602 +#: src/input/input_rtp.c:605 msgid "RTP: stopping reading thread...\n" msgstr "" -#: src/input/input_rtp.c:605 +#: src/input/input_rtp.c:608 msgid "RTP: reading thread terminated\n" msgstr "" -#: src/input/input_rtp.c:620 +#: src/input/input_rtp.c:623 #, c-format msgid "Opening >filename:%s port:%d interface:%s<\n" msgstr "" -#: src/input/input_rtp.c:637 +#: src/input/input_rtp.c:640 #, c-format msgid "input_rtp: can't create new thread (%s)\n" msgstr "input_rtp: ne peux pas créer le nouveau thread (%s)\n" -#: src/input/input_rtp.c:743 +#: src/input/input_rtp.c:746 #, fuzzy msgid "RTP and UDP input plugin as shipped with xine" msgstr "plugin d'entrée réseau fournis avec xine" @@ -3399,16 +3437,27 @@ msgstr "" msgid "rtsp: failed to connect to '%s'\n" msgstr "input_net: impossible de se connecter à '%s'.\n" -#: src/input/librtsp/rtsp_session.c:84 +#: src/input/librtsp/rtsp_session.c:93 src/input/input_mms.c:479 +msgid "network bandwidth" +msgstr "" + +#: src/input/librtsp/rtsp_session.c:94 src/input/input_mms.c:480 +msgid "" +"Specify the bandwidth of your internet connection here. This will be used " +"when streaming servers offer different versions with different bandwidth " +"requirements of the same stream." +msgstr "" + +#: src/input/librtsp/rtsp_session.c:109 #, fuzzy, c-format msgid "rtsp_session: failed to connect to server %s\n" msgstr "input_net: impossible de se connecter à '%s'.\n" -#: src/input/librtsp/rtsp_session.c:118 +#: src/input/librtsp/rtsp_session.c:143 msgid "rtsp_session: session can not be established.\n" msgstr "" -#: src/input/librtsp/rtsp_session.c:135 +#: src/input/librtsp/rtsp_session.c:161 #, c-format msgid "rtsp_session: rtsp server type '%s' not supported yet. sorry.\n" msgstr "" @@ -3459,41 +3508,45 @@ msgstr "" msgid "pnm streaming input plugin" msgstr "" -#: src/input/mmsh.c:195 +#: src/input/mmsh.c:201 msgid "libmmsh: send error\n" msgstr "" -#: src/input/mmsh.c:240 +#: src/input/mmsh.c:246 +#, c-format msgid "libmmsh: bad response format\n" msgstr "" -#: src/input/mmsh.c:246 +#: src/input/mmsh.c:252 #, fuzzy, c-format msgid "libmmsh: 3xx redirection not implemented: >%d %s<\n" msgstr "input_file: erreur de lecture (%s)\n" -#: src/input/mmsh.c:253 +#: src/input/mmsh.c:259 #, c-format msgid "libmmsh: http status not 2xx: >%d %s<\n" msgstr "" -#: src/input/mmsh.c:261 +#: src/input/mmsh.c:267 +#, c-format msgid "libmmsh: Location redirection not implemented\n" msgstr "" -#: src/input/mmsh.c:471 +#: src/input/mmsh.c:476 msgid "Connecting MMS server (over http)..." msgstr "" -#: src/input/mmsh.c:639 +#: src/input/mmsh.c:657 +#, c-format msgid "invalid url\n" msgstr "" -#: src/input/mmsh.c:644 +#: src/input/mmsh.c:662 +#, c-format msgid "unsupported protocol\n" msgstr "" -#: src/input/mms.c:537 +#: src/input/mms.c:561 msgid "Connecting MMS server (over tcp)..." msgstr "" @@ -3514,30 +3567,19 @@ msgstr "input_net: impossible de se connecter à '%s'.\n" msgid "input_pnm: failed to set up stream\n" msgstr "input_net: impossible de se connecter à '%s'.\n" -#: src/input/input_smb.c:154 +#: src/input/input_smb.c:158 msgid "CIFS/SMB input plugin based on libsmbclient" msgstr "" -#: src/input/input_mms.c:420 +#: src/input/input_mms.c:443 msgid "mms streaming input plugin" msgstr "" -#: src/input/input_mms.c:456 -msgid "network bandwidth" -msgstr "" - -#: src/input/input_mms.c:457 -msgid "" -"Specify the bandwidth of your internet connection here. This will be used " -"when streaming servers offer different versions with different bandwidth " -"requirements of the same stream." -msgstr "" - -#: src/input/input_mms.c:466 +#: src/input/input_mms.c:489 msgid "MMS protocol" msgstr "" -#: src/input/input_mms.c:467 +#: src/input/input_mms.c:490 msgid "" "Select the protocol to encapsulate MMS.\n" "TCP is better but you may need HTTP behind a firewall." @@ -3548,81 +3590,82 @@ msgstr "" msgid "input_http: gethostbyname(%s) failed: %s\n" msgstr "input_cda: fopen(%s) à échoué: %s\n" -#: src/input/input_http.c:403 src/input/input_http.c:949 +#: src/input/input_http.c:400 src/input/input_http.c:941 #, fuzzy, c-format msgid "input_http: read error %d\n" msgstr "input_file: erreur de lecture (%s)\n" -#: src/input/input_http.c:630 +#: src/input/input_http.c:627 msgid "Connecting HTTP server..." msgstr "" -#: src/input/input_http.c:824 +#: src/input/input_http.c:816 +#, c-format msgid "input_http: invalid http answer\n" msgstr "" -#: src/input/input_http.c:831 +#: src/input/input_http.c:823 #, fuzzy, c-format msgid "input_http: 3xx redirection: >%d %s<\n" msgstr "input_file: erreur de lecture (%s)\n" -#: src/input/input_http.c:836 src/input/input_http.c:842 -#: src/input/input_http.c:849 +#: src/input/input_http.c:828 src/input/input_http.c:834 +#: src/input/input_http.c:841 #, c-format msgid "input_http: http status not 2xx: >%d %s<\n" msgstr "" -#: src/input/input_http.c:859 +#: src/input/input_http.c:851 #, c-format msgid "input_http: content length = %<PRIdMAX> bytes\n" msgstr "" -#: src/input/input_http.c:928 +#: src/input/input_http.c:920 #, fuzzy, c-format msgid "input_http: buffer exhausted after %d bytes." msgstr "input_file: erreur de lecture (%s)\n" -#: src/input/input_http.c:1002 +#: src/input/input_http.c:994 msgid "http input plugin" msgstr "" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "HTTP proxy host" msgstr "" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "The hostname of the HTTP proxy." msgstr "" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "HTTP proxy port" msgstr "" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "The port number of the HTTP proxy." msgstr "" -#: src/input/input_http.c:1082 +#: src/input/input_http.c:1074 msgid "HTTP proxy username" msgstr "" -#: src/input/input_http.c:1083 +#: src/input/input_http.c:1075 msgid "The user name for the HTTP proxy." msgstr "" -#: src/input/input_http.c:1086 +#: src/input/input_http.c:1078 msgid "HTTP proxy password" msgstr "" -#: src/input/input_http.c:1087 +#: src/input/input_http.c:1079 msgid "The password for the HTTP proxy." msgstr "" -#: src/input/input_http.c:1090 +#: src/input/input_http.c:1082 msgid "Domains for which to ignore the HTTP proxy" msgstr "" -#: src/input/input_http.c:1091 +#: src/input/input_http.c:1083 msgid "" "A comma-separated list of domain names for which the proxy is to be " "ignored.\n" @@ -3635,7 +3678,7 @@ msgstr "" msgid "input_dvd: Device %s failed to open during eject calls\n" msgstr "" -#: src/input/input_rtsp.c:274 +#: src/input/input_rtsp.c:284 msgid "rtsp streaming input plugin" msgstr "" @@ -3645,69 +3688,82 @@ msgid "dvbsub: cannot create timer thread\n" msgstr "input_rtp: ne peux pas créer le nouveau thread (%s)\n" #: src/libxinevdec/bitplane.c:1272 +#, c-format msgid "bitplane: error doing ByteRun1 decompression\n" msgstr "" #: src/libxinevdec/bitplane.c:1331 +#, c-format msgid "bitplane: Anim Opt 1 is not supported at the moment\n" msgstr "" #: src/libxinevdec/bitplane.c:1338 +#, c-format msgid "bitplane: Anim Opt 2 is not supported at the moment\n" msgstr "" #: src/libxinevdec/bitplane.c:1388 +#, c-format msgid "bitplane: Anim ASCIIJ is not supported at the moment\n" msgstr "" #: src/libxinevdec/bitplane.c:1394 +#, c-format msgid "bitplane: This anim-type is not supported at the moment\n" msgstr "" -#: src/libsputext/demux_sputext.c:1507 +#: src/libsputext/demux_sputext.c:1506 msgid "default duration of subtitle display in seconds" msgstr "" -#: src/libsputext/demux_sputext.c:1508 +#: src/libsputext/demux_sputext.c:1507 msgid "" "Some subtitle formats do not explicitly give a duration for each subtitle. " "For these, you can set a default duration here. Setting to zero will result " "in the subtitle being shown until the next one takes over." msgstr "" -#: src/libsputext/xine_decoder.c:913 +#: src/libsputext/xine_decoder.c:948 msgid "subtitle size" msgstr "" -#: src/libsputext/xine_decoder.c:914 +#: src/libsputext/xine_decoder.c:949 msgid "" "You can adjust the subtitle size here. The setting will be evaluated " "relative to the window size." msgstr "" -#: src/libsputext/xine_decoder.c:920 +#: src/libsputext/xine_decoder.c:955 msgid "subtitle vertical offset" msgstr "" -#: src/libsputext/xine_decoder.c:921 +#: src/libsputext/xine_decoder.c:956 msgid "" "You can adjust the vertical position of the subtitle. The setting will be " "evaluated relative to the window size." msgstr "" -#: src/libsputext/xine_decoder.c:927 +#: src/libsputext/xine_decoder.c:962 src/libsputext/xine_decoder.c:971 msgid "font for subtitles" msgstr "" -#: src/libsputext/xine_decoder.c:928 +#: src/libsputext/xine_decoder.c:963 msgid "A font from the xine font directory to be used for the subtitle text." msgstr "" -#: src/libsputext/xine_decoder.c:935 +#: src/libsputext/xine_decoder.c:972 +msgid "An outline font file (e.g. a .ttf) to be used for the subtitle text." +msgstr "" + +#: src/libsputext/xine_decoder.c:978 +msgid "whether to use a freetype font" +msgstr "" + +#: src/libsputext/xine_decoder.c:985 msgid "encoding of the subtitles" msgstr "" -#: src/libsputext/xine_decoder.c:936 +#: src/libsputext/xine_decoder.c:986 msgid "" "The encoding of the subtitle text in the stream. This setting is used to " "render non-ASCII characters correctly. If non-ASCII characters are not " @@ -3715,11 +3771,11 @@ msgid "" "used." msgstr "" -#: src/libsputext/xine_decoder.c:944 +#: src/libsputext/xine_decoder.c:994 msgid "use unscaled OSD if possible" msgstr "" -#: src/libsputext/xine_decoder.c:945 +#: src/libsputext/xine_decoder.c:995 msgid "" "The unscaled OSD will be rendered independently of the video frame and will " "always be sharp, even if the video is magnified. This will look better, but " @@ -4101,11 +4157,11 @@ msgstr "" msgid "libareal: oups, real can do more than 2 channels ?\n" msgstr "" -#: src/libreal/audio_decoder.c:745 src/libreal/xine_decoder.c:638 +#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 msgid "path to RealPlayer codecs" msgstr "" -#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 +#: src/libreal/audio_decoder.c:747 src/libreal/xine_decoder.c:640 msgid "" "If you have RealPlayer installed, specify the path to its codec directory " "here. You can easily find the codec directory by looking for a file named " @@ -4431,6 +4487,7 @@ msgid "demux_avi: invalid avi chunk \"%c%c%c%c\" at pos %<PRIdMAX>\n" msgstr "" #: src/demuxers/demux_avi.c:828 +#, c-format msgid "demux_avi: avi index is broken\n" msgstr "demux_avi: l'index avi est corrompu\n" @@ -4444,23 +4501,25 @@ msgid "demux_mpc: frame too big for buffer" msgstr "" #: src/demuxers/demux_film.c:188 +#, c-format msgid "invalid FILM chunk size\n" msgstr "" #: src/demuxers/demux_film.c:342 +#, c-format msgid "unrecognized FILM chunk\n" msgstr "" -#: src/demuxers/demux_asf.c:423 +#: src/demuxers/demux_asf.c:425 #, c-format msgid "demux_asf: warning: The stream id=%d is encrypted.\n" msgstr "" -#: src/demuxers/demux_asf.c:425 +#: src/demuxers/demux_asf.c:427 msgid "Media stream scrambled/encrypted" msgstr "" -#: src/demuxers/demux_asf.c:1633 +#: src/demuxers/demux_asf.c:1634 #, fuzzy, c-format msgid "demux_asf: Wrong ASX version: %s\n" msgstr "demux_asf: copyright : %s\n" @@ -4491,7 +4550,8 @@ msgid "" "unknown VOC compression type (0x%02X); please report to xine developers\n" msgstr "" -#: src/demuxers/demux_ogg.c:797 +#: src/demuxers/demux_ogg.c:801 +#, c-format msgid "ogg: vorbis audio track indicated but no vorbis stream header found.\n" msgstr "" @@ -4508,6 +4568,7 @@ msgid "" msgstr "" #: src/demuxers/demux_mpeg_block.c:640 +#, c-format msgid "demux_mpeg_block: warning: PES header reserved 10 bits not found\n" msgstr "" @@ -4533,6 +4594,7 @@ msgid "demux_mpeg_pes: warning: PACK stream id=0x%x decode failed.\n" msgstr "" #: src/demuxers/demux_mpeg_pes.c:771 +#, c-format msgid "demux_mpeg_pes: warning: PES header reserved 10 bits not found\n" msgstr "" @@ -4558,10 +4620,12 @@ msgid "demux_wc3movie: SHOT chunk referenced invalid palette (%d >= %d)\n" msgstr "" #: src/demuxers/demux_wc3movie.c:406 +#, c-format msgid "demux_wc3movie: There was a problem while loading palette chunks\n" msgstr "" #: src/demuxers/demux_snd.c:104 +#, c-format msgid "demux_snd: bad header parameters\n" msgstr "" @@ -4608,60 +4672,60 @@ msgstr "" msgid "The maximum compression to apply to an image in constant quality mode." msgstr "" -#: src/libffmpeg/audio_decoder.c:117 +#: src/libffmpeg/audio_decoder.c:120 #, c-format msgid "ffmpeg_audio_dec: increasing buffer to %d to avoid overflow.\n" msgstr "" -#: src/libffmpeg/audio_decoder.c:161 +#: src/libffmpeg/audio_decoder.c:164 #, c-format msgid "ffmpeg_audio_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" -#: src/libffmpeg/audio_decoder.c:253 +#: src/libffmpeg/audio_decoder.c:256 msgid "ffmpeg_audio_dec: trying to open null codec\n" msgstr "" -#: src/libffmpeg/audio_decoder.c:262 +#: src/libffmpeg/audio_decoder.c:265 msgid "ffmpeg_audio_dec: couldn't open decoder\n" msgstr "" -#: src/libffmpeg/dvaudio_decoder.c:302 +#: src/libffmpeg/dvaudio_decoder.c:286 #, c-format msgid "dvaudio: increasing buffer to %d to avoid overflow.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:153 +#: src/libffmpeg/video_decoder.c:156 msgid "ffmpeg_video_dec: unsupported frame format, DR1 disabled.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:171 +#: src/libffmpeg/video_decoder.c:174 msgid "ffmpeg_video_dec: unsupported frame dimensions, DR1 disabled.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:319 +#: src/libffmpeg/video_decoder.c:334 #, c-format msgid "ffmpeg_video_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" -#: src/libffmpeg/video_decoder.c:348 +#: src/libffmpeg/video_decoder.c:363 msgid "ffmpeg_video_dec: couldn't open decoder\n" msgstr "" -#: src/libffmpeg/video_decoder.c:383 +#: src/libffmpeg/video_decoder.c:398 msgid "ffmpeg_video_dec: direct rendering enabled\n" msgstr "" -#: src/libffmpeg/video_decoder.c:802 +#: src/libffmpeg/video_decoder.c:817 #, c-format msgid "ffmpeg_video_dec: increasing buffer to %d to avoid overflow.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:1474 +#: src/libffmpeg/video_decoder.c:1510 msgid "MPEG-4 postprocessing quality" msgstr "" -#: src/libffmpeg/video_decoder.c:1475 +#: src/libffmpeg/video_decoder.c:1511 msgid "" "You can adjust the amount of post processing applied to MPEG-4 video.\n" "Higher values result in better quality, but need more CPU. Lower values may " @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: it\n" "Report-Msgid-Bugs-To: xine-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2006-11-29 23:07+0100\n" +"POT-Creation-Date: 2007-01-26 18:31+0100\n" "PO-Revision-Date: 2006-06-18 23:05+0200\n" "Last-Translator: Diego 'Flameeyes' Pettenò <flameeyes@gentoo.org>\n" "Language-Team: Italian\n" @@ -114,6 +114,7 @@ msgid "w32codec: decoder failed to start. Is '%s' installed?\n" msgstr "w32codec: errore nella partenza del decoder. '%s' è installato?\n" #: src/libw32dll/w32codec.c:1221 +#, c-format msgid "w32codec: (ACM_Decoder) Unappropriate audio format\n" msgstr "w32codec: (ACM_decoder) Formato audio non appropriato.\n" @@ -123,10 +124,12 @@ msgid "w32codec: (ACM_Decoder) acmStreamOpen error %d\n" msgstr "w32codec: (ACM_Decoder) acmStreamOpen errore %d\n" #: src/libw32dll/w32codec.c:1243 +#, c-format msgid "w32codec: Error initializing DirectShow Audio\n" msgstr "w32codec: errore inizializzando l'audio DirectShow\n" #: src/libw32dll/w32codec.c:1261 +#, c-format msgid "w32codec: Error initializing DMO Audio\n" msgstr "w32codec: errore inizializzando l'audio DMO\n" @@ -414,16 +417,16 @@ msgstr "plugin di uscita audio per xine su file" msgid "xine output plugin for Coreaudio/Mac OS X" msgstr "plugin di uscita audio per xine per Coreaudio/Max OS X" -#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:919 +#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:920 #, c-format msgid "audio_sun_out: opening audio device %s failed: %s\n" msgstr "audio_sun_out: apertura dispositivo audio %s non riuscita: %s\n" -#: src/audio_out/audio_sun_out.c:894 +#: src/audio_out/audio_sun_out.c:895 msgid "Sun audio device name" msgstr "nome dispositivo audio Sun" -#: src/audio_out/audio_sun_out.c:895 +#: src/audio_out/audio_sun_out.c:896 msgid "" "Specifies the file name for the Sun audio device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -436,12 +439,12 @@ msgstr "" "quindi si deve essere attenti che il valore inserito sia davvero un " "dispositivo audio Sun." -#: src/audio_out/audio_sun_out.c:937 +#: src/audio_out/audio_sun_out.c:938 #, c-format msgid "audio_sun_out: audio ioctl on device %s failed: %s\n" msgstr "audio_sun_out: ioctl sul dispositivo %s non riuscita: %s\n" -#: src/audio_out/audio_sun_out.c:988 +#: src/audio_out/audio_sun_out.c:989 msgid "xine audio output plugin using sun-compliant audio devices/drivers" msgstr "" "plugin output audio di xine che usa i dispositivi/driver audio compiacenti " @@ -532,10 +535,12 @@ msgid "unknown error" msgstr "errore sconosciuto" #: src/audio_out/audio_directx2_out.c:206 +#, c-format msgid "Unable to create direct sound object." msgstr "Impossibile creare l'oggetto DirectSound." #: src/audio_out/audio_directx2_out.c:212 +#, c-format msgid "Could not set direct sound cooperative level." msgstr "Impossibile impostare il livello cooperativo DirectSound." @@ -544,6 +549,7 @@ msgid "Unable to create secondary direct sound buffer" msgstr "Impossibile creare il buffer DirectSound secondario." #: src/audio_out/audio_directx2_out.c:310 +#, c-format msgid "Unable to create buffer position events." msgstr "Impossibile creare gli eventi di posizione del buffer." @@ -576,6 +582,7 @@ msgid "Can't set sound volume" msgstr "Impossibile impostare il volume sonoro" #: src/audio_out/audio_directx2_out.c:432 +#, c-format msgid ": buffer lost, tryig to restore\n" msgstr ": buffer perso, provando a recuperare\n" @@ -588,10 +595,12 @@ msgid "Couldn't unlock direct sound buffer" msgstr "Impossibile sbloccare il buffer DirectSound" #: src/audio_out/audio_directx2_out.c:544 +#, c-format msgid "Unable to create primary direct sound buffer." msgstr "Impossibile creare il buffer DirectSound primario." #: src/audio_out/audio_directx2_out.c:637 +#, c-format msgid ": play cursor overran, flushing buffers\n" msgstr "" ": il cursore di riproduzione è uscito dai limiti, svuotamento dei buffer.\n" @@ -653,6 +662,7 @@ msgid "xine audio output plugin for win32 using directx" msgstr "plugin output audio di xine che usa directx per win32" #: src/audio_out/audio_alsa_out.c:355 +#, c-format msgid "audio_alsa_out:Already open...WHY!" msgstr "audio_alsa_out: già aperto...PERCHÈ!" @@ -777,6 +787,7 @@ msgid "snd_pcm_open() failed:%d:%s\n" msgstr "snd_pcm_open() non riuscito:%d:%s\n" #: src/audio_out/audio_alsa_out.c:1428 +#, c-format msgid ">>> Check if another program already uses PCM <<<\n" msgstr ">>>Controlla se un altro programma sta già usando PCM <<<\n" @@ -924,6 +935,7 @@ msgid "xine audio output plugin using pulseaudio sound server" msgstr "pluging output audio di xine che usa esound" #: src/xine-engine/io_helper.c:252 +#, c-format msgid "io_helper: waiting abandoned\n" msgstr "io_helper: attesa annullata\n" @@ -937,14 +949,17 @@ msgid "failed to get status of socket" msgstr "impossibile recuperare lo stato del socket" #: src/xine-engine/io_helper.c:388 +#, c-format msgid "io_helper: Permission denied\n" msgstr "io_helper: Permesso negato\n" #: src/xine-engine/io_helper.c:392 +#, c-format msgid "io_helper: File not found\n" msgstr "io_helper: File non trovato\n" #: src/xine-engine/io_helper.c:396 +#, c-format msgid "io_helper: Connection Refused\n" msgstr "io_helper: Connessionr rifiutata\n" @@ -1004,126 +1019,131 @@ msgstr "" "driver di uscita video come XShm, dove il ridimensionamento non è accelerato " "in hardware, questo può ridurre drasticamente l'uso di CPU." -#: src/xine-engine/xine.c:696 src/xine-engine/xine.c:803 -#: src/xine-engine/xine.c:842 src/xine-engine/xine.c:878 -#: src/xine-engine/xine.c:890 src/xine-engine/xine.c:903 -#: src/xine-engine/xine.c:916 src/xine-engine/xine.c:929 -#: src/xine-engine/xine.c:955 src/xine-engine/xine.c:980 -#: src/xine-engine/xine.c:1015 +#: src/xine-engine/xine.c:704 src/xine-engine/xine.c:811 +#: src/xine-engine/xine.c:850 src/xine-engine/xine.c:886 +#: src/xine-engine/xine.c:898 src/xine-engine/xine.c:911 +#: src/xine-engine/xine.c:924 src/xine-engine/xine.c:937 +#: src/xine-engine/xine.c:963 src/xine-engine/xine.c:988 +#: src/xine-engine/xine.c:1023 msgid "xine: error while parsing mrl\n" msgstr "xine: errore durante l'interpretazione del MRL\n" -#: src/xine-engine/xine.c:732 +#: src/xine-engine/xine.c:740 #, c-format msgid "xine: found input plugin : %s\n" msgstr "xine: plugin di ingresso trovato : %s\n" -#: src/xine-engine/xine.c:750 +#: src/xine-engine/xine.c:758 #, c-format msgid "xine: input plugin cannot open MRL [%s]\n" msgstr "xine: il plugin di ingresso non può aprire il MRL [%s]\n" -#: src/xine-engine/xine.c:766 +#: src/xine-engine/xine.c:774 #, c-format msgid "xine: cannot find input plugin for MRL [%s]\n" msgstr "xine: impossibile trovare il plugin di ingresso per il MRL [%s]\n" -#: src/xine-engine/xine.c:792 +#: src/xine-engine/xine.c:800 #, c-format msgid "xine: specified demuxer %s failed to start\n" msgstr "xine: l'avvio del demuxer %s specificato è fallito.\n" -#: src/xine-engine/xine.c:828 +#: src/xine-engine/xine.c:836 +#, c-format msgid "xine: join rip input plugin\n" msgstr "xine: avvio del plugin di estrazione.\n" -#: src/xine-engine/xine.c:835 +#: src/xine-engine/xine.c:843 msgid "xine: error opening rip input plugin instance\n" msgstr "xine: errore nell'avvio del plugin di estrazione.\n" -#: src/xine-engine/xine.c:866 +#: src/xine-engine/xine.c:874 #, c-format msgid "xine: last_probed demuxer %s failed to start\n" msgstr "xine: l'avvio dell'ultimo demuxer provato %s è fallito.\n" -#: src/xine-engine/xine.c:895 +#: src/xine-engine/xine.c:903 msgid "ignoring video\n" msgstr "video ignorato\n" -#: src/xine-engine/xine.c:908 +#: src/xine-engine/xine.c:916 msgid "ignoring audio\n" msgstr "audio ignorato\n" -#: src/xine-engine/xine.c:921 +#: src/xine-engine/xine.c:929 msgid "ignoring subpicture\n" msgstr "sottotitoli ignorati\n" -#: src/xine-engine/xine.c:934 +#: src/xine-engine/xine.c:942 msgid "input cache plugin disabled\n" msgstr "plugin cache d'ingresso disattivato.\n" -#: src/xine-engine/xine.c:1005 +#: src/xine-engine/xine.c:1013 #, c-format msgid "subtitle mrl opened '%s'\n" msgstr "aperto il MRL sottotitoli '%s'\n" -#: src/xine-engine/xine.c:1009 +#: src/xine-engine/xine.c:1017 msgid "xine: error opening subtitle mrl\n" msgstr "xine: errore nell'apertura del MRL dei sottotitoli.\n" -#: src/xine-engine/xine.c:1041 +#: src/xine-engine/xine.c:1049 +#, c-format msgid "xine: error while parsing MRL\n" msgstr "xine: errore nell'interpretazione del MRL.\n" -#: src/xine-engine/xine.c:1048 +#: src/xine-engine/xine.c:1056 #, c-format msgid "xine: changing option '%s' from MRL isn't permitted\n" msgstr "xine: modificare l'opzione '%s' da MRL non è consentito.\n" -#: src/xine-engine/xine.c:1068 +#: src/xine-engine/xine.c:1076 #, c-format msgid "xine: couldn't find demux for >%s<\n" msgstr "xine: impossibile trovare il demuxer per >%s<\n" -#: src/xine-engine/xine.c:1084 +#: src/xine-engine/xine.c:1092 #, c-format msgid "xine: found demuxer plugin: %s\n" msgstr "xine: trovato plugin demuxer: %s\n" -#: src/xine-engine/xine.c:1104 +#: src/xine-engine/xine.c:1112 +#, c-format msgid "xine: demuxer failed to start\n" msgstr "xine: avvio del demuxer fallito.\n" -#: src/xine-engine/xine.c:1167 +#: src/xine-engine/xine.c:1177 +#, c-format msgid "xine_play: no demux available\n" msgstr "xine_play: nessun demux disponibile\n" -#: src/xine-engine/xine.c:1237 +#: src/xine-engine/xine.c:1247 +#, c-format msgid "xine_play: demux failed to start\n" msgstr "xine: avvio del demuxer fallito.\n" -#: src/xine-engine/xine.c:1508 +#: src/xine-engine/xine.c:1523 #, c-format msgid "xine: The specified save_dir \"%s\" might be a security risk.\n" msgstr "" "xine: La directory di salvataggio specificata \"%s\" potrebbe essere un " "rischio per la sicurezza.\n" -#: src/xine-engine/xine.c:1513 +#: src/xine-engine/xine.c:1528 msgid "The specified save_dir might be a security risk." msgstr "" "La directory di salvataggio specificata potrebbe essere un rischio per la " "sicurezza." -#: src/xine-engine/xine.c:1539 +#: src/xine-engine/xine.c:1554 msgid "xine: locale not supported by C library\n" msgstr "xine: locale non supportarto dalla liberaria C\n" -#: src/xine-engine/xine.c:1548 +#: src/xine-engine/xine.c:1563 msgid "media format detection strategy" msgstr "Strategia di riconoscimento del formato di contenuto" -#: src/xine-engine/xine.c:1549 +#: src/xine-engine/xine.c:1564 msgid "" "xine offers various methods to detect the media format of input to play. The " "individual values are:\n" @@ -1157,11 +1177,11 @@ msgstr "" "extension\n" "Riconosce solo tramite estensione del file.\n" -#: src/xine-engine/xine.c:1567 +#: src/xine-engine/xine.c:1582 msgid "directory for saving streams" msgstr "Cartella di salvataggio degli stream" -#: src/xine-engine/xine.c:1568 +#: src/xine-engine/xine.c:1583 msgid "" "When using the stream save feature, files will be written only into this " "directory.\n" @@ -1177,12 +1197,12 @@ msgstr "" "arbitrario. Per questo si deve essere attenti che la directory che si " "specifica sia robusta per qualsiasi contenuto di ogni file." -#: src/xine-engine/xine.c:1579 +#: src/xine-engine/xine.c:1594 msgid "allow implicit changes to the configuration (e.g. by MRL)" msgstr "" "permetti modifiche implicite alla configurazione (per esmepio tramite MRL)" -#: src/xine-engine/xine.c:1580 +#: src/xine-engine/xine.c:1595 msgid "" "If enabled, you allow xine to change your configuration without explicit " "actions from your side. For example configuration changes demanded by MRLs " @@ -1199,26 +1219,26 @@ msgstr "" "arbitrariamente la propria configurazione si può finire con uno xine " "completamente caotico." -#: src/xine-engine/xine.c:1594 +#: src/xine-engine/xine.c:1609 msgid "Timeout for network stream reading (in seconds)" msgstr "" -#: src/xine-engine/xine.c:1595 +#: src/xine-engine/xine.c:1610 msgid "" "Specifies the timeout when reading from network streams, in seconds. Too low " "values might stop streaming when the source is slow or the bandwidth is " "occupied, too high values will freeze the player if the connection is lost." msgstr "" -#: src/xine-engine/xine.c:1946 +#: src/xine-engine/xine.c:1962 msgid "messages" msgstr "messaggi" -#: src/xine-engine/xine.c:1947 +#: src/xine-engine/xine.c:1963 msgid "plugin" msgstr "plugin" -#: src/xine-engine/xine.c:1948 +#: src/xine-engine/xine.c:1964 msgid "trace" msgstr "traccia" @@ -1228,20 +1248,23 @@ msgid "input_rip: reading of saved data failed: %s\n" msgstr "input_rip: la lettura di dati salvati non è riuscita: %s\n" #: src/xine-engine/input_rip.c:154 +#, c-format msgid "input_rip: reading by input plugin failed\n" msgstr "input_rip: la lettura tramite plugin di ingresso è fallita.\n" #: src/xine-engine/input_rip.c:162 src/xine-engine/input_rip.c:291 -#: src/xine-engine/input_rip.c:643 +#: src/xine-engine/input_rip.c:657 #, c-format msgid "input_rip: error writing to file %<PRIdMAX> bytes: %s\n" msgstr "input_rip: errore scrivendo su file %<PRIdMAX> byte: %s.\n" #: src/xine-engine/input_rip.c:183 +#, c-format msgid "input_rip: open() function should never be called\n" msgstr "input_rip: la funzione open() non dovrebbe essere mai chiamata\n" #: src/xine-engine/input_rip.c:314 src/xine-engine/input_rip.c:419 +#, c-format msgid "input_rip: seeking failed\n" msgstr "input_rip: posizionamento fallito.\n" @@ -1255,11 +1278,13 @@ msgstr "input_rip: posizionamento fallito: %s.\n" msgid "input_rip: %<PRIdMAX> bytes dropped\n" msgstr "input_rip: %<PRIdMAX> byte rimossi.\n" -#: src/xine-engine/input_rip.c:548 +#: src/xine-engine/input_rip.c:562 +#, c-format msgid "input_rip: input plugin not defined!\n" msgstr "input_rip: plugin di ingresso non definito!\n" -#: src/xine-engine/input_rip.c:554 +#: src/xine-engine/input_rip.c:568 +#, c-format msgid "" "input_rip: target directory wasn't specified, please fill out the option " "'media.capture.save_dir'\n" @@ -1267,7 +1292,7 @@ msgstr "" "input_rip: la directory di destinazione non è stata specificata, si imposti " "l'opzione 'media.capture.save_dir'\n" -#: src/xine-engine/input_rip.c:556 +#: src/xine-engine/input_rip.c:570 msgid "" "The stream save feature is disabled until you set media.capture.save_dir in " "the configuration." @@ -1275,11 +1300,12 @@ msgstr "" "La funzione di salvataggio dello stream sarà disabilitata finché non si " "imposta media.capture.save_dir nella configurazione. " -#: src/xine-engine/input_rip.c:563 +#: src/xine-engine/input_rip.c:577 +#, c-format msgid "input_rip: ripping/caching of this source is not permitted!\n" msgstr "input_rip: l'estrazione/cache di questa sorgente non è permessa.\n" -#: src/xine-engine/input_rip.c:565 +#: src/xine-engine/input_rip.c:579 msgid "" "xine is not allowed to save from this source. (possibly copyrighted " "material?)" @@ -1287,11 +1313,12 @@ msgstr "" "A xine non è possibile salvare da questa sorgente. (possibile materiale " "protetto da copyright?)" -#: src/xine-engine/input_rip.c:571 +#: src/xine-engine/input_rip.c:585 +#, c-format msgid "input_rip: file name not given!\n" msgstr "input_rip: nome del file non fornito!\n" -#: src/xine-engine/input_rip.c:613 +#: src/xine-engine/input_rip.c:627 #, c-format msgid "input_rip: error opening file %s: %s\n" msgstr "input_rip: errore aprendo il file %s: %s\n" @@ -1338,59 +1365,61 @@ msgstr "" "precedenza, ma questo fa anche diminuire l'utilizzo del processore." #: src/xine-engine/input_cache.c:167 +#, c-format msgid ": open() function should never be called\n" msgstr ": la funzione open() non dovrebbe mai essere chiamata.\n" #: src/xine-engine/input_cache.c:349 +#, c-format msgid ": input plugin not defined!\n" msgstr ": plugin di ingresso non definito!\n" -#: src/xine-engine/osd.c:739 +#: src/xine-engine/osd.c:745 #, c-format msgid "font '%s-%d' already loaded, weird.\n" msgstr "il carattere '%s-%d' è già caricato, strano.\n" -#: src/xine-engine/osd.c:751 +#: src/xine-engine/osd.c:757 #, c-format msgid "font '%s' loading failed (%d < %d)\n" msgstr "caricamento del carattere '%s' fallito (%d < %d)\n" -#: src/xine-engine/osd.c:761 +#: src/xine-engine/osd.c:767 #, c-format msgid "wrong version for font '%s'. expected %d found %d.\n" msgstr "versione del font '%s' errata. Richiesto %d trovato %d.\n" -#: src/xine-engine/osd.c:828 +#: src/xine-engine/osd.c:834 msgid "osd: cannot initialize ft2 library\n" msgstr "osd: impossibile inizializzare la libreria ft2\n" -#: src/xine-engine/osd.c:851 +#: src/xine-engine/osd.c:857 #, fuzzy, c-format msgid "osd: error matching font %s with FontConfig" msgstr "osd: errore nel caricamento del carattere %s con ft2\n" -#: src/xine-engine/osd.c:865 +#: src/xine-engine/osd.c:871 #, fuzzy, c-format msgid "osd: error loading font %s with FontConfig" msgstr "osd: errore nel caricamento del carattere %s con ft2\n" -#: src/xine-engine/osd.c:868 +#: src/xine-engine/osd.c:874 #, fuzzy, c-format msgid "osd: error looking up font %s with FontConfig" msgstr "osd: errore nel caricamento del carattere %s con ft2\n" -#: src/xine-engine/osd.c:889 +#: src/xine-engine/osd.c:895 #, c-format msgid "osd: error loading font %s with ft2\n" msgstr "osd: errore nel caricamento del carattere %s con ft2\n" -#: src/xine-engine/osd.c:899 +#: src/xine-engine/osd.c:905 msgid "osd: error setting font size (no scalable font?)\n" msgstr "" "osd: errore impostando la dimensione del carattere (nessun carattere " "scalabile?)\n" -#: src/xine-engine/osd.c:1015 +#: src/xine-engine/osd.c:1021 #, c-format msgid "" "osd: unknown sequence starting with byte 0x%02X in encoding \"%s\", " @@ -1399,43 +1428,43 @@ msgstr "" "osd: sequenza sconosciuta cominciante con byte 0x%02X nella codifica \"%s\", " "ignorata.\n" -#: src/xine-engine/osd.c:1071 +#: src/xine-engine/osd.c:1077 msgid "osd: can't find out current locale character set\n" msgstr "osd: impossibile individuare il set di caratteri locale corrente.\n" -#: src/xine-engine/osd.c:1081 +#: src/xine-engine/osd.c:1087 #, c-format msgid "osd: unsupported conversion %s -> %s, no conversion performed\n" msgstr "" "osd: conversione %s -> %s non supportata, nessuna conversione eseguita\n" -#: src/xine-engine/osd.c:1136 src/xine-engine/osd.c:1304 +#: src/xine-engine/osd.c:1142 src/xine-engine/osd.c:1310 msgid "osd: font isn't defined\n" msgstr "osd: carattere non definito.\n" -#: src/xine-engine/osd.c:1175 +#: src/xine-engine/osd.c:1181 msgid "osd: error loading glyph\n" msgstr "osd: errore nel caricamento del glifo.\n" -#: src/xine-engine/osd.c:1181 +#: src/xine-engine/osd.c:1187 msgid "osd: error in rendering glyph\n" msgstr "osd: errore nella visualizzazione del glifo.\n" -#: src/xine-engine/osd.c:1341 +#: src/xine-engine/osd.c:1347 #, c-format msgid "osd: error loading glyph %i\n" msgstr "osd: errore nel caricamento del glifo %i.\n" -#: src/xine-engine/osd.c:1348 +#: src/xine-engine/osd.c:1354 msgid "osd: error in rendering\n" msgstr "osd: errore nella visualizzazione.\n" -#: src/xine-engine/osd.c:1596 +#: src/xine-engine/osd.c:1602 msgid "palette (foreground-border-background) to use for subtitles and OSD" msgstr "" "palette (primo piano-bordo-sfondo) da utilizzare per i sottotitoli e OSD" -#: src/xine-engine/osd.c:1597 +#: src/xine-engine/osd.c:1603 msgid "" "The palette for on-screen-display and some subtitle formats that do not " "specify any colouring themselves. The palettes are listed in the form: " @@ -1445,42 +1474,43 @@ msgstr "" "sottotitolo ceh non specificano nessuna colorazione. Le palette sono " "elencate nella forma: primo piano - bordo - sfondo." -#: src/xine-engine/configfile.c:896 +#: src/xine-engine/configfile.c:924 +#, c-format msgid "The current config file has been modified by a newer version of xine." msgstr "" "L'attuale file di configurazione è stato modificato da una nuova versione di " "xine." -#: src/xine-engine/configfile.c:1001 +#: src/xine-engine/configfile.c:1029 #, c-format msgid "configfile: WARNING: backing up configfile to %s failed\n" msgstr "" "configfile: ATTENZIONE: copia di backup del file di configurazione in %s " "fallita.\n" -#: src/xine-engine/configfile.c:1002 +#: src/xine-engine/configfile.c:1030 msgid "configfile: WARNING: your configuration will not be saved\n" msgstr "configfile: ATTENZIONE: la propria configurazione non sarà salvata.\n" -#: src/xine-engine/configfile.c:1101 +#: src/xine-engine/configfile.c:1129 #, c-format msgid "configfile: WARNING: writing configuration to %s failed\n" msgstr "" "configfile: ATTENZIONE: scrittura della configurazione in %s fallita.\n" -#: src/xine-engine/configfile.c:1102 +#: src/xine-engine/configfile.c:1130 #, c-format msgid "configfile: WARNING: removing possibly broken config file %s\n" msgstr "" "configfile: ATTENZIONE: rimozione del file di configurazione %s " "possibilmente rovinato.\n" -#: src/xine-engine/configfile.c:1103 +#: src/xine-engine/configfile.c:1131 #, c-format msgid "configfile: WARNING: you should check the backup file %s\n" msgstr "configfile: ATTENZIONE: si controlli il file di backup %s.\n" -#: src/xine-engine/configfile.c:1237 +#: src/xine-engine/configfile.c:1266 #, c-format msgid "configfile: entry '%s' mustn't be modified from MRL\n" msgstr "configfile: la voce '%s' non deve essere modificata da MRL\n" @@ -1499,11 +1529,22 @@ msgstr "" "video_out: immagine con %<PRId64> pts scartata perché troppo vecchia (diff : " "%<PRId64>).\n" -#: src/xine-engine/video_out.c:1818 +#: src/xine-engine/video_out.c:1790 +#, fuzzy +msgid "default number of video frames" +msgstr "numero predefinito di ripetizioni dei frame" + +#: src/xine-engine/video_out.c:1791 +msgid "" +"The default number of video frames to request from xine video out driver. " +"Some drivers will override this setting with their own values." +msgstr "" + +#: src/xine-engine/video_out.c:1830 msgid "percentage of skipped frames to tolerate" msgstr "percentuale di frame saltati da tollerare." -#: src/xine-engine/video_out.c:1819 +#: src/xine-engine/video_out.c:1831 msgid "" "When more than this percentage of frames are not shown, because they were " "not decoded in time, xine sends a notification." @@ -1511,11 +1552,11 @@ msgstr "" "Quando non è mostrata una percentuale di frame superiore a questa, perché " "non decodificati in tempo, xine invia una notifica." -#: src/xine-engine/video_out.c:1824 +#: src/xine-engine/video_out.c:1836 msgid "percentage of discarded frames to tolerate" msgstr "percentuale di frame scartati da tollerare." -#: src/xine-engine/video_out.c:1825 +#: src/xine-engine/video_out.c:1837 msgid "" "When more than this percentage of frames are not shown, because they were " "not scheduled for display in time, xine sends a notification." @@ -1523,27 +1564,27 @@ msgstr "" "Quando non è mostrata una percentuale di frame superiore a questa, perché " "non disposti alla visualizzazione in tempo, xine invia una notifica." -#: src/xine-engine/video_out.c:1859 +#: src/xine-engine/video_out.c:1871 msgid "video_out: sorry, this should not happen. please restart xine.\n" msgstr "" "video_out: spiacente, non sarebbe dovuto succedere. Per favore riavvia " "xine.\n" -#: src/xine-engine/video_decoder.c:374 +#: src/xine-engine/video_decoder.c:380 #, c-format msgid "video_decoder: no plugin available to handle '%s'\n" msgstr "video_decoder: nessun plugin disponibile per gestire '%s'\n" -#: src/xine-engine/video_decoder.c:453 +#: src/xine-engine/video_decoder.c:459 #, c-format msgid "video_decoder: error, unknown buffer type: %08x\n" msgstr "video_decoder: errore, tipo di buffer sconosciuto: %08x\n" -#: src/xine-engine/video_decoder.c:489 +#: src/xine-engine/video_decoder.c:495 msgid "number of video buffers" msgstr "numero di buffer video" -#: src/xine-engine/video_decoder.c:490 +#: src/xine-engine/video_decoder.c:496 msgid "" "The number of video buffers (each is 8k in size) xine uses in its internal " "queue. Higher values mean smoother playback for unreliable inputs, but also " @@ -1566,87 +1607,87 @@ msgstr "" "info_helper: conversione %s -> UTF-8 non supportata, nessuna conversione " "eseguita\n" -#: src/xine-engine/xine_interface.c:918 +#: src/xine-engine/xine_interface.c:934 msgid "Warning:" msgstr "Attenzione:" -#: src/xine-engine/xine_interface.c:919 +#: src/xine-engine/xine_interface.c:935 msgid "Unknown host:" msgstr "Host sconosciuto:" -#: src/xine-engine/xine_interface.c:920 +#: src/xine-engine/xine_interface.c:936 msgid "Unknown device:" msgstr "Dispositivo sconosciuto:" -#: src/xine-engine/xine_interface.c:921 +#: src/xine-engine/xine_interface.c:937 msgid "Network unreachable" msgstr "Rete irraggiungibile" -#: src/xine-engine/xine_interface.c:922 +#: src/xine-engine/xine_interface.c:938 msgid "Connection refused:" msgstr "Connessione rifiutata:" -#: src/xine-engine/xine_interface.c:923 +#: src/xine-engine/xine_interface.c:939 msgid "File not found:" msgstr "File non trovato:" -#: src/xine-engine/xine_interface.c:924 +#: src/xine-engine/xine_interface.c:940 msgid "Read error from:" msgstr "Errore leggendo da:" -#: src/xine-engine/xine_interface.c:925 +#: src/xine-engine/xine_interface.c:941 msgid "Error loading library:" msgstr "Errore nel caricamento della libreria:" -#: src/xine-engine/xine_interface.c:926 +#: src/xine-engine/xine_interface.c:942 msgid "Encrypted media stream detected" msgstr "Individuato flusso multimediale cifrato" -#: src/xine-engine/xine_interface.c:927 +#: src/xine-engine/xine_interface.c:943 msgid "Security message:" msgstr "Messaggio di sicurezza:" -#: src/xine-engine/xine_interface.c:928 +#: src/xine-engine/xine_interface.c:944 msgid "Audio device unavailable" msgstr "Dispositivo audio non disponibile" -#: src/xine-engine/xine_interface.c:929 +#: src/xine-engine/xine_interface.c:945 msgid "Permission error" msgstr "Errore di permessi" -#: src/xine-engine/xine_interface.c:930 +#: src/xine-engine/xine_interface.c:946 msgid "File is empty:" msgstr "Il file è vuoto:" -#: src/xine-engine/audio_out.c:1074 +#: src/xine-engine/audio_out.c:1072 msgid "" "audio_out: delay calculation impossible with an unavailable audio device\n" msgstr "" "audio_out: calcolo del ritardo impossibile con un dispositivo audio non " "disponibile.\n" -#: src/xine-engine/audio_out.c:1216 +#: src/xine-engine/audio_out.c:1214 msgid "write to sound card failed. Was a USB device unplugged ?\n" msgstr "" "scrittura sulla scheda audio fallita. È stato rimosso un dispositivo USB?\n" -#: src/xine-engine/audio_out.c:1369 +#: src/xine-engine/audio_out.c:1367 msgid "8 bits not supported by driver, converting to 16 bits.\n" msgstr "8 bit non supportati dal driver, conversione a 16 bit.\n" -#: src/xine-engine/audio_out.c:1377 +#: src/xine-engine/audio_out.c:1375 msgid "mono not supported by driver, converting to stereo.\n" msgstr "mono non supportato dal driver, conversione a stereo.\n" -#: src/xine-engine/audio_out.c:1383 +#: src/xine-engine/audio_out.c:1381 msgid "stereo not supported by driver, converting to mono.\n" msgstr "stereo non supportato dal driver, conversione a mono.\n" -#: src/xine-engine/audio_out.c:2028 +#: src/xine-engine/audio_out.c:2033 msgid "method to sync audio and video" msgstr "metodo di sincronia audio/video" -#: src/xine-engine/audio_out.c:2029 +#: src/xine-engine/audio_out.c:2034 msgid "" "When playing audio and video, there are at least two clocks involved: The " "system clock, to which video frames are synchronized and the clock in your " @@ -1690,11 +1731,11 @@ msgstr "" "dove i dati audio sono passati ad un decodificatore esterno in forma " "digitale." -#: src/xine-engine/audio_out.c:2057 +#: src/xine-engine/audio_out.c:2062 msgid "enable resampling" msgstr "abilita ricampionamento" -#: src/xine-engine/audio_out.c:2058 +#: src/xine-engine/audio_out.c:2063 msgid "" "When the sample rate of the decoded audio does not match the capabilities of " "your sound hardware, an adaptation called \"resampling\" is required. Here " @@ -1707,11 +1748,11 @@ msgstr "" "disabilitare o utilizzare automaticamente quando necessario il " "ricampionamento." -#: src/xine-engine/audio_out.c:2065 +#: src/xine-engine/audio_out.c:2070 msgid "always resample to this rate (0 to disable)" msgstr "ricampiona sempre a questa frequenza (0 per disabilitare)" -#: src/xine-engine/audio_out.c:2066 +#: src/xine-engine/audio_out.c:2071 msgid "" "Some audio drivers do not correctly announce the capabilities of the audio " "hardware. By setting a value other than zero here, you can force the audio " @@ -1721,11 +1762,11 @@ msgstr "" "sonoro. Impostando un valore diverso da zero qui si può forzare il " "ricampionamento del flusso audio alla frequenza data." -#: src/xine-engine/audio_out.c:2075 +#: src/xine-engine/audio_out.c:2080 msgid "offset for digital passthrough" msgstr "offset per il passaggio diretto digitale" -#: src/xine-engine/audio_out.c:2076 +#: src/xine-engine/audio_out.c:2081 msgid "" "If you use an external surround decoder and audio is ahead or behind video, " "you can enter a fixed offset here to compensate.\n" @@ -1736,11 +1777,11 @@ msgstr "" "compensare.\n" "L'unità di misura è un \"PTS tick\" ovvero 1/90000 secondi." -#: src/xine-engine/audio_out.c:2085 +#: src/xine-engine/audio_out.c:2090 msgid "play audio even on slow/fast speeds" msgstr "riproduci audio anche a velocità basse/elevate" -#: src/xine-engine/audio_out.c:2086 +#: src/xine-engine/audio_out.c:2091 msgid "" "If you enable this option, the audio will be heard even when playback speed " "is different than 1X. Of course, it will sound distorted (lower/higher " @@ -1752,31 +1793,32 @@ msgstr "" "basso o più alto). Se si vuole sperimentare preservando il tono, è possibile " "provare il plugin di post-elaborazione audio 'stretch'." -#: src/xine-engine/audio_out.c:2157 +#: src/xine-engine/audio_out.c:2162 msgid "startup audio volume" msgstr "volume audio di partenza" -#: src/xine-engine/audio_out.c:2158 +#: src/xine-engine/audio_out.c:2163 msgid "The overall audio volume set at xine startup." msgstr "Il volume audio generale da impostare all'avvio di xine.partenza" -#: src/xine-engine/audio_out.c:2161 +#: src/xine-engine/audio_out.c:2166 msgid "restore volume level at startup" msgstr "ripristina il volume all'avvio" -#: src/xine-engine/audio_out.c:2162 +#: src/xine-engine/audio_out.c:2167 msgid "If disabled, xine will not modify any mixer settings at startup." msgstr "" "Se disabilitato, xine non modificherà alcuna impostazione del mixer " "all'avvio." -#: src/xine-engine/audio_out.c:2192 +#: src/xine-engine/audio_out.c:2197 msgid "audio_out: sorry, this should not happen. please restart xine.\n" msgstr "" "audio_out: spiacente, non sarebbe dovuto succedere. Per favore riavvia " "xine.\n" #: src/xine-engine/load_plugins.c:212 +#, c-format msgid "map_decoder_list: no space for decoder, skipped.\n" msgstr "" @@ -1827,6 +1869,7 @@ msgid "load_plugins: plugin %s found\n" msgstr "load_plugins: trovato plugin %s\n" #: src/xine-engine/load_plugins.c:499 +#, fuzzy, c-format msgid "load_plugins: static plugin found\n" msgstr "load_plugins: trovato plugin statico %s\n" @@ -1838,6 +1881,7 @@ msgstr "" "s.\n" #: src/xine-engine/load_plugins.c:509 +#, c-format msgid "load_plugins: plugin limit reached, static plugin could not be loaded\n" msgstr "" "load_plugins: raggiunto il limite di plugin, non è stato possibile caricare " @@ -2015,11 +2059,11 @@ msgstr "" "plugin di uscita video per xine utilizzante il modulo SyncFB per schede " "Matrox G200/G400" -#: src/video_out/video_out_syncfb.c:1077 +#: src/video_out/video_out_syncfb.c:1078 msgid "SyncFB device name" msgstr "nome del dispositivo SyncFB" -#: src/video_out/video_out_syncfb.c:1078 +#: src/video_out/video_out_syncfb.c:1079 msgid "" "Specifies the file name for the SyncFB (TeleTux) device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -2037,13 +2081,13 @@ msgid "xine video output plugin using the Libstk Surface Set-top Toolkit" msgstr "plugin di output video di xine che usa Libstk Surface Set-top Toolkit" #: src/video_out/video_out_xvmc.c:1446 src/video_out/video_out_pgx64.c:1464 -#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1436 +#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1437 msgid "video overlay colour key" msgstr "chiave cromatica per l'overlay video" #: src/video_out/video_out_xvmc.c:1447 src/video_out/video_out_xxmc.c:2431 #: src/video_out/video_out_vidix.c:1159 src/video_out/video_out_vidix.c:1166 -#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1437 +#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1438 msgid "" "The colour key is used to tell the graphics card where to overlay the video " "image. Try different values, if you experience windows becoming transparent." @@ -2053,23 +2097,23 @@ msgstr "" "finestre diventare trasparenti." #: src/video_out/video_out_xvmc.c:1455 src/video_out/video_out_xxmc.c:2439 -#: src/video_out/video_out_xv.c:1445 +#: src/video_out/video_out_xv.c:1446 msgid "autopaint colour key" msgstr "colora automaticamente la chive cromatica" #: src/video_out/video_out_xvmc.c:1456 src/video_out/video_out_xxmc.c:2440 -#: src/video_out/video_out_xv.c:1446 +#: src/video_out/video_out_xv.c:1447 msgid "Make Xv autopaint its colorkey." msgstr "Fa sì che Xv colori automaticamente la propria chiave cromatica." #: src/video_out/video_out_xvmc.c:1461 src/video_out/video_out_xxmc.c:2463 -#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1469 +#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1470 #: src/video_out/video_out_opengl.c:1918 msgid "enable double buffering" msgstr "abilita doppio buffering" #: src/video_out/video_out_xvmc.c:1462 src/video_out/video_out_xxmc.c:2464 -#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1470 +#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1471 msgid "" "Double buffering will synchronize the update of the video image to the " "repainting of the entire screen (\"vertical retrace\"). This eliminates " @@ -2079,11 +2123,11 @@ msgstr "" "ridisegnod ell'intero schermo (ritracciamento verticale). Questo eliminerà " "gli sfarfallii e gli artifatti, ma utilizzerà più memoria video." -#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1537 +#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1538 msgid "deinterlace method (deprecated)" msgstr "metodo di deinterlacciamento (deprecato)" -#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1538 +#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1539 msgid "" "This config setting is deprecated. You should use the new deinterlacing post " "processing settings instead.\n" @@ -2350,11 +2394,11 @@ msgstr "" "video_out_xxmc: utilizzando la porta Xv %ld dal dispositivo %s per la " "conversione di colori e il ridimensionamento hardware.\n" -#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1453 +#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1454 msgid "bilinear scaling mode" msgstr "modalità di ridimensionamento bilineare" -#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1454 +#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1455 msgid "" "Selects the bilinear scaling mode for Permedia cards. The individual values " "are:\n" @@ -2388,11 +2432,11 @@ msgstr "video_out_xxmc: questo dispositivo supporta il formato yv12\n" msgid "video_out_xxmc: this adaptor supports the yuy2 format.\n" msgstr "video_out_xxmc: questo dispositivo supporta il formato yuv2.\n" -#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1530 +#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1531 msgid "pitch alignment workaround" msgstr "pitch alignment workaround" -#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1531 +#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1532 msgid "Some buggy video drivers need a workaround to function properly." msgstr "" "Alcuni driver video difettosi richiedono un workaround per funzionare " @@ -2450,7 +2494,7 @@ msgstr "" "Quando l'interlacciamento è abilitato per i frame accelerati hardware, " "alterna i campi superiore e inferiori al doppio del frame rate.\n" -#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1611 +#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1612 msgid "xine video output plugin using the MIT X video extension" msgstr "plugin di output video di xine che usa l'estensione video MIT X" @@ -2605,11 +2649,11 @@ msgstr "" "condivisa.\n" "video_out_xv: => l'estensione MIT Shared Memory non sarà utilizzata.\n" -#: src/video_out/video_out_xv.c:1282 +#: src/video_out/video_out_xv.c:1283 msgid "video_out_xv: Xv extension not present.\n" msgstr "video_out_xv: estensione Xv non presente.\n" -#: src/video_out/video_out_xv.c:1319 +#: src/video_out/video_out_xv.c:1320 msgid "" "video_out_xv: Xv extension is present but I couldn't find a usable yuv12 " "port.\n" @@ -2619,7 +2663,7 @@ msgstr "" "porta yuv12 utilizzabile. sembrerebbe che l'hardware grafico " "non supporti Xv.\n" -#: src/video_out/video_out_xv.c:1328 +#: src/video_out/video_out_xv.c:1329 #, c-format msgid "" "video_out_xv: using Xv port %ld from adaptor %s for hardware colorspace " @@ -2628,11 +2672,11 @@ msgstr "" "video_out_xv: utilizzando la porta Xv %ld dal dispositivo %s per la " "conversione di colori e il ridimensionamento hardware.\n" -#: src/video_out/video_out_xv.c:1503 +#: src/video_out/video_out_xv.c:1504 msgid "video_out_xv: this adaptor supports the yv12 format.\n" msgstr "video_out_xv: questo dispositivo supporta il formato yv12\n" -#: src/video_out/video_out_xv.c:1508 +#: src/video_out/video_out_xv.c:1509 msgid "video_out_xv: this adaptor supports the yuy2 format.\n" msgstr "video_out_xv: questo dispositivo supporta il formato yuv2.\n" @@ -2940,48 +2984,48 @@ msgstr "" "Per un display interlacciato abilita il controllo della parità di campo " "(\"none\" = disabilitato)." -#: src/video_out/video_out_directfb.c:1509 +#: src/video_out/video_out_directfb.c:1516 #, fuzzy msgid "video_out_directfb: using hardware subpicture acceleration.\n" msgstr "" "video_out_directfb: utilizzando il ridimensionamento accelerato hardware.\n" -#: src/video_out/video_out_directfb.c:1523 +#: src/video_out/video_out_directfb.c:1530 #, fuzzy msgid "video_out_directfb: layer supports video output.\n" msgstr "video_out_vidix: il dispositivo supporta il formato yuv2\n" -#: src/video_out/video_out_directfb.c:1532 +#: src/video_out/video_out_directfb.c:1539 #, fuzzy msgid "video_out_directfb: layer doesn't support YV12!\n" msgstr "video_out_syncfb: informazione. (il modulo SyncFB supporta YUY2)\n" -#: src/video_out/video_out_directfb.c:1539 +#: src/video_out/video_out_directfb.c:1546 #, fuzzy msgid "video_out_directfb: layer doesn't support YUY2!\n" msgstr "video_out_syncfb: informazione. (il modulo SyncFB supporta YUY2)\n" -#: src/video_out/video_out_directfb.c:1550 +#: src/video_out/video_out_directfb.c:1557 msgid "" "video_out_directfb:need at least DirectFB 0.9.25 to play on this layer!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1585 +#: src/video_out/video_out_directfb.c:1592 #, fuzzy, c-format msgid "video_out_directfb: layer doesn't support buffermode %d!\n" msgstr "video_out_directfb: nessuno strato di uscita utilizzabile trovato.\n" -#: src/video_out/video_out_directfb.c:1591 +#: src/video_out/video_out_directfb.c:1598 #, c-format msgid "video_out_directfb: layer doesn't support options 0x%08x!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1685 +#: src/video_out/video_out_directfb.c:1692 msgid "video_out_directfb: using hardware accelerated image scaling.\n" msgstr "" "video_out_directfb: utilizzando il ridimensionamento accelerato hardware.\n" -#: src/video_out/video_out_directfb.c:1697 +#: src/video_out/video_out_directfb.c:1704 msgid "" "video_out_directfb: image scaling with deinterlacing is hardware " "accelerated.\n" @@ -2989,33 +3033,33 @@ msgstr "" "video_out_directfb: il ridimensionamento dell'immagine con " "deinterlacciamento è accelerato hardware.\n" -#: src/video_out/video_out_directfb.c:1775 +#: src/video_out/video_out_directfb.c:1782 #, fuzzy msgid "video layer id (auto: -1)" msgstr "id dello strato video" -#: src/video_out/video_out_directfb.c:1776 +#: src/video_out/video_out_directfb.c:1783 msgid "Select the video output layer by its id." msgstr "Selezionate lo strato di uscita video tramite id." -#: src/video_out/video_out_directfb.c:1797 -#: src/video_out/video_out_directfb.c:2006 +#: src/video_out/video_out_directfb.c:1804 +#: src/video_out/video_out_directfb.c:2013 #, fuzzy, c-format msgid "video_out_directfb: using display layer #%d.\n" msgstr "" "video_out_directfb: nessuno strato di sovrimpressione utilizzabile trovato.\n" -#: src/video_out/video_out_directfb.c:1881 +#: src/video_out/video_out_directfb.c:1888 msgid "xine video output plugin using DirectFB." msgstr "plugin di output video per xine utilizzante DirectFB" -#: src/video_out/video_out_directfb.c:1999 +#: src/video_out/video_out_directfb.c:2006 #, fuzzy msgid "video_out_directfb: no usable display layer was found!\n" msgstr "" "video_out_directfb: nessuno strato di sovrimpressione utilizzabile trovato.\n" -#: src/video_out/video_out_directfb.c:2088 +#: src/video_out/video_out_directfb.c:2095 msgid "xine video output plugin using DirectFB under XDirectFB." msgstr "plugin di output video per xine utilizzante DirectFB sotto XDirectFB" @@ -3035,20 +3079,20 @@ msgstr "video_out_pgx32: Errore: ioctl fallita, dispositivo non valido (%s)\n" msgid "video_out_pgx32: Error: '%s' is not a pgx32 framebuffer device\n" msgstr "video_out_pgx32: Errore: '%s' non`e un dispositivo framebuffer pgx32\n" -#: src/libmusepack/xine_decoder.c:237 +#: src/libmusepack/xine_decoder.c:241 #, c-format msgid "libmusepack: mpc_streaminfo_read failed: %d\n" msgstr "libmusepack: mpc_streaminfo_read fallita: %d\n" -#: src/libmusepack/xine_decoder.c:311 +#: src/libmusepack/xine_decoder.c:315 msgid "libmusepack: data after last frame ignored\n" msgstr "libmusepack: dati dopo l'ultimo frame ignorati.\n" -#: src/libmusepack/xine_decoder.c:322 +#: src/libmusepack/xine_decoder.c:326 msgid "libmusepack: mpc_decoder_initialise failed\n" msgstr "libmusepack: mpc_decoder_initialise fallita\n" -#: src/libmusepack/xine_decoder.c:342 src/libmusepack/xine_decoder.c:357 +#: src/libmusepack/xine_decoder.c:346 src/libmusepack/xine_decoder.c:361 #, c-format msgid "libmusepack: mpc_decoder_decode failed: %d\n" msgstr "libmusepack: mpc_decoder_decode fallita: %d\n" @@ -3120,15 +3164,15 @@ msgstr "Spostamento verticale sottotitolo" msgid "encoding of subtitles" msgstr "Codifica dei sottotitoli" -#: src/input/vcd/vcdio.c:211 +#: src/input/vcd/vcdio.c:223 msgid "SEEK_CUR not implemented for non-zero offset" msgstr "SEEK_CUR non implementato per offset diversi da zero." -#: src/input/vcd/vcdio.c:239 +#: src/input/vcd/vcdio.c:251 msgid "SEEK_END not implemented yet." msgstr "SEEK_END non implementato." -#: src/input/vcd/vcdio.c:242 +#: src/input/vcd/vcdio.c:254 msgid "seek not implemented yet for" msgstr "seek non implementato." @@ -3136,49 +3180,49 @@ msgstr "seek non implementato." msgid "failed to find a device with a VCD" msgstr "impossibile trovare un dispositivo con un VCD" -#: src/input/vcd/xineplug_inp_vcd.c:327 +#: src/input/vcd/xineplug_inp_vcd.c:328 msgid "was passed a null class parameter" msgstr "è stato passato un parametro classe nullo." -#: src/input/vcd/xineplug_inp_vcd.c:967 +#: src/input/vcd/xineplug_inp_vcd.c:972 msgid "Invalid current entry type" msgstr "Tipo di inserimento attuale non valido." -#: src/input/vcd/xineplug_inp_vcd.c:991 +#: src/input/vcd/xineplug_inp_vcd.c:996 msgid "" "Video CD plugin with PBC and support for: (X)VCD, (X)SVCD, HQVCD, CVD ... " msgstr "" "Plugin Video CD con PBC e supporto per: (X)VCD, (X)SVCD, HQVCD, CVD ..." -#: src/input/vcd/xineplug_inp_vcd.c:1092 +#: src/input/vcd/xineplug_inp_vcd.c:1097 msgid "selection has no RETURN entry" msgstr "la selezione non ha un elemento RETURN" -#: src/input/vcd/xineplug_inp_vcd.c:1121 +#: src/input/vcd/xineplug_inp_vcd.c:1126 msgid "DEFAULT selected, but PBC is not on." msgstr "selezionato DEFAULT, ma PBC non è abilitato." -#: src/input/vcd/xineplug_inp_vcd.c:1126 +#: src/input/vcd/xineplug_inp_vcd.c:1131 msgid "selection has no NEXT entry" msgstr "la selezione non ha un elemento NEXT" -#: src/input/vcd/xineplug_inp_vcd.c:1134 +#: src/input/vcd/xineplug_inp_vcd.c:1139 msgid "selection has no PREVIOUS entry" msgstr "la selezione non ha un elemento PREVIOUS" -#: src/input/vcd/xineplug_inp_vcd.c:1141 +#: src/input/vcd/xineplug_inp_vcd.c:1146 msgid "Unknown event type: " msgstr "Tipo di evento sconosciuto: " -#: src/input/vcd/xineplug_inp_vcd.c:1441 src/input/vcd/xineplug_inp_vcd.c:1488 +#: src/input/vcd/xineplug_inp_vcd.c:1446 src/input/vcd/xineplug_inp_vcd.c:1493 msgid "The above message had unknown vcdimager log level" msgstr "Il messaggio precedente ha un livello di log di vcdimager sconosciuto." -#: src/input/vcd/xineplug_inp_vcd.c:1819 +#: src/input/vcd/xineplug_inp_vcd.c:1824 msgid "VCD default type to use on autoplay" msgstr "Tipo predefinito di VCD da usare in riproduzione automatica." -#: src/input/vcd/xineplug_inp_vcd.c:1820 +#: src/input/vcd/xineplug_inp_vcd.c:1825 msgid "" "The VCD play unit to use when none is specified in an MRL, e.g. vcd:// or " "vcd:///dev/dvd:" @@ -3186,11 +3230,11 @@ msgstr "" "L'unità di riproduzione VCD da utilizzare quando non è specificata in un " "MRL, per esempio vcd:// o vcd://dev/dvd:" -#: src/input/vcd/xineplug_inp_vcd.c:1830 +#: src/input/vcd/xineplug_inp_vcd.c:1835 msgid "CD-ROM drive used for VCD when none given" msgstr "Lettore CD-ROM utilizzato per i VCD quando non è specificato." -#: src/input/vcd/xineplug_inp_vcd.c:1831 +#: src/input/vcd/xineplug_inp_vcd.c:1836 msgid "" "What to use if no drive specified. If the setting is empty, xine will scan " "for CD drives." @@ -3198,30 +3242,30 @@ msgstr "" "Cosa usare se non è specificato nessun drive. Se l'impostazione è vuota xine " "scandirà per lettori CD. " -#: src/input/vcd/xineplug_inp_vcd.c:1841 +#: src/input/vcd/xineplug_inp_vcd.c:1846 msgid "VCD position slider range" msgstr "intervallo della slitta di posizione VCD" -#: src/input/vcd/xineplug_inp_vcd.c:1842 +#: src/input/vcd/xineplug_inp_vcd.c:1847 msgid "" "range that the stream playback position slider represents playing a VCD." msgstr "" "intervallo che la slitta di posizione nel flusso riprodotto rappresenta " "quando si riproduce un VCD." -#: src/input/vcd/xineplug_inp_vcd.c:1850 +#: src/input/vcd/xineplug_inp_vcd.c:1855 msgid "VCD read-ahead caching?" msgstr "VCD read-ahead caching?" -#: src/input/vcd/xineplug_inp_vcd.c:1851 +#: src/input/vcd/xineplug_inp_vcd.c:1856 msgid "Class may lead to jerky playback on low-end machines." msgstr "La classe può portare a riproduzione a singhiozzo su macchine lente." -#: src/input/vcd/xineplug_inp_vcd.c:1861 +#: src/input/vcd/xineplug_inp_vcd.c:1866 msgid "automatically advance VCD track/entry" msgstr "avanza automaticamente di traccia/elemento VCD" -#: src/input/vcd/xineplug_inp_vcd.c:1862 +#: src/input/vcd/xineplug_inp_vcd.c:1867 msgid "" "If enabled, we should automatically advance to the next entry or track. Used " "only when playback control (PBC) is disabled." @@ -3229,11 +3273,11 @@ msgstr "" "Se abilitato si passerà automaticamente al successivo elemento o traccia. " "Utilizzato solo quando il controllo di riproduzione (PBC) è disabilitato." -#: src/input/vcd/xineplug_inp_vcd.c:1871 +#: src/input/vcd/xineplug_inp_vcd.c:1876 msgid "show 'rejected' VCD LIDs" msgstr "mostra LID \"rifiutati\" dei VCD" -#: src/input/vcd/xineplug_inp_vcd.c:1872 +#: src/input/vcd/xineplug_inp_vcd.c:1877 msgid "" "Some playback list IDs (LIDs) are marked not showable, but you can see them " "in the MRL list if this is set. Rejected entries are marked with an asterisk " @@ -3243,11 +3287,11 @@ msgstr "" "possono vedere nella lista MRL se questa opzione è abilitata. Gli elementi " "rifiutati sono segnati con un asterisco (*) alla fine del MRL." -#: src/input/vcd/xineplug_inp_vcd.c:1883 +#: src/input/vcd/xineplug_inp_vcd.c:1888 msgid "VCD format string for display banner" msgstr "Stringa di formato VCD per il banner da visualizzare." -#: src/input/vcd/xineplug_inp_vcd.c:1884 +#: src/input/vcd/xineplug_inp_vcd.c:1889 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are:\n" @@ -3286,11 +3330,11 @@ msgstr "" " %v : l'ID del volume (un numero tra 1 e il totale di volumi).\n" " %% : un simbolo %\n" -#: src/input/vcd/xineplug_inp_vcd.c:1909 +#: src/input/vcd/xineplug_inp_vcd.c:1914 msgid "VCD format string for stream comment field" msgstr "Stringa di formato utilizzata per il campo di commento del flusso" -#: src/input/vcd/xineplug_inp_vcd.c:1910 +#: src/input/vcd/xineplug_inp_vcd.c:1915 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are %A, %C, %c, %F, %I, %L, " @@ -3303,11 +3347,11 @@ msgstr "" "T e %%.\n" "Si veda la descrizione di title_format per il loro significato." -#: src/input/vcd/xineplug_inp_vcd.c:1922 +#: src/input/vcd/xineplug_inp_vcd.c:1927 msgid "VCD debug flag mask" msgstr "Flag di debug per VCD" -#: src/input/vcd/xineplug_inp_vcd.c:1923 +#: src/input/vcd/xineplug_inp_vcd.c:1928 msgid "" "For tracking down bugs in the VCD plugin. Mask values are:\n" " 1: Meta information\n" @@ -3466,11 +3510,11 @@ msgstr "" "Il percorso al dispositivo, solitamente un lettore DVD, che si intende usare " "per riprodurre DVD." -#: src/input/input_dvd.c:1803 +#: src/input/input_dvd.c:1804 msgid "raw device set up for DVD access" msgstr "dispositivo diretto impostato per l'accesso DVD" -#: src/input/input_dvd.c:1804 +#: src/input/input_dvd.c:1805 msgid "" "If this points to a raw device connected to your DVD device, xine will use " "the raw device for playback. This has the advantage of being slightly faster " @@ -3490,11 +3534,11 @@ msgstr "" "Si veda la documentazione sull'impostazione dei dispositivi diretti (man " "raw) per maggiori informazioni." -#: src/input/input_dvd.c:1817 +#: src/input/input_dvd.c:1818 msgid "CSS decryption method" msgstr "Metodo di decifratura CSS" -#: src/input/input_dvd.c:1818 +#: src/input/input_dvd.c:1819 msgid "" "Selects the decryption method libdvdcss will use to descramble copy " "protected DVDs. Try the various methods, if you have problems playing " @@ -3504,11 +3548,11 @@ msgstr "" "DVD protetti da copia. Si provino i vari metodi se si hanno problemi nella " "riproduzione di DVD cifrati." -#: src/input/input_dvd.c:1826 +#: src/input/input_dvd.c:1827 msgid "path to the title key cache" msgstr "percorso alla cache delle chiavi dei titoli" -#: src/input/input_dvd.c:1827 +#: src/input/input_dvd.c:1828 msgid "" "Since cracking the copy protection of scrambled DVDs can be quite time " "consuming, libdvdcss will cache the cracked keys in this directory.\n" @@ -3523,11 +3567,11 @@ msgstr "" "dedicata non utilizzata per altri scopi oltre alla memorizzazioni delle " "chiavi DVD." -#: src/input/input_dvd.c:1849 +#: src/input/input_dvd.c:1850 msgid "region the DVD player claims to be in (1 to 8)" msgstr "regione a cui il lettore DVD dirà di appartenere (da 1 a 8)" -#: src/input/input_dvd.c:1850 +#: src/input/input_dvd.c:1851 msgid "" "This only needs to be changed if your DVD jumps to a screen complaining " "about a wrong region code. It has nothing to do with the region code set in " @@ -3538,11 +3582,11 @@ msgstr "" "nulla a che vedere con il codice regionale settato nei lettori DVD, è " "interamente software." -#: src/input/input_dvd.c:1856 +#: src/input/input_dvd.c:1857 msgid "default language for DVD playback" msgstr "lingua predefinita per la riproduzione DVD" -#: src/input/input_dvd.c:1857 +#: src/input/input_dvd.c:1858 msgid "" "xine tries to use this language as a default for DVD playback. As far as the " "DVD supports it, menus and audio tracks will be presented in this language.\n" @@ -3553,11 +3597,11 @@ msgstr "" "questa lingua.\n" "Questo valore deve essere un codice di lingua di due caratteri ISO639." -#: src/input/input_dvd.c:1863 +#: src/input/input_dvd.c:1864 msgid "read-ahead caching" msgstr "read-ahead caching" -#: src/input/input_dvd.c:1864 +#: src/input/input_dvd.c:1865 msgid "" "xine can use a read ahead cache for DVD drive access.\n" "This may lead to jerky playback on slow drives, but it improves the impact " @@ -3567,11 +3611,11 @@ msgstr "" "Questo può portare a cattiva riproduzione su lettori lenti, ma migliora " "l'impatto con il cambio di strato nel DVD sui lettori più veloci." -#: src/input/input_dvd.c:1870 +#: src/input/input_dvd.c:1871 msgid "unit for the skip action" msgstr "unità per l'azione di salto" -#: src/input/input_dvd.c:1871 +#: src/input/input_dvd.c:1872 msgid "" "You can configure the behaviour when issuing a skip command (using the skip " "buttons for example). The individual values mean:\n" @@ -3605,11 +3649,11 @@ msgstr "" "salterà un titolo DVD, un'unità strutturale che rappresenta intere " "funzionalità sul DVD." -#: src/input/input_dvd.c:1886 +#: src/input/input_dvd.c:1887 msgid "unit for seeking" msgstr "unità per la ricerca" -#: src/input/input_dvd.c:1887 +#: src/input/input_dvd.c:1888 msgid "" "You can configure the domain spanned by the seek slider. The individual " "values mean:\n" @@ -3634,11 +3678,11 @@ msgstr "" "la ricerca sarà effettuata su un programma DVD, che è un'unità di " "navigazione che rappresenta un capitolo della corrente funzionalità ." -#: src/input/input_dvd.c:1898 +#: src/input/input_dvd.c:1899 msgid "play mode when title/chapter is given" msgstr "modalità di riproduzione quando si fornisce un titolo/capitolo" -#: src/input/input_dvd.c:1899 +#: src/input/input_dvd.c:1900 msgid "" "You can configure the behaviour when playing a dvd from a given title/" "chapter (eg. using MRL 'dvd:/1.2'). The individual values mean:\n" @@ -3824,11 +3868,11 @@ msgstr "" msgid "DVB (Digital TV) input plugin" msgstr "plugin di input per DVB (TV Digitale)" -#: src/input/input_dvb.c:3238 +#: src/input/input_dvb.c:3237 msgid "Remember last DVB channel watched" msgstr "Ricorda l'ultimo canale DVB visto." -#: src/input/input_dvb.c:3239 +#: src/input/input_dvb.c:3238 msgid "" "On autoplay, xine will remember and switch to the channel indicated in media." "dvb.last_channel. " @@ -3836,19 +3880,19 @@ msgstr "" "Durante l'auto riproduzione xine ricorderà e scambierà al canale indicato in " "media.dvb.last_channel ." -#: src/input/input_dvb.c:3246 +#: src/input/input_dvb.c:3245 msgid "Last DVB channel viewed" msgstr "Ultimo canale DVB visto" -#: src/input/input_dvb.c:3247 +#: src/input/input_dvb.c:3246 msgid "If enabled xine will remember and switch to this channel. " msgstr "Se abilitato xine ricorderà e scambierà a questo canale." -#: src/input/input_dvb.c:3253 +#: src/input/input_dvb.c:3252 msgid "Number of dvb card to use." msgstr "Indice di scheda DVB da utilizzare." -#: src/input/input_dvb.c:3254 +#: src/input/input_dvb.c:3253 msgid "" "Leave this at zero unless you really have more than 1 card in your system." msgstr "" @@ -3988,75 +4032,75 @@ msgstr "" "dovrebbe influenzare le prestazioni di riproduzione.\n" "Un valore pari a zero disabilita il rallentamento." -#: src/input/input_rtp.c:182 +#: src/input/input_rtp.c:185 #, c-format msgid "socket(): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:192 +#: src/input/input_rtp.c:195 msgid "IP address specified is multicast\n" msgstr "L'indirizzo IP specificato è multicast\n" -#: src/input/input_rtp.c:201 +#: src/input/input_rtp.c:204 #, c-format msgid "setsockopt(SO_RCVBUF): %s.\n" msgstr "setsockopt(SO_RCVBUF): %s.\n" -#: src/input/input_rtp.c:209 +#: src/input/input_rtp.c:212 #, c-format msgid "setsockopt(SO_REUSEADDR): %s.\n" msgstr "setsockopt(SO_REUSEADDR): %s.\n" -#: src/input/input_rtp.c:216 +#: src/input/input_rtp.c:219 #, c-format msgid "bind(): %s.\n" msgstr "bind(): %s.\n" -#: src/input/input_rtp.c:236 +#: src/input/input_rtp.c:239 #, c-format msgid "Can't find address for iface %s:%s\n" msgstr "Impossibile trovare l'indirizzo per l'interfaccia %s: %s\n" -#: src/input/input_rtp.c:254 +#: src/input/input_rtp.c:257 #, c-format msgid "setsockopt(IP_ADD_MEMBERSHIP) failed (multicast kernel?): %s.\n" msgstr "" "setsockopt(IP_ADD_MEMBERSHIP) non riuscito (multicast del kernel?): %s.\n" -#: src/input/input_rtp.c:276 +#: src/input/input_rtp.c:279 #, c-format msgid "unable to resolve '%s'.\n" msgstr "impossibile risolvere '%s'.\n" -#: src/input/input_rtp.c:286 +#: src/input/input_rtp.c:289 #, c-format msgid "unable to bind to '%s'.\n" msgstr "impossibile fare il bind a '%s'.\n" -#: src/input/input_rtp.c:314 +#: src/input/input_rtp.c:317 #, c-format msgid "recv(): %s.\n" msgstr "recv(): %s.\n" -#: src/input/input_rtp.c:602 +#: src/input/input_rtp.c:605 msgid "RTP: stopping reading thread...\n" msgstr "RTP: interruzione di lettura di thread...\n" -#: src/input/input_rtp.c:605 +#: src/input/input_rtp.c:608 msgid "RTP: reading thread terminated\n" msgstr "RTP: lettura thread terminata\n" -#: src/input/input_rtp.c:620 +#: src/input/input_rtp.c:623 #, c-format msgid "Opening >filename:%s port:%d interface:%s<\n" msgstr "Apertura in corso > nome del file: %s porta: %d interfaccia: %s<\n" -#: src/input/input_rtp.c:637 +#: src/input/input_rtp.c:640 #, c-format msgid "input_rtp: can't create new thread (%s)\n" msgstr "input_rtp: impossibile creare nuova thread (%s)\n" -#: src/input/input_rtp.c:743 +#: src/input/input_rtp.c:746 msgid "RTP and UDP input plugin as shipped with xine" msgstr "plugin input RTP e UDP tarsportati così con xine" @@ -4070,16 +4114,30 @@ msgstr "rtsp: MRL errata: %s\n" msgid "rtsp: failed to connect to '%s'\n" msgstr "rtsp: connessione a '%s' fallita.\n" -#: src/input/librtsp/rtsp_session.c:84 +#: src/input/librtsp/rtsp_session.c:93 src/input/input_mms.c:479 +msgid "network bandwidth" +msgstr "larghezza di banda" + +#: src/input/librtsp/rtsp_session.c:94 src/input/input_mms.c:480 +msgid "" +"Specify the bandwidth of your internet connection here. This will be used " +"when streaming servers offer different versions with different bandwidth " +"requirements of the same stream." +msgstr "" +"Specifica la larghezza di banda della propria connessione ad Internet. " +"Questa sarà utilizzata quando i server di streaming offrano versioni diverse " +"con diversi requisiti di banda dello stesso flusso." + +#: src/input/librtsp/rtsp_session.c:109 #, c-format msgid "rtsp_session: failed to connect to server %s\n" msgstr "rtsp_session: connessione al server fallita: %s\n" -#: src/input/librtsp/rtsp_session.c:118 +#: src/input/librtsp/rtsp_session.c:143 msgid "rtsp_session: session can not be established.\n" msgstr "rtsp_session: impossibile stabilire una sessione.\n" -#: src/input/librtsp/rtsp_session.c:135 +#: src/input/librtsp/rtsp_session.c:161 #, c-format msgid "rtsp_session: rtsp server type '%s' not supported yet. sorry.\n" msgstr "rtsp_session: il tipo di server rtsp '%s' non è supportato.\n" @@ -4128,41 +4186,45 @@ msgstr "Il percorso al proprio dispositivo radio Video4Linux," msgid "pnm streaming input plugin" msgstr "plugin di input per lo stream pnm" -#: src/input/mmsh.c:195 +#: src/input/mmsh.c:201 msgid "libmmsh: send error\n" msgstr "libmmsh: errore di invio\n" -#: src/input/mmsh.c:240 +#: src/input/mmsh.c:246 +#, c-format msgid "libmmsh: bad response format\n" msgstr "libmmsh: formato di risposta non valido.\n" -#: src/input/mmsh.c:246 +#: src/input/mmsh.c:252 #, c-format msgid "libmmsh: 3xx redirection not implemented: >%d %s<\n" msgstr "libmmsh: redirezione 3xx non implementata: >%d %s<\n" -#: src/input/mmsh.c:253 +#: src/input/mmsh.c:259 #, c-format msgid "libmmsh: http status not 2xx: >%d %s<\n" msgstr "libmmsh: lo stato di ritorno HTTP non è 2xx: >%d %s<\n" -#: src/input/mmsh.c:261 +#: src/input/mmsh.c:267 +#, c-format msgid "libmmsh: Location redirection not implemented\n" msgstr "libmmsh: redirezione Location non implementata\n" -#: src/input/mmsh.c:471 +#: src/input/mmsh.c:476 msgid "Connecting MMS server (over http)..." msgstr "Connessione al server MMS (tramite http)..." -#: src/input/mmsh.c:639 +#: src/input/mmsh.c:657 +#, c-format msgid "invalid url\n" msgstr "url non valido\n" -#: src/input/mmsh.c:644 +#: src/input/mmsh.c:662 +#, c-format msgid "unsupported protocol\n" msgstr "protocollo non supportato\n" -#: src/input/mms.c:537 +#: src/input/mms.c:561 msgid "Connecting MMS server (over tcp)..." msgstr "Connessione in corso al server MMS (su TCP)..." @@ -4184,33 +4246,19 @@ msgstr "input_pnm: connessione fallita '%s'\n" msgid "input_pnm: failed to set up stream\n" msgstr "input_pnm: impostazione dello stream fallita.\n" -#: src/input/input_smb.c:154 +#: src/input/input_smb.c:158 msgid "CIFS/SMB input plugin based on libsmbclient" msgstr "Plugin di ingresso CIFS/SMB basato su libsmbclient" -#: src/input/input_mms.c:420 +#: src/input/input_mms.c:443 msgid "mms streaming input plugin" msgstr "plugin di ingresso per stream MMS" -#: src/input/input_mms.c:456 -msgid "network bandwidth" -msgstr "larghezza di banda" - -#: src/input/input_mms.c:457 -msgid "" -"Specify the bandwidth of your internet connection here. This will be used " -"when streaming servers offer different versions with different bandwidth " -"requirements of the same stream." -msgstr "" -"Specifica la larghezza di banda della propria connessione ad Internet. " -"Questa sarà utilizzata quando i server di streaming offrano versioni diverse " -"con diversi requisiti di banda dello stesso flusso." - -#: src/input/input_mms.c:466 +#: src/input/input_mms.c:489 msgid "MMS protocol" msgstr "Protocollo MMS" -#: src/input/input_mms.c:467 +#: src/input/input_mms.c:490 msgid "" "Select the protocol to encapsulate MMS.\n" "TCP is better but you may need HTTP behind a firewall." @@ -4223,81 +4271,82 @@ msgstr "" msgid "input_http: gethostbyname(%s) failed: %s\n" msgstr "input_http: gethostbyname(%s) fallito: %s\n" -#: src/input/input_http.c:403 src/input/input_http.c:949 +#: src/input/input_http.c:400 src/input/input_http.c:941 #, c-format msgid "input_http: read error %d\n" msgstr "input_http: errore di lettura %d\n" -#: src/input/input_http.c:630 +#: src/input/input_http.c:627 msgid "Connecting HTTP server..." msgstr "Connessione in corso al server HTTP..." -#: src/input/input_http.c:824 +#: src/input/input_http.c:816 +#, c-format msgid "input_http: invalid http answer\n" msgstr "input_http: risposta http non valida\n" -#: src/input/input_http.c:831 +#: src/input/input_http.c:823 #, c-format msgid "input_http: 3xx redirection: >%d %s<\n" msgstr "input_http: 3xx ridirezione: >%d %s<\n" -#: src/input/input_http.c:836 src/input/input_http.c:842 -#: src/input/input_http.c:849 +#: src/input/input_http.c:828 src/input/input_http.c:834 +#: src/input/input_http.c:841 #, c-format msgid "input_http: http status not 2xx: >%d %s<\n" msgstr "input_http: lo stato di http non è 2xx: >%d %s<\n" -#: src/input/input_http.c:859 +#: src/input/input_http.c:851 #, c-format msgid "input_http: content length = %<PRIdMAX> bytes\n" msgstr "input_httml: lunghezza del contenuto = %<PRIdMAX> byte\n" -#: src/input/input_http.c:928 +#: src/input/input_http.c:920 #, c-format msgid "input_http: buffer exhausted after %d bytes." msgstr "input_http: buffer esaurito dopo %d byte." -#: src/input/input_http.c:1002 +#: src/input/input_http.c:994 msgid "http input plugin" msgstr "plugin di ingresso http" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "HTTP proxy host" msgstr "Server proxy HTTP" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "The hostname of the HTTP proxy." msgstr "Nome del proxy HTTP" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "HTTP proxy port" msgstr "Porta proxy HTTP" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "The port number of the HTTP proxy." msgstr "Il numero di porta del proxy HTTP" -#: src/input/input_http.c:1082 +#: src/input/input_http.c:1074 msgid "HTTP proxy username" msgstr "Nome utente proxy HTTP" -#: src/input/input_http.c:1083 +#: src/input/input_http.c:1075 msgid "The user name for the HTTP proxy." msgstr "Il nome utente per il proxy HTTP" -#: src/input/input_http.c:1086 +#: src/input/input_http.c:1078 msgid "HTTP proxy password" msgstr "Password proxy HTTP" -#: src/input/input_http.c:1087 +#: src/input/input_http.c:1079 msgid "The password for the HTTP proxy." msgstr "La password per il proxy HTTP" -#: src/input/input_http.c:1090 +#: src/input/input_http.c:1082 msgid "Domains for which to ignore the HTTP proxy" msgstr "Domini per cui si vuole ignorare il proxy HTTP" -#: src/input/input_http.c:1091 +#: src/input/input_http.c:1083 msgid "" "A comma-separated list of domain names for which the proxy is to be " "ignored.\n" @@ -4315,7 +4364,7 @@ msgid "input_dvd: Device %s failed to open during eject calls\n" msgstr "" "input_dvd: l'apertura del dispositivo %s è fallita durante l'espulsione.\n" -#: src/input/input_rtsp.c:274 +#: src/input/input_rtsp.c:284 msgid "rtsp streaming input plugin" msgstr "plugin di input per lo stream rtsp" @@ -4324,30 +4373,35 @@ msgid "dvbsub: cannot create timer thread\n" msgstr "dvbsub: impossibile creare thread timer\n" #: src/libxinevdec/bitplane.c:1272 +#, c-format msgid "bitplane: error doing ByteRun1 decompression\n" msgstr "bitplane: errore durante la decompressione ByteRun1\n" #: src/libxinevdec/bitplane.c:1331 +#, c-format msgid "bitplane: Anim Opt 1 is not supported at the moment\n" msgstr "bitplane: Anim Opt 1 non supportata al momento\n" #: src/libxinevdec/bitplane.c:1338 +#, c-format msgid "bitplane: Anim Opt 2 is not supported at the moment\n" msgstr "bitplane: Anim Opt 2 non supportata al momento\n" #: src/libxinevdec/bitplane.c:1388 +#, c-format msgid "bitplane: Anim ASCIIJ is not supported at the moment\n" msgstr "bitplane: Anim ASCIIJ non supportata al momento\n" #: src/libxinevdec/bitplane.c:1394 +#, c-format msgid "bitplane: This anim-type is not supported at the moment\n" msgstr "bitplane: questo tipo di Anim non è supportato al momento\n" -#: src/libsputext/demux_sputext.c:1507 +#: src/libsputext/demux_sputext.c:1506 msgid "default duration of subtitle display in seconds" msgstr "durata predefinita dei sottotitoli in secondi" -#: src/libsputext/demux_sputext.c:1508 +#: src/libsputext/demux_sputext.c:1507 msgid "" "Some subtitle formats do not explicitly give a duration for each subtitle. " "For these, you can set a default duration here. Setting to zero will result " @@ -4358,11 +4412,11 @@ msgstr "" "qui. Utilizzando zero il sottotitolo sarà visualizzato finché il successivo " "non ne prende il posto." -#: src/libsputext/xine_decoder.c:913 +#: src/libsputext/xine_decoder.c:948 msgid "subtitle size" msgstr "dimensione del sottotitolo" -#: src/libsputext/xine_decoder.c:914 +#: src/libsputext/xine_decoder.c:949 msgid "" "You can adjust the subtitle size here. The setting will be evaluated " "relative to the window size." @@ -4370,11 +4424,11 @@ msgstr "" "Potete qui impostare la dimensione del sottotitolo, l'impostazione sarà " "valutata relativamente alla dimensione della finestra." -#: src/libsputext/xine_decoder.c:920 +#: src/libsputext/xine_decoder.c:955 msgid "subtitle vertical offset" msgstr "Spostamento verticale sottotitolo" -#: src/libsputext/xine_decoder.c:921 +#: src/libsputext/xine_decoder.c:956 msgid "" "You can adjust the vertical position of the subtitle. The setting will be " "evaluated relative to the window size." @@ -4382,21 +4436,32 @@ msgstr "" "Si può calibrare la posizione verticale del sottotitolo, l'impostazione sarà " "valutata relativamente alla dimensione della finestra." -#: src/libsputext/xine_decoder.c:927 +#: src/libsputext/xine_decoder.c:962 src/libsputext/xine_decoder.c:971 msgid "font for subtitles" msgstr "Carattere per sottotitoli" -#: src/libsputext/xine_decoder.c:928 +#: src/libsputext/xine_decoder.c:963 msgid "A font from the xine font directory to be used for the subtitle text." msgstr "" "Un carattere della directory di caratteri di xine da utilizzare per il testo " "del sottotitolo." -#: src/libsputext/xine_decoder.c:935 +#: src/libsputext/xine_decoder.c:972 +#, fuzzy +msgid "An outline font file (e.g. a .ttf) to be used for the subtitle text." +msgstr "" +"Un carattere della directory di caratteri di xine da utilizzare per il testo " +"del sottotitolo." + +#: src/libsputext/xine_decoder.c:978 +msgid "whether to use a freetype font" +msgstr "" + +#: src/libsputext/xine_decoder.c:985 msgid "encoding of the subtitles" msgstr "Codifica dei sottotitoli" -#: src/libsputext/xine_decoder.c:936 +#: src/libsputext/xine_decoder.c:986 msgid "" "The encoding of the subtitle text in the stream. This setting is used to " "render non-ASCII characters correctly. If non-ASCII characters are not " @@ -4408,11 +4473,11 @@ msgstr "" "caratteri non-ASCII non sono visualizzati correttamente, chiedere al " "creatore dei sottotitoli quale codifica è stata usata." -#: src/libsputext/xine_decoder.c:944 +#: src/libsputext/xine_decoder.c:994 msgid "use unscaled OSD if possible" msgstr "utilizza OSD non ridimensionato se possibile" -#: src/libsputext/xine_decoder.c:945 +#: src/libsputext/xine_decoder.c:995 msgid "" "The unscaled OSD will be rendered independently of the video frame and will " "always be sharp, even if the video is magnified. This will look better, but " @@ -4926,11 +4991,11 @@ msgstr "libareal: setup del tipo di decoder fallito, codice di errore: 0x%x\n" msgid "libareal: oups, real can do more than 2 channels ?\n" msgstr "libareal: ops, real può usare più di 2 canali?\n" -#: src/libreal/audio_decoder.c:745 src/libreal/xine_decoder.c:638 +#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 msgid "path to RealPlayer codecs" msgstr "percorso ai codecs RealPlayer" -#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 +#: src/libreal/audio_decoder.c:747 src/libreal/xine_decoder.c:640 msgid "" "If you have RealPlayer installed, specify the path to its codec directory " "here. You can easily find the codec directory by looking for a file named " @@ -5408,6 +5473,7 @@ msgstr "" "demux_avi: parte di avi non valida \"%c%c%c%c\" alla posizione %<PRIdMAX>\n" #: src/demuxers/demux_avi.c:828 +#, c-format msgid "demux_avi: avi index is broken\n" msgstr "demux_avi: l'indice avi è interrotto\n" @@ -5422,23 +5488,25 @@ msgid "demux_mpc: frame too big for buffer" msgstr "demux_mpc: frame troppo grande per il buffer" #: src/demuxers/demux_film.c:188 +#, c-format msgid "invalid FILM chunk size\n" msgstr "dimensione di parte di FILM non valida\n" #: src/demuxers/demux_film.c:342 +#, c-format msgid "unrecognized FILM chunk\n" msgstr "parte di FILM non roconosciuta\n" -#: src/demuxers/demux_asf.c:423 +#: src/demuxers/demux_asf.c:425 #, c-format msgid "demux_asf: warning: The stream id=%d is encrypted.\n" msgstr "demux_asf: attenzione: L'id dello stream =%d è cifrato.\n" -#: src/demuxers/demux_asf.c:425 +#: src/demuxers/demux_asf.c:427 msgid "Media stream scrambled/encrypted" msgstr "Stream multimediale confuso/cifrato" -#: src/demuxers/demux_asf.c:1633 +#: src/demuxers/demux_asf.c:1634 #, c-format msgid "demux_asf: Wrong ASX version: %s\n" msgstr "demux_asf: versione ASX errata: %s\n" @@ -5473,7 +5541,8 @@ msgstr "" "tipo di compressione VOC sconosciuta (0x%02X); per favore riporta l'errore " "ai sviluppatori di xine\n" -#: src/demuxers/demux_ogg.c:797 +#: src/demuxers/demux_ogg.c:801 +#, c-format msgid "ogg: vorbis audio track indicated but no vorbis stream header found.\n" msgstr "" "ogg: indicata traccia audio vorbis ma nessuno stream di intestazione vorbis " @@ -5496,6 +5565,7 @@ msgstr "" "di xine.\n" #: src/demuxers/demux_mpeg_block.c:640 +#, c-format msgid "demux_mpeg_block: warning: PES header reserved 10 bits not found\n" msgstr "" "demux_mpeg_block: attenzione: l'intestazione PES ha riservato 10 bit non " @@ -5527,6 +5597,7 @@ msgstr "" "decodifica.\n" #: src/demuxers/demux_mpeg_pes.c:771 +#, c-format msgid "demux_mpeg_pes: warning: PES header reserved 10 bits not found\n" msgstr "" "demux_mpeg_pes: attenzione: l'intestazione PES ha riservato 10 bit non " @@ -5558,12 +5629,14 @@ msgstr "" "d)\n" #: src/demuxers/demux_wc3movie.c:406 +#, c-format msgid "demux_wc3movie: There was a problem while loading palette chunks\n" msgstr "" "demux_wc3movie: Si è verificato un problema durante il caricamento di un " "grossi pezzi di palette\n" #: src/demuxers/demux_snd.c:104 +#, c-format msgid "demux_snd: bad header parameters\n" msgstr "demux_snd: paramentri intestazione errati\n" @@ -5621,65 +5694,65 @@ msgstr "" "La compressione massima da applicare ad un'immagine utilizzando una modalità " "a qualità costante." -#: src/libffmpeg/audio_decoder.c:117 +#: src/libffmpeg/audio_decoder.c:120 #, c-format msgid "ffmpeg_audio_dec: increasing buffer to %d to avoid overflow.\n" msgstr "ffmpeg_audio_dec: aumentando il buffer a %d per evitare overflow.\n" -#: src/libffmpeg/audio_decoder.c:161 +#: src/libffmpeg/audio_decoder.c:164 #, c-format msgid "ffmpeg_audio_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" "ffmpeg_audio_dec: impossibile trovare il decoder ffmpeg per il tipo di " "buffer 0x%X\n" -#: src/libffmpeg/audio_decoder.c:253 +#: src/libffmpeg/audio_decoder.c:256 msgid "ffmpeg_audio_dec: trying to open null codec\n" msgstr "ffmpeg_audio_dec: provando ad aprire un codec nullo.\n" -#: src/libffmpeg/audio_decoder.c:262 +#: src/libffmpeg/audio_decoder.c:265 msgid "ffmpeg_audio_dec: couldn't open decoder\n" msgstr "ffmpeg_audio_dec: impossibile aprire il decoder.\n" -#: src/libffmpeg/dvaudio_decoder.c:302 +#: src/libffmpeg/dvaudio_decoder.c:286 #, c-format msgid "dvaudio: increasing buffer to %d to avoid overflow.\n" msgstr "dvaudio: aumentando il buffer a %d per evitare overflow.\n" -#: src/libffmpeg/video_decoder.c:153 +#: src/libffmpeg/video_decoder.c:156 msgid "ffmpeg_video_dec: unsupported frame format, DR1 disabled.\n" msgstr "ffmpeg_video_dec: formato frame non supportato, DR1 disabilitato.\n" -#: src/libffmpeg/video_decoder.c:171 +#: src/libffmpeg/video_decoder.c:174 msgid "ffmpeg_video_dec: unsupported frame dimensions, DR1 disabled.\n" msgstr "" "ffmpeg_video_dec: dimensioni del frame non supportate. DR1 disabilitato.\n" -#: src/libffmpeg/video_decoder.c:319 +#: src/libffmpeg/video_decoder.c:334 #, c-format msgid "ffmpeg_video_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" "ffmpeg_video_dec: impossibile trovare il decoder ffmpeg per il tipo di " "buffer 0x%X\n" -#: src/libffmpeg/video_decoder.c:348 +#: src/libffmpeg/video_decoder.c:363 msgid "ffmpeg_video_dec: couldn't open decoder\n" msgstr "ffmpeg_video_dec: impossibile aprire il decoder\n" -#: src/libffmpeg/video_decoder.c:383 +#: src/libffmpeg/video_decoder.c:398 msgid "ffmpeg_video_dec: direct rendering enabled\n" msgstr "ffmpeg_video_dec: visualizzazione diretta abilitata\n" -#: src/libffmpeg/video_decoder.c:802 +#: src/libffmpeg/video_decoder.c:817 #, c-format msgid "ffmpeg_video_dec: increasing buffer to %d to avoid overflow.\n" msgstr "ffmpeg_video_dec: buffer aumentato a %d per evitare overflow.\n" -#: src/libffmpeg/video_decoder.c:1474 +#: src/libffmpeg/video_decoder.c:1510 msgid "MPEG-4 postprocessing quality" msgstr "qualità di post-elaborazione MPEG-4" -#: src/libffmpeg/video_decoder.c:1475 +#: src/libffmpeg/video_decoder.c:1511 msgid "" "You can adjust the amount of post processing applied to MPEG-4 video.\n" "Higher values result in better quality, but need more CPU. Lower values may " diff --git a/po/libxine1.pot b/po/libxine1.pot index 8f25b085f..28167fca3 100644 --- a/po/libxine1.pot +++ b/po/libxine1.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: xine-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2006-11-29 23:07+0100\n" +"POT-Creation-Date: 2007-01-26 18:31+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -94,6 +94,7 @@ msgid "w32codec: decoder failed to start. Is '%s' installed?\n" msgstr "" #: src/libw32dll/w32codec.c:1221 +#, c-format msgid "w32codec: (ACM_Decoder) Unappropriate audio format\n" msgstr "" @@ -103,10 +104,12 @@ msgid "w32codec: (ACM_Decoder) acmStreamOpen error %d\n" msgstr "" #: src/libw32dll/w32codec.c:1243 +#, c-format msgid "w32codec: Error initializing DirectShow Audio\n" msgstr "" #: src/libw32dll/w32codec.c:1261 +#, c-format msgid "w32codec: Error initializing DMO Audio\n" msgstr "" @@ -303,16 +306,16 @@ msgstr "" msgid "xine output plugin for Coreaudio/Mac OS X" msgstr "" -#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:919 +#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:920 #, c-format msgid "audio_sun_out: opening audio device %s failed: %s\n" msgstr "" -#: src/audio_out/audio_sun_out.c:894 +#: src/audio_out/audio_sun_out.c:895 msgid "Sun audio device name" msgstr "" -#: src/audio_out/audio_sun_out.c:895 +#: src/audio_out/audio_sun_out.c:896 msgid "" "Specifies the file name for the Sun audio device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -320,12 +323,12 @@ msgid "" "careful that the value you enter really is a proper Sun audio device." msgstr "" -#: src/audio_out/audio_sun_out.c:937 +#: src/audio_out/audio_sun_out.c:938 #, c-format msgid "audio_sun_out: audio ioctl on device %s failed: %s\n" msgstr "" -#: src/audio_out/audio_sun_out.c:988 +#: src/audio_out/audio_sun_out.c:989 msgid "xine audio output plugin using sun-compliant audio devices/drivers" msgstr "" @@ -414,10 +417,12 @@ msgid "unknown error" msgstr "" #: src/audio_out/audio_directx2_out.c:206 +#, c-format msgid "Unable to create direct sound object." msgstr "" #: src/audio_out/audio_directx2_out.c:212 +#, c-format msgid "Could not set direct sound cooperative level." msgstr "" @@ -426,6 +431,7 @@ msgid "Unable to create secondary direct sound buffer" msgstr "" #: src/audio_out/audio_directx2_out.c:310 +#, c-format msgid "Unable to create buffer position events." msgstr "" @@ -458,6 +464,7 @@ msgid "Can't set sound volume" msgstr "" #: src/audio_out/audio_directx2_out.c:432 +#, c-format msgid ": buffer lost, tryig to restore\n" msgstr "" @@ -470,10 +477,12 @@ msgid "Couldn't unlock direct sound buffer" msgstr "" #: src/audio_out/audio_directx2_out.c:544 +#, c-format msgid "Unable to create primary direct sound buffer." msgstr "" #: src/audio_out/audio_directx2_out.c:637 +#, c-format msgid ": play cursor overran, flushing buffers\n" msgstr "" @@ -534,6 +543,7 @@ msgid "xine audio output plugin for win32 using directx" msgstr "" #: src/audio_out/audio_alsa_out.c:355 +#, c-format msgid "audio_alsa_out:Already open...WHY!" msgstr "" @@ -634,6 +644,7 @@ msgid "snd_pcm_open() failed:%d:%s\n" msgstr "" #: src/audio_out/audio_alsa_out.c:1428 +#, c-format msgid ">>> Check if another program already uses PCM <<<\n" msgstr "" @@ -770,6 +781,7 @@ msgid "xine audio output plugin using pulseaudio sound server" msgstr "" #: src/xine-engine/io_helper.c:252 +#, c-format msgid "io_helper: waiting abandoned\n" msgstr "" @@ -783,14 +795,17 @@ msgid "failed to get status of socket" msgstr "" #: src/xine-engine/io_helper.c:388 +#, c-format msgid "io_helper: Permission denied\n" msgstr "" #: src/xine-engine/io_helper.c:392 +#, c-format msgid "io_helper: File not found\n" msgstr "" #: src/xine-engine/io_helper.c:396 +#, c-format msgid "io_helper: Connection Refused\n" msgstr "" @@ -833,122 +848,127 @@ msgid "" "accelerated, this can dramatically reduce CPU usage." msgstr "" -#: src/xine-engine/xine.c:696 src/xine-engine/xine.c:803 -#: src/xine-engine/xine.c:842 src/xine-engine/xine.c:878 -#: src/xine-engine/xine.c:890 src/xine-engine/xine.c:903 -#: src/xine-engine/xine.c:916 src/xine-engine/xine.c:929 -#: src/xine-engine/xine.c:955 src/xine-engine/xine.c:980 -#: src/xine-engine/xine.c:1015 +#: src/xine-engine/xine.c:704 src/xine-engine/xine.c:811 +#: src/xine-engine/xine.c:850 src/xine-engine/xine.c:886 +#: src/xine-engine/xine.c:898 src/xine-engine/xine.c:911 +#: src/xine-engine/xine.c:924 src/xine-engine/xine.c:937 +#: src/xine-engine/xine.c:963 src/xine-engine/xine.c:988 +#: src/xine-engine/xine.c:1023 msgid "xine: error while parsing mrl\n" msgstr "" -#: src/xine-engine/xine.c:732 +#: src/xine-engine/xine.c:740 #, c-format msgid "xine: found input plugin : %s\n" msgstr "" -#: src/xine-engine/xine.c:750 +#: src/xine-engine/xine.c:758 #, c-format msgid "xine: input plugin cannot open MRL [%s]\n" msgstr "" -#: src/xine-engine/xine.c:766 +#: src/xine-engine/xine.c:774 #, c-format msgid "xine: cannot find input plugin for MRL [%s]\n" msgstr "" -#: src/xine-engine/xine.c:792 +#: src/xine-engine/xine.c:800 #, c-format msgid "xine: specified demuxer %s failed to start\n" msgstr "" -#: src/xine-engine/xine.c:828 +#: src/xine-engine/xine.c:836 +#, c-format msgid "xine: join rip input plugin\n" msgstr "" -#: src/xine-engine/xine.c:835 +#: src/xine-engine/xine.c:843 msgid "xine: error opening rip input plugin instance\n" msgstr "" -#: src/xine-engine/xine.c:866 +#: src/xine-engine/xine.c:874 #, c-format msgid "xine: last_probed demuxer %s failed to start\n" msgstr "" -#: src/xine-engine/xine.c:895 +#: src/xine-engine/xine.c:903 msgid "ignoring video\n" msgstr "" -#: src/xine-engine/xine.c:908 +#: src/xine-engine/xine.c:916 msgid "ignoring audio\n" msgstr "" -#: src/xine-engine/xine.c:921 +#: src/xine-engine/xine.c:929 msgid "ignoring subpicture\n" msgstr "" -#: src/xine-engine/xine.c:934 +#: src/xine-engine/xine.c:942 msgid "input cache plugin disabled\n" msgstr "" -#: src/xine-engine/xine.c:1005 +#: src/xine-engine/xine.c:1013 #, c-format msgid "subtitle mrl opened '%s'\n" msgstr "" -#: src/xine-engine/xine.c:1009 +#: src/xine-engine/xine.c:1017 msgid "xine: error opening subtitle mrl\n" msgstr "" -#: src/xine-engine/xine.c:1041 +#: src/xine-engine/xine.c:1049 +#, c-format msgid "xine: error while parsing MRL\n" msgstr "" -#: src/xine-engine/xine.c:1048 +#: src/xine-engine/xine.c:1056 #, c-format msgid "xine: changing option '%s' from MRL isn't permitted\n" msgstr "" -#: src/xine-engine/xine.c:1068 +#: src/xine-engine/xine.c:1076 #, c-format msgid "xine: couldn't find demux for >%s<\n" msgstr "" -#: src/xine-engine/xine.c:1084 +#: src/xine-engine/xine.c:1092 #, c-format msgid "xine: found demuxer plugin: %s\n" msgstr "" -#: src/xine-engine/xine.c:1104 +#: src/xine-engine/xine.c:1112 +#, c-format msgid "xine: demuxer failed to start\n" msgstr "" -#: src/xine-engine/xine.c:1167 +#: src/xine-engine/xine.c:1177 +#, c-format msgid "xine_play: no demux available\n" msgstr "" -#: src/xine-engine/xine.c:1237 +#: src/xine-engine/xine.c:1247 +#, c-format msgid "xine_play: demux failed to start\n" msgstr "" -#: src/xine-engine/xine.c:1508 +#: src/xine-engine/xine.c:1523 #, c-format msgid "xine: The specified save_dir \"%s\" might be a security risk.\n" msgstr "" -#: src/xine-engine/xine.c:1513 +#: src/xine-engine/xine.c:1528 msgid "The specified save_dir might be a security risk." msgstr "" -#: src/xine-engine/xine.c:1539 +#: src/xine-engine/xine.c:1554 msgid "xine: locale not supported by C library\n" msgstr "" -#: src/xine-engine/xine.c:1548 +#: src/xine-engine/xine.c:1563 msgid "media format detection strategy" msgstr "" -#: src/xine-engine/xine.c:1549 +#: src/xine-engine/xine.c:1564 msgid "" "xine offers various methods to detect the media format of input to play. The " "individual values are:\n" @@ -966,11 +986,11 @@ msgid "" "Detect by file name extension only.\n" msgstr "" -#: src/xine-engine/xine.c:1567 +#: src/xine-engine/xine.c:1582 msgid "directory for saving streams" msgstr "" -#: src/xine-engine/xine.c:1568 +#: src/xine-engine/xine.c:1583 msgid "" "When using the stream save feature, files will be written only into this " "directory.\n" @@ -980,11 +1000,11 @@ msgid "" "content in any file." msgstr "" -#: src/xine-engine/xine.c:1579 +#: src/xine-engine/xine.c:1594 msgid "allow implicit changes to the configuration (e.g. by MRL)" msgstr "" -#: src/xine-engine/xine.c:1580 +#: src/xine-engine/xine.c:1595 msgid "" "If enabled, you allow xine to change your configuration without explicit " "actions from your side. For example configuration changes demanded by MRLs " @@ -994,26 +1014,26 @@ msgid "" "configuration, you might end with a totally messed up xine." msgstr "" -#: src/xine-engine/xine.c:1594 +#: src/xine-engine/xine.c:1609 msgid "Timeout for network stream reading (in seconds)" msgstr "" -#: src/xine-engine/xine.c:1595 +#: src/xine-engine/xine.c:1610 msgid "" "Specifies the timeout when reading from network streams, in seconds. Too low " "values might stop streaming when the source is slow or the bandwidth is " "occupied, too high values will freeze the player if the connection is lost." msgstr "" -#: src/xine-engine/xine.c:1946 +#: src/xine-engine/xine.c:1962 msgid "messages" msgstr "" -#: src/xine-engine/xine.c:1947 +#: src/xine-engine/xine.c:1963 msgid "plugin" msgstr "" -#: src/xine-engine/xine.c:1948 +#: src/xine-engine/xine.c:1964 msgid "trace" msgstr "" @@ -1023,20 +1043,23 @@ msgid "input_rip: reading of saved data failed: %s\n" msgstr "" #: src/xine-engine/input_rip.c:154 +#, c-format msgid "input_rip: reading by input plugin failed\n" msgstr "" #: src/xine-engine/input_rip.c:162 src/xine-engine/input_rip.c:291 -#: src/xine-engine/input_rip.c:643 +#: src/xine-engine/input_rip.c:657 #, c-format msgid "input_rip: error writing to file %<PRIdMAX> bytes: %s\n" msgstr "" #: src/xine-engine/input_rip.c:183 +#, c-format msgid "input_rip: open() function should never be called\n" msgstr "" #: src/xine-engine/input_rip.c:314 src/xine-engine/input_rip.c:419 +#, c-format msgid "input_rip: seeking failed\n" msgstr "" @@ -1050,37 +1073,41 @@ msgstr "" msgid "input_rip: %<PRIdMAX> bytes dropped\n" msgstr "" -#: src/xine-engine/input_rip.c:548 +#: src/xine-engine/input_rip.c:562 +#, c-format msgid "input_rip: input plugin not defined!\n" msgstr "" -#: src/xine-engine/input_rip.c:554 +#: src/xine-engine/input_rip.c:568 +#, c-format msgid "" "input_rip: target directory wasn't specified, please fill out the option " "'media.capture.save_dir'\n" msgstr "" -#: src/xine-engine/input_rip.c:556 +#: src/xine-engine/input_rip.c:570 msgid "" "The stream save feature is disabled until you set media.capture.save_dir in " "the configuration." msgstr "" -#: src/xine-engine/input_rip.c:563 +#: src/xine-engine/input_rip.c:577 +#, c-format msgid "input_rip: ripping/caching of this source is not permitted!\n" msgstr "" -#: src/xine-engine/input_rip.c:565 +#: src/xine-engine/input_rip.c:579 msgid "" "xine is not allowed to save from this source. (possibly copyrighted " "material?)" msgstr "" -#: src/xine-engine/input_rip.c:571 +#: src/xine-engine/input_rip.c:585 +#, c-format msgid "input_rip: file name not given!\n" msgstr "" -#: src/xine-engine/input_rip.c:613 +#: src/xine-engine/input_rip.c:627 #, c-format msgid "input_rip: error opening file %s: %s\n" msgstr "" @@ -1120,133 +1147,136 @@ msgid "" msgstr "" #: src/xine-engine/input_cache.c:167 +#, c-format msgid ": open() function should never be called\n" msgstr "" #: src/xine-engine/input_cache.c:349 +#, c-format msgid ": input plugin not defined!\n" msgstr "" -#: src/xine-engine/osd.c:739 +#: src/xine-engine/osd.c:745 #, c-format msgid "font '%s-%d' already loaded, weird.\n" msgstr "" -#: src/xine-engine/osd.c:751 +#: src/xine-engine/osd.c:757 #, c-format msgid "font '%s' loading failed (%d < %d)\n" msgstr "" -#: src/xine-engine/osd.c:761 +#: src/xine-engine/osd.c:767 #, c-format msgid "wrong version for font '%s'. expected %d found %d.\n" msgstr "" -#: src/xine-engine/osd.c:828 +#: src/xine-engine/osd.c:834 msgid "osd: cannot initialize ft2 library\n" msgstr "" -#: src/xine-engine/osd.c:851 +#: src/xine-engine/osd.c:857 #, c-format msgid "osd: error matching font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:865 +#: src/xine-engine/osd.c:871 #, c-format msgid "osd: error loading font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:868 +#: src/xine-engine/osd.c:874 #, c-format msgid "osd: error looking up font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:889 +#: src/xine-engine/osd.c:895 #, c-format msgid "osd: error loading font %s with ft2\n" msgstr "" -#: src/xine-engine/osd.c:899 +#: src/xine-engine/osd.c:905 msgid "osd: error setting font size (no scalable font?)\n" msgstr "" -#: src/xine-engine/osd.c:1015 +#: src/xine-engine/osd.c:1021 #, c-format msgid "" "osd: unknown sequence starting with byte 0x%02X in encoding \"%s\", " "skipping\n" msgstr "" -#: src/xine-engine/osd.c:1071 +#: src/xine-engine/osd.c:1077 msgid "osd: can't find out current locale character set\n" msgstr "" -#: src/xine-engine/osd.c:1081 +#: src/xine-engine/osd.c:1087 #, c-format msgid "osd: unsupported conversion %s -> %s, no conversion performed\n" msgstr "" -#: src/xine-engine/osd.c:1136 src/xine-engine/osd.c:1304 +#: src/xine-engine/osd.c:1142 src/xine-engine/osd.c:1310 msgid "osd: font isn't defined\n" msgstr "" -#: src/xine-engine/osd.c:1175 +#: src/xine-engine/osd.c:1181 msgid "osd: error loading glyph\n" msgstr "" -#: src/xine-engine/osd.c:1181 +#: src/xine-engine/osd.c:1187 msgid "osd: error in rendering glyph\n" msgstr "" -#: src/xine-engine/osd.c:1341 +#: src/xine-engine/osd.c:1347 #, c-format msgid "osd: error loading glyph %i\n" msgstr "" -#: src/xine-engine/osd.c:1348 +#: src/xine-engine/osd.c:1354 msgid "osd: error in rendering\n" msgstr "" -#: src/xine-engine/osd.c:1596 +#: src/xine-engine/osd.c:1602 msgid "palette (foreground-border-background) to use for subtitles and OSD" msgstr "" -#: src/xine-engine/osd.c:1597 +#: src/xine-engine/osd.c:1603 msgid "" "The palette for on-screen-display and some subtitle formats that do not " "specify any colouring themselves. The palettes are listed in the form: " "foreground-border-background." msgstr "" -#: src/xine-engine/configfile.c:896 +#: src/xine-engine/configfile.c:924 +#, c-format msgid "The current config file has been modified by a newer version of xine." msgstr "" -#: src/xine-engine/configfile.c:1001 +#: src/xine-engine/configfile.c:1029 #, c-format msgid "configfile: WARNING: backing up configfile to %s failed\n" msgstr "" -#: src/xine-engine/configfile.c:1002 +#: src/xine-engine/configfile.c:1030 msgid "configfile: WARNING: your configuration will not be saved\n" msgstr "" -#: src/xine-engine/configfile.c:1101 +#: src/xine-engine/configfile.c:1129 #, c-format msgid "configfile: WARNING: writing configuration to %s failed\n" msgstr "" -#: src/xine-engine/configfile.c:1102 +#: src/xine-engine/configfile.c:1130 #, c-format msgid "configfile: WARNING: removing possibly broken config file %s\n" msgstr "" -#: src/xine-engine/configfile.c:1103 +#: src/xine-engine/configfile.c:1131 #, c-format msgid "configfile: WARNING: you should check the backup file %s\n" msgstr "" -#: src/xine-engine/configfile.c:1237 +#: src/xine-engine/configfile.c:1266 #, c-format msgid "configfile: entry '%s' mustn't be modified from MRL\n" msgstr "" @@ -1263,45 +1293,55 @@ msgid "" "(diff : %<PRId64>).\n" msgstr "" -#: src/xine-engine/video_out.c:1818 +#: src/xine-engine/video_out.c:1790 +msgid "default number of video frames" +msgstr "" + +#: src/xine-engine/video_out.c:1791 +msgid "" +"The default number of video frames to request from xine video out driver. " +"Some drivers will override this setting with their own values." +msgstr "" + +#: src/xine-engine/video_out.c:1830 msgid "percentage of skipped frames to tolerate" msgstr "" -#: src/xine-engine/video_out.c:1819 +#: src/xine-engine/video_out.c:1831 msgid "" "When more than this percentage of frames are not shown, because they were " "not decoded in time, xine sends a notification." msgstr "" -#: src/xine-engine/video_out.c:1824 +#: src/xine-engine/video_out.c:1836 msgid "percentage of discarded frames to tolerate" msgstr "" -#: src/xine-engine/video_out.c:1825 +#: src/xine-engine/video_out.c:1837 msgid "" "When more than this percentage of frames are not shown, because they were " "not scheduled for display in time, xine sends a notification." msgstr "" -#: src/xine-engine/video_out.c:1859 +#: src/xine-engine/video_out.c:1871 msgid "video_out: sorry, this should not happen. please restart xine.\n" msgstr "" -#: src/xine-engine/video_decoder.c:374 +#: src/xine-engine/video_decoder.c:380 #, c-format msgid "video_decoder: no plugin available to handle '%s'\n" msgstr "" -#: src/xine-engine/video_decoder.c:453 +#: src/xine-engine/video_decoder.c:459 #, c-format msgid "video_decoder: error, unknown buffer type: %08x\n" msgstr "" -#: src/xine-engine/video_decoder.c:489 +#: src/xine-engine/video_decoder.c:495 msgid "number of video buffers" msgstr "" -#: src/xine-engine/video_decoder.c:490 +#: src/xine-engine/video_decoder.c:496 msgid "" "The number of video buffers (each is 8k in size) xine uses in its internal " "queue. Higher values mean smoother playback for unreliable inputs, but also " @@ -1318,84 +1358,84 @@ msgid "" "info_helper: unsupported conversion %s -> UTF-8, no conversion performed\n" msgstr "" -#: src/xine-engine/xine_interface.c:918 +#: src/xine-engine/xine_interface.c:934 msgid "Warning:" msgstr "" -#: src/xine-engine/xine_interface.c:919 +#: src/xine-engine/xine_interface.c:935 msgid "Unknown host:" msgstr "" -#: src/xine-engine/xine_interface.c:920 +#: src/xine-engine/xine_interface.c:936 msgid "Unknown device:" msgstr "" -#: src/xine-engine/xine_interface.c:921 +#: src/xine-engine/xine_interface.c:937 msgid "Network unreachable" msgstr "" -#: src/xine-engine/xine_interface.c:922 +#: src/xine-engine/xine_interface.c:938 msgid "Connection refused:" msgstr "" -#: src/xine-engine/xine_interface.c:923 +#: src/xine-engine/xine_interface.c:939 msgid "File not found:" msgstr "" -#: src/xine-engine/xine_interface.c:924 +#: src/xine-engine/xine_interface.c:940 msgid "Read error from:" msgstr "" -#: src/xine-engine/xine_interface.c:925 +#: src/xine-engine/xine_interface.c:941 msgid "Error loading library:" msgstr "" -#: src/xine-engine/xine_interface.c:926 +#: src/xine-engine/xine_interface.c:942 msgid "Encrypted media stream detected" msgstr "" -#: src/xine-engine/xine_interface.c:927 +#: src/xine-engine/xine_interface.c:943 msgid "Security message:" msgstr "" -#: src/xine-engine/xine_interface.c:928 +#: src/xine-engine/xine_interface.c:944 msgid "Audio device unavailable" msgstr "" -#: src/xine-engine/xine_interface.c:929 +#: src/xine-engine/xine_interface.c:945 msgid "Permission error" msgstr "" -#: src/xine-engine/xine_interface.c:930 +#: src/xine-engine/xine_interface.c:946 msgid "File is empty:" msgstr "" -#: src/xine-engine/audio_out.c:1074 +#: src/xine-engine/audio_out.c:1072 msgid "" "audio_out: delay calculation impossible with an unavailable audio device\n" msgstr "" -#: src/xine-engine/audio_out.c:1216 +#: src/xine-engine/audio_out.c:1214 msgid "write to sound card failed. Was a USB device unplugged ?\n" msgstr "" -#: src/xine-engine/audio_out.c:1369 +#: src/xine-engine/audio_out.c:1367 msgid "8 bits not supported by driver, converting to 16 bits.\n" msgstr "" -#: src/xine-engine/audio_out.c:1377 +#: src/xine-engine/audio_out.c:1375 msgid "mono not supported by driver, converting to stereo.\n" msgstr "" -#: src/xine-engine/audio_out.c:1383 +#: src/xine-engine/audio_out.c:1381 msgid "stereo not supported by driver, converting to mono.\n" msgstr "" -#: src/xine-engine/audio_out.c:2028 +#: src/xine-engine/audio_out.c:2033 msgid "method to sync audio and video" msgstr "" -#: src/xine-engine/audio_out.c:2029 +#: src/xine-engine/audio_out.c:2034 msgid "" "When playing audio and video, there are at least two clocks involved: The " "system clock, to which video frames are synchronized and the clock in your " @@ -1418,11 +1458,11 @@ msgid "" "form." msgstr "" -#: src/xine-engine/audio_out.c:2057 +#: src/xine-engine/audio_out.c:2062 msgid "enable resampling" msgstr "" -#: src/xine-engine/audio_out.c:2058 +#: src/xine-engine/audio_out.c:2063 msgid "" "When the sample rate of the decoded audio does not match the capabilities of " "your sound hardware, an adaptation called \"resampling\" is required. Here " @@ -1430,33 +1470,33 @@ msgid "" "automatically when necessary." msgstr "" -#: src/xine-engine/audio_out.c:2065 +#: src/xine-engine/audio_out.c:2070 msgid "always resample to this rate (0 to disable)" msgstr "" -#: src/xine-engine/audio_out.c:2066 +#: src/xine-engine/audio_out.c:2071 msgid "" "Some audio drivers do not correctly announce the capabilities of the audio " "hardware. By setting a value other than zero here, you can force the audio " "stream to be resampled to the given rate." msgstr "" -#: src/xine-engine/audio_out.c:2075 +#: src/xine-engine/audio_out.c:2080 msgid "offset for digital passthrough" msgstr "" -#: src/xine-engine/audio_out.c:2076 +#: src/xine-engine/audio_out.c:2081 msgid "" "If you use an external surround decoder and audio is ahead or behind video, " "you can enter a fixed offset here to compensate.\n" "The unit of the value is one PTS tick, which is the 90000th part of a second." msgstr "" -#: src/xine-engine/audio_out.c:2085 +#: src/xine-engine/audio_out.c:2090 msgid "play audio even on slow/fast speeds" msgstr "" -#: src/xine-engine/audio_out.c:2086 +#: src/xine-engine/audio_out.c:2091 msgid "" "If you enable this option, the audio will be heard even when playback speed " "is different than 1X. Of course, it will sound distorted (lower/higher " @@ -1464,27 +1504,28 @@ msgid "" "audio post plugin instead." msgstr "" -#: src/xine-engine/audio_out.c:2157 +#: src/xine-engine/audio_out.c:2162 msgid "startup audio volume" msgstr "" -#: src/xine-engine/audio_out.c:2158 +#: src/xine-engine/audio_out.c:2163 msgid "The overall audio volume set at xine startup." msgstr "" -#: src/xine-engine/audio_out.c:2161 +#: src/xine-engine/audio_out.c:2166 msgid "restore volume level at startup" msgstr "" -#: src/xine-engine/audio_out.c:2162 +#: src/xine-engine/audio_out.c:2167 msgid "If disabled, xine will not modify any mixer settings at startup." msgstr "" -#: src/xine-engine/audio_out.c:2192 +#: src/xine-engine/audio_out.c:2197 msgid "audio_out: sorry, this should not happen. please restart xine.\n" msgstr "" #: src/xine-engine/load_plugins.c:212 +#, c-format msgid "map_decoder_list: no space for decoder, skipped.\n" msgstr "" @@ -1526,6 +1567,7 @@ msgid "load_plugins: plugin %s found\n" msgstr "" #: src/xine-engine/load_plugins.c:499 +#, c-format msgid "load_plugins: static plugin found\n" msgstr "" @@ -1535,6 +1577,7 @@ msgid "load_plugins: plugin limit reached, %s could not be loaded\n" msgstr "" #: src/xine-engine/load_plugins.c:509 +#, c-format msgid "load_plugins: plugin limit reached, static plugin could not be loaded\n" msgstr "" @@ -1683,11 +1726,11 @@ msgid "" "xine video output plugin using the SyncFB module for Matrox G200/G400 cards" msgstr "" -#: src/video_out/video_out_syncfb.c:1077 +#: src/video_out/video_out_syncfb.c:1078 msgid "SyncFB device name" msgstr "" -#: src/video_out/video_out_syncfb.c:1078 +#: src/video_out/video_out_syncfb.c:1079 msgid "" "Specifies the file name for the SyncFB (TeleTux) device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -1700,47 +1743,47 @@ msgid "xine video output plugin using the Libstk Surface Set-top Toolkit" msgstr "" #: src/video_out/video_out_xvmc.c:1446 src/video_out/video_out_pgx64.c:1464 -#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1436 +#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1437 msgid "video overlay colour key" msgstr "" #: src/video_out/video_out_xvmc.c:1447 src/video_out/video_out_xxmc.c:2431 #: src/video_out/video_out_vidix.c:1159 src/video_out/video_out_vidix.c:1166 -#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1437 +#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1438 msgid "" "The colour key is used to tell the graphics card where to overlay the video " "image. Try different values, if you experience windows becoming transparent." msgstr "" #: src/video_out/video_out_xvmc.c:1455 src/video_out/video_out_xxmc.c:2439 -#: src/video_out/video_out_xv.c:1445 +#: src/video_out/video_out_xv.c:1446 msgid "autopaint colour key" msgstr "" #: src/video_out/video_out_xvmc.c:1456 src/video_out/video_out_xxmc.c:2440 -#: src/video_out/video_out_xv.c:1446 +#: src/video_out/video_out_xv.c:1447 msgid "Make Xv autopaint its colorkey." msgstr "" #: src/video_out/video_out_xvmc.c:1461 src/video_out/video_out_xxmc.c:2463 -#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1469 +#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1470 #: src/video_out/video_out_opengl.c:1918 msgid "enable double buffering" msgstr "" #: src/video_out/video_out_xvmc.c:1462 src/video_out/video_out_xxmc.c:2464 -#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1470 +#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1471 msgid "" "Double buffering will synchronize the update of the video image to the " "repainting of the entire screen (\"vertical retrace\"). This eliminates " "flickering and tearing artifacts, but will use more graphics memory." msgstr "" -#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1537 +#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1538 msgid "deinterlace method (deprecated)" msgstr "" -#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1538 +#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1539 msgid "" "This config setting is deprecated. You should use the new deinterlacing post " "processing settings instead.\n" @@ -1936,11 +1979,11 @@ msgid "" "conversion and scaling.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1453 +#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1454 msgid "bilinear scaling mode" msgstr "" -#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1454 +#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1455 msgid "" "Selects the bilinear scaling mode for Permedia cards. The individual values " "are:\n" @@ -1963,11 +2006,11 @@ msgstr "" msgid "video_out_xxmc: this adaptor supports the yuy2 format.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1530 +#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1531 msgid "pitch alignment workaround" msgstr "" -#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1531 +#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1532 msgid "Some buggy video drivers need a workaround to function properly." msgstr "" @@ -2013,7 +2056,7 @@ msgid "" "Alternate between top and bottom field at double the frame rate.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1611 +#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1612 msgid "xine video output plugin using the MIT X video extension" msgstr "" @@ -2150,29 +2193,29 @@ msgid "" "video_out_xv: => not using MIT Shared Memory extension.\n" msgstr "" -#: src/video_out/video_out_xv.c:1282 +#: src/video_out/video_out_xv.c:1283 msgid "video_out_xv: Xv extension not present.\n" msgstr "" -#: src/video_out/video_out_xv.c:1319 +#: src/video_out/video_out_xv.c:1320 msgid "" "video_out_xv: Xv extension is present but I couldn't find a usable yuv12 " "port.\n" " Looks like your graphics hardware driver doesn't support Xv?!\n" msgstr "" -#: src/video_out/video_out_xv.c:1328 +#: src/video_out/video_out_xv.c:1329 #, c-format msgid "" "video_out_xv: using Xv port %ld from adaptor %s for hardware colorspace " "conversion and scaling.\n" msgstr "" -#: src/video_out/video_out_xv.c:1503 +#: src/video_out/video_out_xv.c:1504 msgid "video_out_xv: this adaptor supports the yv12 format.\n" msgstr "" -#: src/video_out/video_out_xv.c:1508 +#: src/video_out/video_out_xv.c:1509 msgid "video_out_xv: this adaptor supports the yuy2 format.\n" msgstr "" @@ -2399,70 +2442,70 @@ msgid "" "\"=disabled)." msgstr "" -#: src/video_out/video_out_directfb.c:1509 +#: src/video_out/video_out_directfb.c:1516 msgid "video_out_directfb: using hardware subpicture acceleration.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1523 +#: src/video_out/video_out_directfb.c:1530 msgid "video_out_directfb: layer supports video output.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1532 +#: src/video_out/video_out_directfb.c:1539 msgid "video_out_directfb: layer doesn't support YV12!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1539 +#: src/video_out/video_out_directfb.c:1546 msgid "video_out_directfb: layer doesn't support YUY2!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1550 +#: src/video_out/video_out_directfb.c:1557 msgid "" "video_out_directfb:need at least DirectFB 0.9.25 to play on this layer!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1585 +#: src/video_out/video_out_directfb.c:1592 #, c-format msgid "video_out_directfb: layer doesn't support buffermode %d!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1591 +#: src/video_out/video_out_directfb.c:1598 #, c-format msgid "video_out_directfb: layer doesn't support options 0x%08x!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1685 +#: src/video_out/video_out_directfb.c:1692 msgid "video_out_directfb: using hardware accelerated image scaling.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1697 +#: src/video_out/video_out_directfb.c:1704 msgid "" "video_out_directfb: image scaling with deinterlacing is hardware " "accelerated.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1775 +#: src/video_out/video_out_directfb.c:1782 msgid "video layer id (auto: -1)" msgstr "" -#: src/video_out/video_out_directfb.c:1776 +#: src/video_out/video_out_directfb.c:1783 msgid "Select the video output layer by its id." msgstr "" -#: src/video_out/video_out_directfb.c:1797 -#: src/video_out/video_out_directfb.c:2006 +#: src/video_out/video_out_directfb.c:1804 +#: src/video_out/video_out_directfb.c:2013 #, c-format msgid "video_out_directfb: using display layer #%d.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1881 +#: src/video_out/video_out_directfb.c:1888 msgid "xine video output plugin using DirectFB." msgstr "" -#: src/video_out/video_out_directfb.c:1999 +#: src/video_out/video_out_directfb.c:2006 msgid "video_out_directfb: no usable display layer was found!\n" msgstr "" -#: src/video_out/video_out_directfb.c:2088 +#: src/video_out/video_out_directfb.c:2095 msgid "xine video output plugin using DirectFB under XDirectFB." msgstr "" @@ -2480,20 +2523,20 @@ msgstr "" msgid "video_out_pgx32: Error: '%s' is not a pgx32 framebuffer device\n" msgstr "" -#: src/libmusepack/xine_decoder.c:237 +#: src/libmusepack/xine_decoder.c:241 #, c-format msgid "libmusepack: mpc_streaminfo_read failed: %d\n" msgstr "" -#: src/libmusepack/xine_decoder.c:311 +#: src/libmusepack/xine_decoder.c:315 msgid "libmusepack: data after last frame ignored\n" msgstr "" -#: src/libmusepack/xine_decoder.c:322 +#: src/libmusepack/xine_decoder.c:326 msgid "libmusepack: mpc_decoder_initialise failed\n" msgstr "" -#: src/libmusepack/xine_decoder.c:342 src/libmusepack/xine_decoder.c:357 +#: src/libmusepack/xine_decoder.c:346 src/libmusepack/xine_decoder.c:361 #, c-format msgid "libmusepack: mpc_decoder_decode failed: %d\n" msgstr "" @@ -2561,15 +2604,15 @@ msgstr "" msgid "encoding of subtitles" msgstr "" -#: src/input/vcd/vcdio.c:211 +#: src/input/vcd/vcdio.c:223 msgid "SEEK_CUR not implemented for non-zero offset" msgstr "" -#: src/input/vcd/vcdio.c:239 +#: src/input/vcd/vcdio.c:251 msgid "SEEK_END not implemented yet." msgstr "" -#: src/input/vcd/vcdio.c:242 +#: src/input/vcd/vcdio.c:254 msgid "seek not implemented yet for" msgstr "" @@ -2577,106 +2620,106 @@ msgstr "" msgid "failed to find a device with a VCD" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:327 +#: src/input/vcd/xineplug_inp_vcd.c:328 msgid "was passed a null class parameter" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:967 +#: src/input/vcd/xineplug_inp_vcd.c:972 msgid "Invalid current entry type" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:991 +#: src/input/vcd/xineplug_inp_vcd.c:996 msgid "" "Video CD plugin with PBC and support for: (X)VCD, (X)SVCD, HQVCD, CVD ... " msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1092 +#: src/input/vcd/xineplug_inp_vcd.c:1097 msgid "selection has no RETURN entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1121 +#: src/input/vcd/xineplug_inp_vcd.c:1126 msgid "DEFAULT selected, but PBC is not on." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1126 +#: src/input/vcd/xineplug_inp_vcd.c:1131 msgid "selection has no NEXT entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1134 +#: src/input/vcd/xineplug_inp_vcd.c:1139 msgid "selection has no PREVIOUS entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1141 +#: src/input/vcd/xineplug_inp_vcd.c:1146 msgid "Unknown event type: " msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1441 src/input/vcd/xineplug_inp_vcd.c:1488 +#: src/input/vcd/xineplug_inp_vcd.c:1446 src/input/vcd/xineplug_inp_vcd.c:1493 msgid "The above message had unknown vcdimager log level" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1819 +#: src/input/vcd/xineplug_inp_vcd.c:1824 msgid "VCD default type to use on autoplay" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1820 +#: src/input/vcd/xineplug_inp_vcd.c:1825 msgid "" "The VCD play unit to use when none is specified in an MRL, e.g. vcd:// or " "vcd:///dev/dvd:" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1830 +#: src/input/vcd/xineplug_inp_vcd.c:1835 msgid "CD-ROM drive used for VCD when none given" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1831 +#: src/input/vcd/xineplug_inp_vcd.c:1836 msgid "" "What to use if no drive specified. If the setting is empty, xine will scan " "for CD drives." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1841 +#: src/input/vcd/xineplug_inp_vcd.c:1846 msgid "VCD position slider range" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1842 +#: src/input/vcd/xineplug_inp_vcd.c:1847 msgid "" "range that the stream playback position slider represents playing a VCD." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1850 +#: src/input/vcd/xineplug_inp_vcd.c:1855 msgid "VCD read-ahead caching?" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1851 +#: src/input/vcd/xineplug_inp_vcd.c:1856 msgid "Class may lead to jerky playback on low-end machines." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1861 +#: src/input/vcd/xineplug_inp_vcd.c:1866 msgid "automatically advance VCD track/entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1862 +#: src/input/vcd/xineplug_inp_vcd.c:1867 msgid "" "If enabled, we should automatically advance to the next entry or track. Used " "only when playback control (PBC) is disabled." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1871 +#: src/input/vcd/xineplug_inp_vcd.c:1876 msgid "show 'rejected' VCD LIDs" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1872 +#: src/input/vcd/xineplug_inp_vcd.c:1877 msgid "" "Some playback list IDs (LIDs) are marked not showable, but you can see them " "in the MRL list if this is set. Rejected entries are marked with an asterisk " "(*) appended to the MRL." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1883 +#: src/input/vcd/xineplug_inp_vcd.c:1888 msgid "VCD format string for display banner" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1884 +#: src/input/vcd/xineplug_inp_vcd.c:1889 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are:\n" @@ -2697,11 +2740,11 @@ msgid "" " %% : a %\n" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1909 +#: src/input/vcd/xineplug_inp_vcd.c:1914 msgid "VCD format string for stream comment field" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1910 +#: src/input/vcd/xineplug_inp_vcd.c:1915 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are %A, %C, %c, %F, %I, %L, " @@ -2709,11 +2752,11 @@ msgid "" "See the help for the title_format for the meanings of these." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1922 +#: src/input/vcd/xineplug_inp_vcd.c:1927 msgid "VCD debug flag mask" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1923 +#: src/input/vcd/xineplug_inp_vcd.c:1928 msgid "" "For tracking down bugs in the VCD plugin. Mask values are:\n" " 1: Meta information\n" @@ -2855,11 +2898,11 @@ msgid "" "playing DVDs." msgstr "" -#: src/input/input_dvd.c:1803 +#: src/input/input_dvd.c:1804 msgid "raw device set up for DVD access" msgstr "" -#: src/input/input_dvd.c:1804 +#: src/input/input_dvd.c:1805 msgid "" "If this points to a raw device connected to your DVD device, xine will use " "the raw device for playback. This has the advantage of being slightly faster " @@ -2870,22 +2913,22 @@ msgid "" "See the documentation on raw device setup (man raw) for further information." msgstr "" -#: src/input/input_dvd.c:1817 +#: src/input/input_dvd.c:1818 msgid "CSS decryption method" msgstr "" -#: src/input/input_dvd.c:1818 +#: src/input/input_dvd.c:1819 msgid "" "Selects the decryption method libdvdcss will use to descramble copy " "protected DVDs. Try the various methods, if you have problems playing " "scrambled DVDs." msgstr "" -#: src/input/input_dvd.c:1826 +#: src/input/input_dvd.c:1827 msgid "path to the title key cache" msgstr "" -#: src/input/input_dvd.c:1827 +#: src/input/input_dvd.c:1828 msgid "" "Since cracking the copy protection of scrambled DVDs can be quite time " "consuming, libdvdcss will cache the cracked keys in this directory.\n" @@ -2894,44 +2937,44 @@ msgid "" "used for anything but DVD key caching." msgstr "" -#: src/input/input_dvd.c:1849 +#: src/input/input_dvd.c:1850 msgid "region the DVD player claims to be in (1 to 8)" msgstr "" -#: src/input/input_dvd.c:1850 +#: src/input/input_dvd.c:1851 msgid "" "This only needs to be changed if your DVD jumps to a screen complaining " "about a wrong region code. It has nothing to do with the region code set in " "DVD drives, this is purely software." msgstr "" -#: src/input/input_dvd.c:1856 +#: src/input/input_dvd.c:1857 msgid "default language for DVD playback" msgstr "" -#: src/input/input_dvd.c:1857 +#: src/input/input_dvd.c:1858 msgid "" "xine tries to use this language as a default for DVD playback. As far as the " "DVD supports it, menus and audio tracks will be presented in this language.\n" "The value must be a two character ISO639 language code." msgstr "" -#: src/input/input_dvd.c:1863 +#: src/input/input_dvd.c:1864 msgid "read-ahead caching" msgstr "" -#: src/input/input_dvd.c:1864 +#: src/input/input_dvd.c:1865 msgid "" "xine can use a read ahead cache for DVD drive access.\n" "This may lead to jerky playback on slow drives, but it improves the impact " "of the DVD layer change on faster drives." msgstr "" -#: src/input/input_dvd.c:1870 +#: src/input/input_dvd.c:1871 msgid "unit for the skip action" msgstr "" -#: src/input/input_dvd.c:1871 +#: src/input/input_dvd.c:1872 msgid "" "You can configure the behaviour when issuing a skip command (using the skip " "buttons for example). The individual values mean:\n" @@ -2950,11 +2993,11 @@ msgid "" "features on the DVD" msgstr "" -#: src/input/input_dvd.c:1886 +#: src/input/input_dvd.c:1887 msgid "unit for seeking" msgstr "" -#: src/input/input_dvd.c:1887 +#: src/input/input_dvd.c:1888 msgid "" "You can configure the domain spanned by the seek slider. The individual " "values mean:\n" @@ -2968,11 +3011,11 @@ msgid "" "chapter of the current feature" msgstr "" -#: src/input/input_dvd.c:1898 +#: src/input/input_dvd.c:1899 msgid "play mode when title/chapter is given" msgstr "" -#: src/input/input_dvd.c:1899 +#: src/input/input_dvd.c:1900 msgid "" "You can configure the behaviour when playing a dvd from a given title/" "chapter (eg. using MRL 'dvd:/1.2'). The individual values mean:\n" @@ -3128,29 +3171,29 @@ msgstr "" msgid "DVB (Digital TV) input plugin" msgstr "" -#: src/input/input_dvb.c:3238 +#: src/input/input_dvb.c:3237 msgid "Remember last DVB channel watched" msgstr "" -#: src/input/input_dvb.c:3239 +#: src/input/input_dvb.c:3238 msgid "" "On autoplay, xine will remember and switch to the channel indicated in media." "dvb.last_channel. " msgstr "" -#: src/input/input_dvb.c:3246 +#: src/input/input_dvb.c:3245 msgid "Last DVB channel viewed" msgstr "" -#: src/input/input_dvb.c:3247 +#: src/input/input_dvb.c:3246 msgid "If enabled xine will remember and switch to this channel. " msgstr "" -#: src/input/input_dvb.c:3253 +#: src/input/input_dvb.c:3252 msgid "Number of dvb card to use." msgstr "" -#: src/input/input_dvb.c:3254 +#: src/input/input_dvb.c:3253 msgid "" "Leave this at zero unless you really have more than 1 card in your system." msgstr "" @@ -3266,74 +3309,74 @@ msgid "" "A value of zero here will disable the slowdown." msgstr "" -#: src/input/input_rtp.c:182 +#: src/input/input_rtp.c:185 #, c-format msgid "socket(): %s.\n" msgstr "" -#: src/input/input_rtp.c:192 +#: src/input/input_rtp.c:195 msgid "IP address specified is multicast\n" msgstr "" -#: src/input/input_rtp.c:201 +#: src/input/input_rtp.c:204 #, c-format msgid "setsockopt(SO_RCVBUF): %s.\n" msgstr "" -#: src/input/input_rtp.c:209 +#: src/input/input_rtp.c:212 #, c-format msgid "setsockopt(SO_REUSEADDR): %s.\n" msgstr "" -#: src/input/input_rtp.c:216 +#: src/input/input_rtp.c:219 #, c-format msgid "bind(): %s.\n" msgstr "" -#: src/input/input_rtp.c:236 +#: src/input/input_rtp.c:239 #, c-format msgid "Can't find address for iface %s:%s\n" msgstr "" -#: src/input/input_rtp.c:254 +#: src/input/input_rtp.c:257 #, c-format msgid "setsockopt(IP_ADD_MEMBERSHIP) failed (multicast kernel?): %s.\n" msgstr "" -#: src/input/input_rtp.c:276 +#: src/input/input_rtp.c:279 #, c-format msgid "unable to resolve '%s'.\n" msgstr "" -#: src/input/input_rtp.c:286 +#: src/input/input_rtp.c:289 #, c-format msgid "unable to bind to '%s'.\n" msgstr "" -#: src/input/input_rtp.c:314 +#: src/input/input_rtp.c:317 #, c-format msgid "recv(): %s.\n" msgstr "" -#: src/input/input_rtp.c:602 +#: src/input/input_rtp.c:605 msgid "RTP: stopping reading thread...\n" msgstr "" -#: src/input/input_rtp.c:605 +#: src/input/input_rtp.c:608 msgid "RTP: reading thread terminated\n" msgstr "" -#: src/input/input_rtp.c:620 +#: src/input/input_rtp.c:623 #, c-format msgid "Opening >filename:%s port:%d interface:%s<\n" msgstr "" -#: src/input/input_rtp.c:637 +#: src/input/input_rtp.c:640 #, c-format msgid "input_rtp: can't create new thread (%s)\n" msgstr "" -#: src/input/input_rtp.c:743 +#: src/input/input_rtp.c:746 msgid "RTP and UDP input plugin as shipped with xine" msgstr "" @@ -3347,16 +3390,27 @@ msgstr "" msgid "rtsp: failed to connect to '%s'\n" msgstr "" -#: src/input/librtsp/rtsp_session.c:84 +#: src/input/librtsp/rtsp_session.c:93 src/input/input_mms.c:479 +msgid "network bandwidth" +msgstr "" + +#: src/input/librtsp/rtsp_session.c:94 src/input/input_mms.c:480 +msgid "" +"Specify the bandwidth of your internet connection here. This will be used " +"when streaming servers offer different versions with different bandwidth " +"requirements of the same stream." +msgstr "" + +#: src/input/librtsp/rtsp_session.c:109 #, c-format msgid "rtsp_session: failed to connect to server %s\n" msgstr "" -#: src/input/librtsp/rtsp_session.c:118 +#: src/input/librtsp/rtsp_session.c:143 msgid "rtsp_session: session can not be established.\n" msgstr "" -#: src/input/librtsp/rtsp_session.c:135 +#: src/input/librtsp/rtsp_session.c:161 #, c-format msgid "rtsp_session: rtsp server type '%s' not supported yet. sorry.\n" msgstr "" @@ -3405,41 +3459,45 @@ msgstr "" msgid "pnm streaming input plugin" msgstr "" -#: src/input/mmsh.c:195 +#: src/input/mmsh.c:201 msgid "libmmsh: send error\n" msgstr "" -#: src/input/mmsh.c:240 +#: src/input/mmsh.c:246 +#, c-format msgid "libmmsh: bad response format\n" msgstr "" -#: src/input/mmsh.c:246 +#: src/input/mmsh.c:252 #, c-format msgid "libmmsh: 3xx redirection not implemented: >%d %s<\n" msgstr "" -#: src/input/mmsh.c:253 +#: src/input/mmsh.c:259 #, c-format msgid "libmmsh: http status not 2xx: >%d %s<\n" msgstr "" -#: src/input/mmsh.c:261 +#: src/input/mmsh.c:267 +#, c-format msgid "libmmsh: Location redirection not implemented\n" msgstr "" -#: src/input/mmsh.c:471 +#: src/input/mmsh.c:476 msgid "Connecting MMS server (over http)..." msgstr "" -#: src/input/mmsh.c:639 +#: src/input/mmsh.c:657 +#, c-format msgid "invalid url\n" msgstr "" -#: src/input/mmsh.c:644 +#: src/input/mmsh.c:662 +#, c-format msgid "unsupported protocol\n" msgstr "" -#: src/input/mms.c:537 +#: src/input/mms.c:561 msgid "Connecting MMS server (over tcp)..." msgstr "" @@ -3459,30 +3517,19 @@ msgstr "" msgid "input_pnm: failed to set up stream\n" msgstr "" -#: src/input/input_smb.c:154 +#: src/input/input_smb.c:158 msgid "CIFS/SMB input plugin based on libsmbclient" msgstr "" -#: src/input/input_mms.c:420 +#: src/input/input_mms.c:443 msgid "mms streaming input plugin" msgstr "" -#: src/input/input_mms.c:456 -msgid "network bandwidth" -msgstr "" - -#: src/input/input_mms.c:457 -msgid "" -"Specify the bandwidth of your internet connection here. This will be used " -"when streaming servers offer different versions with different bandwidth " -"requirements of the same stream." -msgstr "" - -#: src/input/input_mms.c:466 +#: src/input/input_mms.c:489 msgid "MMS protocol" msgstr "" -#: src/input/input_mms.c:467 +#: src/input/input_mms.c:490 msgid "" "Select the protocol to encapsulate MMS.\n" "TCP is better but you may need HTTP behind a firewall." @@ -3493,81 +3540,82 @@ msgstr "" msgid "input_http: gethostbyname(%s) failed: %s\n" msgstr "" -#: src/input/input_http.c:403 src/input/input_http.c:949 +#: src/input/input_http.c:400 src/input/input_http.c:941 #, c-format msgid "input_http: read error %d\n" msgstr "" -#: src/input/input_http.c:630 +#: src/input/input_http.c:627 msgid "Connecting HTTP server..." msgstr "" -#: src/input/input_http.c:824 +#: src/input/input_http.c:816 +#, c-format msgid "input_http: invalid http answer\n" msgstr "" -#: src/input/input_http.c:831 +#: src/input/input_http.c:823 #, c-format msgid "input_http: 3xx redirection: >%d %s<\n" msgstr "" -#: src/input/input_http.c:836 src/input/input_http.c:842 -#: src/input/input_http.c:849 +#: src/input/input_http.c:828 src/input/input_http.c:834 +#: src/input/input_http.c:841 #, c-format msgid "input_http: http status not 2xx: >%d %s<\n" msgstr "" -#: src/input/input_http.c:859 +#: src/input/input_http.c:851 #, c-format msgid "input_http: content length = %<PRIdMAX> bytes\n" msgstr "" -#: src/input/input_http.c:928 +#: src/input/input_http.c:920 #, c-format msgid "input_http: buffer exhausted after %d bytes." msgstr "" -#: src/input/input_http.c:1002 +#: src/input/input_http.c:994 msgid "http input plugin" msgstr "" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "HTTP proxy host" msgstr "" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "The hostname of the HTTP proxy." msgstr "" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "HTTP proxy port" msgstr "" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "The port number of the HTTP proxy." msgstr "" -#: src/input/input_http.c:1082 +#: src/input/input_http.c:1074 msgid "HTTP proxy username" msgstr "" -#: src/input/input_http.c:1083 +#: src/input/input_http.c:1075 msgid "The user name for the HTTP proxy." msgstr "" -#: src/input/input_http.c:1086 +#: src/input/input_http.c:1078 msgid "HTTP proxy password" msgstr "" -#: src/input/input_http.c:1087 +#: src/input/input_http.c:1079 msgid "The password for the HTTP proxy." msgstr "" -#: src/input/input_http.c:1090 +#: src/input/input_http.c:1082 msgid "Domains for which to ignore the HTTP proxy" msgstr "" -#: src/input/input_http.c:1091 +#: src/input/input_http.c:1083 msgid "" "A comma-separated list of domain names for which the proxy is to be " "ignored.\n" @@ -3580,7 +3628,7 @@ msgstr "" msgid "input_dvd: Device %s failed to open during eject calls\n" msgstr "" -#: src/input/input_rtsp.c:274 +#: src/input/input_rtsp.c:284 msgid "rtsp streaming input plugin" msgstr "" @@ -3589,69 +3637,82 @@ msgid "dvbsub: cannot create timer thread\n" msgstr "" #: src/libxinevdec/bitplane.c:1272 +#, c-format msgid "bitplane: error doing ByteRun1 decompression\n" msgstr "" #: src/libxinevdec/bitplane.c:1331 +#, c-format msgid "bitplane: Anim Opt 1 is not supported at the moment\n" msgstr "" #: src/libxinevdec/bitplane.c:1338 +#, c-format msgid "bitplane: Anim Opt 2 is not supported at the moment\n" msgstr "" #: src/libxinevdec/bitplane.c:1388 +#, c-format msgid "bitplane: Anim ASCIIJ is not supported at the moment\n" msgstr "" #: src/libxinevdec/bitplane.c:1394 +#, c-format msgid "bitplane: This anim-type is not supported at the moment\n" msgstr "" -#: src/libsputext/demux_sputext.c:1507 +#: src/libsputext/demux_sputext.c:1506 msgid "default duration of subtitle display in seconds" msgstr "" -#: src/libsputext/demux_sputext.c:1508 +#: src/libsputext/demux_sputext.c:1507 msgid "" "Some subtitle formats do not explicitly give a duration for each subtitle. " "For these, you can set a default duration here. Setting to zero will result " "in the subtitle being shown until the next one takes over." msgstr "" -#: src/libsputext/xine_decoder.c:913 +#: src/libsputext/xine_decoder.c:948 msgid "subtitle size" msgstr "" -#: src/libsputext/xine_decoder.c:914 +#: src/libsputext/xine_decoder.c:949 msgid "" "You can adjust the subtitle size here. The setting will be evaluated " "relative to the window size." msgstr "" -#: src/libsputext/xine_decoder.c:920 +#: src/libsputext/xine_decoder.c:955 msgid "subtitle vertical offset" msgstr "" -#: src/libsputext/xine_decoder.c:921 +#: src/libsputext/xine_decoder.c:956 msgid "" "You can adjust the vertical position of the subtitle. The setting will be " "evaluated relative to the window size." msgstr "" -#: src/libsputext/xine_decoder.c:927 +#: src/libsputext/xine_decoder.c:962 src/libsputext/xine_decoder.c:971 msgid "font for subtitles" msgstr "" -#: src/libsputext/xine_decoder.c:928 +#: src/libsputext/xine_decoder.c:963 msgid "A font from the xine font directory to be used for the subtitle text." msgstr "" -#: src/libsputext/xine_decoder.c:935 +#: src/libsputext/xine_decoder.c:972 +msgid "An outline font file (e.g. a .ttf) to be used for the subtitle text." +msgstr "" + +#: src/libsputext/xine_decoder.c:978 +msgid "whether to use a freetype font" +msgstr "" + +#: src/libsputext/xine_decoder.c:985 msgid "encoding of the subtitles" msgstr "" -#: src/libsputext/xine_decoder.c:936 +#: src/libsputext/xine_decoder.c:986 msgid "" "The encoding of the subtitle text in the stream. This setting is used to " "render non-ASCII characters correctly. If non-ASCII characters are not " @@ -3659,11 +3720,11 @@ msgid "" "used." msgstr "" -#: src/libsputext/xine_decoder.c:944 +#: src/libsputext/xine_decoder.c:994 msgid "use unscaled OSD if possible" msgstr "" -#: src/libsputext/xine_decoder.c:945 +#: src/libsputext/xine_decoder.c:995 msgid "" "The unscaled OSD will be rendered independently of the video frame and will " "always be sharp, even if the video is magnified. This will look better, but " @@ -4045,11 +4106,11 @@ msgstr "" msgid "libareal: oups, real can do more than 2 channels ?\n" msgstr "" -#: src/libreal/audio_decoder.c:745 src/libreal/xine_decoder.c:638 +#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 msgid "path to RealPlayer codecs" msgstr "" -#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 +#: src/libreal/audio_decoder.c:747 src/libreal/xine_decoder.c:640 msgid "" "If you have RealPlayer installed, specify the path to its codec directory " "here. You can easily find the codec directory by looking for a file named " @@ -4375,6 +4436,7 @@ msgid "demux_avi: invalid avi chunk \"%c%c%c%c\" at pos %<PRIdMAX>\n" msgstr "" #: src/demuxers/demux_avi.c:828 +#, c-format msgid "demux_avi: avi index is broken\n" msgstr "" @@ -4388,23 +4450,25 @@ msgid "demux_mpc: frame too big for buffer" msgstr "" #: src/demuxers/demux_film.c:188 +#, c-format msgid "invalid FILM chunk size\n" msgstr "" #: src/demuxers/demux_film.c:342 +#, c-format msgid "unrecognized FILM chunk\n" msgstr "" -#: src/demuxers/demux_asf.c:423 +#: src/demuxers/demux_asf.c:425 #, c-format msgid "demux_asf: warning: The stream id=%d is encrypted.\n" msgstr "" -#: src/demuxers/demux_asf.c:425 +#: src/demuxers/demux_asf.c:427 msgid "Media stream scrambled/encrypted" msgstr "" -#: src/demuxers/demux_asf.c:1633 +#: src/demuxers/demux_asf.c:1634 #, c-format msgid "demux_asf: Wrong ASX version: %s\n" msgstr "" @@ -4435,7 +4499,8 @@ msgid "" "unknown VOC compression type (0x%02X); please report to xine developers\n" msgstr "" -#: src/demuxers/demux_ogg.c:797 +#: src/demuxers/demux_ogg.c:801 +#, c-format msgid "ogg: vorbis audio track indicated but no vorbis stream header found.\n" msgstr "" @@ -4452,6 +4517,7 @@ msgid "" msgstr "" #: src/demuxers/demux_mpeg_block.c:640 +#, c-format msgid "demux_mpeg_block: warning: PES header reserved 10 bits not found\n" msgstr "" @@ -4475,6 +4541,7 @@ msgid "demux_mpeg_pes: warning: PACK stream id=0x%x decode failed.\n" msgstr "" #: src/demuxers/demux_mpeg_pes.c:771 +#, c-format msgid "demux_mpeg_pes: warning: PES header reserved 10 bits not found\n" msgstr "" @@ -4498,10 +4565,12 @@ msgid "demux_wc3movie: SHOT chunk referenced invalid palette (%d >= %d)\n" msgstr "" #: src/demuxers/demux_wc3movie.c:406 +#, c-format msgid "demux_wc3movie: There was a problem while loading palette chunks\n" msgstr "" #: src/demuxers/demux_snd.c:104 +#, c-format msgid "demux_snd: bad header parameters\n" msgstr "" @@ -4548,60 +4617,60 @@ msgstr "" msgid "The maximum compression to apply to an image in constant quality mode." msgstr "" -#: src/libffmpeg/audio_decoder.c:117 +#: src/libffmpeg/audio_decoder.c:120 #, c-format msgid "ffmpeg_audio_dec: increasing buffer to %d to avoid overflow.\n" msgstr "" -#: src/libffmpeg/audio_decoder.c:161 +#: src/libffmpeg/audio_decoder.c:164 #, c-format msgid "ffmpeg_audio_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" -#: src/libffmpeg/audio_decoder.c:253 +#: src/libffmpeg/audio_decoder.c:256 msgid "ffmpeg_audio_dec: trying to open null codec\n" msgstr "" -#: src/libffmpeg/audio_decoder.c:262 +#: src/libffmpeg/audio_decoder.c:265 msgid "ffmpeg_audio_dec: couldn't open decoder\n" msgstr "" -#: src/libffmpeg/dvaudio_decoder.c:302 +#: src/libffmpeg/dvaudio_decoder.c:286 #, c-format msgid "dvaudio: increasing buffer to %d to avoid overflow.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:153 +#: src/libffmpeg/video_decoder.c:156 msgid "ffmpeg_video_dec: unsupported frame format, DR1 disabled.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:171 +#: src/libffmpeg/video_decoder.c:174 msgid "ffmpeg_video_dec: unsupported frame dimensions, DR1 disabled.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:319 +#: src/libffmpeg/video_decoder.c:334 #, c-format msgid "ffmpeg_video_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" -#: src/libffmpeg/video_decoder.c:348 +#: src/libffmpeg/video_decoder.c:363 msgid "ffmpeg_video_dec: couldn't open decoder\n" msgstr "" -#: src/libffmpeg/video_decoder.c:383 +#: src/libffmpeg/video_decoder.c:398 msgid "ffmpeg_video_dec: direct rendering enabled\n" msgstr "" -#: src/libffmpeg/video_decoder.c:802 +#: src/libffmpeg/video_decoder.c:817 #, c-format msgid "ffmpeg_video_dec: increasing buffer to %d to avoid overflow.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:1474 +#: src/libffmpeg/video_decoder.c:1510 msgid "MPEG-4 postprocessing quality" msgstr "" -#: src/libffmpeg/video_decoder.c:1475 +#: src/libffmpeg/video_decoder.c:1511 msgid "" "You can adjust the amount of post processing applied to MPEG-4 video.\n" "Higher values result in better quality, but need more CPU. Lower values may " @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: pl_PL\n" "Report-Msgid-Bugs-To: xine-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2006-11-29 23:07+0100\n" +"POT-Creation-Date: 2007-01-26 18:31+0100\n" "PO-Revision-Date: 2003-05-24 12:36+0200\n" "Last-Translator: BartÅ‚omiej Muryn <_4ever_@irc.pl>\n" "Language-Team: Polish <pl@li.org>\n" @@ -101,6 +101,7 @@ msgid "w32codec: decoder failed to start. Is '%s' installed?\n" msgstr "" #: src/libw32dll/w32codec.c:1221 +#, c-format msgid "w32codec: (ACM_Decoder) Unappropriate audio format\n" msgstr "" @@ -110,10 +111,12 @@ msgid "w32codec: (ACM_Decoder) acmStreamOpen error %d\n" msgstr "" #: src/libw32dll/w32codec.c:1243 +#, c-format msgid "w32codec: Error initializing DirectShow Audio\n" msgstr "" #: src/libw32dll/w32codec.c:1261 +#, c-format msgid "w32codec: Error initializing DMO Audio\n" msgstr "" @@ -322,16 +325,16 @@ msgstr "wtyczka wyjÅ›cia dźwiÄ™ku używajÄ…ca esound" msgid "xine output plugin for Coreaudio/Mac OS X" msgstr "wtyczka wyjÅ›cia dźwiÄ™ku używajÄ…ca kde artsd" -#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:919 +#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:920 #, c-format msgid "audio_sun_out: opening audio device %s failed: %s\n" msgstr "" -#: src/audio_out/audio_sun_out.c:894 +#: src/audio_out/audio_sun_out.c:895 msgid "Sun audio device name" msgstr "" -#: src/audio_out/audio_sun_out.c:895 +#: src/audio_out/audio_sun_out.c:896 msgid "" "Specifies the file name for the Sun audio device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -339,13 +342,13 @@ msgid "" "careful that the value you enter really is a proper Sun audio device." msgstr "" -#: src/audio_out/audio_sun_out.c:937 +#: src/audio_out/audio_sun_out.c:938 #, c-format msgid "audio_sun_out: audio ioctl on device %s failed: %s\n" msgstr "" # src/audio_out/audio_sun_out.c:748 -#: src/audio_out/audio_sun_out.c:988 +#: src/audio_out/audio_sun_out.c:989 msgid "xine audio output plugin using sun-compliant audio devices/drivers" msgstr "" "wtyczka wyjÅ›cia dźwiÄ™ku xine kompatybilna z urzÄ…dzeniami/sterownikami sun" @@ -435,10 +438,12 @@ msgid "unknown error" msgstr "" #: src/audio_out/audio_directx2_out.c:206 +#, c-format msgid "Unable to create direct sound object." msgstr "" #: src/audio_out/audio_directx2_out.c:212 +#, c-format msgid "Could not set direct sound cooperative level." msgstr "" @@ -447,6 +452,7 @@ msgid "Unable to create secondary direct sound buffer" msgstr "" #: src/audio_out/audio_directx2_out.c:310 +#, c-format msgid "Unable to create buffer position events." msgstr "" @@ -479,6 +485,7 @@ msgid "Can't set sound volume" msgstr "" #: src/audio_out/audio_directx2_out.c:432 +#, c-format msgid ": buffer lost, tryig to restore\n" msgstr "" @@ -491,10 +498,12 @@ msgid "Couldn't unlock direct sound buffer" msgstr "" #: src/audio_out/audio_directx2_out.c:544 +#, c-format msgid "Unable to create primary direct sound buffer." msgstr "" #: src/audio_out/audio_directx2_out.c:637 +#, c-format msgid ": play cursor overran, flushing buffers\n" msgstr "" @@ -567,6 +576,7 @@ msgid "xine audio output plugin for win32 using directx" msgstr "wtyczka wyjÅ›cia dźwiÄ™ku używajÄ…ca kde artsd" #: src/audio_out/audio_alsa_out.c:355 +#, c-format msgid "audio_alsa_out:Already open...WHY!" msgstr "" @@ -673,6 +683,7 @@ msgid "snd_pcm_open() failed:%d:%s\n" msgstr "osd: zawiodÅ‚o iconv_open()\n" #: src/audio_out/audio_alsa_out.c:1428 +#, c-format msgid ">>> Check if another program already uses PCM <<<\n" msgstr "" @@ -823,6 +834,7 @@ msgid "xine audio output plugin using pulseaudio sound server" msgstr "wtyczka wyjÅ›cia dźwiÄ™ku używajÄ…ca esound" #: src/xine-engine/io_helper.c:252 +#, c-format msgid "io_helper: waiting abandoned\n" msgstr "" @@ -836,14 +848,17 @@ msgid "failed to get status of socket" msgstr "" #: src/xine-engine/io_helper.c:388 +#, c-format msgid "io_helper: Permission denied\n" msgstr "" #: src/xine-engine/io_helper.c:392 +#, c-format msgid "io_helper: File not found\n" msgstr "" #: src/xine-engine/io_helper.c:396 +#, c-format msgid "io_helper: Connection Refused\n" msgstr "" @@ -888,136 +903,140 @@ msgid "" "accelerated, this can dramatically reduce CPU usage." msgstr "" -#: src/xine-engine/xine.c:696 src/xine-engine/xine.c:803 -#: src/xine-engine/xine.c:842 src/xine-engine/xine.c:878 -#: src/xine-engine/xine.c:890 src/xine-engine/xine.c:903 -#: src/xine-engine/xine.c:916 src/xine-engine/xine.c:929 -#: src/xine-engine/xine.c:955 src/xine-engine/xine.c:980 -#: src/xine-engine/xine.c:1015 +#: src/xine-engine/xine.c:704 src/xine-engine/xine.c:811 +#: src/xine-engine/xine.c:850 src/xine-engine/xine.c:886 +#: src/xine-engine/xine.c:898 src/xine-engine/xine.c:911 +#: src/xine-engine/xine.c:924 src/xine-engine/xine.c:937 +#: src/xine-engine/xine.c:963 src/xine-engine/xine.c:988 +#: src/xine-engine/xine.c:1023 msgid "xine: error while parsing mrl\n" msgstr "" # src/xine-engine/xine.c:415 -#: src/xine-engine/xine.c:732 +#: src/xine-engine/xine.c:740 #, fuzzy, c-format msgid "xine: found input plugin : %s\n" msgstr "xine: nie mogÄ™ znaleźć wtyczki wejÅ›cia dla tego MRL\n" # src/xine-engine/xine.c:415 -#: src/xine-engine/xine.c:750 +#: src/xine-engine/xine.c:758 #, fuzzy, c-format msgid "xine: input plugin cannot open MRL [%s]\n" msgstr "xine: nie mogÄ™ znaleźć wtyczki wejÅ›cia dla tego MRL\n" # src/xine-engine/xine.c:415 -#: src/xine-engine/xine.c:766 +#: src/xine-engine/xine.c:774 #, fuzzy, c-format msgid "xine: cannot find input plugin for MRL [%s]\n" msgstr "xine: nie mogÄ™ znaleźć wtyczki wejÅ›cia dla tego MRL\n" # src/xine-engine/xine.c:471 -#: src/xine-engine/xine.c:792 +#: src/xine-engine/xine.c:800 #, c-format msgid "xine: specified demuxer %s failed to start\n" msgstr "xine: zawiódÅ‚ start wybranego demultiplexera %s\n" # src/input/input_http.c:640 -#: src/xine-engine/xine.c:828 -#, fuzzy +#: src/xine-engine/xine.c:836 +#, fuzzy, c-format msgid "xine: join rip input plugin\n" msgstr "wtyczka wejÅ›cia VCD" # src/input/input_http.c:640 -#: src/xine-engine/xine.c:835 +#: src/xine-engine/xine.c:843 #, fuzzy msgid "xine: error opening rip input plugin instance\n" msgstr "wtyczka wejÅ›cia VCD" # src/xine-engine/xine.c:471 -#: src/xine-engine/xine.c:866 +#: src/xine-engine/xine.c:874 #, c-format msgid "xine: last_probed demuxer %s failed to start\n" msgstr "xine: zawiódÅ‚ start ostatnio próbowanego demultiplexera %s\n" -#: src/xine-engine/xine.c:895 +#: src/xine-engine/xine.c:903 msgid "ignoring video\n" msgstr "" -#: src/xine-engine/xine.c:908 +#: src/xine-engine/xine.c:916 msgid "ignoring audio\n" msgstr "" -#: src/xine-engine/xine.c:921 +#: src/xine-engine/xine.c:929 msgid "ignoring subpicture\n" msgstr "" -#: src/xine-engine/xine.c:934 +#: src/xine-engine/xine.c:942 msgid "input cache plugin disabled\n" msgstr "" -#: src/xine-engine/xine.c:1005 +#: src/xine-engine/xine.c:1013 #, c-format msgid "subtitle mrl opened '%s'\n" msgstr "" -#: src/xine-engine/xine.c:1009 +#: src/xine-engine/xine.c:1017 msgid "xine: error opening subtitle mrl\n" msgstr "" -#: src/xine-engine/xine.c:1041 +#: src/xine-engine/xine.c:1049 +#, c-format msgid "xine: error while parsing MRL\n" msgstr "" -#: src/xine-engine/xine.c:1048 +#: src/xine-engine/xine.c:1056 #, c-format msgid "xine: changing option '%s' from MRL isn't permitted\n" msgstr "" # src/xine-engine/xine.c:436 -#: src/xine-engine/xine.c:1068 +#: src/xine-engine/xine.c:1076 #, c-format msgid "xine: couldn't find demux for >%s<\n" msgstr "xine: nie mogÄ™ znaleźć demultiplexera dla >%s<\n" # src/xine-engine/xine.c:436 -#: src/xine-engine/xine.c:1084 +#: src/xine-engine/xine.c:1092 #, fuzzy, c-format msgid "xine: found demuxer plugin: %s\n" msgstr "xine: nie mogÄ™ znaleźć demultiplexera dla >%s<\n" # src/xine-engine/xine.c:471 -#: src/xine-engine/xine.c:1104 +#: src/xine-engine/xine.c:1112 +#, c-format msgid "xine: demuxer failed to start\n" msgstr "xine: zawiódÅ‚ start demultiplexera\n" # src/xine-engine/xine.c:471 -#: src/xine-engine/xine.c:1167 +#: src/xine-engine/xine.c:1177 +#, c-format msgid "xine_play: no demux available\n" msgstr "xine_play: brak dostÄ™pnego demultiplexera\n" # src/xine-engine/xine.c:471 -#: src/xine-engine/xine.c:1237 +#: src/xine-engine/xine.c:1247 +#, c-format msgid "xine_play: demux failed to start\n" msgstr "xine_play: zawiódÅ‚ start demultiplexera\n" -#: src/xine-engine/xine.c:1508 +#: src/xine-engine/xine.c:1523 #, c-format msgid "xine: The specified save_dir \"%s\" might be a security risk.\n" msgstr "" -#: src/xine-engine/xine.c:1513 +#: src/xine-engine/xine.c:1528 msgid "The specified save_dir might be a security risk." msgstr "" -#: src/xine-engine/xine.c:1539 +#: src/xine-engine/xine.c:1554 msgid "xine: locale not supported by C library\n" msgstr "" -#: src/xine-engine/xine.c:1548 +#: src/xine-engine/xine.c:1563 msgid "media format detection strategy" msgstr "" -#: src/xine-engine/xine.c:1549 +#: src/xine-engine/xine.c:1564 msgid "" "xine offers various methods to detect the media format of input to play. The " "individual values are:\n" @@ -1035,11 +1054,11 @@ msgid "" "Detect by file name extension only.\n" msgstr "" -#: src/xine-engine/xine.c:1567 +#: src/xine-engine/xine.c:1582 msgid "directory for saving streams" msgstr "" -#: src/xine-engine/xine.c:1568 +#: src/xine-engine/xine.c:1583 msgid "" "When using the stream save feature, files will be written only into this " "directory.\n" @@ -1049,11 +1068,11 @@ msgid "" "content in any file." msgstr "" -#: src/xine-engine/xine.c:1579 +#: src/xine-engine/xine.c:1594 msgid "allow implicit changes to the configuration (e.g. by MRL)" msgstr "" -#: src/xine-engine/xine.c:1580 +#: src/xine-engine/xine.c:1595 msgid "" "If enabled, you allow xine to change your configuration without explicit " "actions from your side. For example configuration changes demanded by MRLs " @@ -1063,11 +1082,11 @@ msgid "" "configuration, you might end with a totally messed up xine." msgstr "" -#: src/xine-engine/xine.c:1594 +#: src/xine-engine/xine.c:1609 msgid "Timeout for network stream reading (in seconds)" msgstr "" -#: src/xine-engine/xine.c:1595 +#: src/xine-engine/xine.c:1610 msgid "" "Specifies the timeout when reading from network streams, in seconds. Too low " "values might stop streaming when the source is slow or the bandwidth is " @@ -1075,16 +1094,16 @@ msgid "" msgstr "" # src/xine-engine/xine.c:1025 -#: src/xine-engine/xine.c:1946 +#: src/xine-engine/xine.c:1962 msgid "messages" msgstr "wiadomoÅ›ci" # src/xine-engine/xine.c:1026 -#: src/xine-engine/xine.c:1947 +#: src/xine-engine/xine.c:1963 msgid "plugin" msgstr "wtyczka" -#: src/xine-engine/xine.c:1948 +#: src/xine-engine/xine.c:1964 msgid "trace" msgstr "" @@ -1095,22 +1114,24 @@ msgstr "" # src/input/input_http.c:640 #: src/xine-engine/input_rip.c:154 -#, fuzzy +#, fuzzy, c-format msgid "input_rip: reading by input plugin failed\n" msgstr "wtyczka strumienia standardowego wejÅ›cia" # src/input/input_rtp.c:339 #: src/xine-engine/input_rip.c:162 src/xine-engine/input_rip.c:291 -#: src/xine-engine/input_rip.c:643 +#: src/xine-engine/input_rip.c:657 #, fuzzy, c-format msgid "input_rip: error writing to file %<PRIdMAX> bytes: %s\n" msgstr "input_rtp: nie mogÄ™ utworzyć nowego wÄ…tku (%s)\n" #: src/xine-engine/input_rip.c:183 +#, c-format msgid "input_rip: open() function should never be called\n" msgstr "" #: src/xine-engine/input_rip.c:314 src/xine-engine/input_rip.c:419 +#, c-format msgid "input_rip: seeking failed\n" msgstr "" @@ -1124,37 +1145,41 @@ msgstr "" msgid "input_rip: %<PRIdMAX> bytes dropped\n" msgstr "" -#: src/xine-engine/input_rip.c:548 +#: src/xine-engine/input_rip.c:562 +#, c-format msgid "input_rip: input plugin not defined!\n" msgstr "" -#: src/xine-engine/input_rip.c:554 +#: src/xine-engine/input_rip.c:568 +#, c-format msgid "" "input_rip: target directory wasn't specified, please fill out the option " "'media.capture.save_dir'\n" msgstr "" -#: src/xine-engine/input_rip.c:556 +#: src/xine-engine/input_rip.c:570 msgid "" "The stream save feature is disabled until you set media.capture.save_dir in " "the configuration." msgstr "" -#: src/xine-engine/input_rip.c:563 +#: src/xine-engine/input_rip.c:577 +#, c-format msgid "input_rip: ripping/caching of this source is not permitted!\n" msgstr "" -#: src/xine-engine/input_rip.c:565 +#: src/xine-engine/input_rip.c:579 msgid "" "xine is not allowed to save from this source. (possibly copyrighted " "material?)" msgstr "" -#: src/xine-engine/input_rip.c:571 +#: src/xine-engine/input_rip.c:585 +#, c-format msgid "input_rip: file name not given!\n" msgstr "" -#: src/xine-engine/input_rip.c:613 +#: src/xine-engine/input_rip.c:627 #, c-format msgid "input_rip: error opening file %s: %s\n" msgstr "" @@ -1194,58 +1219,59 @@ msgid "" msgstr "" #: src/xine-engine/input_cache.c:167 +#, c-format msgid ": open() function should never be called\n" msgstr "" #: src/xine-engine/input_cache.c:349 -#, fuzzy +#, fuzzy, c-format msgid ": input plugin not defined!\n" msgstr "osd: nie zostaÅ‚ zdefiniowany font\n" -#: src/xine-engine/osd.c:739 +#: src/xine-engine/osd.c:745 #, c-format msgid "font '%s-%d' already loaded, weird.\n" msgstr "" -#: src/xine-engine/osd.c:751 +#: src/xine-engine/osd.c:757 #, c-format msgid "font '%s' loading failed (%d < %d)\n" msgstr "" -#: src/xine-engine/osd.c:761 +#: src/xine-engine/osd.c:767 #, c-format msgid "wrong version for font '%s'. expected %d found %d.\n" msgstr "" -#: src/xine-engine/osd.c:828 +#: src/xine-engine/osd.c:834 msgid "osd: cannot initialize ft2 library\n" msgstr "" -#: src/xine-engine/osd.c:851 +#: src/xine-engine/osd.c:857 #, c-format msgid "osd: error matching font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:865 +#: src/xine-engine/osd.c:871 #, c-format msgid "osd: error loading font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:868 +#: src/xine-engine/osd.c:874 #, c-format msgid "osd: error looking up font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:889 +#: src/xine-engine/osd.c:895 #, c-format msgid "osd: error loading font %s with ft2\n" msgstr "" -#: src/xine-engine/osd.c:899 +#: src/xine-engine/osd.c:905 msgid "osd: error setting font size (no scalable font?)\n" msgstr "" -#: src/xine-engine/osd.c:1015 +#: src/xine-engine/osd.c:1021 #, c-format msgid "" "osd: unknown sequence starting with byte 0x%02X in encoding \"%s\", " @@ -1254,79 +1280,80 @@ msgstr "" "osd: nieznana sekwencja zaczynajÄ…ca siÄ™ od bajtu 0x%02X w kodowaniu \"%s\", " "pomijanie\n" -#: src/xine-engine/osd.c:1071 +#: src/xine-engine/osd.c:1077 msgid "osd: can't find out current locale character set\n" msgstr "osd: nie można znaleźć zestawu znaków dla aktualnej lokalizacji\n" -#: src/xine-engine/osd.c:1081 +#: src/xine-engine/osd.c:1087 #, fuzzy, c-format msgid "osd: unsupported conversion %s -> %s, no conversion performed\n" msgstr "osd: niewspierana konwersja %s -> UCS-2\n" -#: src/xine-engine/osd.c:1136 src/xine-engine/osd.c:1304 +#: src/xine-engine/osd.c:1142 src/xine-engine/osd.c:1310 msgid "osd: font isn't defined\n" msgstr "osd: nie zostaÅ‚ zdefiniowany font\n" -#: src/xine-engine/osd.c:1175 +#: src/xine-engine/osd.c:1181 msgid "osd: error loading glyph\n" msgstr "" -#: src/xine-engine/osd.c:1181 +#: src/xine-engine/osd.c:1187 msgid "osd: error in rendering glyph\n" msgstr "" -#: src/xine-engine/osd.c:1341 +#: src/xine-engine/osd.c:1347 #, c-format msgid "osd: error loading glyph %i\n" msgstr "" -#: src/xine-engine/osd.c:1348 +#: src/xine-engine/osd.c:1354 #, fuzzy msgid "osd: error in rendering\n" msgstr "osd: nie zostaÅ‚ zdefiniowany font\n" # src/xine-engine/osd.c:863 -#: src/xine-engine/osd.c:1596 +#: src/xine-engine/osd.c:1602 #, fuzzy msgid "palette (foreground-border-background) to use for subtitles and OSD" msgstr "paleta użyta przy napisach (tÅ‚o-napisy-kontur)" -#: src/xine-engine/osd.c:1597 +#: src/xine-engine/osd.c:1603 msgid "" "The palette for on-screen-display and some subtitle formats that do not " "specify any colouring themselves. The palettes are listed in the form: " "foreground-border-background." msgstr "" -#: src/xine-engine/configfile.c:896 +#: src/xine-engine/configfile.c:924 +#, c-format msgid "The current config file has been modified by a newer version of xine." msgstr "" -#: src/xine-engine/configfile.c:1001 +#: src/xine-engine/configfile.c:1029 #, c-format msgid "configfile: WARNING: backing up configfile to %s failed\n" msgstr "" -#: src/xine-engine/configfile.c:1002 +#: src/xine-engine/configfile.c:1030 msgid "configfile: WARNING: your configuration will not be saved\n" msgstr "" -#: src/xine-engine/configfile.c:1101 +#: src/xine-engine/configfile.c:1129 #, c-format msgid "configfile: WARNING: writing configuration to %s failed\n" msgstr "" -#: src/xine-engine/configfile.c:1102 +#: src/xine-engine/configfile.c:1130 #, c-format msgid "configfile: WARNING: removing possibly broken config file %s\n" msgstr "" -#: src/xine-engine/configfile.c:1103 +#: src/xine-engine/configfile.c:1131 #, c-format msgid "configfile: WARNING: you should check the backup file %s\n" msgstr "" -#: src/xine-engine/configfile.c:1237 +#: src/xine-engine/configfile.c:1266 #, c-format msgid "configfile: entry '%s' mustn't be modified from MRL\n" msgstr "" @@ -1345,48 +1372,58 @@ msgid "" "(diff : %<PRId64>).\n" msgstr "video_out: odrzucam obraz o pts %lld bo jest za stary (diff : %lld).\n" -#: src/xine-engine/video_out.c:1818 +#: src/xine-engine/video_out.c:1790 +msgid "default number of video frames" +msgstr "" + +#: src/xine-engine/video_out.c:1791 +msgid "" +"The default number of video frames to request from xine video out driver. " +"Some drivers will override this setting with their own values." +msgstr "" + +#: src/xine-engine/video_out.c:1830 msgid "percentage of skipped frames to tolerate" msgstr "" -#: src/xine-engine/video_out.c:1819 +#: src/xine-engine/video_out.c:1831 msgid "" "When more than this percentage of frames are not shown, because they were " "not decoded in time, xine sends a notification." msgstr "" -#: src/xine-engine/video_out.c:1824 +#: src/xine-engine/video_out.c:1836 msgid "percentage of discarded frames to tolerate" msgstr "" -#: src/xine-engine/video_out.c:1825 +#: src/xine-engine/video_out.c:1837 msgid "" "When more than this percentage of frames are not shown, because they were " "not scheduled for display in time, xine sends a notification." msgstr "" # src/xine-engine/video_out.c:893 -#: src/xine-engine/video_out.c:1859 +#: src/xine-engine/video_out.c:1871 msgid "video_out: sorry, this should not happen. please restart xine.\n" msgstr "" "video_out: przykro mi, to nie powinno sie zdarzyć.\n" "ProszÄ™ ponownie uruchomić xine.\n" -#: src/xine-engine/video_decoder.c:374 +#: src/xine-engine/video_decoder.c:380 #, c-format msgid "video_decoder: no plugin available to handle '%s'\n" msgstr "" -#: src/xine-engine/video_decoder.c:453 +#: src/xine-engine/video_decoder.c:459 #, c-format msgid "video_decoder: error, unknown buffer type: %08x\n" msgstr "" -#: src/xine-engine/video_decoder.c:489 +#: src/xine-engine/video_decoder.c:495 msgid "number of video buffers" msgstr "" -#: src/xine-engine/video_decoder.c:490 +#: src/xine-engine/video_decoder.c:496 msgid "" "The number of video buffers (each is 8k in size) xine uses in its internal " "queue. Higher values mean smoother playback for unreliable inputs, but also " @@ -1404,87 +1441,87 @@ msgid "" "info_helper: unsupported conversion %s -> UTF-8, no conversion performed\n" msgstr "osd: niewspierana konwersja %s -> UCS-2\n" -#: src/xine-engine/xine_interface.c:918 +#: src/xine-engine/xine_interface.c:934 msgid "Warning:" msgstr "" -#: src/xine-engine/xine_interface.c:919 +#: src/xine-engine/xine_interface.c:935 msgid "Unknown host:" msgstr "" -#: src/xine-engine/xine_interface.c:920 +#: src/xine-engine/xine_interface.c:936 msgid "Unknown device:" msgstr "" -#: src/xine-engine/xine_interface.c:921 +#: src/xine-engine/xine_interface.c:937 msgid "Network unreachable" msgstr "" -#: src/xine-engine/xine_interface.c:922 +#: src/xine-engine/xine_interface.c:938 msgid "Connection refused:" msgstr "" # src/input/input_file.c:353 -#: src/xine-engine/xine_interface.c:923 +#: src/xine-engine/xine_interface.c:939 #, fuzzy msgid "File not found:" msgstr "input_file: błąd odczytu (%s)\n" -#: src/xine-engine/xine_interface.c:924 +#: src/xine-engine/xine_interface.c:940 msgid "Read error from:" msgstr "" -#: src/xine-engine/xine_interface.c:925 +#: src/xine-engine/xine_interface.c:941 msgid "Error loading library:" msgstr "" -#: src/xine-engine/xine_interface.c:926 +#: src/xine-engine/xine_interface.c:942 msgid "Encrypted media stream detected" msgstr "" -#: src/xine-engine/xine_interface.c:927 +#: src/xine-engine/xine_interface.c:943 msgid "Security message:" msgstr "" -#: src/xine-engine/xine_interface.c:928 +#: src/xine-engine/xine_interface.c:944 msgid "Audio device unavailable" msgstr "" -#: src/xine-engine/xine_interface.c:929 +#: src/xine-engine/xine_interface.c:945 msgid "Permission error" msgstr "" -#: src/xine-engine/xine_interface.c:930 +#: src/xine-engine/xine_interface.c:946 msgid "File is empty:" msgstr "" -#: src/xine-engine/audio_out.c:1074 +#: src/xine-engine/audio_out.c:1072 msgid "" "audio_out: delay calculation impossible with an unavailable audio device\n" msgstr "" -#: src/xine-engine/audio_out.c:1216 +#: src/xine-engine/audio_out.c:1214 msgid "write to sound card failed. Was a USB device unplugged ?\n" msgstr "" -#: src/xine-engine/audio_out.c:1369 +#: src/xine-engine/audio_out.c:1367 msgid "8 bits not supported by driver, converting to 16 bits.\n" msgstr "" -#: src/xine-engine/audio_out.c:1377 +#: src/xine-engine/audio_out.c:1375 msgid "mono not supported by driver, converting to stereo.\n" msgstr "" -#: src/xine-engine/audio_out.c:1383 +#: src/xine-engine/audio_out.c:1381 msgid "stereo not supported by driver, converting to mono.\n" msgstr "" -#: src/xine-engine/audio_out.c:2028 +#: src/xine-engine/audio_out.c:2033 #, fuzzy msgid "method to sync audio and video" msgstr "wybierz metodÄ™ synchronizacji dźwiÄ™ku z obrazem" -#: src/xine-engine/audio_out.c:2029 +#: src/xine-engine/audio_out.c:2034 msgid "" "When playing audio and video, there are at least two clocks involved: The " "system clock, to which video frames are synchronized and the clock in your " @@ -1507,11 +1544,11 @@ msgid "" "form." msgstr "" -#: src/xine-engine/audio_out.c:2057 +#: src/xine-engine/audio_out.c:2062 msgid "enable resampling" msgstr "" -#: src/xine-engine/audio_out.c:2058 +#: src/xine-engine/audio_out.c:2063 msgid "" "When the sample rate of the decoded audio does not match the capabilities of " "your sound hardware, an adaptation called \"resampling\" is required. Here " @@ -1520,34 +1557,34 @@ msgid "" msgstr "" # src/xine-engine/audio_out.c:828 -#: src/xine-engine/audio_out.c:2065 +#: src/xine-engine/audio_out.c:2070 #, fuzzy msgid "always resample to this rate (0 to disable)" msgstr "jeÅ›li !=0 zawsze ponowne próbkowanie do podanej czÄ™stotliwoÅ›ci" -#: src/xine-engine/audio_out.c:2066 +#: src/xine-engine/audio_out.c:2071 msgid "" "Some audio drivers do not correctly announce the capabilities of the audio " "hardware. By setting a value other than zero here, you can force the audio " "stream to be resampled to the given rate." msgstr "" -#: src/xine-engine/audio_out.c:2075 +#: src/xine-engine/audio_out.c:2080 msgid "offset for digital passthrough" msgstr "" -#: src/xine-engine/audio_out.c:2076 +#: src/xine-engine/audio_out.c:2081 msgid "" "If you use an external surround decoder and audio is ahead or behind video, " "you can enter a fixed offset here to compensate.\n" "The unit of the value is one PTS tick, which is the 90000th part of a second." msgstr "" -#: src/xine-engine/audio_out.c:2085 +#: src/xine-engine/audio_out.c:2090 msgid "play audio even on slow/fast speeds" msgstr "" -#: src/xine-engine/audio_out.c:2086 +#: src/xine-engine/audio_out.c:2091 msgid "" "If you enable this option, the audio will be heard even when playback speed " "is different than 1X. Of course, it will sound distorted (lower/higher " @@ -1556,24 +1593,24 @@ msgid "" msgstr "" # src/xine-engine/audio_out.c:868 -#: src/xine-engine/audio_out.c:2157 +#: src/xine-engine/audio_out.c:2162 #, fuzzy msgid "startup audio volume" msgstr "gÅ‚oÅ›ność dźwiÄ™ku" # src/xine-engine/audio_out.c:872 -#: src/xine-engine/audio_out.c:2158 +#: src/xine-engine/audio_out.c:2163 #, fuzzy msgid "The overall audio volume set at xine startup." msgstr "przywracanie gÅ‚oÅ›noÅ›ci przy starcie" # src/xine-engine/audio_out.c:872 -#: src/xine-engine/audio_out.c:2161 +#: src/xine-engine/audio_out.c:2166 msgid "restore volume level at startup" msgstr "przywracanie gÅ‚oÅ›noÅ›ci przy starcie" # src/xine-engine/audio_out.c:873 -#: src/xine-engine/audio_out.c:2162 +#: src/xine-engine/audio_out.c:2167 #, fuzzy msgid "If disabled, xine will not modify any mixer settings at startup." msgstr "" @@ -1581,7 +1618,7 @@ msgstr "" "starcie" # src/xine-engine/video_out.c:893 -#: src/xine-engine/audio_out.c:2192 +#: src/xine-engine/audio_out.c:2197 #, fuzzy msgid "audio_out: sorry, this should not happen. please restart xine.\n" msgstr "" @@ -1589,6 +1626,7 @@ msgstr "" "ProszÄ™ ponownie uruchomić xine.\n" #: src/xine-engine/load_plugins.c:212 +#, c-format msgid "map_decoder_list: no space for decoder, skipped.\n" msgstr "" @@ -1632,7 +1670,7 @@ msgstr "load_plugins: wtyczka %s znaleziona\n" # src/xine-engine/load_plugins.c:153 #: src/xine-engine/load_plugins.c:499 -#, fuzzy +#, fuzzy, c-format msgid "load_plugins: static plugin found\n" msgstr "load_plugins: wtyczka %s znaleziona\n" @@ -1644,7 +1682,7 @@ msgstr "load_plugins: wtyczka %s znaleziona\n" # src/xine-engine/load_plugins.c:153 #: src/xine-engine/load_plugins.c:509 -#, fuzzy +#, fuzzy, c-format msgid "load_plugins: plugin limit reached, static plugin could not be loaded\n" msgstr "load_plugins: wtyczka %s znaleziona\n" @@ -1817,11 +1855,11 @@ msgid "" msgstr "" "wtyczka wyjÅ›cia obrazu xine używajÄ…ca moduÅ‚u SyncFB dla kart Matrox G200/G400" -#: src/video_out/video_out_syncfb.c:1077 +#: src/video_out/video_out_syncfb.c:1078 msgid "SyncFB device name" msgstr "" -#: src/video_out/video_out_syncfb.c:1078 +#: src/video_out/video_out_syncfb.c:1079 msgid "" "Specifies the file name for the SyncFB (TeleTux) device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -1837,50 +1875,50 @@ msgstr "wtyczka wyjÅ›cia obrazu xine używajÄ…ca biblioteki ascii-art" # src/dxr3/video_out_dxr3.c:287 #: src/video_out/video_out_xvmc.c:1446 src/video_out/video_out_pgx64.c:1464 -#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1436 +#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1437 #, fuzzy msgid "video overlay colour key" msgstr "dxr3: wartość koloru kluczowego dla overlay" #: src/video_out/video_out_xvmc.c:1447 src/video_out/video_out_xxmc.c:2431 #: src/video_out/video_out_vidix.c:1159 src/video_out/video_out_vidix.c:1166 -#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1437 +#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1438 msgid "" "The colour key is used to tell the graphics card where to overlay the video " "image. Try different values, if you experience windows becoming transparent." msgstr "" #: src/video_out/video_out_xvmc.c:1455 src/video_out/video_out_xxmc.c:2439 -#: src/video_out/video_out_xv.c:1445 +#: src/video_out/video_out_xv.c:1446 #, fuzzy msgid "autopaint colour key" msgstr "Auto-tworzenie koloru-klucza przez Xv" #: src/video_out/video_out_xvmc.c:1456 src/video_out/video_out_xxmc.c:2440 -#: src/video_out/video_out_xv.c:1446 +#: src/video_out/video_out_xv.c:1447 #, fuzzy msgid "Make Xv autopaint its colorkey." msgstr "Auto-tworzenie koloru-klucza przez Xv" #: src/video_out/video_out_xvmc.c:1461 src/video_out/video_out_xxmc.c:2463 -#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1469 +#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1470 #: src/video_out/video_out_opengl.c:1918 msgid "enable double buffering" msgstr "" #: src/video_out/video_out_xvmc.c:1462 src/video_out/video_out_xxmc.c:2464 -#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1470 +#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1471 msgid "" "Double buffering will synchronize the update of the video image to the " "repainting of the entire screen (\"vertical retrace\"). This eliminates " "flickering and tearing artifacts, but will use more graphics memory." msgstr "" -#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1537 +#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1538 msgid "deinterlace method (deprecated)" msgstr "" -#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1538 +#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1539 msgid "" "This config setting is deprecated. You should use the new deinterlacing post " "processing settings instead.\n" @@ -2081,12 +2119,12 @@ msgid "" msgstr "" # src/video_out/video_out_xv.c:1408 -#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1453 +#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1454 #, fuzzy msgid "bilinear scaling mode" msgstr "tryb skalowania bilinearnego (permedia 2/3)" -#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1454 +#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1455 msgid "" "Selects the bilinear scaling mode for Permedia cards. The individual values " "are:\n" @@ -2109,11 +2147,11 @@ msgstr "" msgid "video_out_xxmc: this adaptor supports the yuy2 format.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1530 +#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1531 msgid "pitch alignment workaround" msgstr "" -#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1531 +#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1532 msgid "Some buggy video drivers need a workaround to function properly." msgstr "" @@ -2160,7 +2198,7 @@ msgid "" msgstr "" # src/video_out/video_out_xv.c:1479 -#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1611 +#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1612 msgid "xine video output plugin using the MIT X video extension" msgstr "wtyczka wyjÅ›cia obrazu xine używajÄ…ca rozszerzenia obrazu MIT X" @@ -2313,29 +2351,29 @@ msgid "" "video_out_xv: => not using MIT Shared Memory extension.\n" msgstr "" -#: src/video_out/video_out_xv.c:1282 +#: src/video_out/video_out_xv.c:1283 msgid "video_out_xv: Xv extension not present.\n" msgstr "" -#: src/video_out/video_out_xv.c:1319 +#: src/video_out/video_out_xv.c:1320 msgid "" "video_out_xv: Xv extension is present but I couldn't find a usable yuv12 " "port.\n" " Looks like your graphics hardware driver doesn't support Xv?!\n" msgstr "" -#: src/video_out/video_out_xv.c:1328 +#: src/video_out/video_out_xv.c:1329 #, c-format msgid "" "video_out_xv: using Xv port %ld from adaptor %s for hardware colorspace " "conversion and scaling.\n" msgstr "" -#: src/video_out/video_out_xv.c:1503 +#: src/video_out/video_out_xv.c:1504 msgid "video_out_xv: this adaptor supports the yv12 format.\n" msgstr "" -#: src/video_out/video_out_xv.c:1508 +#: src/video_out/video_out_xv.c:1509 msgid "video_out_xv: this adaptor supports the yuy2 format.\n" msgstr "" @@ -2574,73 +2612,73 @@ msgid "" "\"=disabled)." msgstr "" -#: src/video_out/video_out_directfb.c:1509 +#: src/video_out/video_out_directfb.c:1516 msgid "video_out_directfb: using hardware subpicture acceleration.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1523 +#: src/video_out/video_out_directfb.c:1530 msgid "video_out_directfb: layer supports video output.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1532 +#: src/video_out/video_out_directfb.c:1539 msgid "video_out_directfb: layer doesn't support YV12!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1539 +#: src/video_out/video_out_directfb.c:1546 msgid "video_out_directfb: layer doesn't support YUY2!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1550 +#: src/video_out/video_out_directfb.c:1557 msgid "" "video_out_directfb:need at least DirectFB 0.9.25 to play on this layer!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1585 +#: src/video_out/video_out_directfb.c:1592 #, c-format msgid "video_out_directfb: layer doesn't support buffermode %d!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1591 +#: src/video_out/video_out_directfb.c:1598 #, c-format msgid "video_out_directfb: layer doesn't support options 0x%08x!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1685 +#: src/video_out/video_out_directfb.c:1692 msgid "video_out_directfb: using hardware accelerated image scaling.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1697 +#: src/video_out/video_out_directfb.c:1704 msgid "" "video_out_directfb: image scaling with deinterlacing is hardware " "accelerated.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1775 +#: src/video_out/video_out_directfb.c:1782 msgid "video layer id (auto: -1)" msgstr "" -#: src/video_out/video_out_directfb.c:1776 +#: src/video_out/video_out_directfb.c:1783 msgid "Select the video output layer by its id." msgstr "" -#: src/video_out/video_out_directfb.c:1797 -#: src/video_out/video_out_directfb.c:2006 +#: src/video_out/video_out_directfb.c:1804 +#: src/video_out/video_out_directfb.c:2013 #, c-format msgid "video_out_directfb: using display layer #%d.\n" msgstr "" # src/video_out/video_out_directfb.c:569 -#: src/video_out/video_out_directfb.c:1881 +#: src/video_out/video_out_directfb.c:1888 #, fuzzy msgid "xine video output plugin using DirectFB." msgstr "wtyczka wyjÅ›cia obrazu xine używajÄ…ca biblioteki DirectFB" -#: src/video_out/video_out_directfb.c:1999 +#: src/video_out/video_out_directfb.c:2006 msgid "video_out_directfb: no usable display layer was found!\n" msgstr "" # src/video_out/video_out_directfb.c:569 -#: src/video_out/video_out_directfb.c:2088 +#: src/video_out/video_out_directfb.c:2095 #, fuzzy msgid "xine video output plugin using DirectFB under XDirectFB." msgstr "wtyczka wyjÅ›cia obrazu xine używajÄ…ca biblioteki DirectFB" @@ -2659,20 +2697,20 @@ msgstr "" msgid "video_out_pgx32: Error: '%s' is not a pgx32 framebuffer device\n" msgstr "" -#: src/libmusepack/xine_decoder.c:237 +#: src/libmusepack/xine_decoder.c:241 #, c-format msgid "libmusepack: mpc_streaminfo_read failed: %d\n" msgstr "" -#: src/libmusepack/xine_decoder.c:311 +#: src/libmusepack/xine_decoder.c:315 msgid "libmusepack: data after last frame ignored\n" msgstr "" -#: src/libmusepack/xine_decoder.c:322 +#: src/libmusepack/xine_decoder.c:326 msgid "libmusepack: mpc_decoder_initialise failed\n" msgstr "" -#: src/libmusepack/xine_decoder.c:342 src/libmusepack/xine_decoder.c:357 +#: src/libmusepack/xine_decoder.c:346 src/libmusepack/xine_decoder.c:361 #, c-format msgid "libmusepack: mpc_decoder_decode failed: %d\n" msgstr "" @@ -2758,15 +2796,15 @@ msgstr "pionowe wyrównanie napisów (wzglÄ™dny rozmiar okna)" msgid "encoding of subtitles" msgstr "kodowanie napisów" -#: src/input/vcd/vcdio.c:211 +#: src/input/vcd/vcdio.c:223 msgid "SEEK_CUR not implemented for non-zero offset" msgstr "" -#: src/input/vcd/vcdio.c:239 +#: src/input/vcd/vcdio.c:251 msgid "SEEK_END not implemented yet." msgstr "" -#: src/input/vcd/vcdio.c:242 +#: src/input/vcd/vcdio.c:254 msgid "seek not implemented yet for" msgstr "" @@ -2774,106 +2812,106 @@ msgstr "" msgid "failed to find a device with a VCD" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:327 +#: src/input/vcd/xineplug_inp_vcd.c:328 msgid "was passed a null class parameter" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:967 +#: src/input/vcd/xineplug_inp_vcd.c:972 msgid "Invalid current entry type" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:991 +#: src/input/vcd/xineplug_inp_vcd.c:996 msgid "" "Video CD plugin with PBC and support for: (X)VCD, (X)SVCD, HQVCD, CVD ... " msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1092 +#: src/input/vcd/xineplug_inp_vcd.c:1097 msgid "selection has no RETURN entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1121 +#: src/input/vcd/xineplug_inp_vcd.c:1126 msgid "DEFAULT selected, but PBC is not on." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1126 +#: src/input/vcd/xineplug_inp_vcd.c:1131 msgid "selection has no NEXT entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1134 +#: src/input/vcd/xineplug_inp_vcd.c:1139 msgid "selection has no PREVIOUS entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1141 +#: src/input/vcd/xineplug_inp_vcd.c:1146 msgid "Unknown event type: " msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1441 src/input/vcd/xineplug_inp_vcd.c:1488 +#: src/input/vcd/xineplug_inp_vcd.c:1446 src/input/vcd/xineplug_inp_vcd.c:1493 msgid "The above message had unknown vcdimager log level" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1819 +#: src/input/vcd/xineplug_inp_vcd.c:1824 msgid "VCD default type to use on autoplay" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1820 +#: src/input/vcd/xineplug_inp_vcd.c:1825 msgid "" "The VCD play unit to use when none is specified in an MRL, e.g. vcd:// or " "vcd:///dev/dvd:" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1830 +#: src/input/vcd/xineplug_inp_vcd.c:1835 msgid "CD-ROM drive used for VCD when none given" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1831 +#: src/input/vcd/xineplug_inp_vcd.c:1836 msgid "" "What to use if no drive specified. If the setting is empty, xine will scan " "for CD drives." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1841 +#: src/input/vcd/xineplug_inp_vcd.c:1846 msgid "VCD position slider range" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1842 +#: src/input/vcd/xineplug_inp_vcd.c:1847 msgid "" "range that the stream playback position slider represents playing a VCD." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1850 +#: src/input/vcd/xineplug_inp_vcd.c:1855 msgid "VCD read-ahead caching?" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1851 +#: src/input/vcd/xineplug_inp_vcd.c:1856 msgid "Class may lead to jerky playback on low-end machines." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1861 +#: src/input/vcd/xineplug_inp_vcd.c:1866 msgid "automatically advance VCD track/entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1862 +#: src/input/vcd/xineplug_inp_vcd.c:1867 msgid "" "If enabled, we should automatically advance to the next entry or track. Used " "only when playback control (PBC) is disabled." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1871 +#: src/input/vcd/xineplug_inp_vcd.c:1876 msgid "show 'rejected' VCD LIDs" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1872 +#: src/input/vcd/xineplug_inp_vcd.c:1877 msgid "" "Some playback list IDs (LIDs) are marked not showable, but you can see them " "in the MRL list if this is set. Rejected entries are marked with an asterisk " "(*) appended to the MRL." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1883 +#: src/input/vcd/xineplug_inp_vcd.c:1888 msgid "VCD format string for display banner" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1884 +#: src/input/vcd/xineplug_inp_vcd.c:1889 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are:\n" @@ -2894,11 +2932,11 @@ msgid "" " %% : a %\n" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1909 +#: src/input/vcd/xineplug_inp_vcd.c:1914 msgid "VCD format string for stream comment field" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1910 +#: src/input/vcd/xineplug_inp_vcd.c:1915 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are %A, %C, %c, %F, %I, %L, " @@ -2906,11 +2944,11 @@ msgid "" "See the help for the title_format for the meanings of these." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1922 +#: src/input/vcd/xineplug_inp_vcd.c:1927 msgid "VCD debug flag mask" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1923 +#: src/input/vcd/xineplug_inp_vcd.c:1928 msgid "" "For tracking down bugs in the VCD plugin. Mask values are:\n" " 1: Meta information\n" @@ -3066,11 +3104,11 @@ msgid "" "playing DVDs." msgstr "" -#: src/input/input_dvd.c:1803 +#: src/input/input_dvd.c:1804 msgid "raw device set up for DVD access" msgstr "" -#: src/input/input_dvd.c:1804 +#: src/input/input_dvd.c:1805 msgid "" "If this points to a raw device connected to your DVD device, xine will use " "the raw device for playback. This has the advantage of being slightly faster " @@ -3081,11 +3119,11 @@ msgid "" "See the documentation on raw device setup (man raw) for further information." msgstr "" -#: src/input/input_dvd.c:1817 +#: src/input/input_dvd.c:1818 msgid "CSS decryption method" msgstr "" -#: src/input/input_dvd.c:1818 +#: src/input/input_dvd.c:1819 msgid "" "Selects the decryption method libdvdcss will use to descramble copy " "protected DVDs. Try the various methods, if you have problems playing " @@ -3093,12 +3131,12 @@ msgid "" msgstr "" # src/input/input_vcd.c:1184 -#: src/input/input_dvd.c:1826 +#: src/input/input_dvd.c:1827 #, fuzzy msgid "path to the title key cache" msgstr "Å›cieżka dostÄ™pu do pliku lokalnego urzÄ…dzenia vcd" -#: src/input/input_dvd.c:1827 +#: src/input/input_dvd.c:1828 msgid "" "Since cracking the copy protection of scrambled DVDs can be quite time " "consuming, libdvdcss will cache the cracked keys in this directory.\n" @@ -3107,44 +3145,44 @@ msgid "" "used for anything but DVD key caching." msgstr "" -#: src/input/input_dvd.c:1849 +#: src/input/input_dvd.c:1850 msgid "region the DVD player claims to be in (1 to 8)" msgstr "" -#: src/input/input_dvd.c:1850 +#: src/input/input_dvd.c:1851 msgid "" "This only needs to be changed if your DVD jumps to a screen complaining " "about a wrong region code. It has nothing to do with the region code set in " "DVD drives, this is purely software." msgstr "" -#: src/input/input_dvd.c:1856 +#: src/input/input_dvd.c:1857 msgid "default language for DVD playback" msgstr "" -#: src/input/input_dvd.c:1857 +#: src/input/input_dvd.c:1858 msgid "" "xine tries to use this language as a default for DVD playback. As far as the " "DVD supports it, menus and audio tracks will be presented in this language.\n" "The value must be a two character ISO639 language code." msgstr "" -#: src/input/input_dvd.c:1863 +#: src/input/input_dvd.c:1864 msgid "read-ahead caching" msgstr "" -#: src/input/input_dvd.c:1864 +#: src/input/input_dvd.c:1865 msgid "" "xine can use a read ahead cache for DVD drive access.\n" "This may lead to jerky playback on slow drives, but it improves the impact " "of the DVD layer change on faster drives." msgstr "" -#: src/input/input_dvd.c:1870 +#: src/input/input_dvd.c:1871 msgid "unit for the skip action" msgstr "" -#: src/input/input_dvd.c:1871 +#: src/input/input_dvd.c:1872 msgid "" "You can configure the behaviour when issuing a skip command (using the skip " "buttons for example). The individual values mean:\n" @@ -3163,11 +3201,11 @@ msgid "" "features on the DVD" msgstr "" -#: src/input/input_dvd.c:1886 +#: src/input/input_dvd.c:1887 msgid "unit for seeking" msgstr "" -#: src/input/input_dvd.c:1887 +#: src/input/input_dvd.c:1888 msgid "" "You can configure the domain spanned by the seek slider. The individual " "values mean:\n" @@ -3181,11 +3219,11 @@ msgid "" "chapter of the current feature" msgstr "" -#: src/input/input_dvd.c:1898 +#: src/input/input_dvd.c:1899 msgid "play mode when title/chapter is given" msgstr "" -#: src/input/input_dvd.c:1899 +#: src/input/input_dvd.c:1900 msgid "" "You can configure the behaviour when playing a dvd from a given title/" "chapter (eg. using MRL 'dvd:/1.2'). The individual values mean:\n" @@ -3352,29 +3390,29 @@ msgstr "" msgid "DVB (Digital TV) input plugin" msgstr "wtyczka wejÅ›cia pliku" -#: src/input/input_dvb.c:3238 +#: src/input/input_dvb.c:3237 msgid "Remember last DVB channel watched" msgstr "" -#: src/input/input_dvb.c:3239 +#: src/input/input_dvb.c:3238 msgid "" "On autoplay, xine will remember and switch to the channel indicated in media." "dvb.last_channel. " msgstr "" -#: src/input/input_dvb.c:3246 +#: src/input/input_dvb.c:3245 msgid "Last DVB channel viewed" msgstr "" -#: src/input/input_dvb.c:3247 +#: src/input/input_dvb.c:3246 msgid "If enabled xine will remember and switch to this channel. " msgstr "" -#: src/input/input_dvb.c:3253 +#: src/input/input_dvb.c:3252 msgid "Number of dvb card to use." msgstr "" -#: src/input/input_dvb.c:3254 +#: src/input/input_dvb.c:3253 msgid "" "Leave this at zero unless you really have more than 1 card in your system." msgstr "" @@ -3500,83 +3538,83 @@ msgid "" msgstr "" # src/input/input_rtp.c:157 -#: src/input/input_rtp.c:182 +#: src/input/input_rtp.c:185 #, c-format msgid "socket(): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:192 +#: src/input/input_rtp.c:195 msgid "IP address specified is multicast\n" msgstr "" # src/input/input_rtp.c:157 -#: src/input/input_rtp.c:201 +#: src/input/input_rtp.c:204 #, c-format msgid "setsockopt(SO_RCVBUF): %s.\n" msgstr "setsockopt(SO_RCVBUF): %s.\n" # src/input/input_rtp.c:157 -#: src/input/input_rtp.c:209 +#: src/input/input_rtp.c:212 #, fuzzy, c-format msgid "setsockopt(SO_REUSEADDR): %s.\n" msgstr "setsockopt(SO_RCVBUF): %s.\n" # src/input/input_rtp.c:167 -#: src/input/input_rtp.c:216 +#: src/input/input_rtp.c:219 #, c-format msgid "bind(): %s.\n" msgstr "bind(): %s.\n" -#: src/input/input_rtp.c:236 +#: src/input/input_rtp.c:239 #, c-format msgid "Can't find address for iface %s:%s\n" msgstr "" # src/input/input_rtp.c:185 -#: src/input/input_rtp.c:254 +#: src/input/input_rtp.c:257 #, c-format msgid "setsockopt(IP_ADD_MEMBERSHIP) failed (multicast kernel?): %s.\n" msgstr "setsockopt(IP_ADD_MEMBERSHIP) zawiodÅ‚o (multicast kernel?): %s.\n" # src/input/input_rtp.c:205 -#: src/input/input_rtp.c:276 +#: src/input/input_rtp.c:279 #, c-format msgid "unable to resolve '%s'.\n" msgstr "nie mogÄ™ znaleźć IP dla '%s'.\n" # src/input/input_rtp.c:218 -#: src/input/input_rtp.c:286 +#: src/input/input_rtp.c:289 #, c-format msgid "unable to bind to '%s'.\n" msgstr "nie da siÄ™ dowiÄ…zać do '%s'.\n" # src/input/input_rtp.c:157 -#: src/input/input_rtp.c:314 +#: src/input/input_rtp.c:317 #, c-format msgid "recv(): %s.\n" msgstr "recv(): %s.\n" -#: src/input/input_rtp.c:602 +#: src/input/input_rtp.c:605 msgid "RTP: stopping reading thread...\n" msgstr "RTP: zatrzymuje odczyt wÄ…tku...\n" -#: src/input/input_rtp.c:605 +#: src/input/input_rtp.c:608 msgid "RTP: reading thread terminated\n" msgstr "RTP: odczyt wÄ…tku zakoÅ„czony\n" -#: src/input/input_rtp.c:620 +#: src/input/input_rtp.c:623 #, c-format msgid "Opening >filename:%s port:%d interface:%s<\n" msgstr "" # src/input/input_rtp.c:339 -#: src/input/input_rtp.c:637 +#: src/input/input_rtp.c:640 #, c-format msgid "input_rtp: can't create new thread (%s)\n" msgstr "input_rtp: nie mogÄ™ utworzyć nowego wÄ…tku (%s)\n" # src/input/input_net.c:302 -#: src/input/input_rtp.c:743 +#: src/input/input_rtp.c:746 msgid "RTP and UDP input plugin as shipped with xine" msgstr "wtyczka wejÅ›cia RTP i UDP dostarczana z xine" @@ -3591,17 +3629,28 @@ msgstr "" msgid "rtsp: failed to connect to '%s'\n" msgstr "http: nie mogÄ™ siÄ™ podłączyć do >%s<\n" +#: src/input/librtsp/rtsp_session.c:93 src/input/input_mms.c:479 +msgid "network bandwidth" +msgstr "" + +#: src/input/librtsp/rtsp_session.c:94 src/input/input_mms.c:480 +msgid "" +"Specify the bandwidth of your internet connection here. This will be used " +"when streaming servers offer different versions with different bandwidth " +"requirements of the same stream." +msgstr "" + # src/input/input_http.c:134 -#: src/input/librtsp/rtsp_session.c:84 +#: src/input/librtsp/rtsp_session.c:109 #, fuzzy, c-format msgid "rtsp_session: failed to connect to server %s\n" msgstr "http: nie mogÄ™ siÄ™ podłączyć do >%s<\n" -#: src/input/librtsp/rtsp_session.c:118 +#: src/input/librtsp/rtsp_session.c:143 msgid "rtsp_session: session can not be established.\n" msgstr "" -#: src/input/librtsp/rtsp_session.c:135 +#: src/input/librtsp/rtsp_session.c:161 #, c-format msgid "rtsp_session: rtsp server type '%s' not supported yet. sorry.\n" msgstr "" @@ -3667,44 +3716,48 @@ msgid "pnm streaming input plugin" msgstr "wtyczka strumienia standardowego wejÅ›cia" # src/input/input_http.c:416 src/input/input_http.c:537 -#: src/input/mmsh.c:195 +#: src/input/mmsh.c:201 #, fuzzy msgid "libmmsh: send error\n" msgstr "input_http: błąd odczytu\n" -#: src/input/mmsh.c:240 +#: src/input/mmsh.c:246 +#, c-format msgid "libmmsh: bad response format\n" msgstr "" # src/input/input_http.c:450 -#: src/input/mmsh.c:246 +#: src/input/mmsh.c:252 #, fuzzy, c-format msgid "libmmsh: 3xx redirection not implemented: >%d %s<\n" msgstr "input_http: przekierowanie 3xx: >%d %s<\n" # src/input/input_http.c:455 -#: src/input/mmsh.c:253 +#: src/input/mmsh.c:259 #, fuzzy, c-format msgid "libmmsh: http status not 2xx: >%d %s<\n" msgstr "input_http: status http nie jest 2xx: >%d %s<\n" -#: src/input/mmsh.c:261 +#: src/input/mmsh.c:267 +#, c-format msgid "libmmsh: Location redirection not implemented\n" msgstr "" -#: src/input/mmsh.c:471 +#: src/input/mmsh.c:476 msgid "Connecting MMS server (over http)..." msgstr "" -#: src/input/mmsh.c:639 +#: src/input/mmsh.c:657 +#, c-format msgid "invalid url\n" msgstr "" -#: src/input/mmsh.c:644 +#: src/input/mmsh.c:662 +#, c-format msgid "unsupported protocol\n" msgstr "" -#: src/input/mms.c:537 +#: src/input/mms.c:561 msgid "Connecting MMS server (over tcp)..." msgstr "" @@ -3727,32 +3780,21 @@ msgstr "input_net: nie mogÄ™ podłączyć siÄ™ do '%s'.\n" msgid "input_pnm: failed to set up stream\n" msgstr "input_http: otwarcie gniazda zawiodÅ‚o\n" -#: src/input/input_smb.c:154 +#: src/input/input_smb.c:158 msgid "CIFS/SMB input plugin based on libsmbclient" msgstr "" # src/input/input_http.c:640 -#: src/input/input_mms.c:420 +#: src/input/input_mms.c:443 #, fuzzy msgid "mms streaming input plugin" msgstr "wtyczka strumienia standardowego wejÅ›cia" -#: src/input/input_mms.c:456 -msgid "network bandwidth" -msgstr "" - -#: src/input/input_mms.c:457 -msgid "" -"Specify the bandwidth of your internet connection here. This will be used " -"when streaming servers offer different versions with different bandwidth " -"requirements of the same stream." -msgstr "" - -#: src/input/input_mms.c:466 +#: src/input/input_mms.c:489 msgid "MMS protocol" msgstr "" -#: src/input/input_mms.c:467 +#: src/input/input_mms.c:490 msgid "" "Select the protocol to encapsulate MMS.\n" "TCP is better but you may need HTTP behind a firewall." @@ -3765,87 +3807,88 @@ msgid "input_http: gethostbyname(%s) failed: %s\n" msgstr "input_rtp: nie mogÄ™ utworzyć nowego wÄ…tku (%s)\n" # src/input/input_http.c:416 src/input/input_http.c:537 -#: src/input/input_http.c:403 src/input/input_http.c:949 +#: src/input/input_http.c:400 src/input/input_http.c:941 #, c-format msgid "input_http: read error %d\n" msgstr "input_http: błąd odczytu %d\n" -#: src/input/input_http.c:630 +#: src/input/input_http.c:627 msgid "Connecting HTTP server..." msgstr "" # src/input/input_http.c:445 -#: src/input/input_http.c:824 +#: src/input/input_http.c:816 +#, c-format msgid "input_http: invalid http answer\n" msgstr "input_http: błędna odpowiedź http\n" # src/input/input_http.c:450 -#: src/input/input_http.c:831 +#: src/input/input_http.c:823 #, c-format msgid "input_http: 3xx redirection: >%d %s<\n" msgstr "input_http: przekierowanie 3xx: >%d %s<\n" # src/input/input_http.c:455 -#: src/input/input_http.c:836 src/input/input_http.c:842 -#: src/input/input_http.c:849 +#: src/input/input_http.c:828 src/input/input_http.c:834 +#: src/input/input_http.c:841 #, c-format msgid "input_http: http status not 2xx: >%d %s<\n" msgstr "input_http: status http nie jest 2xx: >%d %s<\n" # src/input/input_http.c:464 -#: src/input/input_http.c:859 +#: src/input/input_http.c:851 #, fuzzy, c-format msgid "input_http: content length = %<PRIdMAX> bytes\n" msgstr "input_http: dÅ‚ugość zawartoÅ›ci = %Ld bytes\n" # src/input/input_http.c:416 src/input/input_http.c:537 -#: src/input/input_http.c:928 +#: src/input/input_http.c:920 #, fuzzy, c-format msgid "input_http: buffer exhausted after %d bytes." msgstr "input_http: błąd odczytu %d\n" # src/input/input_http.c:640 -#: src/input/input_http.c:1002 +#: src/input/input_http.c:994 msgid "http input plugin" msgstr "wtyczka wejÅ›cia http" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "HTTP proxy host" msgstr "" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "The hostname of the HTTP proxy." msgstr "" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "HTTP proxy port" msgstr "" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "The port number of the HTTP proxy." msgstr "" -#: src/input/input_http.c:1082 +#: src/input/input_http.c:1074 msgid "HTTP proxy username" msgstr "" -#: src/input/input_http.c:1083 +#: src/input/input_http.c:1075 msgid "The user name for the HTTP proxy." msgstr "" -#: src/input/input_http.c:1086 +#: src/input/input_http.c:1078 msgid "HTTP proxy password" msgstr "" -#: src/input/input_http.c:1087 +#: src/input/input_http.c:1079 msgid "The password for the HTTP proxy." msgstr "" -#: src/input/input_http.c:1090 +#: src/input/input_http.c:1082 msgid "Domains for which to ignore the HTTP proxy" msgstr "" -#: src/input/input_http.c:1091 +#: src/input/input_http.c:1083 msgid "" "A comma-separated list of domain names for which the proxy is to be " "ignored.\n" @@ -3859,7 +3902,7 @@ msgid "input_dvd: Device %s failed to open during eject calls\n" msgstr "" # src/input/input_http.c:640 -#: src/input/input_rtsp.c:274 +#: src/input/input_rtsp.c:284 #, fuzzy msgid "rtsp streaming input plugin" msgstr "wtyczka strumienia standardowego wejÅ›cia" @@ -3871,75 +3914,88 @@ msgid "dvbsub: cannot create timer thread\n" msgstr "video_out: nie mogÄ™ utworzyć wÄ…tku (%s)\n" #: src/libxinevdec/bitplane.c:1272 +#, c-format msgid "bitplane: error doing ByteRun1 decompression\n" msgstr "" #: src/libxinevdec/bitplane.c:1331 +#, c-format msgid "bitplane: Anim Opt 1 is not supported at the moment\n" msgstr "" #: src/libxinevdec/bitplane.c:1338 +#, c-format msgid "bitplane: Anim Opt 2 is not supported at the moment\n" msgstr "" #: src/libxinevdec/bitplane.c:1388 +#, c-format msgid "bitplane: Anim ASCIIJ is not supported at the moment\n" msgstr "" #: src/libxinevdec/bitplane.c:1394 +#, c-format msgid "bitplane: This anim-type is not supported at the moment\n" msgstr "" -#: src/libsputext/demux_sputext.c:1507 +#: src/libsputext/demux_sputext.c:1506 msgid "default duration of subtitle display in seconds" msgstr "" -#: src/libsputext/demux_sputext.c:1508 +#: src/libsputext/demux_sputext.c:1507 msgid "" "Some subtitle formats do not explicitly give a duration for each subtitle. " "For these, you can set a default duration here. Setting to zero will result " "in the subtitle being shown until the next one takes over." msgstr "" -#: src/libsputext/xine_decoder.c:913 +#: src/libsputext/xine_decoder.c:948 msgid "subtitle size" msgstr "" -#: src/libsputext/xine_decoder.c:914 +#: src/libsputext/xine_decoder.c:949 msgid "" "You can adjust the subtitle size here. The setting will be evaluated " "relative to the window size." msgstr "" # src/libsputext/xine_decoder.c:1084 -#: src/libsputext/xine_decoder.c:920 +#: src/libsputext/xine_decoder.c:955 #, fuzzy msgid "subtitle vertical offset" msgstr "pionowe wyrównanie napisów (wzglÄ™dny rozmiar okna)" -#: src/libsputext/xine_decoder.c:921 +#: src/libsputext/xine_decoder.c:956 msgid "" "You can adjust the vertical position of the subtitle. The setting will be " "evaluated relative to the window size." msgstr "" # src/libsputext/xine_decoder.c:1078 -#: src/libsputext/xine_decoder.c:927 +#: src/libsputext/xine_decoder.c:962 src/libsputext/xine_decoder.c:971 #, fuzzy msgid "font for subtitles" msgstr "fonty dla zewnÄ™trznych napisów" -#: src/libsputext/xine_decoder.c:928 +#: src/libsputext/xine_decoder.c:963 msgid "A font from the xine font directory to be used for the subtitle text." msgstr "" +#: src/libsputext/xine_decoder.c:972 +msgid "An outline font file (e.g. a .ttf) to be used for the subtitle text." +msgstr "" + +#: src/libsputext/xine_decoder.c:978 +msgid "whether to use a freetype font" +msgstr "" + # src/libsputext/xine_decoder.c:1078 -#: src/libsputext/xine_decoder.c:935 +#: src/libsputext/xine_decoder.c:985 #, fuzzy msgid "encoding of the subtitles" msgstr "kodowanie napisów" -#: src/libsputext/xine_decoder.c:936 +#: src/libsputext/xine_decoder.c:986 msgid "" "The encoding of the subtitle text in the stream. This setting is used to " "render non-ASCII characters correctly. If non-ASCII characters are not " @@ -3947,11 +4003,11 @@ msgid "" "used." msgstr "" -#: src/libsputext/xine_decoder.c:944 +#: src/libsputext/xine_decoder.c:994 msgid "use unscaled OSD if possible" msgstr "" -#: src/libsputext/xine_decoder.c:945 +#: src/libsputext/xine_decoder.c:995 msgid "" "The unscaled OSD will be rendered independently of the video frame and will " "always be sharp, even if the video is magnified. This will look better, but " @@ -4372,12 +4428,12 @@ msgid "libareal: oups, real can do more than 2 channels ?\n" msgstr "" # src/libw32dll/w32codec.c:1404 src/libw32dll/w32codec.c:1453 -#: src/libreal/audio_decoder.c:745 src/libreal/xine_decoder.c:638 +#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 #, fuzzy msgid "path to RealPlayer codecs" msgstr "Å›cieżka do kodeków dll win32" -#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 +#: src/libreal/audio_decoder.c:747 src/libreal/xine_decoder.c:640 msgid "" "If you have RealPlayer installed, specify the path to its codec directory " "here. You can easily find the codec directory by looking for a file named " @@ -4704,6 +4760,7 @@ msgstr "" # src/demuxers/demux_avi.c:659 #: src/demuxers/demux_avi.c:828 +#, c-format msgid "demux_avi: avi index is broken\n" msgstr "demux_avi: index pliku avi uszkodzony\n" @@ -4718,24 +4775,26 @@ msgstr "" # src/demuxers/demux_film.c:176 #: src/demuxers/demux_film.c:188 +#, c-format msgid "invalid FILM chunk size\n" msgstr "nieprawidÅ‚owy rozmiar fragmentu filmu\n" # src/demuxers/demux_film.c:254 #: src/demuxers/demux_film.c:342 +#, c-format msgid "unrecognized FILM chunk\n" msgstr "nie rozpoznany fragment filmu\n" -#: src/demuxers/demux_asf.c:423 +#: src/demuxers/demux_asf.c:425 #, c-format msgid "demux_asf: warning: The stream id=%d is encrypted.\n" msgstr "" -#: src/demuxers/demux_asf.c:425 +#: src/demuxers/demux_asf.c:427 msgid "Media stream scrambled/encrypted" msgstr "" -#: src/demuxers/demux_asf.c:1633 +#: src/demuxers/demux_asf.c:1634 #, c-format msgid "demux_asf: Wrong ASX version: %s\n" msgstr "" @@ -4770,7 +4829,8 @@ msgstr "" "nieznany typ kompresji VOC (0x%02X); proszÄ™ skontaktować siÄ™ z programistami " "xine\n" -#: src/demuxers/demux_ogg.c:797 +#: src/demuxers/demux_ogg.c:801 +#, c-format msgid "ogg: vorbis audio track indicated but no vorbis stream header found.\n" msgstr "" "ogg: Å›cieżka oznaczona jako vorbis ale nie znaleziono nagłówka strumienia " @@ -4792,6 +4852,7 @@ msgstr "" "xine\n" #: src/demuxers/demux_mpeg_block.c:640 +#, c-format msgid "demux_mpeg_block: warning: PES header reserved 10 bits not found\n" msgstr "" @@ -4818,6 +4879,7 @@ msgid "demux_mpeg_pes: warning: PACK stream id=0x%x decode failed.\n" msgstr "" #: src/demuxers/demux_mpeg_pes.c:771 +#, c-format msgid "demux_mpeg_pes: warning: PES header reserved 10 bits not found\n" msgstr "" @@ -4847,10 +4909,12 @@ msgstr "" "demux_wc3movie: fragment zrzutu odnosi siÄ™ do błędnej palety (%d >= %d)\n" #: src/demuxers/demux_wc3movie.c:406 +#, c-format msgid "demux_wc3movie: There was a problem while loading palette chunks\n" msgstr "demux_wc3movie: WystÄ…piÅ‚ problem przy Å‚adowaniu fragmentów palety\n" #: src/demuxers/demux_snd.c:104 +#, c-format msgid "demux_snd: bad header parameters\n" msgstr "demux_snd: błędne parametry nagłówka\n" @@ -4900,61 +4964,61 @@ msgstr "" msgid "The maximum compression to apply to an image in constant quality mode." msgstr "" -#: src/libffmpeg/audio_decoder.c:117 +#: src/libffmpeg/audio_decoder.c:120 #, c-format msgid "ffmpeg_audio_dec: increasing buffer to %d to avoid overflow.\n" msgstr "" -#: src/libffmpeg/audio_decoder.c:161 +#: src/libffmpeg/audio_decoder.c:164 #, c-format msgid "ffmpeg_audio_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" -#: src/libffmpeg/audio_decoder.c:253 +#: src/libffmpeg/audio_decoder.c:256 msgid "ffmpeg_audio_dec: trying to open null codec\n" msgstr "" -#: src/libffmpeg/audio_decoder.c:262 +#: src/libffmpeg/audio_decoder.c:265 msgid "ffmpeg_audio_dec: couldn't open decoder\n" msgstr "" -#: src/libffmpeg/dvaudio_decoder.c:302 +#: src/libffmpeg/dvaudio_decoder.c:286 #, c-format msgid "dvaudio: increasing buffer to %d to avoid overflow.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:153 +#: src/libffmpeg/video_decoder.c:156 msgid "ffmpeg_video_dec: unsupported frame format, DR1 disabled.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:171 +#: src/libffmpeg/video_decoder.c:174 msgid "ffmpeg_video_dec: unsupported frame dimensions, DR1 disabled.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:319 +#: src/libffmpeg/video_decoder.c:334 #, c-format msgid "ffmpeg_video_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" -#: src/libffmpeg/video_decoder.c:348 +#: src/libffmpeg/video_decoder.c:363 msgid "ffmpeg_video_dec: couldn't open decoder\n" msgstr "" -#: src/libffmpeg/video_decoder.c:383 +#: src/libffmpeg/video_decoder.c:398 msgid "ffmpeg_video_dec: direct rendering enabled\n" msgstr "" -#: src/libffmpeg/video_decoder.c:802 +#: src/libffmpeg/video_decoder.c:817 #, c-format msgid "ffmpeg_video_dec: increasing buffer to %d to avoid overflow.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:1474 +#: src/libffmpeg/video_decoder.c:1510 #, fuzzy msgid "MPEG-4 postprocessing quality" msgstr "jakość post-przetwarzania ffmpeg mpeg-4" -#: src/libffmpeg/video_decoder.c:1475 +#: src/libffmpeg/video_decoder.c:1511 msgid "" "You can adjust the amount of post processing applied to MPEG-4 video.\n" "Higher values result in better quality, but need more CPU. Lower values may " diff --git a/po/pt_BR.po b/po/pt_BR.po index 2664dbad6..bdfbaec9b 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: xine-lib 0.9.13\n" "Report-Msgid-Bugs-To: xine-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2006-11-29 23:07+0100\n" +"POT-Creation-Date: 2007-01-26 18:31+0100\n" "PO-Revision-Date: 2002-01-22 18:31GMT-3\n" "Last-Translator: Marcelo Roberto Jimenez <mroberto@cetuc.puc-rio.br>\n" "Language-Team: Portuguese (Brazilian) <pt_BR@li.org>\n" @@ -93,6 +93,7 @@ msgid "w32codec: decoder failed to start. Is '%s' installed?\n" msgstr "" #: src/libw32dll/w32codec.c:1221 +#, c-format msgid "w32codec: (ACM_Decoder) Unappropriate audio format\n" msgstr "" @@ -102,10 +103,12 @@ msgid "w32codec: (ACM_Decoder) acmStreamOpen error %d\n" msgstr "" #: src/libw32dll/w32codec.c:1243 +#, c-format msgid "w32codec: Error initializing DirectShow Audio\n" msgstr "" #: src/libw32dll/w32codec.c:1261 +#, c-format msgid "w32codec: Error initializing DMO Audio\n" msgstr "" @@ -303,16 +306,16 @@ msgstr "http network stream input plugin" msgid "xine output plugin for Coreaudio/Mac OS X" msgstr "" -#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:919 +#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:920 #, fuzzy, c-format msgid "audio_sun_out: opening audio device %s failed: %s\n" msgstr "input_cda: opening server '%s:%d' failed: %s\n" -#: src/audio_out/audio_sun_out.c:894 +#: src/audio_out/audio_sun_out.c:895 msgid "Sun audio device name" msgstr "" -#: src/audio_out/audio_sun_out.c:895 +#: src/audio_out/audio_sun_out.c:896 msgid "" "Specifies the file name for the Sun audio device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -320,12 +323,12 @@ msgid "" "careful that the value you enter really is a proper Sun audio device." msgstr "" -#: src/audio_out/audio_sun_out.c:937 +#: src/audio_out/audio_sun_out.c:938 #, fuzzy, c-format msgid "audio_sun_out: audio ioctl on device %s failed: %s\n" msgstr "input_cda: opening server '%s:%d' failed: %s\n" -#: src/audio_out/audio_sun_out.c:988 +#: src/audio_out/audio_sun_out.c:989 msgid "xine audio output plugin using sun-compliant audio devices/drivers" msgstr "" @@ -414,10 +417,12 @@ msgid "unknown error" msgstr "" #: src/audio_out/audio_directx2_out.c:206 +#, c-format msgid "Unable to create direct sound object." msgstr "" #: src/audio_out/audio_directx2_out.c:212 +#, c-format msgid "Could not set direct sound cooperative level." msgstr "" @@ -426,6 +431,7 @@ msgid "Unable to create secondary direct sound buffer" msgstr "" #: src/audio_out/audio_directx2_out.c:310 +#, c-format msgid "Unable to create buffer position events." msgstr "" @@ -458,6 +464,7 @@ msgid "Can't set sound volume" msgstr "" #: src/audio_out/audio_directx2_out.c:432 +#, c-format msgid ": buffer lost, tryig to restore\n" msgstr "" @@ -470,11 +477,12 @@ msgid "Couldn't unlock direct sound buffer" msgstr "" #: src/audio_out/audio_directx2_out.c:544 -#, fuzzy +#, fuzzy, c-format msgid "Unable to create primary direct sound buffer." msgstr "incapaz de alocar buffer de entrada.\n" #: src/audio_out/audio_directx2_out.c:637 +#, c-format msgid ": play cursor overran, flushing buffers\n" msgstr "" @@ -536,6 +544,7 @@ msgid "xine audio output plugin for win32 using directx" msgstr "" #: src/audio_out/audio_alsa_out.c:355 +#, c-format msgid "audio_alsa_out:Already open...WHY!" msgstr "" @@ -636,6 +645,7 @@ msgid "snd_pcm_open() failed:%d:%s\n" msgstr "input_cda: open(%s) failed: %s.\n" #: src/audio_out/audio_alsa_out.c:1428 +#, c-format msgid ">>> Check if another program already uses PCM <<<\n" msgstr "" @@ -774,6 +784,7 @@ msgid "xine audio output plugin using pulseaudio sound server" msgstr "http network stream input plugin" #: src/xine-engine/io_helper.c:252 +#, c-format msgid "io_helper: waiting abandoned\n" msgstr "" @@ -787,14 +798,17 @@ msgid "failed to get status of socket" msgstr "" #: src/xine-engine/io_helper.c:388 +#, c-format msgid "io_helper: Permission denied\n" msgstr "" #: src/xine-engine/io_helper.c:392 +#, c-format msgid "io_helper: File not found\n" msgstr "" #: src/xine-engine/io_helper.c:396 +#, c-format msgid "io_helper: Connection Refused\n" msgstr "" @@ -837,128 +851,129 @@ msgid "" "accelerated, this can dramatically reduce CPU usage." msgstr "" -#: src/xine-engine/xine.c:696 src/xine-engine/xine.c:803 -#: src/xine-engine/xine.c:842 src/xine-engine/xine.c:878 -#: src/xine-engine/xine.c:890 src/xine-engine/xine.c:903 -#: src/xine-engine/xine.c:916 src/xine-engine/xine.c:929 -#: src/xine-engine/xine.c:955 src/xine-engine/xine.c:980 -#: src/xine-engine/xine.c:1015 +#: src/xine-engine/xine.c:704 src/xine-engine/xine.c:811 +#: src/xine-engine/xine.c:850 src/xine-engine/xine.c:886 +#: src/xine-engine/xine.c:898 src/xine-engine/xine.c:911 +#: src/xine-engine/xine.c:924 src/xine-engine/xine.c:937 +#: src/xine-engine/xine.c:963 src/xine-engine/xine.c:988 +#: src/xine-engine/xine.c:1023 msgid "xine: error while parsing mrl\n" msgstr "" -#: src/xine-engine/xine.c:732 +#: src/xine-engine/xine.c:740 #, fuzzy, c-format msgid "xine: found input plugin : %s\n" msgstr "xine: não consigo achar um plugin para este MRL\n" -#: src/xine-engine/xine.c:750 +#: src/xine-engine/xine.c:758 #, fuzzy, c-format msgid "xine: input plugin cannot open MRL [%s]\n" msgstr "xine: usando plugin de entrada >%s< para este MRL (%s).\n" -#: src/xine-engine/xine.c:766 +#: src/xine-engine/xine.c:774 #, fuzzy, c-format msgid "xine: cannot find input plugin for MRL [%s]\n" msgstr "xine: não consigo achar um plugin para este MRL\n" -#: src/xine-engine/xine.c:792 +#: src/xine-engine/xine.c:800 #, fuzzy, c-format msgid "xine: specified demuxer %s failed to start\n" msgstr "xine_play: demuxer falhou em começar\n" -#: src/xine-engine/xine.c:828 -#, fuzzy +#: src/xine-engine/xine.c:836 +#, fuzzy, c-format msgid "xine: join rip input plugin\n" msgstr "http network stream input plugin" -#: src/xine-engine/xine.c:835 +#: src/xine-engine/xine.c:843 #, fuzzy msgid "xine: error opening rip input plugin instance\n" msgstr "http network stream input plugin" -#: src/xine-engine/xine.c:866 +#: src/xine-engine/xine.c:874 #, fuzzy, c-format msgid "xine: last_probed demuxer %s failed to start\n" msgstr "xine_play: demuxer falhou em começar\n" -#: src/xine-engine/xine.c:895 +#: src/xine-engine/xine.c:903 msgid "ignoring video\n" msgstr "" -#: src/xine-engine/xine.c:908 +#: src/xine-engine/xine.c:916 msgid "ignoring audio\n" msgstr "" -#: src/xine-engine/xine.c:921 +#: src/xine-engine/xine.c:929 msgid "ignoring subpicture\n" msgstr "" -#: src/xine-engine/xine.c:934 +#: src/xine-engine/xine.c:942 msgid "input cache plugin disabled\n" msgstr "" -#: src/xine-engine/xine.c:1005 +#: src/xine-engine/xine.c:1013 #, c-format msgid "subtitle mrl opened '%s'\n" msgstr "" -#: src/xine-engine/xine.c:1009 +#: src/xine-engine/xine.c:1017 #, fuzzy msgid "xine: error opening subtitle mrl\n" msgstr "input_dvd: não consigo abrir o arquivo >%s<\n" -#: src/xine-engine/xine.c:1041 +#: src/xine-engine/xine.c:1049 +#, c-format msgid "xine: error while parsing MRL\n" msgstr "" -#: src/xine-engine/xine.c:1048 +#: src/xine-engine/xine.c:1056 #, c-format msgid "xine: changing option '%s' from MRL isn't permitted\n" msgstr "" -#: src/xine-engine/xine.c:1068 +#: src/xine-engine/xine.c:1076 #, fuzzy, c-format msgid "xine: couldn't find demux for >%s<\n" msgstr "xine: não conseguà achar o demuxer para >%s<\n" -#: src/xine-engine/xine.c:1084 +#: src/xine-engine/xine.c:1092 #, fuzzy, c-format msgid "xine: found demuxer plugin: %s\n" msgstr "xine: usando o plugin de demuxer >%s< para este MRL.\n" -#: src/xine-engine/xine.c:1104 -#, fuzzy +#: src/xine-engine/xine.c:1112 +#, fuzzy, c-format msgid "xine: demuxer failed to start\n" msgstr "xine_play: demuxer falhou em começar\n" -#: src/xine-engine/xine.c:1167 -#, fuzzy +#: src/xine-engine/xine.c:1177 +#, fuzzy, c-format msgid "xine_play: no demux available\n" msgstr "xine_play: demuxer falhou em começar\n" -#: src/xine-engine/xine.c:1237 -#, fuzzy +#: src/xine-engine/xine.c:1247 +#, fuzzy, c-format msgid "xine_play: demux failed to start\n" msgstr "xine_play: demuxer falhou em começar\n" -#: src/xine-engine/xine.c:1508 +#: src/xine-engine/xine.c:1523 #, c-format msgid "xine: The specified save_dir \"%s\" might be a security risk.\n" msgstr "" -#: src/xine-engine/xine.c:1513 +#: src/xine-engine/xine.c:1528 msgid "The specified save_dir might be a security risk." msgstr "" -#: src/xine-engine/xine.c:1539 +#: src/xine-engine/xine.c:1554 msgid "xine: locale not supported by C library\n" msgstr "" -#: src/xine-engine/xine.c:1548 +#: src/xine-engine/xine.c:1563 msgid "media format detection strategy" msgstr "" -#: src/xine-engine/xine.c:1549 +#: src/xine-engine/xine.c:1564 msgid "" "xine offers various methods to detect the media format of input to play. The " "individual values are:\n" @@ -976,11 +991,11 @@ msgid "" "Detect by file name extension only.\n" msgstr "" -#: src/xine-engine/xine.c:1567 +#: src/xine-engine/xine.c:1582 msgid "directory for saving streams" msgstr "" -#: src/xine-engine/xine.c:1568 +#: src/xine-engine/xine.c:1583 msgid "" "When using the stream save feature, files will be written only into this " "directory.\n" @@ -990,11 +1005,11 @@ msgid "" "content in any file." msgstr "" -#: src/xine-engine/xine.c:1579 +#: src/xine-engine/xine.c:1594 msgid "allow implicit changes to the configuration (e.g. by MRL)" msgstr "" -#: src/xine-engine/xine.c:1580 +#: src/xine-engine/xine.c:1595 msgid "" "If enabled, you allow xine to change your configuration without explicit " "actions from your side. For example configuration changes demanded by MRLs " @@ -1004,26 +1019,26 @@ msgid "" "configuration, you might end with a totally messed up xine." msgstr "" -#: src/xine-engine/xine.c:1594 +#: src/xine-engine/xine.c:1609 msgid "Timeout for network stream reading (in seconds)" msgstr "" -#: src/xine-engine/xine.c:1595 +#: src/xine-engine/xine.c:1610 msgid "" "Specifies the timeout when reading from network streams, in seconds. Too low " "values might stop streaming when the source is slow or the bandwidth is " "occupied, too high values will freeze the player if the connection is lost." msgstr "" -#: src/xine-engine/xine.c:1946 +#: src/xine-engine/xine.c:1962 msgid "messages" msgstr "menssagens" -#: src/xine-engine/xine.c:1947 +#: src/xine-engine/xine.c:1963 msgid "plugin" msgstr "plugin" -#: src/xine-engine/xine.c:1948 +#: src/xine-engine/xine.c:1964 msgid "trace" msgstr "" @@ -1033,22 +1048,23 @@ msgid "input_rip: reading of saved data failed: %s\n" msgstr "input_vcd: read data failed\n" #: src/xine-engine/input_rip.c:154 -#, fuzzy +#, fuzzy, c-format msgid "input_rip: reading by input plugin failed\n" msgstr "input_dvd: erro de leitura no input_dvd plugin\n" #: src/xine-engine/input_rip.c:162 src/xine-engine/input_rip.c:291 -#: src/xine-engine/input_rip.c:643 +#: src/xine-engine/input_rip.c:657 #, fuzzy, c-format msgid "input_rip: error writing to file %<PRIdMAX> bytes: %s\n" msgstr "input_dvd: não consigo abrir o arquivo >%s<\n" #: src/xine-engine/input_rip.c:183 +#, c-format msgid "input_rip: open() function should never be called\n" msgstr "" #: src/xine-engine/input_rip.c:314 src/xine-engine/input_rip.c:419 -#, fuzzy +#, fuzzy, c-format msgid "input_rip: seeking failed\n" msgstr "input_vcd: read data failed\n" @@ -1062,37 +1078,41 @@ msgstr "input_cda: fopen(%s) failed: %s\n" msgid "input_rip: %<PRIdMAX> bytes dropped\n" msgstr "" -#: src/xine-engine/input_rip.c:548 +#: src/xine-engine/input_rip.c:562 +#, c-format msgid "input_rip: input plugin not defined!\n" msgstr "" -#: src/xine-engine/input_rip.c:554 +#: src/xine-engine/input_rip.c:568 +#, c-format msgid "" "input_rip: target directory wasn't specified, please fill out the option " "'media.capture.save_dir'\n" msgstr "" -#: src/xine-engine/input_rip.c:556 +#: src/xine-engine/input_rip.c:570 msgid "" "The stream save feature is disabled until you set media.capture.save_dir in " "the configuration." msgstr "" -#: src/xine-engine/input_rip.c:563 +#: src/xine-engine/input_rip.c:577 +#, c-format msgid "input_rip: ripping/caching of this source is not permitted!\n" msgstr "" -#: src/xine-engine/input_rip.c:565 +#: src/xine-engine/input_rip.c:579 msgid "" "xine is not allowed to save from this source. (possibly copyrighted " "material?)" msgstr "" -#: src/xine-engine/input_rip.c:571 +#: src/xine-engine/input_rip.c:585 +#, c-format msgid "input_rip: file name not given!\n" msgstr "" -#: src/xine-engine/input_rip.c:613 +#: src/xine-engine/input_rip.c:627 #, fuzzy, c-format msgid "input_rip: error opening file %s: %s\n" msgstr "input_dvd: não consigo abrir o arquivo >%s<\n" @@ -1132,134 +1152,136 @@ msgid "" msgstr "" #: src/xine-engine/input_cache.c:167 +#, c-format msgid ": open() function should never be called\n" msgstr "" #: src/xine-engine/input_cache.c:349 -#, fuzzy +#, fuzzy, c-format msgid ": input plugin not defined!\n" msgstr "xine: usando plugin de entrada >%s< para este MRL (%s).\n" -#: src/xine-engine/osd.c:739 +#: src/xine-engine/osd.c:745 #, c-format msgid "font '%s-%d' already loaded, weird.\n" msgstr "" -#: src/xine-engine/osd.c:751 +#: src/xine-engine/osd.c:757 #, c-format msgid "font '%s' loading failed (%d < %d)\n" msgstr "" -#: src/xine-engine/osd.c:761 +#: src/xine-engine/osd.c:767 #, c-format msgid "wrong version for font '%s'. expected %d found %d.\n" msgstr "" -#: src/xine-engine/osd.c:828 +#: src/xine-engine/osd.c:834 msgid "osd: cannot initialize ft2 library\n" msgstr "" -#: src/xine-engine/osd.c:851 +#: src/xine-engine/osd.c:857 #, c-format msgid "osd: error matching font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:865 +#: src/xine-engine/osd.c:871 #, c-format msgid "osd: error loading font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:868 +#: src/xine-engine/osd.c:874 #, c-format msgid "osd: error looking up font %s with FontConfig" msgstr "" -#: src/xine-engine/osd.c:889 +#: src/xine-engine/osd.c:895 #, c-format msgid "osd: error loading font %s with ft2\n" msgstr "" -#: src/xine-engine/osd.c:899 +#: src/xine-engine/osd.c:905 msgid "osd: error setting font size (no scalable font?)\n" msgstr "" -#: src/xine-engine/osd.c:1015 +#: src/xine-engine/osd.c:1021 #, c-format msgid "" "osd: unknown sequence starting with byte 0x%02X in encoding \"%s\", " "skipping\n" msgstr "" -#: src/xine-engine/osd.c:1071 +#: src/xine-engine/osd.c:1077 msgid "osd: can't find out current locale character set\n" msgstr "" -#: src/xine-engine/osd.c:1081 +#: src/xine-engine/osd.c:1087 #, c-format msgid "osd: unsupported conversion %s -> %s, no conversion performed\n" msgstr "" -#: src/xine-engine/osd.c:1136 src/xine-engine/osd.c:1304 +#: src/xine-engine/osd.c:1142 src/xine-engine/osd.c:1310 msgid "osd: font isn't defined\n" msgstr "" -#: src/xine-engine/osd.c:1175 +#: src/xine-engine/osd.c:1181 msgid "osd: error loading glyph\n" msgstr "" -#: src/xine-engine/osd.c:1181 +#: src/xine-engine/osd.c:1187 msgid "osd: error in rendering glyph\n" msgstr "" -#: src/xine-engine/osd.c:1341 +#: src/xine-engine/osd.c:1347 #, c-format msgid "osd: error loading glyph %i\n" msgstr "" -#: src/xine-engine/osd.c:1348 +#: src/xine-engine/osd.c:1354 msgid "osd: error in rendering\n" msgstr "" -#: src/xine-engine/osd.c:1596 +#: src/xine-engine/osd.c:1602 msgid "palette (foreground-border-background) to use for subtitles and OSD" msgstr "" -#: src/xine-engine/osd.c:1597 +#: src/xine-engine/osd.c:1603 msgid "" "The palette for on-screen-display and some subtitle formats that do not " "specify any colouring themselves. The palettes are listed in the form: " "foreground-border-background." msgstr "" -#: src/xine-engine/configfile.c:896 +#: src/xine-engine/configfile.c:924 +#, c-format msgid "The current config file has been modified by a newer version of xine." msgstr "" -#: src/xine-engine/configfile.c:1001 +#: src/xine-engine/configfile.c:1029 #, c-format msgid "configfile: WARNING: backing up configfile to %s failed\n" msgstr "" -#: src/xine-engine/configfile.c:1002 +#: src/xine-engine/configfile.c:1030 msgid "configfile: WARNING: your configuration will not be saved\n" msgstr "" -#: src/xine-engine/configfile.c:1101 +#: src/xine-engine/configfile.c:1129 #, c-format msgid "configfile: WARNING: writing configuration to %s failed\n" msgstr "" -#: src/xine-engine/configfile.c:1102 +#: src/xine-engine/configfile.c:1130 #, c-format msgid "configfile: WARNING: removing possibly broken config file %s\n" msgstr "" -#: src/xine-engine/configfile.c:1103 +#: src/xine-engine/configfile.c:1131 #, c-format msgid "configfile: WARNING: you should check the backup file %s\n" msgstr "" -#: src/xine-engine/configfile.c:1237 +#: src/xine-engine/configfile.c:1266 #, c-format msgid "configfile: entry '%s' mustn't be modified from MRL\n" msgstr "" @@ -1278,48 +1300,58 @@ msgstr "" "video_out : descartando imagem com pts %d porque é muito velha (diff : %d > %" "d).\n" -#: src/xine-engine/video_out.c:1818 +#: src/xine-engine/video_out.c:1790 +msgid "default number of video frames" +msgstr "" + +#: src/xine-engine/video_out.c:1791 +msgid "" +"The default number of video frames to request from xine video out driver. " +"Some drivers will override this setting with their own values." +msgstr "" + +#: src/xine-engine/video_out.c:1830 msgid "percentage of skipped frames to tolerate" msgstr "" -#: src/xine-engine/video_out.c:1819 +#: src/xine-engine/video_out.c:1831 msgid "" "When more than this percentage of frames are not shown, because they were " "not decoded in time, xine sends a notification." msgstr "" -#: src/xine-engine/video_out.c:1824 +#: src/xine-engine/video_out.c:1836 msgid "percentage of discarded frames to tolerate" msgstr "" -#: src/xine-engine/video_out.c:1825 +#: src/xine-engine/video_out.c:1837 msgid "" "When more than this percentage of frames are not shown, because they were " "not scheduled for display in time, xine sends a notification." msgstr "" -#: src/xine-engine/video_out.c:1859 +#: src/xine-engine/video_out.c:1871 #, fuzzy msgid "video_out: sorry, this should not happen. please restart xine.\n" msgstr "" "video_out : desculpe, isto não deveria acontecer, reinicie o xine por " "favor.\n" -#: src/xine-engine/video_decoder.c:374 +#: src/xine-engine/video_decoder.c:380 #, fuzzy, c-format msgid "video_decoder: no plugin available to handle '%s'\n" msgstr "video decoder plugin achado : %s\n" -#: src/xine-engine/video_decoder.c:453 +#: src/xine-engine/video_decoder.c:459 #, c-format msgid "video_decoder: error, unknown buffer type: %08x\n" msgstr "" -#: src/xine-engine/video_decoder.c:489 +#: src/xine-engine/video_decoder.c:495 msgid "number of video buffers" msgstr "" -#: src/xine-engine/video_decoder.c:490 +#: src/xine-engine/video_decoder.c:496 msgid "" "The number of video buffers (each is 8k in size) xine uses in its internal " "queue. Higher values mean smoother playback for unreliable inputs, but also " @@ -1336,87 +1368,87 @@ msgid "" "info_helper: unsupported conversion %s -> UTF-8, no conversion performed\n" msgstr "" -#: src/xine-engine/xine_interface.c:918 +#: src/xine-engine/xine_interface.c:934 msgid "Warning:" msgstr "" -#: src/xine-engine/xine_interface.c:919 +#: src/xine-engine/xine_interface.c:935 msgid "Unknown host:" msgstr "" -#: src/xine-engine/xine_interface.c:920 +#: src/xine-engine/xine_interface.c:936 msgid "Unknown device:" msgstr "" -#: src/xine-engine/xine_interface.c:921 +#: src/xine-engine/xine_interface.c:937 msgid "Network unreachable" msgstr "" -#: src/xine-engine/xine_interface.c:922 +#: src/xine-engine/xine_interface.c:938 msgid "Connection refused:" msgstr "" -#: src/xine-engine/xine_interface.c:923 +#: src/xine-engine/xine_interface.c:939 #, fuzzy msgid "File not found:" msgstr "input_file: erro de leitura (%s)\n" -#: src/xine-engine/xine_interface.c:924 +#: src/xine-engine/xine_interface.c:940 msgid "Read error from:" msgstr "" -#: src/xine-engine/xine_interface.c:925 +#: src/xine-engine/xine_interface.c:941 msgid "Error loading library:" msgstr "" -#: src/xine-engine/xine_interface.c:926 +#: src/xine-engine/xine_interface.c:942 #, fuzzy msgid "Encrypted media stream detected" msgstr "metronom: audio stream end\n" -#: src/xine-engine/xine_interface.c:927 +#: src/xine-engine/xine_interface.c:943 msgid "Security message:" msgstr "" -#: src/xine-engine/xine_interface.c:928 +#: src/xine-engine/xine_interface.c:944 #, fuzzy msgid "Audio device unavailable" msgstr "fifo não disponÃvel (%d)\n" -#: src/xine-engine/xine_interface.c:929 +#: src/xine-engine/xine_interface.c:945 msgid "Permission error" msgstr "" -#: src/xine-engine/xine_interface.c:930 +#: src/xine-engine/xine_interface.c:946 msgid "File is empty:" msgstr "" -#: src/xine-engine/audio_out.c:1074 +#: src/xine-engine/audio_out.c:1072 msgid "" "audio_out: delay calculation impossible with an unavailable audio device\n" msgstr "" -#: src/xine-engine/audio_out.c:1216 +#: src/xine-engine/audio_out.c:1214 msgid "write to sound card failed. Was a USB device unplugged ?\n" msgstr "" -#: src/xine-engine/audio_out.c:1369 +#: src/xine-engine/audio_out.c:1367 msgid "8 bits not supported by driver, converting to 16 bits.\n" msgstr "" -#: src/xine-engine/audio_out.c:1377 +#: src/xine-engine/audio_out.c:1375 msgid "mono not supported by driver, converting to stereo.\n" msgstr "" -#: src/xine-engine/audio_out.c:1383 +#: src/xine-engine/audio_out.c:1381 msgid "stereo not supported by driver, converting to mono.\n" msgstr "" -#: src/xine-engine/audio_out.c:2028 +#: src/xine-engine/audio_out.c:2033 msgid "method to sync audio and video" msgstr "" -#: src/xine-engine/audio_out.c:2029 +#: src/xine-engine/audio_out.c:2034 msgid "" "When playing audio and video, there are at least two clocks involved: The " "system clock, to which video frames are synchronized and the clock in your " @@ -1439,11 +1471,11 @@ msgid "" "form." msgstr "" -#: src/xine-engine/audio_out.c:2057 +#: src/xine-engine/audio_out.c:2062 msgid "enable resampling" msgstr "" -#: src/xine-engine/audio_out.c:2058 +#: src/xine-engine/audio_out.c:2063 msgid "" "When the sample rate of the decoded audio does not match the capabilities of " "your sound hardware, an adaptation called \"resampling\" is required. Here " @@ -1451,33 +1483,33 @@ msgid "" "automatically when necessary." msgstr "" -#: src/xine-engine/audio_out.c:2065 +#: src/xine-engine/audio_out.c:2070 msgid "always resample to this rate (0 to disable)" msgstr "" -#: src/xine-engine/audio_out.c:2066 +#: src/xine-engine/audio_out.c:2071 msgid "" "Some audio drivers do not correctly announce the capabilities of the audio " "hardware. By setting a value other than zero here, you can force the audio " "stream to be resampled to the given rate." msgstr "" -#: src/xine-engine/audio_out.c:2075 +#: src/xine-engine/audio_out.c:2080 msgid "offset for digital passthrough" msgstr "" -#: src/xine-engine/audio_out.c:2076 +#: src/xine-engine/audio_out.c:2081 msgid "" "If you use an external surround decoder and audio is ahead or behind video, " "you can enter a fixed offset here to compensate.\n" "The unit of the value is one PTS tick, which is the 90000th part of a second." msgstr "" -#: src/xine-engine/audio_out.c:2085 +#: src/xine-engine/audio_out.c:2090 msgid "play audio even on slow/fast speeds" msgstr "" -#: src/xine-engine/audio_out.c:2086 +#: src/xine-engine/audio_out.c:2091 msgid "" "If you enable this option, the audio will be heard even when playback speed " "is different than 1X. Of course, it will sound distorted (lower/higher " @@ -1485,23 +1517,23 @@ msgid "" "audio post plugin instead." msgstr "" -#: src/xine-engine/audio_out.c:2157 +#: src/xine-engine/audio_out.c:2162 msgid "startup audio volume" msgstr "" -#: src/xine-engine/audio_out.c:2158 +#: src/xine-engine/audio_out.c:2163 msgid "The overall audio volume set at xine startup." msgstr "" -#: src/xine-engine/audio_out.c:2161 +#: src/xine-engine/audio_out.c:2166 msgid "restore volume level at startup" msgstr "" -#: src/xine-engine/audio_out.c:2162 +#: src/xine-engine/audio_out.c:2167 msgid "If disabled, xine will not modify any mixer settings at startup." msgstr "" -#: src/xine-engine/audio_out.c:2192 +#: src/xine-engine/audio_out.c:2197 #, fuzzy msgid "audio_out: sorry, this should not happen. please restart xine.\n" msgstr "" @@ -1509,6 +1541,7 @@ msgstr "" "favor.\n" #: src/xine-engine/load_plugins.c:212 +#, c-format msgid "map_decoder_list: no space for decoder, skipped.\n" msgstr "" @@ -1550,7 +1583,7 @@ msgid "load_plugins: plugin %s found\n" msgstr "load_plugins: achado o plugin de entrada: %s\n" #: src/xine-engine/load_plugins.c:499 -#, fuzzy +#, fuzzy, c-format msgid "load_plugins: static plugin found\n" msgstr "load_plugins: achado o plugin de entrada: %s\n" @@ -1560,7 +1593,7 @@ msgid "load_plugins: plugin limit reached, %s could not be loaded\n" msgstr "load_plugins: achado o plugin de entrada: %s\n" #: src/xine-engine/load_plugins.c:509 -#, fuzzy +#, fuzzy, c-format msgid "load_plugins: plugin limit reached, static plugin could not be loaded\n" msgstr "load_plugins: achado o plugin de entrada: %s\n" @@ -1723,11 +1756,11 @@ msgid "" "xine video output plugin using the SyncFB module for Matrox G200/G400 cards" msgstr "" -#: src/video_out/video_out_syncfb.c:1077 +#: src/video_out/video_out_syncfb.c:1078 msgid "SyncFB device name" msgstr "" -#: src/video_out/video_out_syncfb.c:1078 +#: src/video_out/video_out_syncfb.c:1079 msgid "" "Specifies the file name for the SyncFB (TeleTux) device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -1740,47 +1773,47 @@ msgid "xine video output plugin using the Libstk Surface Set-top Toolkit" msgstr "" #: src/video_out/video_out_xvmc.c:1446 src/video_out/video_out_pgx64.c:1464 -#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1436 +#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1437 msgid "video overlay colour key" msgstr "" #: src/video_out/video_out_xvmc.c:1447 src/video_out/video_out_xxmc.c:2431 #: src/video_out/video_out_vidix.c:1159 src/video_out/video_out_vidix.c:1166 -#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1437 +#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1438 msgid "" "The colour key is used to tell the graphics card where to overlay the video " "image. Try different values, if you experience windows becoming transparent." msgstr "" #: src/video_out/video_out_xvmc.c:1455 src/video_out/video_out_xxmc.c:2439 -#: src/video_out/video_out_xv.c:1445 +#: src/video_out/video_out_xv.c:1446 msgid "autopaint colour key" msgstr "" #: src/video_out/video_out_xvmc.c:1456 src/video_out/video_out_xxmc.c:2440 -#: src/video_out/video_out_xv.c:1446 +#: src/video_out/video_out_xv.c:1447 msgid "Make Xv autopaint its colorkey." msgstr "" #: src/video_out/video_out_xvmc.c:1461 src/video_out/video_out_xxmc.c:2463 -#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1469 +#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1470 #: src/video_out/video_out_opengl.c:1918 msgid "enable double buffering" msgstr "" #: src/video_out/video_out_xvmc.c:1462 src/video_out/video_out_xxmc.c:2464 -#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1470 +#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1471 msgid "" "Double buffering will synchronize the update of the video image to the " "repainting of the entire screen (\"vertical retrace\"). This eliminates " "flickering and tearing artifacts, but will use more graphics memory." msgstr "" -#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1537 +#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1538 msgid "deinterlace method (deprecated)" msgstr "" -#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1538 +#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1539 msgid "" "This config setting is deprecated. You should use the new deinterlacing post " "processing settings instead.\n" @@ -1976,11 +2009,11 @@ msgid "" "conversion and scaling.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1453 +#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1454 msgid "bilinear scaling mode" msgstr "" -#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1454 +#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1455 msgid "" "Selects the bilinear scaling mode for Permedia cards. The individual values " "are:\n" @@ -2003,11 +2036,11 @@ msgstr "" msgid "video_out_xxmc: this adaptor supports the yuy2 format.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1530 +#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1531 msgid "pitch alignment workaround" msgstr "" -#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1531 +#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1532 msgid "Some buggy video drivers need a workaround to function properly." msgstr "" @@ -2053,7 +2086,7 @@ msgid "" "Alternate between top and bottom field at double the frame rate.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1611 +#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1612 msgid "xine video output plugin using the MIT X video extension" msgstr "" @@ -2190,29 +2223,29 @@ msgid "" "video_out_xv: => not using MIT Shared Memory extension.\n" msgstr "" -#: src/video_out/video_out_xv.c:1282 +#: src/video_out/video_out_xv.c:1283 msgid "video_out_xv: Xv extension not present.\n" msgstr "" -#: src/video_out/video_out_xv.c:1319 +#: src/video_out/video_out_xv.c:1320 msgid "" "video_out_xv: Xv extension is present but I couldn't find a usable yuv12 " "port.\n" " Looks like your graphics hardware driver doesn't support Xv?!\n" msgstr "" -#: src/video_out/video_out_xv.c:1328 +#: src/video_out/video_out_xv.c:1329 #, c-format msgid "" "video_out_xv: using Xv port %ld from adaptor %s for hardware colorspace " "conversion and scaling.\n" msgstr "" -#: src/video_out/video_out_xv.c:1503 +#: src/video_out/video_out_xv.c:1504 msgid "video_out_xv: this adaptor supports the yv12 format.\n" msgstr "" -#: src/video_out/video_out_xv.c:1508 +#: src/video_out/video_out_xv.c:1509 msgid "video_out_xv: this adaptor supports the yuy2 format.\n" msgstr "" @@ -2439,71 +2472,71 @@ msgid "" "\"=disabled)." msgstr "" -#: src/video_out/video_out_directfb.c:1509 +#: src/video_out/video_out_directfb.c:1516 msgid "video_out_directfb: using hardware subpicture acceleration.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1523 +#: src/video_out/video_out_directfb.c:1530 msgid "video_out_directfb: layer supports video output.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1532 +#: src/video_out/video_out_directfb.c:1539 msgid "video_out_directfb: layer doesn't support YV12!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1539 +#: src/video_out/video_out_directfb.c:1546 msgid "video_out_directfb: layer doesn't support YUY2!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1550 +#: src/video_out/video_out_directfb.c:1557 msgid "" "video_out_directfb:need at least DirectFB 0.9.25 to play on this layer!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1585 +#: src/video_out/video_out_directfb.c:1592 #, c-format msgid "video_out_directfb: layer doesn't support buffermode %d!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1591 +#: src/video_out/video_out_directfb.c:1598 #, c-format msgid "video_out_directfb: layer doesn't support options 0x%08x!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1685 +#: src/video_out/video_out_directfb.c:1692 msgid "video_out_directfb: using hardware accelerated image scaling.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1697 +#: src/video_out/video_out_directfb.c:1704 msgid "" "video_out_directfb: image scaling with deinterlacing is hardware " "accelerated.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1775 +#: src/video_out/video_out_directfb.c:1782 msgid "video layer id (auto: -1)" msgstr "" -#: src/video_out/video_out_directfb.c:1776 +#: src/video_out/video_out_directfb.c:1783 msgid "Select the video output layer by its id." msgstr "" -#: src/video_out/video_out_directfb.c:1797 -#: src/video_out/video_out_directfb.c:2006 +#: src/video_out/video_out_directfb.c:1804 +#: src/video_out/video_out_directfb.c:2013 #, c-format msgid "video_out_directfb: using display layer #%d.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1881 +#: src/video_out/video_out_directfb.c:1888 #, fuzzy msgid "xine video output plugin using DirectFB." msgstr "http network stream input plugin" -#: src/video_out/video_out_directfb.c:1999 +#: src/video_out/video_out_directfb.c:2006 msgid "video_out_directfb: no usable display layer was found!\n" msgstr "" -#: src/video_out/video_out_directfb.c:2088 +#: src/video_out/video_out_directfb.c:2095 #, fuzzy msgid "xine video output plugin using DirectFB under XDirectFB." msgstr "http network stream input plugin" @@ -2522,20 +2555,20 @@ msgstr "input_dvd: incapaz de abrir o acionador de dvd (%s): %s\n" msgid "video_out_pgx32: Error: '%s' is not a pgx32 framebuffer device\n" msgstr "" -#: src/libmusepack/xine_decoder.c:237 +#: src/libmusepack/xine_decoder.c:241 #, c-format msgid "libmusepack: mpc_streaminfo_read failed: %d\n" msgstr "" -#: src/libmusepack/xine_decoder.c:311 +#: src/libmusepack/xine_decoder.c:315 msgid "libmusepack: data after last frame ignored\n" msgstr "" -#: src/libmusepack/xine_decoder.c:322 +#: src/libmusepack/xine_decoder.c:326 msgid "libmusepack: mpc_decoder_initialise failed\n" msgstr "" -#: src/libmusepack/xine_decoder.c:342 src/libmusepack/xine_decoder.c:357 +#: src/libmusepack/xine_decoder.c:346 src/libmusepack/xine_decoder.c:361 #, c-format msgid "libmusepack: mpc_decoder_decode failed: %d\n" msgstr "" @@ -2603,16 +2636,16 @@ msgstr "" msgid "encoding of subtitles" msgstr "" -#: src/input/vcd/vcdio.c:211 +#: src/input/vcd/vcdio.c:223 #, fuzzy msgid "SEEK_CUR not implemented for non-zero offset" msgstr "input_vcd: SEEK_CUR not implemented for offset != 0\n" -#: src/input/vcd/vcdio.c:239 +#: src/input/vcd/vcdio.c:251 msgid "SEEK_END not implemented yet." msgstr "" -#: src/input/vcd/vcdio.c:242 +#: src/input/vcd/vcdio.c:254 msgid "seek not implemented yet for" msgstr "" @@ -2620,106 +2653,106 @@ msgstr "" msgid "failed to find a device with a VCD" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:327 +#: src/input/vcd/xineplug_inp_vcd.c:328 msgid "was passed a null class parameter" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:967 +#: src/input/vcd/xineplug_inp_vcd.c:972 msgid "Invalid current entry type" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:991 +#: src/input/vcd/xineplug_inp_vcd.c:996 msgid "" "Video CD plugin with PBC and support for: (X)VCD, (X)SVCD, HQVCD, CVD ... " msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1092 +#: src/input/vcd/xineplug_inp_vcd.c:1097 msgid "selection has no RETURN entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1121 +#: src/input/vcd/xineplug_inp_vcd.c:1126 msgid "DEFAULT selected, but PBC is not on." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1126 +#: src/input/vcd/xineplug_inp_vcd.c:1131 msgid "selection has no NEXT entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1134 +#: src/input/vcd/xineplug_inp_vcd.c:1139 msgid "selection has no PREVIOUS entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1141 +#: src/input/vcd/xineplug_inp_vcd.c:1146 msgid "Unknown event type: " msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1441 src/input/vcd/xineplug_inp_vcd.c:1488 +#: src/input/vcd/xineplug_inp_vcd.c:1446 src/input/vcd/xineplug_inp_vcd.c:1493 msgid "The above message had unknown vcdimager log level" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1819 +#: src/input/vcd/xineplug_inp_vcd.c:1824 msgid "VCD default type to use on autoplay" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1820 +#: src/input/vcd/xineplug_inp_vcd.c:1825 msgid "" "The VCD play unit to use when none is specified in an MRL, e.g. vcd:// or " "vcd:///dev/dvd:" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1830 +#: src/input/vcd/xineplug_inp_vcd.c:1835 msgid "CD-ROM drive used for VCD when none given" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1831 +#: src/input/vcd/xineplug_inp_vcd.c:1836 msgid "" "What to use if no drive specified. If the setting is empty, xine will scan " "for CD drives." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1841 +#: src/input/vcd/xineplug_inp_vcd.c:1846 msgid "VCD position slider range" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1842 +#: src/input/vcd/xineplug_inp_vcd.c:1847 msgid "" "range that the stream playback position slider represents playing a VCD." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1850 +#: src/input/vcd/xineplug_inp_vcd.c:1855 msgid "VCD read-ahead caching?" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1851 +#: src/input/vcd/xineplug_inp_vcd.c:1856 msgid "Class may lead to jerky playback on low-end machines." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1861 +#: src/input/vcd/xineplug_inp_vcd.c:1866 msgid "automatically advance VCD track/entry" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1862 +#: src/input/vcd/xineplug_inp_vcd.c:1867 msgid "" "If enabled, we should automatically advance to the next entry or track. Used " "only when playback control (PBC) is disabled." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1871 +#: src/input/vcd/xineplug_inp_vcd.c:1876 msgid "show 'rejected' VCD LIDs" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1872 +#: src/input/vcd/xineplug_inp_vcd.c:1877 msgid "" "Some playback list IDs (LIDs) are marked not showable, but you can see them " "in the MRL list if this is set. Rejected entries are marked with an asterisk " "(*) appended to the MRL." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1883 +#: src/input/vcd/xineplug_inp_vcd.c:1888 msgid "VCD format string for display banner" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1884 +#: src/input/vcd/xineplug_inp_vcd.c:1889 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are:\n" @@ -2740,11 +2773,11 @@ msgid "" " %% : a %\n" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1909 +#: src/input/vcd/xineplug_inp_vcd.c:1914 msgid "VCD format string for stream comment field" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1910 +#: src/input/vcd/xineplug_inp_vcd.c:1915 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are %A, %C, %c, %F, %I, %L, " @@ -2752,11 +2785,11 @@ msgid "" "See the help for the title_format for the meanings of these." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1922 +#: src/input/vcd/xineplug_inp_vcd.c:1927 msgid "VCD debug flag mask" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1923 +#: src/input/vcd/xineplug_inp_vcd.c:1928 msgid "" "For tracking down bugs in the VCD plugin. Mask values are:\n" " 1: Meta information\n" @@ -2902,11 +2935,11 @@ msgid "" "playing DVDs." msgstr "" -#: src/input/input_dvd.c:1803 +#: src/input/input_dvd.c:1804 msgid "raw device set up for DVD access" msgstr "" -#: src/input/input_dvd.c:1804 +#: src/input/input_dvd.c:1805 msgid "" "If this points to a raw device connected to your DVD device, xine will use " "the raw device for playback. This has the advantage of being slightly faster " @@ -2917,22 +2950,22 @@ msgid "" "See the documentation on raw device setup (man raw) for further information." msgstr "" -#: src/input/input_dvd.c:1817 +#: src/input/input_dvd.c:1818 msgid "CSS decryption method" msgstr "" -#: src/input/input_dvd.c:1818 +#: src/input/input_dvd.c:1819 msgid "" "Selects the decryption method libdvdcss will use to descramble copy " "protected DVDs. Try the various methods, if you have problems playing " "scrambled DVDs." msgstr "" -#: src/input/input_dvd.c:1826 +#: src/input/input_dvd.c:1827 msgid "path to the title key cache" msgstr "" -#: src/input/input_dvd.c:1827 +#: src/input/input_dvd.c:1828 msgid "" "Since cracking the copy protection of scrambled DVDs can be quite time " "consuming, libdvdcss will cache the cracked keys in this directory.\n" @@ -2941,44 +2974,44 @@ msgid "" "used for anything but DVD key caching." msgstr "" -#: src/input/input_dvd.c:1849 +#: src/input/input_dvd.c:1850 msgid "region the DVD player claims to be in (1 to 8)" msgstr "" -#: src/input/input_dvd.c:1850 +#: src/input/input_dvd.c:1851 msgid "" "This only needs to be changed if your DVD jumps to a screen complaining " "about a wrong region code. It has nothing to do with the region code set in " "DVD drives, this is purely software." msgstr "" -#: src/input/input_dvd.c:1856 +#: src/input/input_dvd.c:1857 msgid "default language for DVD playback" msgstr "" -#: src/input/input_dvd.c:1857 +#: src/input/input_dvd.c:1858 msgid "" "xine tries to use this language as a default for DVD playback. As far as the " "DVD supports it, menus and audio tracks will be presented in this language.\n" "The value must be a two character ISO639 language code." msgstr "" -#: src/input/input_dvd.c:1863 +#: src/input/input_dvd.c:1864 msgid "read-ahead caching" msgstr "" -#: src/input/input_dvd.c:1864 +#: src/input/input_dvd.c:1865 msgid "" "xine can use a read ahead cache for DVD drive access.\n" "This may lead to jerky playback on slow drives, but it improves the impact " "of the DVD layer change on faster drives." msgstr "" -#: src/input/input_dvd.c:1870 +#: src/input/input_dvd.c:1871 msgid "unit for the skip action" msgstr "" -#: src/input/input_dvd.c:1871 +#: src/input/input_dvd.c:1872 msgid "" "You can configure the behaviour when issuing a skip command (using the skip " "buttons for example). The individual values mean:\n" @@ -2997,11 +3030,11 @@ msgid "" "features on the DVD" msgstr "" -#: src/input/input_dvd.c:1886 +#: src/input/input_dvd.c:1887 msgid "unit for seeking" msgstr "" -#: src/input/input_dvd.c:1887 +#: src/input/input_dvd.c:1888 msgid "" "You can configure the domain spanned by the seek slider. The individual " "values mean:\n" @@ -3015,11 +3048,11 @@ msgid "" "chapter of the current feature" msgstr "" -#: src/input/input_dvd.c:1898 +#: src/input/input_dvd.c:1899 msgid "play mode when title/chapter is given" msgstr "" -#: src/input/input_dvd.c:1899 +#: src/input/input_dvd.c:1900 msgid "" "You can configure the behaviour when playing a dvd from a given title/" "chapter (eg. using MRL 'dvd:/1.2'). The individual values mean:\n" @@ -3180,29 +3213,29 @@ msgstr "" msgid "DVB (Digital TV) input plugin" msgstr "http network stream input plugin" -#: src/input/input_dvb.c:3238 +#: src/input/input_dvb.c:3237 msgid "Remember last DVB channel watched" msgstr "" -#: src/input/input_dvb.c:3239 +#: src/input/input_dvb.c:3238 msgid "" "On autoplay, xine will remember and switch to the channel indicated in media." "dvb.last_channel. " msgstr "" -#: src/input/input_dvb.c:3246 +#: src/input/input_dvb.c:3245 msgid "Last DVB channel viewed" msgstr "" -#: src/input/input_dvb.c:3247 +#: src/input/input_dvb.c:3246 msgid "If enabled xine will remember and switch to this channel. " msgstr "" -#: src/input/input_dvb.c:3253 +#: src/input/input_dvb.c:3252 msgid "Number of dvb card to use." msgstr "" -#: src/input/input_dvb.c:3254 +#: src/input/input_dvb.c:3253 msgid "" "Leave this at zero unless you really have more than 1 card in your system." msgstr "" @@ -3318,74 +3351,74 @@ msgid "" "A value of zero here will disable the slowdown." msgstr "" -#: src/input/input_rtp.c:182 +#: src/input/input_rtp.c:185 #, c-format msgid "socket(): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:192 +#: src/input/input_rtp.c:195 msgid "IP address specified is multicast\n" msgstr "" -#: src/input/input_rtp.c:201 +#: src/input/input_rtp.c:204 #, fuzzy, c-format msgid "setsockopt(SO_RCVBUF): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:209 +#: src/input/input_rtp.c:212 #, fuzzy, c-format msgid "setsockopt(SO_REUSEADDR): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:216 +#: src/input/input_rtp.c:219 #, c-format msgid "bind(): %s.\n" msgstr "bind(): %s.\n" -#: src/input/input_rtp.c:236 +#: src/input/input_rtp.c:239 #, c-format msgid "Can't find address for iface %s:%s\n" msgstr "" -#: src/input/input_rtp.c:254 +#: src/input/input_rtp.c:257 #, c-format msgid "setsockopt(IP_ADD_MEMBERSHIP) failed (multicast kernel?): %s.\n" msgstr "setsockopt(IP_ADD_MEMBERSHIP) falhou (multicast kernel?): %s.\n" -#: src/input/input_rtp.c:276 +#: src/input/input_rtp.c:279 #, c-format msgid "unable to resolve '%s'.\n" msgstr "incapaz de resolver '%s'.\n" -#: src/input/input_rtp.c:286 +#: src/input/input_rtp.c:289 #, fuzzy, c-format msgid "unable to bind to '%s'.\n" msgstr "incapaz de conectar com '%s'.\n" -#: src/input/input_rtp.c:314 +#: src/input/input_rtp.c:317 #, fuzzy, c-format msgid "recv(): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:602 +#: src/input/input_rtp.c:605 msgid "RTP: stopping reading thread...\n" msgstr "" -#: src/input/input_rtp.c:605 +#: src/input/input_rtp.c:608 msgid "RTP: reading thread terminated\n" msgstr "" -#: src/input/input_rtp.c:620 +#: src/input/input_rtp.c:623 #, c-format msgid "Opening >filename:%s port:%d interface:%s<\n" msgstr "" -#: src/input/input_rtp.c:637 +#: src/input/input_rtp.c:640 #, c-format msgid "input_rtp: can't create new thread (%s)\n" msgstr "input_rtp: não consigo criar um novo thread (%s)\n" -#: src/input/input_rtp.c:743 +#: src/input/input_rtp.c:746 #, fuzzy msgid "RTP and UDP input plugin as shipped with xine" msgstr "net input plugin tal como enviado com xine" @@ -3400,16 +3433,27 @@ msgstr "" msgid "rtsp: failed to connect to '%s'\n" msgstr "http: unable to connect to >%s<\n" -#: src/input/librtsp/rtsp_session.c:84 +#: src/input/librtsp/rtsp_session.c:93 src/input/input_mms.c:479 +msgid "network bandwidth" +msgstr "" + +#: src/input/librtsp/rtsp_session.c:94 src/input/input_mms.c:480 +msgid "" +"Specify the bandwidth of your internet connection here. This will be used " +"when streaming servers offer different versions with different bandwidth " +"requirements of the same stream." +msgstr "" + +#: src/input/librtsp/rtsp_session.c:109 #, fuzzy, c-format msgid "rtsp_session: failed to connect to server %s\n" msgstr "http: unable to connect to >%s<\n" -#: src/input/librtsp/rtsp_session.c:118 +#: src/input/librtsp/rtsp_session.c:143 msgid "rtsp_session: session can not be established.\n" msgstr "" -#: src/input/librtsp/rtsp_session.c:135 +#: src/input/librtsp/rtsp_session.c:161 #, c-format msgid "rtsp_session: rtsp server type '%s' not supported yet. sorry.\n" msgstr "" @@ -3461,43 +3505,46 @@ msgstr "" msgid "pnm streaming input plugin" msgstr "http network stream input plugin" -#: src/input/mmsh.c:195 +#: src/input/mmsh.c:201 #, fuzzy msgid "libmmsh: send error\n" msgstr "input_http: read error\n" -#: src/input/mmsh.c:240 +#: src/input/mmsh.c:246 +#, c-format msgid "libmmsh: bad response format\n" msgstr "" -#: src/input/mmsh.c:246 +#: src/input/mmsh.c:252 #, fuzzy, c-format msgid "libmmsh: 3xx redirection not implemented: >%d %s<\n" msgstr "input_http: 3xx redirection not implemented: >%d %s<\n" -#: src/input/mmsh.c:253 +#: src/input/mmsh.c:259 #, fuzzy, c-format msgid "libmmsh: http status not 2xx: >%d %s<\n" msgstr "input_http: http status not 2xx: >%d %s<\n" -#: src/input/mmsh.c:261 -#, fuzzy +#: src/input/mmsh.c:267 +#, fuzzy, c-format msgid "libmmsh: Location redirection not implemented\n" msgstr "input_http: Location redirection not implemented\n" -#: src/input/mmsh.c:471 +#: src/input/mmsh.c:476 msgid "Connecting MMS server (over http)..." msgstr "" -#: src/input/mmsh.c:639 +#: src/input/mmsh.c:657 +#, c-format msgid "invalid url\n" msgstr "" -#: src/input/mmsh.c:644 +#: src/input/mmsh.c:662 +#, c-format msgid "unsupported protocol\n" msgstr "" -#: src/input/mms.c:537 +#: src/input/mms.c:561 msgid "Connecting MMS server (over tcp)..." msgstr "" @@ -3518,31 +3565,20 @@ msgstr "input_net: incapaz de conectar em '%s'.\n" msgid "input_pnm: failed to set up stream\n" msgstr "input_http: failed to open socket\n" -#: src/input/input_smb.c:154 +#: src/input/input_smb.c:158 msgid "CIFS/SMB input plugin based on libsmbclient" msgstr "" -#: src/input/input_mms.c:420 +#: src/input/input_mms.c:443 #, fuzzy msgid "mms streaming input plugin" msgstr "http network stream input plugin" -#: src/input/input_mms.c:456 -msgid "network bandwidth" -msgstr "" - -#: src/input/input_mms.c:457 -msgid "" -"Specify the bandwidth of your internet connection here. This will be used " -"when streaming servers offer different versions with different bandwidth " -"requirements of the same stream." -msgstr "" - -#: src/input/input_mms.c:466 +#: src/input/input_mms.c:489 msgid "MMS protocol" msgstr "" -#: src/input/input_mms.c:467 +#: src/input/input_mms.c:490 msgid "" "Select the protocol to encapsulate MMS.\n" "TCP is better but you may need HTTP behind a firewall." @@ -3553,82 +3589,83 @@ msgstr "" msgid "input_http: gethostbyname(%s) failed: %s\n" msgstr "input_cda: fopen(%s) failed: %s\n" -#: src/input/input_http.c:403 src/input/input_http.c:949 +#: src/input/input_http.c:400 src/input/input_http.c:941 #, fuzzy, c-format msgid "input_http: read error %d\n" msgstr "input_http: read error\n" -#: src/input/input_http.c:630 +#: src/input/input_http.c:627 msgid "Connecting HTTP server..." msgstr "" -#: src/input/input_http.c:824 +#: src/input/input_http.c:816 +#, c-format msgid "input_http: invalid http answer\n" msgstr "input_http: invalid http answer\n" -#: src/input/input_http.c:831 +#: src/input/input_http.c:823 #, fuzzy, c-format msgid "input_http: 3xx redirection: >%d %s<\n" msgstr "input_http: 3xx redirection not implemented: >%d %s<\n" -#: src/input/input_http.c:836 src/input/input_http.c:842 -#: src/input/input_http.c:849 +#: src/input/input_http.c:828 src/input/input_http.c:834 +#: src/input/input_http.c:841 #, c-format msgid "input_http: http status not 2xx: >%d %s<\n" msgstr "input_http: http status not 2xx: >%d %s<\n" -#: src/input/input_http.c:859 +#: src/input/input_http.c:851 #, fuzzy, c-format msgid "input_http: content length = %<PRIdMAX> bytes\n" msgstr "input_http: content length = %Ld bytes\n" -#: src/input/input_http.c:928 +#: src/input/input_http.c:920 #, fuzzy, c-format msgid "input_http: buffer exhausted after %d bytes." msgstr "input_http: read error\n" -#: src/input/input_http.c:1002 +#: src/input/input_http.c:994 #, fuzzy msgid "http input plugin" msgstr "http network stream input plugin" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "HTTP proxy host" msgstr "" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "The hostname of the HTTP proxy." msgstr "" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "HTTP proxy port" msgstr "" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "The port number of the HTTP proxy." msgstr "" -#: src/input/input_http.c:1082 +#: src/input/input_http.c:1074 msgid "HTTP proxy username" msgstr "" -#: src/input/input_http.c:1083 +#: src/input/input_http.c:1075 msgid "The user name for the HTTP proxy." msgstr "" -#: src/input/input_http.c:1086 +#: src/input/input_http.c:1078 msgid "HTTP proxy password" msgstr "" -#: src/input/input_http.c:1087 +#: src/input/input_http.c:1079 msgid "The password for the HTTP proxy." msgstr "" -#: src/input/input_http.c:1090 +#: src/input/input_http.c:1082 msgid "Domains for which to ignore the HTTP proxy" msgstr "" -#: src/input/input_http.c:1091 +#: src/input/input_http.c:1083 msgid "" "A comma-separated list of domain names for which the proxy is to be " "ignored.\n" @@ -3641,7 +3678,7 @@ msgstr "" msgid "input_dvd: Device %s failed to open during eject calls\n" msgstr "" -#: src/input/input_rtsp.c:274 +#: src/input/input_rtsp.c:284 #, fuzzy msgid "rtsp streaming input plugin" msgstr "http network stream input plugin" @@ -3652,69 +3689,82 @@ msgid "dvbsub: cannot create timer thread\n" msgstr "demux_qt: não consigo criar um novo thread (%s)\n" #: src/libxinevdec/bitplane.c:1272 +#, c-format msgid "bitplane: error doing ByteRun1 decompression\n" msgstr "" #: src/libxinevdec/bitplane.c:1331 +#, c-format msgid "bitplane: Anim Opt 1 is not supported at the moment\n" msgstr "" #: src/libxinevdec/bitplane.c:1338 +#, c-format msgid "bitplane: Anim Opt 2 is not supported at the moment\n" msgstr "" #: src/libxinevdec/bitplane.c:1388 +#, c-format msgid "bitplane: Anim ASCIIJ is not supported at the moment\n" msgstr "" #: src/libxinevdec/bitplane.c:1394 +#, c-format msgid "bitplane: This anim-type is not supported at the moment\n" msgstr "" -#: src/libsputext/demux_sputext.c:1507 +#: src/libsputext/demux_sputext.c:1506 msgid "default duration of subtitle display in seconds" msgstr "" -#: src/libsputext/demux_sputext.c:1508 +#: src/libsputext/demux_sputext.c:1507 msgid "" "Some subtitle formats do not explicitly give a duration for each subtitle. " "For these, you can set a default duration here. Setting to zero will result " "in the subtitle being shown until the next one takes over." msgstr "" -#: src/libsputext/xine_decoder.c:913 +#: src/libsputext/xine_decoder.c:948 msgid "subtitle size" msgstr "" -#: src/libsputext/xine_decoder.c:914 +#: src/libsputext/xine_decoder.c:949 msgid "" "You can adjust the subtitle size here. The setting will be evaluated " "relative to the window size." msgstr "" -#: src/libsputext/xine_decoder.c:920 +#: src/libsputext/xine_decoder.c:955 msgid "subtitle vertical offset" msgstr "" -#: src/libsputext/xine_decoder.c:921 +#: src/libsputext/xine_decoder.c:956 msgid "" "You can adjust the vertical position of the subtitle. The setting will be " "evaluated relative to the window size." msgstr "" -#: src/libsputext/xine_decoder.c:927 +#: src/libsputext/xine_decoder.c:962 src/libsputext/xine_decoder.c:971 msgid "font for subtitles" msgstr "" -#: src/libsputext/xine_decoder.c:928 +#: src/libsputext/xine_decoder.c:963 msgid "A font from the xine font directory to be used for the subtitle text." msgstr "" -#: src/libsputext/xine_decoder.c:935 +#: src/libsputext/xine_decoder.c:972 +msgid "An outline font file (e.g. a .ttf) to be used for the subtitle text." +msgstr "" + +#: src/libsputext/xine_decoder.c:978 +msgid "whether to use a freetype font" +msgstr "" + +#: src/libsputext/xine_decoder.c:985 msgid "encoding of the subtitles" msgstr "" -#: src/libsputext/xine_decoder.c:936 +#: src/libsputext/xine_decoder.c:986 msgid "" "The encoding of the subtitle text in the stream. This setting is used to " "render non-ASCII characters correctly. If non-ASCII characters are not " @@ -3722,11 +3772,11 @@ msgid "" "used." msgstr "" -#: src/libsputext/xine_decoder.c:944 +#: src/libsputext/xine_decoder.c:994 msgid "use unscaled OSD if possible" msgstr "" -#: src/libsputext/xine_decoder.c:945 +#: src/libsputext/xine_decoder.c:995 msgid "" "The unscaled OSD will be rendered independently of the video frame and will " "always be sharp, even if the video is magnified. This will look better, but " @@ -4109,11 +4159,11 @@ msgstr "" msgid "libareal: oups, real can do more than 2 channels ?\n" msgstr "" -#: src/libreal/audio_decoder.c:745 src/libreal/xine_decoder.c:638 +#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 msgid "path to RealPlayer codecs" msgstr "" -#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 +#: src/libreal/audio_decoder.c:747 src/libreal/xine_decoder.c:640 msgid "" "If you have RealPlayer installed, specify the path to its codec directory " "here. You can easily find the codec directory by looking for a file named " @@ -4439,6 +4489,7 @@ msgid "demux_avi: invalid avi chunk \"%c%c%c%c\" at pos %<PRIdMAX>\n" msgstr "" #: src/demuxers/demux_avi.c:828 +#, c-format msgid "demux_avi: avi index is broken\n" msgstr "demux_avi: o Ãndice do avi está quebrado\n" @@ -4452,23 +4503,25 @@ msgid "demux_mpc: frame too big for buffer" msgstr "" #: src/demuxers/demux_film.c:188 +#, c-format msgid "invalid FILM chunk size\n" msgstr "" #: src/demuxers/demux_film.c:342 +#, c-format msgid "unrecognized FILM chunk\n" msgstr "" -#: src/demuxers/demux_asf.c:423 +#: src/demuxers/demux_asf.c:425 #, c-format msgid "demux_asf: warning: The stream id=%d is encrypted.\n" msgstr "" -#: src/demuxers/demux_asf.c:425 +#: src/demuxers/demux_asf.c:427 msgid "Media stream scrambled/encrypted" msgstr "" -#: src/demuxers/demux_asf.c:1633 +#: src/demuxers/demux_asf.c:1634 #, fuzzy, c-format msgid "demux_asf: Wrong ASX version: %s\n" msgstr "demux_asf: copyright : %s\n" @@ -4499,7 +4552,8 @@ msgid "" "unknown VOC compression type (0x%02X); please report to xine developers\n" msgstr "" -#: src/demuxers/demux_ogg.c:797 +#: src/demuxers/demux_ogg.c:801 +#, c-format msgid "ogg: vorbis audio track indicated but no vorbis stream header found.\n" msgstr "" @@ -4516,6 +4570,7 @@ msgid "" msgstr "" #: src/demuxers/demux_mpeg_block.c:640 +#, c-format msgid "demux_mpeg_block: warning: PES header reserved 10 bits not found\n" msgstr "" @@ -4541,6 +4596,7 @@ msgid "demux_mpeg_pes: warning: PACK stream id=0x%x decode failed.\n" msgstr "" #: src/demuxers/demux_mpeg_pes.c:771 +#, c-format msgid "demux_mpeg_pes: warning: PES header reserved 10 bits not found\n" msgstr "" @@ -4566,10 +4622,12 @@ msgid "demux_wc3movie: SHOT chunk referenced invalid palette (%d >= %d)\n" msgstr "" #: src/demuxers/demux_wc3movie.c:406 +#, c-format msgid "demux_wc3movie: There was a problem while loading palette chunks\n" msgstr "" #: src/demuxers/demux_snd.c:104 +#, c-format msgid "demux_snd: bad header parameters\n" msgstr "" @@ -4616,60 +4674,60 @@ msgstr "" msgid "The maximum compression to apply to an image in constant quality mode." msgstr "" -#: src/libffmpeg/audio_decoder.c:117 +#: src/libffmpeg/audio_decoder.c:120 #, c-format msgid "ffmpeg_audio_dec: increasing buffer to %d to avoid overflow.\n" msgstr "" -#: src/libffmpeg/audio_decoder.c:161 +#: src/libffmpeg/audio_decoder.c:164 #, c-format msgid "ffmpeg_audio_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" -#: src/libffmpeg/audio_decoder.c:253 +#: src/libffmpeg/audio_decoder.c:256 msgid "ffmpeg_audio_dec: trying to open null codec\n" msgstr "" -#: src/libffmpeg/audio_decoder.c:262 +#: src/libffmpeg/audio_decoder.c:265 msgid "ffmpeg_audio_dec: couldn't open decoder\n" msgstr "" -#: src/libffmpeg/dvaudio_decoder.c:302 +#: src/libffmpeg/dvaudio_decoder.c:286 #, c-format msgid "dvaudio: increasing buffer to %d to avoid overflow.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:153 +#: src/libffmpeg/video_decoder.c:156 msgid "ffmpeg_video_dec: unsupported frame format, DR1 disabled.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:171 +#: src/libffmpeg/video_decoder.c:174 msgid "ffmpeg_video_dec: unsupported frame dimensions, DR1 disabled.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:319 +#: src/libffmpeg/video_decoder.c:334 #, c-format msgid "ffmpeg_video_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "" -#: src/libffmpeg/video_decoder.c:348 +#: src/libffmpeg/video_decoder.c:363 msgid "ffmpeg_video_dec: couldn't open decoder\n" msgstr "" -#: src/libffmpeg/video_decoder.c:383 +#: src/libffmpeg/video_decoder.c:398 msgid "ffmpeg_video_dec: direct rendering enabled\n" msgstr "" -#: src/libffmpeg/video_decoder.c:802 +#: src/libffmpeg/video_decoder.c:817 #, c-format msgid "ffmpeg_video_dec: increasing buffer to %d to avoid overflow.\n" msgstr "" -#: src/libffmpeg/video_decoder.c:1474 +#: src/libffmpeg/video_decoder.c:1510 msgid "MPEG-4 postprocessing quality" msgstr "" -#: src/libffmpeg/video_decoder.c:1475 +#: src/libffmpeg/video_decoder.c:1511 msgid "" "You can adjust the amount of post processing applied to MPEG-4 video.\n" "Higher values result in better quality, but need more CPU. Lower values may " @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: xine-lib 1.0\n" "Report-Msgid-Bugs-To: xine-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2006-11-29 23:07+0100\n" +"POT-Creation-Date: 2007-01-26 18:31+0100\n" "PO-Revision-Date: 2004-09-15 13:53+0100\n" "Last-Translator: \n" "Language-Team: Slovak <ski18n@lists.isternet.sk>\n" @@ -99,6 +99,7 @@ msgid "w32codec: decoder failed to start. Is '%s' installed?\n" msgstr "w32codec: dekóder zlyhal pri Å¡tarte. Je '%s' nainÅ¡talovaný?\n" #: src/libw32dll/w32codec.c:1221 +#, c-format msgid "w32codec: (ACM_Decoder) Unappropriate audio format\n" msgstr "w32codec: (ACM_Decoder) Neadekvátny audio formát\n" @@ -108,10 +109,12 @@ msgid "w32codec: (ACM_Decoder) acmStreamOpen error %d\n" msgstr "w32codec: (ACM_Decoder) acmStreamOpen chyba %d\n" #: src/libw32dll/w32codec.c:1243 +#, c-format msgid "w32codec: Error initializing DirectShow Audio\n" msgstr "w32codec: Chyba inicializácie DirectShow zvuku\n" #: src/libw32dll/w32codec.c:1261 +#, c-format msgid "w32codec: Error initializing DMO Audio\n" msgstr "w32codec: Chyba inicializácie DMO zvuku\n" @@ -333,17 +336,17 @@ msgstr "xine file audio output plugin" msgid "xine output plugin for Coreaudio/Mac OS X" msgstr "výstupný xine audio plugin pre win32 použÃva directx" -#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:919 +#: src/audio_out/audio_sun_out.c:442 src/audio_out/audio_sun_out.c:920 #, c-format msgid "audio_sun_out: opening audio device %s failed: %s\n" msgstr "audio_sun_out: otvorenie audio zariadenia %s zlyhalo: %s\n" -#: src/audio_out/audio_sun_out.c:894 +#: src/audio_out/audio_sun_out.c:895 #, fuzzy msgid "Sun audio device name" msgstr "názov OSS audio zariadenia" -#: src/audio_out/audio_sun_out.c:895 +#: src/audio_out/audio_sun_out.c:896 msgid "" "Specifies the file name for the Sun audio device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -351,12 +354,12 @@ msgid "" "careful that the value you enter really is a proper Sun audio device." msgstr "" -#: src/audio_out/audio_sun_out.c:937 +#: src/audio_out/audio_sun_out.c:938 #, fuzzy, c-format msgid "audio_sun_out: audio ioctl on device %s failed: %s\n" msgstr "audio_sun_out: otvorenie audio zariadenia %s zlyhalo: %s\n" -#: src/audio_out/audio_sun_out.c:988 +#: src/audio_out/audio_sun_out.c:989 msgid "xine audio output plugin using sun-compliant audio devices/drivers" msgstr "" "výstupný xine audio plugin použÃva sun-compliant audio zariadenia/ovládaÄe" @@ -449,10 +452,12 @@ msgid "unknown error" msgstr "UdalosÅ¥ neznámeho typu: " #: src/audio_out/audio_directx2_out.c:206 +#, c-format msgid "Unable to create direct sound object." msgstr "" #: src/audio_out/audio_directx2_out.c:212 +#, c-format msgid "Could not set direct sound cooperative level." msgstr "" @@ -461,6 +466,7 @@ msgid "Unable to create secondary direct sound buffer" msgstr "" #: src/audio_out/audio_directx2_out.c:310 +#, c-format msgid "Unable to create buffer position events." msgstr "" @@ -493,6 +499,7 @@ msgid "Can't set sound volume" msgstr "" #: src/audio_out/audio_directx2_out.c:432 +#, c-format msgid ": buffer lost, tryig to restore\n" msgstr "" @@ -505,10 +512,12 @@ msgid "Couldn't unlock direct sound buffer" msgstr "" #: src/audio_out/audio_directx2_out.c:544 +#, c-format msgid "Unable to create primary direct sound buffer." msgstr "" #: src/audio_out/audio_directx2_out.c:637 +#, c-format msgid ": play cursor overran, flushing buffers\n" msgstr "" @@ -570,6 +579,7 @@ msgid "xine audio output plugin for win32 using directx" msgstr "výstupný xine audio plugin pre win32 použÃva directx" #: src/audio_out/audio_alsa_out.c:355 +#, c-format msgid "audio_alsa_out:Already open...WHY!" msgstr "audio_alsa_out:Už otvorené...PREÄŒO!" @@ -672,6 +682,7 @@ msgid "snd_pcm_open() failed:%d:%s\n" msgstr "snd_pcm_open() zlyhal:%d:%s\n" #: src/audio_out/audio_alsa_out.c:1428 +#, c-format msgid ">>> Check if another program already uses PCM <<<\n" msgstr ">>> Skontrolujte Äi už iný program použÃva PCM <<<\n" @@ -815,7 +826,7 @@ msgid "xine audio output plugin using pulseaudio sound server" msgstr "výstupný xine audio plugin použÃva esound" #: src/xine-engine/io_helper.c:252 -#, fuzzy +#, fuzzy, c-format msgid "io_helper: waiting abandoned\n" msgstr "Meno tuneru nenájdené\n" @@ -829,15 +840,17 @@ msgid "failed to get status of socket" msgstr "" #: src/xine-engine/io_helper.c:388 +#, c-format msgid "io_helper: Permission denied\n" msgstr "" #: src/xine-engine/io_helper.c:392 -#, fuzzy +#, fuzzy, c-format msgid "io_helper: File not found\n" msgstr "Meno tuneru nenájdené\n" #: src/xine-engine/io_helper.c:396 +#, c-format msgid "io_helper: Connection Refused\n" msgstr "" @@ -881,123 +894,128 @@ msgid "" "accelerated, this can dramatically reduce CPU usage." msgstr "" -#: src/xine-engine/xine.c:696 src/xine-engine/xine.c:803 -#: src/xine-engine/xine.c:842 src/xine-engine/xine.c:878 -#: src/xine-engine/xine.c:890 src/xine-engine/xine.c:903 -#: src/xine-engine/xine.c:916 src/xine-engine/xine.c:929 -#: src/xine-engine/xine.c:955 src/xine-engine/xine.c:980 -#: src/xine-engine/xine.c:1015 +#: src/xine-engine/xine.c:704 src/xine-engine/xine.c:811 +#: src/xine-engine/xine.c:850 src/xine-engine/xine.c:886 +#: src/xine-engine/xine.c:898 src/xine-engine/xine.c:911 +#: src/xine-engine/xine.c:924 src/xine-engine/xine.c:937 +#: src/xine-engine/xine.c:963 src/xine-engine/xine.c:988 +#: src/xine-engine/xine.c:1023 msgid "xine: error while parsing mrl\n" msgstr "xine: chyba pri spracovanà mrl\n" -#: src/xine-engine/xine.c:732 +#: src/xine-engine/xine.c:740 #, c-format msgid "xine: found input plugin : %s\n" msgstr "xine: nájdený vstupný modul : %s\n" -#: src/xine-engine/xine.c:750 +#: src/xine-engine/xine.c:758 #, c-format msgid "xine: input plugin cannot open MRL [%s]\n" msgstr "xine: vstupný modul nemôže otvoriÅ¥ MRL [%s]\n" -#: src/xine-engine/xine.c:766 +#: src/xine-engine/xine.c:774 #, c-format msgid "xine: cannot find input plugin for MRL [%s]\n" msgstr "xine: nemožno nájsÅ¥ vstupný modul pre MRL [%s]\n" -#: src/xine-engine/xine.c:792 +#: src/xine-engine/xine.c:800 #, c-format msgid "xine: specified demuxer %s failed to start\n" msgstr "xine: Å¡pecifikovaný demultiplexor %s nenaÅ¡tartoval\n" -#: src/xine-engine/xine.c:828 +#: src/xine-engine/xine.c:836 +#, c-format msgid "xine: join rip input plugin\n" msgstr "xine: pripojený rip vstupný modul\n" -#: src/xine-engine/xine.c:835 +#: src/xine-engine/xine.c:843 msgid "xine: error opening rip input plugin instance\n" msgstr "xine: chyba otvorenia modulu vstupu rip\n" -#: src/xine-engine/xine.c:866 +#: src/xine-engine/xine.c:874 #, c-format msgid "xine: last_probed demuxer %s failed to start\n" msgstr "xine: last_probed demultiplexor %s nenaÅ¡tartoval\n" -#: src/xine-engine/xine.c:895 +#: src/xine-engine/xine.c:903 msgid "ignoring video\n" msgstr "ignorujem video\n" -#: src/xine-engine/xine.c:908 +#: src/xine-engine/xine.c:916 msgid "ignoring audio\n" msgstr "ignorujem audio\n" -#: src/xine-engine/xine.c:921 +#: src/xine-engine/xine.c:929 msgid "ignoring subpicture\n" msgstr "ignorujem titulky\n" -#: src/xine-engine/xine.c:934 +#: src/xine-engine/xine.c:942 msgid "input cache plugin disabled\n" msgstr "" -#: src/xine-engine/xine.c:1005 +#: src/xine-engine/xine.c:1013 #, c-format msgid "subtitle mrl opened '%s'\n" msgstr "mrl titulkov otvorené '%s'\n" -#: src/xine-engine/xine.c:1009 +#: src/xine-engine/xine.c:1017 msgid "xine: error opening subtitle mrl\n" msgstr "xine: nemožno otvoriÅ¥ mrl titulkov\n" -#: src/xine-engine/xine.c:1041 +#: src/xine-engine/xine.c:1049 +#, c-format msgid "xine: error while parsing MRL\n" msgstr "xine: chyba pri spracovanà MRL\n" -#: src/xine-engine/xine.c:1048 +#: src/xine-engine/xine.c:1056 #, c-format msgid "xine: changing option '%s' from MRL isn't permitted\n" msgstr "xine: zmeniÅ¥ voľbu '%s' z MRL nie je dovolené\n" -#: src/xine-engine/xine.c:1068 +#: src/xine-engine/xine.c:1076 #, c-format msgid "xine: couldn't find demux for >%s<\n" msgstr "xine: nemožno nájsÅ¥ demultiplexor pre >%s<\n" -#: src/xine-engine/xine.c:1084 +#: src/xine-engine/xine.c:1092 #, c-format msgid "xine: found demuxer plugin: %s\n" msgstr "xine: nájdený modul demultiplexora %s\n" -#: src/xine-engine/xine.c:1104 +#: src/xine-engine/xine.c:1112 +#, c-format msgid "xine: demuxer failed to start\n" msgstr "xine: demultiplexor nenaÅ¡tartoval\n" -#: src/xine-engine/xine.c:1167 +#: src/xine-engine/xine.c:1177 +#, c-format msgid "xine_play: no demux available\n" msgstr "xine_play: demultiplexor nedostupný\n" -#: src/xine-engine/xine.c:1237 +#: src/xine-engine/xine.c:1247 +#, c-format msgid "xine_play: demux failed to start\n" msgstr "xine_play: demultiplexor nenaÅ¡tartoval\n" -#: src/xine-engine/xine.c:1508 +#: src/xine-engine/xine.c:1523 #, c-format msgid "xine: The specified save_dir \"%s\" might be a security risk.\n" msgstr "xine: Å pecifikovaný save_dir \"%s\" môže byÅ¥ bezpeÄnostným rizikom.\n" -#: src/xine-engine/xine.c:1513 +#: src/xine-engine/xine.c:1528 msgid "The specified save_dir might be a security risk." msgstr "Å pecifikovaný save_dir môže byÅ¥ bezpeÄnostným rizikom." -#: src/xine-engine/xine.c:1539 +#: src/xine-engine/xine.c:1554 msgid "xine: locale not supported by C library\n" msgstr "xine: locale nepodporované vaÅ¡ou C knižnicou\n" -#: src/xine-engine/xine.c:1548 +#: src/xine-engine/xine.c:1563 #, fuzzy msgid "media format detection strategy" msgstr "Stratégia detekcie formátu médii" -#: src/xine-engine/xine.c:1549 +#: src/xine-engine/xine.c:1564 msgid "" "xine offers various methods to detect the media format of input to play. The " "individual values are:\n" @@ -1015,12 +1033,12 @@ msgid "" "Detect by file name extension only.\n" msgstr "" -#: src/xine-engine/xine.c:1567 +#: src/xine-engine/xine.c:1582 #, fuzzy msgid "directory for saving streams" msgstr "Cesta pre ukladanie prúdov" -#: src/xine-engine/xine.c:1568 +#: src/xine-engine/xine.c:1583 msgid "" "When using the stream save feature, files will be written only into this " "directory.\n" @@ -1030,11 +1048,11 @@ msgid "" "content in any file." msgstr "" -#: src/xine-engine/xine.c:1579 +#: src/xine-engine/xine.c:1594 msgid "allow implicit changes to the configuration (e.g. by MRL)" msgstr "dovoliÅ¥ implicitné zmeny v konfigurácii (napr. cez MRL)" -#: src/xine-engine/xine.c:1580 +#: src/xine-engine/xine.c:1595 msgid "" "If enabled, you allow xine to change your configuration without explicit " "actions from your side. For example configuration changes demanded by MRLs " @@ -1050,26 +1068,26 @@ msgstr "" "MRL alebo playlisty z nedôverihodných vzdialených zdrojov. Ak im dovolÃte " "ľubovoľne meniÅ¥ vaÅ¡u konfiguráciu, môžete skonÄiÅ¥ s úplne rozhodeným xine." -#: src/xine-engine/xine.c:1594 +#: src/xine-engine/xine.c:1609 msgid "Timeout for network stream reading (in seconds)" msgstr "" -#: src/xine-engine/xine.c:1595 +#: src/xine-engine/xine.c:1610 msgid "" "Specifies the timeout when reading from network streams, in seconds. Too low " "values might stop streaming when the source is slow or the bandwidth is " "occupied, too high values will freeze the player if the connection is lost." msgstr "" -#: src/xine-engine/xine.c:1946 +#: src/xine-engine/xine.c:1962 msgid "messages" msgstr "správy" -#: src/xine-engine/xine.c:1947 +#: src/xine-engine/xine.c:1963 msgid "plugin" msgstr "modul" -#: src/xine-engine/xine.c:1948 +#: src/xine-engine/xine.c:1964 msgid "trace" msgstr "trace" @@ -1079,20 +1097,23 @@ msgid "input_rip: reading of saved data failed: %s\n" msgstr "input_rip: zlyhalo ÄÃtanie zapÃsaných dát: %s\n" #: src/xine-engine/input_rip.c:154 +#, c-format msgid "input_rip: reading by input plugin failed\n" msgstr "input_rip: zlyhalo ÄÃtanie vo vstupnom module\n" #: src/xine-engine/input_rip.c:162 src/xine-engine/input_rip.c:291 -#: src/xine-engine/input_rip.c:643 +#: src/xine-engine/input_rip.c:657 #, fuzzy, c-format msgid "input_rip: error writing to file %<PRIdMAX> bytes: %s\n" msgstr "input_rip: chyba pri zápise do súboru %lld bytov: %s\n" #: src/xine-engine/input_rip.c:183 +#, c-format msgid "input_rip: open() function should never be called\n" msgstr "input_rip: funkcia open() by nikdy nemala byÅ¥ volaná\n" #: src/xine-engine/input_rip.c:314 src/xine-engine/input_rip.c:419 +#, c-format msgid "input_rip: seeking failed\n" msgstr "input_rip: skok zlyhal\n" @@ -1106,11 +1127,13 @@ msgstr "input_rip: skok zlyhal: %s\n" msgid "input_rip: %<PRIdMAX> bytes dropped\n" msgstr "input_rip: %lld bytov zahodených\n" -#: src/xine-engine/input_rip.c:548 +#: src/xine-engine/input_rip.c:562 +#, c-format msgid "input_rip: input plugin not defined!\n" msgstr "input_rip: vstupný modul nedefinovaný!\n" -#: src/xine-engine/input_rip.c:554 +#: src/xine-engine/input_rip.c:568 +#, c-format msgid "" "input_rip: target directory wasn't specified, please fill out the option " "'media.capture.save_dir'\n" @@ -1118,7 +1141,7 @@ msgstr "" "input_rip: cieľový adresár nebol Å¡pecifikovaný, prosÃm vyplnte voľbu 'media." "capture.save_dir'\n" -#: src/xine-engine/input_rip.c:556 +#: src/xine-engine/input_rip.c:570 msgid "" "The stream save feature is disabled until you set media.capture.save_dir in " "the configuration." @@ -1126,22 +1149,24 @@ msgstr "" "SchopnosÅ¥ ukladania je zakázaná dovtedy kým nenastavÃte media.capture." "save_dir v konfigurácii." -#: src/xine-engine/input_rip.c:563 +#: src/xine-engine/input_rip.c:577 +#, c-format msgid "input_rip: ripping/caching of this source is not permitted!\n" msgstr "input_rip: ukladanie/keÅ¡ovanie z tohto zdroja nedovolené!\n" -#: src/xine-engine/input_rip.c:565 +#: src/xine-engine/input_rip.c:579 msgid "" "xine is not allowed to save from this source. (possibly copyrighted " "material?)" msgstr "" "xine nemá povolené ukladaÅ¥ z tohto zdroja. (možno autorsky chránenýmateriál?)" -#: src/xine-engine/input_rip.c:571 +#: src/xine-engine/input_rip.c:585 +#, c-format msgid "input_rip: file name not given!\n" msgstr "input_rip: nezadané meno súboru!\n" -#: src/xine-engine/input_rip.c:613 +#: src/xine-engine/input_rip.c:627 #, c-format msgid "input_rip: error opening file %s: %s\n" msgstr "input_rip: nemožno otvoriÅ¥ súbor %s: %s\n" @@ -1181,59 +1206,59 @@ msgid "" msgstr "" #: src/xine-engine/input_cache.c:167 -#, fuzzy +#, fuzzy, c-format msgid ": open() function should never be called\n" msgstr "input_rip: funkcia open() by nikdy nemala byÅ¥ volaná\n" #: src/xine-engine/input_cache.c:349 -#, fuzzy +#, fuzzy, c-format msgid ": input plugin not defined!\n" msgstr "input_rip: vstupný modul nedefinovaný!\n" -#: src/xine-engine/osd.c:739 +#: src/xine-engine/osd.c:745 #, c-format msgid "font '%s-%d' already loaded, weird.\n" msgstr "font '%s-%d' už naÄÃtaný, divné.\n" -#: src/xine-engine/osd.c:751 +#: src/xine-engine/osd.c:757 #, c-format msgid "font '%s' loading failed (%d < %d)\n" msgstr "naÄÃtanie fontu '%s' zlyhalo (%d < %d)\n" -#: src/xine-engine/osd.c:761 +#: src/xine-engine/osd.c:767 #, c-format msgid "wrong version for font '%s'. expected %d found %d.\n" msgstr "zlá verzia fontu '%s'. oÄakávaná %d nájdená %d.\n" -#: src/xine-engine/osd.c:828 +#: src/xine-engine/osd.c:834 msgid "osd: cannot initialize ft2 library\n" msgstr "osd: nemôžem inicializovaÅ¥ ft2 knižnicu\n" -#: src/xine-engine/osd.c:851 +#: src/xine-engine/osd.c:857 #, fuzzy, c-format msgid "osd: error matching font %s with FontConfig" msgstr "osd: chyba naÄÃtania fontu %s s ft2\n" -#: src/xine-engine/osd.c:865 +#: src/xine-engine/osd.c:871 #, fuzzy, c-format msgid "osd: error loading font %s with FontConfig" msgstr "osd: chyba naÄÃtania fontu %s s ft2\n" -#: src/xine-engine/osd.c:868 +#: src/xine-engine/osd.c:874 #, fuzzy, c-format msgid "osd: error looking up font %s with FontConfig" msgstr "osd: chyba naÄÃtania fontu %s s ft2\n" -#: src/xine-engine/osd.c:889 +#: src/xine-engine/osd.c:895 #, c-format msgid "osd: error loading font %s with ft2\n" msgstr "osd: chyba naÄÃtania fontu %s s ft2\n" -#: src/xine-engine/osd.c:899 +#: src/xine-engine/osd.c:905 msgid "osd: error setting font size (no scalable font?)\n" msgstr "osd: chyba pri nastavenà veľkosti fontu (neÅ¡kálovateľný font?)\n" -#: src/xine-engine/osd.c:1015 +#: src/xine-engine/osd.c:1021 #, c-format msgid "" "osd: unknown sequence starting with byte 0x%02X in encoding \"%s\", " @@ -1242,77 +1267,78 @@ msgstr "" "osd: neznáma sekvencia zaÄÃnajúca s bytom 0x%02X v kódovanà \"%s\", " "preskakujem\n" -#: src/xine-engine/osd.c:1071 +#: src/xine-engine/osd.c:1077 msgid "osd: can't find out current locale character set\n" msgstr "osd: nemôžem zistiÅ¥ aktuálnu kódovú stánku\n" -#: src/xine-engine/osd.c:1081 +#: src/xine-engine/osd.c:1087 #, c-format msgid "osd: unsupported conversion %s -> %s, no conversion performed\n" msgstr "osd: nepodporovaná konverzia %s -> %s, nebude vykonaná žiadna\n" -#: src/xine-engine/osd.c:1136 src/xine-engine/osd.c:1304 +#: src/xine-engine/osd.c:1142 src/xine-engine/osd.c:1310 msgid "osd: font isn't defined\n" msgstr "osd: font nie je definovaný\n" -#: src/xine-engine/osd.c:1175 +#: src/xine-engine/osd.c:1181 msgid "osd: error loading glyph\n" msgstr "osd: chyba zavedenia glyph\n" -#: src/xine-engine/osd.c:1181 +#: src/xine-engine/osd.c:1187 msgid "osd: error in rendering glyph\n" msgstr "osd: chyba pri vykreslovanà glyph\n" -#: src/xine-engine/osd.c:1341 +#: src/xine-engine/osd.c:1347 #, c-format msgid "osd: error loading glyph %i\n" msgstr "osd: chyba zavedenia glyph %i\n" -#: src/xine-engine/osd.c:1348 +#: src/xine-engine/osd.c:1354 msgid "osd: error in rendering\n" msgstr "osd: chyba pri vykreslovanÃ\n" -#: src/xine-engine/osd.c:1596 +#: src/xine-engine/osd.c:1602 #, fuzzy msgid "palette (foreground-border-background) to use for subtitles and OSD" msgstr "Paleta (popredie-okraj-pozadie) použitá na titulky" -#: src/xine-engine/osd.c:1597 +#: src/xine-engine/osd.c:1603 msgid "" "The palette for on-screen-display and some subtitle formats that do not " "specify any colouring themselves. The palettes are listed in the form: " "foreground-border-background." msgstr "" -#: src/xine-engine/configfile.c:896 +#: src/xine-engine/configfile.c:924 +#, c-format msgid "The current config file has been modified by a newer version of xine." msgstr "Aktuálny konfiguraÄný súbor bol modifikovaný novou verziou xine." -#: src/xine-engine/configfile.c:1001 +#: src/xine-engine/configfile.c:1029 #, c-format msgid "configfile: WARNING: backing up configfile to %s failed\n" msgstr "configfile: VAROVANIE: záloha konf.súboru do %s zlyhala\n" -#: src/xine-engine/configfile.c:1002 +#: src/xine-engine/configfile.c:1030 msgid "configfile: WARNING: your configuration will not be saved\n" msgstr "configfile: VAROVANIE: vaÅ¡a konfigurácia nebude uložená\n" -#: src/xine-engine/configfile.c:1101 +#: src/xine-engine/configfile.c:1129 #, c-format msgid "configfile: WARNING: writing configuration to %s failed\n" msgstr "configfile: VAROVANIE: zápis konfigurácie %s zlyhal\n" -#: src/xine-engine/configfile.c:1102 +#: src/xine-engine/configfile.c:1130 #, c-format msgid "configfile: WARNING: removing possibly broken config file %s\n" msgstr "configfile: VAROVANIE: odstraňujem možno poÅ¡kodený konf. súbor %s\n" -#: src/xine-engine/configfile.c:1103 +#: src/xine-engine/configfile.c:1131 #, c-format msgid "configfile: WARNING: you should check the backup file %s\n" msgstr "configfile: VAROVANIE: mali by ste skontrolovaÅ¥ záložný súbor %s\n" -#: src/xine-engine/configfile.c:1237 +#: src/xine-engine/configfile.c:1266 #, c-format msgid "configfile: entry '%s' mustn't be modified from MRL\n" msgstr "configfile: položka '%s' nesmie byÅ¥ modifikovaná z MRL\n" @@ -1331,45 +1357,55 @@ msgstr "" "video_out: zahadzuje sa obraz s pts %<PRId64>, pretože už je prÃliÅ¡ starý " "(rozdiel: %<PRId64>).\n" -#: src/xine-engine/video_out.c:1818 +#: src/xine-engine/video_out.c:1790 +msgid "default number of video frames" +msgstr "" + +#: src/xine-engine/video_out.c:1791 +msgid "" +"The default number of video frames to request from xine video out driver. " +"Some drivers will override this setting with their own values." +msgstr "" + +#: src/xine-engine/video_out.c:1830 msgid "percentage of skipped frames to tolerate" msgstr "" -#: src/xine-engine/video_out.c:1819 +#: src/xine-engine/video_out.c:1831 msgid "" "When more than this percentage of frames are not shown, because they were " "not decoded in time, xine sends a notification." msgstr "" -#: src/xine-engine/video_out.c:1824 +#: src/xine-engine/video_out.c:1836 msgid "percentage of discarded frames to tolerate" msgstr "" -#: src/xine-engine/video_out.c:1825 +#: src/xine-engine/video_out.c:1837 msgid "" "When more than this percentage of frames are not shown, because they were " "not scheduled for display in time, xine sends a notification." msgstr "" -#: src/xine-engine/video_out.c:1859 +#: src/xine-engine/video_out.c:1871 msgid "video_out: sorry, this should not happen. please restart xine.\n" msgstr "video_out: prepáÄ, toto sa nemalo staÅ¥, reÅ¡tartuj xine.\n" -#: src/xine-engine/video_decoder.c:374 +#: src/xine-engine/video_decoder.c:380 #, c-format msgid "video_decoder: no plugin available to handle '%s'\n" msgstr "video_decoder: nedostupný modul na spracovanie '%s'\n" -#: src/xine-engine/video_decoder.c:453 +#: src/xine-engine/video_decoder.c:459 #, c-format msgid "video_decoder: error, unknown buffer type: %08x\n" msgstr "video_decoder: chyba, neznámy typ bufferu: %08x\n" -#: src/xine-engine/video_decoder.c:489 +#: src/xine-engine/video_decoder.c:495 msgid "number of video buffers" msgstr "" -#: src/xine-engine/video_decoder.c:490 +#: src/xine-engine/video_decoder.c:496 msgid "" "The number of video buffers (each is 8k in size) xine uses in its internal " "queue. Higher values mean smoother playback for unreliable inputs, but also " @@ -1387,90 +1423,90 @@ msgid "" "info_helper: unsupported conversion %s -> UTF-8, no conversion performed\n" msgstr "osd: nepodporovaná konverzia %s -> %s, nebude vykonaná žiadna\n" -#: src/xine-engine/xine_interface.c:918 +#: src/xine-engine/xine_interface.c:934 msgid "Warning:" msgstr "" -#: src/xine-engine/xine_interface.c:919 +#: src/xine-engine/xine_interface.c:935 #, fuzzy msgid "Unknown host:" msgstr "UdalosÅ¥ neznámeho typu: " -#: src/xine-engine/xine_interface.c:920 +#: src/xine-engine/xine_interface.c:936 #, fuzzy msgid "Unknown device:" msgstr "UdalosÅ¥ neznámeho typu: " -#: src/xine-engine/xine_interface.c:921 +#: src/xine-engine/xine_interface.c:937 msgid "Network unreachable" msgstr "" -#: src/xine-engine/xine_interface.c:922 +#: src/xine-engine/xine_interface.c:938 msgid "Connection refused:" msgstr "" -#: src/xine-engine/xine_interface.c:923 +#: src/xine-engine/xine_interface.c:939 #, fuzzy msgid "File not found:" msgstr "Meno tuneru nenájdené\n" -#: src/xine-engine/xine_interface.c:924 +#: src/xine-engine/xine_interface.c:940 msgid "Read error from:" msgstr "" -#: src/xine-engine/xine_interface.c:925 +#: src/xine-engine/xine_interface.c:941 #, fuzzy msgid "Error loading library:" msgstr "osd: chyba zavedenia glyph\n" -#: src/xine-engine/xine_interface.c:926 +#: src/xine-engine/xine_interface.c:942 msgid "Encrypted media stream detected" msgstr "" -#: src/xine-engine/xine_interface.c:927 +#: src/xine-engine/xine_interface.c:943 msgid "Security message:" msgstr "" -#: src/xine-engine/xine_interface.c:928 +#: src/xine-engine/xine_interface.c:944 #, fuzzy msgid "Audio device unavailable" msgstr "názov OSS audio zariadenia" -#: src/xine-engine/xine_interface.c:929 +#: src/xine-engine/xine_interface.c:945 msgid "Permission error" msgstr "" -#: src/xine-engine/xine_interface.c:930 +#: src/xine-engine/xine_interface.c:946 msgid "File is empty:" msgstr "" -#: src/xine-engine/audio_out.c:1074 +#: src/xine-engine/audio_out.c:1072 msgid "" "audio_out: delay calculation impossible with an unavailable audio device\n" msgstr "" -#: src/xine-engine/audio_out.c:1216 +#: src/xine-engine/audio_out.c:1214 msgid "write to sound card failed. Was a USB device unplugged ?\n" msgstr "zápis na zvukovú kartu zlyhal. Bolo odpojené USB zariadenie ?\n" -#: src/xine-engine/audio_out.c:1369 +#: src/xine-engine/audio_out.c:1367 msgid "8 bits not supported by driver, converting to 16 bits.\n" msgstr "8 bitov nepodporované ovládaÄom, konvertujem na 16bitov.\n" -#: src/xine-engine/audio_out.c:1377 +#: src/xine-engine/audio_out.c:1375 msgid "mono not supported by driver, converting to stereo.\n" msgstr "mono nepodporované ovládaÄom, konvertujem na stereo.\n" -#: src/xine-engine/audio_out.c:1383 +#: src/xine-engine/audio_out.c:1381 msgid "stereo not supported by driver, converting to mono.\n" msgstr "stereo nepodporované ovládaÄom, konvertujem na mono.\n" -#: src/xine-engine/audio_out.c:2028 +#: src/xine-engine/audio_out.c:2033 #, fuzzy msgid "method to sync audio and video" msgstr "zvolte metódu synchronizácie audia a videa" -#: src/xine-engine/audio_out.c:2029 +#: src/xine-engine/audio_out.c:2034 msgid "" "When playing audio and video, there are at least two clocks involved: The " "system clock, to which video frames are synchronized and the clock in your " @@ -1493,11 +1529,11 @@ msgid "" "form." msgstr "" -#: src/xine-engine/audio_out.c:2057 +#: src/xine-engine/audio_out.c:2062 msgid "enable resampling" msgstr "" -#: src/xine-engine/audio_out.c:2058 +#: src/xine-engine/audio_out.c:2063 msgid "" "When the sample rate of the decoded audio does not match the capabilities of " "your sound hardware, an adaptation called \"resampling\" is required. Here " @@ -1505,34 +1541,34 @@ msgid "" "automatically when necessary." msgstr "" -#: src/xine-engine/audio_out.c:2065 +#: src/xine-engine/audio_out.c:2070 #, fuzzy msgid "always resample to this rate (0 to disable)" msgstr "ak !=0 vždy prevzorkovaÅ¥ na zvolenú frekv." -#: src/xine-engine/audio_out.c:2066 +#: src/xine-engine/audio_out.c:2071 msgid "" "Some audio drivers do not correctly announce the capabilities of the audio " "hardware. By setting a value other than zero here, you can force the audio " "stream to be resampled to the given rate." msgstr "" -#: src/xine-engine/audio_out.c:2075 +#: src/xine-engine/audio_out.c:2080 msgid "offset for digital passthrough" msgstr "" -#: src/xine-engine/audio_out.c:2076 +#: src/xine-engine/audio_out.c:2081 msgid "" "If you use an external surround decoder and audio is ahead or behind video, " "you can enter a fixed offset here to compensate.\n" "The unit of the value is one PTS tick, which is the 90000th part of a second." msgstr "" -#: src/xine-engine/audio_out.c:2085 +#: src/xine-engine/audio_out.c:2090 msgid "play audio even on slow/fast speeds" msgstr "" -#: src/xine-engine/audio_out.c:2086 +#: src/xine-engine/audio_out.c:2091 msgid "" "If you enable this option, the audio will be heard even when playback speed " "is different than 1X. Of course, it will sound distorted (lower/higher " @@ -1540,31 +1576,32 @@ msgid "" "audio post plugin instead." msgstr "" -#: src/xine-engine/audio_out.c:2157 +#: src/xine-engine/audio_out.c:2162 #, fuzzy msgid "startup audio volume" msgstr "HlasitosÅ¥" -#: src/xine-engine/audio_out.c:2158 +#: src/xine-engine/audio_out.c:2163 #, fuzzy msgid "The overall audio volume set at xine startup." msgstr "obnoviÅ¥ úroveň hlasitosti pri Å¡tarte" -#: src/xine-engine/audio_out.c:2161 +#: src/xine-engine/audio_out.c:2166 msgid "restore volume level at startup" msgstr "obnoviÅ¥ úroveň hlasitosti pri Å¡tarte" -#: src/xine-engine/audio_out.c:2162 +#: src/xine-engine/audio_out.c:2167 #, fuzzy msgid "If disabled, xine will not modify any mixer settings at startup." msgstr "" "ak toto nie je nastavené, xine sa nedotkne pri Å¡tarte nastavenia mixéru" -#: src/xine-engine/audio_out.c:2192 +#: src/xine-engine/audio_out.c:2197 msgid "audio_out: sorry, this should not happen. please restart xine.\n" msgstr "audio_out: prepáÄ, toto sa nemalo staÅ¥, prosÃm reÅ¡tartuj xine.\n" #: src/xine-engine/load_plugins.c:212 +#, c-format msgid "map_decoder_list: no space for decoder, skipped.\n" msgstr "" @@ -1607,7 +1644,7 @@ msgid "load_plugins: plugin %s found\n" msgstr "load_plugins: nájdený modul: %s\n" #: src/xine-engine/load_plugins.c:499 -#, fuzzy +#, fuzzy, c-format msgid "load_plugins: static plugin found\n" msgstr "load_plugins: nájdený modul: %s\n" @@ -1617,7 +1654,7 @@ msgid "load_plugins: plugin limit reached, %s could not be loaded\n" msgstr "load_plugins: nájdený modul: %s\n" #: src/xine-engine/load_plugins.c:509 -#, fuzzy +#, fuzzy, c-format msgid "load_plugins: plugin limit reached, static plugin could not be loaded\n" msgstr "load_plugins: nájdený modul: %s\n" @@ -1783,12 +1820,12 @@ msgid "" msgstr "" "výstupný video modul xine použitÃm SyncFB modulu pre Matrox G200/G400 karty" -#: src/video_out/video_out_syncfb.c:1077 +#: src/video_out/video_out_syncfb.c:1078 #, fuzzy msgid "SyncFB device name" msgstr "názov OSS audio zariadenia" -#: src/video_out/video_out_syncfb.c:1078 +#: src/video_out/video_out_syncfb.c:1079 msgid "" "Specifies the file name for the SyncFB (TeleTux) device to be used.\n" "This setting is security critical, because when changed to a different file, " @@ -1801,50 +1838,50 @@ msgid "xine video output plugin using the Libstk Surface Set-top Toolkit" msgstr "výstupný video modul použitÃm Libstk Surface Set-top Toolkit" #: src/video_out/video_out_xvmc.c:1446 src/video_out/video_out_pgx64.c:1464 -#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1436 +#: src/video_out/video_out_xxmc.c:2430 src/video_out/video_out_xv.c:1437 #, fuzzy msgid "video overlay colour key" msgstr "Dx3: hodnota kľúÄovej farby prekrývánia" #: src/video_out/video_out_xvmc.c:1447 src/video_out/video_out_xxmc.c:2431 #: src/video_out/video_out_vidix.c:1159 src/video_out/video_out_vidix.c:1166 -#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1437 +#: src/video_out/video_out_vidix.c:1173 src/video_out/video_out_xv.c:1438 msgid "" "The colour key is used to tell the graphics card where to overlay the video " "image. Try different values, if you experience windows becoming transparent." msgstr "" #: src/video_out/video_out_xvmc.c:1455 src/video_out/video_out_xxmc.c:2439 -#: src/video_out/video_out_xv.c:1445 +#: src/video_out/video_out_xv.c:1446 #, fuzzy msgid "autopaint colour key" msgstr "DonútiÅ¥ Xv automaticky kresliÅ¥ svojou kľúÄovou farbou" #: src/video_out/video_out_xvmc.c:1456 src/video_out/video_out_xxmc.c:2440 -#: src/video_out/video_out_xv.c:1446 +#: src/video_out/video_out_xv.c:1447 #, fuzzy msgid "Make Xv autopaint its colorkey." msgstr "DonútiÅ¥ Xv automaticky kresliÅ¥ svojou kľúÄovou farbou" #: src/video_out/video_out_xvmc.c:1461 src/video_out/video_out_xxmc.c:2463 -#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1469 +#: src/video_out/video_out_vidix.c:1015 src/video_out/video_out_xv.c:1470 #: src/video_out/video_out_opengl.c:1918 msgid "enable double buffering" msgstr "" #: src/video_out/video_out_xvmc.c:1462 src/video_out/video_out_xxmc.c:2464 -#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1470 +#: src/video_out/video_out_vidix.c:1016 src/video_out/video_out_xv.c:1471 msgid "" "Double buffering will synchronize the update of the video image to the " "repainting of the entire screen (\"vertical retrace\"). This eliminates " "flickering and tearing artifacts, but will use more graphics memory." msgstr "" -#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1537 +#: src/video_out/video_out_xvmc.c:1524 src/video_out/video_out_xv.c:1538 msgid "deinterlace method (deprecated)" msgstr "" -#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1538 +#: src/video_out/video_out_xvmc.c:1525 src/video_out/video_out_xv.c:1539 msgid "" "This config setting is deprecated. You should use the new deinterlacing post " "processing settings instead.\n" @@ -2069,12 +2106,12 @@ msgstr "" "video_out_xv: použÃvam Xv port %ld z adaptéru %s pre hardvérovú konverziu " "farebného priestoru a Å¡kálovania.\n" -#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1453 +#: src/video_out/video_out_xxmc.c:2447 src/video_out/video_out_xv.c:1454 #, fuzzy msgid "bilinear scaling mode" msgstr "bilinearny Å¡kálovacà mód (permedia 2/3)" -#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1454 +#: src/video_out/video_out_xxmc.c:2448 src/video_out/video_out_xv.c:1455 msgid "" "Selects the bilinear scaling mode for Permedia cards. The individual values " "are:\n" @@ -2099,11 +2136,11 @@ msgstr "video_out_xv: tento adaptér podporuje yv12 formát.\n" msgid "video_out_xxmc: this adaptor supports the yuy2 format.\n" msgstr "video_out_xv: tento adaptér podporuje yuy2 formát.\n" -#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1530 +#: src/video_out/video_out_xxmc.c:2532 src/video_out/video_out_xv.c:1531 msgid "pitch alignment workaround" msgstr "" -#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1531 +#: src/video_out/video_out_xxmc.c:2533 src/video_out/video_out_xv.c:1532 msgid "Some buggy video drivers need a workaround to function properly." msgstr "" @@ -2149,7 +2186,7 @@ msgid "" "Alternate between top and bottom field at double the frame rate.\n" msgstr "" -#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1611 +#: src/video_out/video_out_xxmc.c:2613 src/video_out/video_out_xv.c:1612 msgid "xine video output plugin using the MIT X video extension" msgstr "výstupný video xine modul použitÃm MIT X video rozÅ¡Ãrenia" @@ -2298,11 +2335,11 @@ msgstr "" "video_out_xv: x11 chyba pri vytváranà zdielanej pamäte XImage\n" "video_out_xv: => nepoužÃvam rozÅ¡Ãrenie MIT Shared Memory.\n" -#: src/video_out/video_out_xv.c:1282 +#: src/video_out/video_out_xv.c:1283 msgid "video_out_xv: Xv extension not present.\n" msgstr "video_out_xv: Xv rozÅ¡Ãrenie neprÃtomné.\n" -#: src/video_out/video_out_xv.c:1319 +#: src/video_out/video_out_xv.c:1320 msgid "" "video_out_xv: Xv extension is present but I couldn't find a usable yuv12 " "port.\n" @@ -2312,7 +2349,7 @@ msgstr "" "port.\n" " Vyzerá to tak, že vaÅ¡a grafická karta nepodoruje Xv?!\n" -#: src/video_out/video_out_xv.c:1328 +#: src/video_out/video_out_xv.c:1329 #, c-format msgid "" "video_out_xv: using Xv port %ld from adaptor %s for hardware colorspace " @@ -2321,11 +2358,11 @@ msgstr "" "video_out_xv: použÃvam Xv port %ld z adaptéru %s pre hardvérovú konverziu " "farebného priestoru a Å¡kálovania.\n" -#: src/video_out/video_out_xv.c:1503 +#: src/video_out/video_out_xv.c:1504 msgid "video_out_xv: this adaptor supports the yv12 format.\n" msgstr "video_out_xv: tento adaptér podporuje yv12 formát.\n" -#: src/video_out/video_out_xv.c:1508 +#: src/video_out/video_out_xv.c:1509 msgid "video_out_xv: this adaptor supports the yuy2 format.\n" msgstr "video_out_xv: tento adaptér podporuje yuy2 formát.\n" @@ -2587,74 +2624,74 @@ msgid "" "\"=disabled)." msgstr "" -#: src/video_out/video_out_directfb.c:1509 +#: src/video_out/video_out_directfb.c:1516 msgid "video_out_directfb: using hardware subpicture acceleration.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1523 +#: src/video_out/video_out_directfb.c:1530 #, fuzzy msgid "video_out_directfb: layer supports video output.\n" msgstr "video_out_vidix: karta podporuje yuy2 formát\n" -#: src/video_out/video_out_directfb.c:1532 +#: src/video_out/video_out_directfb.c:1539 #, fuzzy msgid "video_out_directfb: layer doesn't support YV12!\n" msgstr "video_out_syncfb: info. (SyncFB modul podporuje YUY2)\n" -#: src/video_out/video_out_directfb.c:1539 +#: src/video_out/video_out_directfb.c:1546 #, fuzzy msgid "video_out_directfb: layer doesn't support YUY2!\n" msgstr "video_out_syncfb: info. (SyncFB modul podporuje YUY2)\n" -#: src/video_out/video_out_directfb.c:1550 +#: src/video_out/video_out_directfb.c:1557 msgid "" "video_out_directfb:need at least DirectFB 0.9.25 to play on this layer!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1585 +#: src/video_out/video_out_directfb.c:1592 #, c-format msgid "video_out_directfb: layer doesn't support buffermode %d!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1591 +#: src/video_out/video_out_directfb.c:1598 #, c-format msgid "video_out_directfb: layer doesn't support options 0x%08x!\n" msgstr "" -#: src/video_out/video_out_directfb.c:1685 +#: src/video_out/video_out_directfb.c:1692 msgid "video_out_directfb: using hardware accelerated image scaling.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1697 +#: src/video_out/video_out_directfb.c:1704 msgid "" "video_out_directfb: image scaling with deinterlacing is hardware " "accelerated.\n" msgstr "" -#: src/video_out/video_out_directfb.c:1775 +#: src/video_out/video_out_directfb.c:1782 msgid "video layer id (auto: -1)" msgstr "" -#: src/video_out/video_out_directfb.c:1776 +#: src/video_out/video_out_directfb.c:1783 msgid "Select the video output layer by its id." msgstr "" -#: src/video_out/video_out_directfb.c:1797 -#: src/video_out/video_out_directfb.c:2006 +#: src/video_out/video_out_directfb.c:1804 +#: src/video_out/video_out_directfb.c:2013 #, fuzzy, c-format msgid "video_out_directfb: using display layer #%d.\n" msgstr "video_out_vidix: použÃvam ovládaÄ: %s od %s\n" -#: src/video_out/video_out_directfb.c:1881 +#: src/video_out/video_out_directfb.c:1888 #, fuzzy msgid "xine video output plugin using DirectFB." msgstr "výstupný modul xine s použitÃm DirectFB knižnice." -#: src/video_out/video_out_directfb.c:1999 +#: src/video_out/video_out_directfb.c:2006 msgid "video_out_directfb: no usable display layer was found!\n" msgstr "" -#: src/video_out/video_out_directfb.c:2088 +#: src/video_out/video_out_directfb.c:2095 #, fuzzy msgid "xine video output plugin using DirectFB under XDirectFB." msgstr "výstupný modul xine s použitÃm DirectFB knižnice." @@ -2673,20 +2710,20 @@ msgstr "video_out_dxr3: Zlyhalo otvorenie video zariadenia %s (%s)\n" msgid "video_out_pgx32: Error: '%s' is not a pgx32 framebuffer device\n" msgstr "" -#: src/libmusepack/xine_decoder.c:237 +#: src/libmusepack/xine_decoder.c:241 #, c-format msgid "libmusepack: mpc_streaminfo_read failed: %d\n" msgstr "" -#: src/libmusepack/xine_decoder.c:311 +#: src/libmusepack/xine_decoder.c:315 msgid "libmusepack: data after last frame ignored\n" msgstr "" -#: src/libmusepack/xine_decoder.c:322 +#: src/libmusepack/xine_decoder.c:326 msgid "libmusepack: mpc_decoder_initialise failed\n" msgstr "" -#: src/libmusepack/xine_decoder.c:342 src/libmusepack/xine_decoder.c:357 +#: src/libmusepack/xine_decoder.c:346 src/libmusepack/xine_decoder.c:361 #, c-format msgid "libmusepack: mpc_decoder_decode failed: %d\n" msgstr "" @@ -2763,16 +2800,16 @@ msgstr "Vertikálny posun titulkov (vzhľadom k velkosti okna)" msgid "encoding of subtitles" msgstr "Kódovanie titulkov" -#: src/input/vcd/vcdio.c:211 +#: src/input/vcd/vcdio.c:223 #, fuzzy msgid "SEEK_CUR not implemented for non-zero offset" msgstr "SEEK_CUR neimplementované pre nenulové offsety" -#: src/input/vcd/vcdio.c:239 +#: src/input/vcd/vcdio.c:251 msgid "SEEK_END not implemented yet." msgstr "SEEK_END neimplementované zatiaľ." -#: src/input/vcd/vcdio.c:242 +#: src/input/vcd/vcdio.c:254 msgid "seek not implemented yet for" msgstr "skok neimplementovaný zatiaľ pre" @@ -2780,52 +2817,52 @@ msgstr "skok neimplementovaný zatiaľ pre" msgid "failed to find a device with a VCD" msgstr "zlyhalo hľadanie zariadenia s VCD" -#: src/input/vcd/xineplug_inp_vcd.c:327 +#: src/input/vcd/xineplug_inp_vcd.c:328 msgid "was passed a null class parameter" msgstr "bol poslaný parameter neznámej triedy" -#: src/input/vcd/xineplug_inp_vcd.c:967 +#: src/input/vcd/xineplug_inp_vcd.c:972 msgid "Invalid current entry type" msgstr "Neplatný typ aktuálnej položky" -#: src/input/vcd/xineplug_inp_vcd.c:991 +#: src/input/vcd/xineplug_inp_vcd.c:996 msgid "" "Video CD plugin with PBC and support for: (X)VCD, (X)SVCD, HQVCD, CVD ... " msgstr "Video CD modul s PBC a podporou pre: (X)VCD, (X)SVCD, HQVCD, CVD ... " -#: src/input/vcd/xineplug_inp_vcd.c:1092 +#: src/input/vcd/xineplug_inp_vcd.c:1097 #, fuzzy msgid "selection has no RETURN entry" msgstr "výber nemá Äaľšiu položku" -#: src/input/vcd/xineplug_inp_vcd.c:1121 +#: src/input/vcd/xineplug_inp_vcd.c:1126 msgid "DEFAULT selected, but PBC is not on." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1126 +#: src/input/vcd/xineplug_inp_vcd.c:1131 #, fuzzy msgid "selection has no NEXT entry" msgstr "výber nemá Äaľšiu položku" -#: src/input/vcd/xineplug_inp_vcd.c:1134 +#: src/input/vcd/xineplug_inp_vcd.c:1139 #, fuzzy msgid "selection has no PREVIOUS entry" msgstr "výber nemá Äaľšiu položku" -#: src/input/vcd/xineplug_inp_vcd.c:1141 +#: src/input/vcd/xineplug_inp_vcd.c:1146 msgid "Unknown event type: " msgstr "UdalosÅ¥ neznámeho typu: " -#: src/input/vcd/xineplug_inp_vcd.c:1441 src/input/vcd/xineplug_inp_vcd.c:1488 +#: src/input/vcd/xineplug_inp_vcd.c:1446 src/input/vcd/xineplug_inp_vcd.c:1493 msgid "The above message had unknown vcdimager log level" msgstr "Vyššie uvedená správa má neznámu log. úroveň vcdimageru" -#: src/input/vcd/xineplug_inp_vcd.c:1819 +#: src/input/vcd/xineplug_inp_vcd.c:1824 #, fuzzy msgid "VCD default type to use on autoplay" msgstr "predvolený typ, ktorý sa použije na automat. prehratie VCD" -#: src/input/vcd/xineplug_inp_vcd.c:1820 +#: src/input/vcd/xineplug_inp_vcd.c:1825 #, fuzzy msgid "" "The VCD play unit to use when none is specified in an MRL, e.g. vcd:// or " @@ -2834,12 +2871,12 @@ msgstr "" "Jednotka prehrávania, ktorú použiÅ¥, keÄ nie je uvedená v MRL, napr. vcd:// " "alebo vcd:///dev/dvd:" -#: src/input/vcd/xineplug_inp_vcd.c:1830 +#: src/input/vcd/xineplug_inp_vcd.c:1835 #, fuzzy msgid "CD-ROM drive used for VCD when none given" msgstr "predvolené CD zariadenie použité pre VCD, pokiaľ nie je žiadne zadané" -#: src/input/vcd/xineplug_inp_vcd.c:1831 +#: src/input/vcd/xineplug_inp_vcd.c:1836 #, fuzzy msgid "" "What to use if no drive specified. If the setting is empty, xine will scan " @@ -2848,32 +2885,32 @@ msgstr "" "ÄŒo použiÅ¥ ak nie je mechanika zadaná. Ak je zadané niÄ, xine preskenuje CD " "mechaniky." -#: src/input/vcd/xineplug_inp_vcd.c:1841 +#: src/input/vcd/xineplug_inp_vcd.c:1846 #, fuzzy msgid "VCD position slider range" msgstr "rozsah ukazovateľa pozÃcie" -#: src/input/vcd/xineplug_inp_vcd.c:1842 +#: src/input/vcd/xineplug_inp_vcd.c:1847 #, fuzzy msgid "" "range that the stream playback position slider represents playing a VCD." msgstr "Rozsah ukazovateľa pozÃcie prehrávania použitého pri prehrávanÃ." -#: src/input/vcd/xineplug_inp_vcd.c:1850 +#: src/input/vcd/xineplug_inp_vcd.c:1855 #, fuzzy msgid "VCD read-ahead caching?" msgstr "Použijeme keÅ¡ovanie predÄÃtanÃm?" -#: src/input/vcd/xineplug_inp_vcd.c:1851 +#: src/input/vcd/xineplug_inp_vcd.c:1856 msgid "Class may lead to jerky playback on low-end machines." msgstr "Na slabÅ¡Ãch strojoch by mohlo viesÅ¥ k trhanému prehrávaniu" -#: src/input/vcd/xineplug_inp_vcd.c:1861 +#: src/input/vcd/xineplug_inp_vcd.c:1866 #, fuzzy msgid "automatically advance VCD track/entry" msgstr "Automaticky postupovaÅ¥ po stopách/položkách?" -#: src/input/vcd/xineplug_inp_vcd.c:1862 +#: src/input/vcd/xineplug_inp_vcd.c:1867 #, fuzzy msgid "" "If enabled, we should automatically advance to the next entry or track. Used " @@ -2882,24 +2919,24 @@ msgstr "" "Ak je povolené, mali by sme automaticky postúpiÅ¥ na Äaľšiu položku alebo " "stopu. Použité iba ak nie je zapnutá kontola prehrávania (PBC)." -#: src/input/vcd/xineplug_inp_vcd.c:1871 +#: src/input/vcd/xineplug_inp_vcd.c:1876 #, fuzzy msgid "show 'rejected' VCD LIDs" msgstr "ZobraziÅ¥ 'odmietnuté' LID?" -#: src/input/vcd/xineplug_inp_vcd.c:1872 +#: src/input/vcd/xineplug_inp_vcd.c:1877 msgid "" "Some playback list IDs (LIDs) are marked not showable, but you can see them " "in the MRL list if this is set. Rejected entries are marked with an asterisk " "(*) appended to the MRL." msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1883 +#: src/input/vcd/xineplug_inp_vcd.c:1888 #, fuzzy msgid "VCD format string for display banner" msgstr "formát reÅ¥azca pre nápis na obrazovke" -#: src/input/vcd/xineplug_inp_vcd.c:1884 +#: src/input/vcd/xineplug_inp_vcd.c:1889 msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " "specifiers start with a percent sign. Specifiers are:\n" @@ -2920,12 +2957,12 @@ msgid "" " %% : a %\n" msgstr "" -#: src/input/vcd/xineplug_inp_vcd.c:1909 +#: src/input/vcd/xineplug_inp_vcd.c:1914 #, fuzzy msgid "VCD format string for stream comment field" msgstr "formátovacà reÅ¥azec pre pole komentáru prúdu dát" -#: src/input/vcd/xineplug_inp_vcd.c:1910 +#: src/input/vcd/xineplug_inp_vcd.c:1915 #, fuzzy msgid "" "VCD format used in the GUI Title. Similar to the Unix date command. Format " @@ -2937,12 +2974,12 @@ msgstr "" "Å pecifikátory formátu zaÄÃnaju znakom percento. Å pecifikátory sú %A, %C, %c, " "%F, %I, %L, %N, %P, %p, %S, %T, %V, %v, and %%." -#: src/input/vcd/xineplug_inp_vcd.c:1922 +#: src/input/vcd/xineplug_inp_vcd.c:1927 #, fuzzy msgid "VCD debug flag mask" msgstr "debugovacia maska prÃznakov" -#: src/input/vcd/xineplug_inp_vcd.c:1923 +#: src/input/vcd/xineplug_inp_vcd.c:1928 msgid "" "For tracking down bugs in the VCD plugin. Mask values are:\n" " 1: Meta information\n" @@ -3086,11 +3123,11 @@ msgid "" "playing DVDs." msgstr "" -#: src/input/input_dvd.c:1803 +#: src/input/input_dvd.c:1804 msgid "raw device set up for DVD access" msgstr "" -#: src/input/input_dvd.c:1804 +#: src/input/input_dvd.c:1805 msgid "" "If this points to a raw device connected to your DVD device, xine will use " "the raw device for playback. This has the advantage of being slightly faster " @@ -3101,23 +3138,23 @@ msgid "" "See the documentation on raw device setup (man raw) for further information." msgstr "" -#: src/input/input_dvd.c:1817 +#: src/input/input_dvd.c:1818 msgid "CSS decryption method" msgstr "" -#: src/input/input_dvd.c:1818 +#: src/input/input_dvd.c:1819 msgid "" "Selects the decryption method libdvdcss will use to descramble copy " "protected DVDs. Try the various methods, if you have problems playing " "scrambled DVDs." msgstr "" -#: src/input/input_dvd.c:1826 +#: src/input/input_dvd.c:1827 #, fuzzy msgid "path to the title key cache" msgstr "cesta k video zariadeniu v4l" -#: src/input/input_dvd.c:1827 +#: src/input/input_dvd.c:1828 msgid "" "Since cracking the copy protection of scrambled DVDs can be quite time " "consuming, libdvdcss will cache the cracked keys in this directory.\n" @@ -3126,45 +3163,45 @@ msgid "" "used for anything but DVD key caching." msgstr "" -#: src/input/input_dvd.c:1849 +#: src/input/input_dvd.c:1850 msgid "region the DVD player claims to be in (1 to 8)" msgstr "" -#: src/input/input_dvd.c:1850 +#: src/input/input_dvd.c:1851 msgid "" "This only needs to be changed if your DVD jumps to a screen complaining " "about a wrong region code. It has nothing to do with the region code set in " "DVD drives, this is purely software." msgstr "" -#: src/input/input_dvd.c:1856 +#: src/input/input_dvd.c:1857 msgid "default language for DVD playback" msgstr "" -#: src/input/input_dvd.c:1857 +#: src/input/input_dvd.c:1858 msgid "" "xine tries to use this language as a default for DVD playback. As far as the " "DVD supports it, menus and audio tracks will be presented in this language.\n" "The value must be a two character ISO639 language code." msgstr "" -#: src/input/input_dvd.c:1863 +#: src/input/input_dvd.c:1864 #, fuzzy msgid "read-ahead caching" msgstr "Použijeme keÅ¡ovanie predÄÃtanÃm?" -#: src/input/input_dvd.c:1864 +#: src/input/input_dvd.c:1865 msgid "" "xine can use a read ahead cache for DVD drive access.\n" "This may lead to jerky playback on slow drives, but it improves the impact " "of the DVD layer change on faster drives." msgstr "" -#: src/input/input_dvd.c:1870 +#: src/input/input_dvd.c:1871 msgid "unit for the skip action" msgstr "" -#: src/input/input_dvd.c:1871 +#: src/input/input_dvd.c:1872 msgid "" "You can configure the behaviour when issuing a skip command (using the skip " "buttons for example). The individual values mean:\n" @@ -3183,11 +3220,11 @@ msgid "" "features on the DVD" msgstr "" -#: src/input/input_dvd.c:1886 +#: src/input/input_dvd.c:1887 msgid "unit for seeking" msgstr "" -#: src/input/input_dvd.c:1887 +#: src/input/input_dvd.c:1888 msgid "" "You can configure the domain spanned by the seek slider. The individual " "values mean:\n" @@ -3201,11 +3238,11 @@ msgid "" "chapter of the current feature" msgstr "" -#: src/input/input_dvd.c:1898 +#: src/input/input_dvd.c:1899 msgid "play mode when title/chapter is given" msgstr "" -#: src/input/input_dvd.c:1899 +#: src/input/input_dvd.c:1900 msgid "" "You can configure the behaviour when playing a dvd from a given title/" "chapter (eg. using MRL 'dvd:/1.2'). The individual values mean:\n" @@ -3362,29 +3399,29 @@ msgstr "" msgid "DVB (Digital TV) input plugin" msgstr "DVB (Digital TV) vstupný modul" -#: src/input/input_dvb.c:3238 +#: src/input/input_dvb.c:3237 msgid "Remember last DVB channel watched" msgstr "" -#: src/input/input_dvb.c:3239 +#: src/input/input_dvb.c:3238 msgid "" "On autoplay, xine will remember and switch to the channel indicated in media." "dvb.last_channel. " msgstr "" -#: src/input/input_dvb.c:3246 +#: src/input/input_dvb.c:3245 msgid "Last DVB channel viewed" msgstr "" -#: src/input/input_dvb.c:3247 +#: src/input/input_dvb.c:3246 msgid "If enabled xine will remember and switch to this channel. " msgstr "" -#: src/input/input_dvb.c:3253 +#: src/input/input_dvb.c:3252 msgid "Number of dvb card to use." msgstr "" -#: src/input/input_dvb.c:3254 +#: src/input/input_dvb.c:3253 msgid "" "Leave this at zero unless you really have more than 1 card in your system." msgstr "" @@ -3504,76 +3541,76 @@ msgid "" "A value of zero here will disable the slowdown." msgstr "" -#: src/input/input_rtp.c:182 +#: src/input/input_rtp.c:185 #, c-format msgid "socket(): %s.\n" msgstr "socket(): %s.\n" -#: src/input/input_rtp.c:192 +#: src/input/input_rtp.c:195 msgid "IP address specified is multicast\n" msgstr "Å pecifikovaná IP adresa je multicast\n" -#: src/input/input_rtp.c:201 +#: src/input/input_rtp.c:204 #, c-format msgid "setsockopt(SO_RCVBUF): %s.\n" msgstr "setsockopt(SO_RCVBUF): %s.\n" -#: src/input/input_rtp.c:209 +#: src/input/input_rtp.c:212 #, c-format msgid "setsockopt(SO_REUSEADDR): %s.\n" msgstr "setsockopt(SO_REUSEADDR): %s.\n" -#: src/input/input_rtp.c:216 +#: src/input/input_rtp.c:219 #, c-format msgid "bind(): %s.\n" msgstr "bind(): %s.\n" -#: src/input/input_rtp.c:236 +#: src/input/input_rtp.c:239 #, c-format msgid "Can't find address for iface %s:%s\n" msgstr "Nemôžem nájsÅ¥ adresu rozhrania %s:%s\n" -#: src/input/input_rtp.c:254 +#: src/input/input_rtp.c:257 #, c-format msgid "setsockopt(IP_ADD_MEMBERSHIP) failed (multicast kernel?): %s.\n" msgstr "" "zlyhala funkcia setsockopt(IP_ADD_MEMBERSHIG) (kernel s podporou " "multicastingu?): %s.\n" -#: src/input/input_rtp.c:276 +#: src/input/input_rtp.c:279 #, c-format msgid "unable to resolve '%s'.\n" msgstr "nemožno zistiÅ¥ adresu '%s'.\n" -#: src/input/input_rtp.c:286 +#: src/input/input_rtp.c:289 #, c-format msgid "unable to bind to '%s'.\n" msgstr "nemožno sa naviazaÅ¥ k '%s'.\n" -#: src/input/input_rtp.c:314 +#: src/input/input_rtp.c:317 #, c-format msgid "recv(): %s.\n" msgstr "recv(): %s.\n" -#: src/input/input_rtp.c:602 +#: src/input/input_rtp.c:605 msgid "RTP: stopping reading thread...\n" msgstr "RTP: zastavujem ÄÃtacie vlákno...\n" -#: src/input/input_rtp.c:605 +#: src/input/input_rtp.c:608 msgid "RTP: reading thread terminated\n" msgstr "RTP: ÄÃtacie vlákno ukonÄené\n" -#: src/input/input_rtp.c:620 +#: src/input/input_rtp.c:623 #, c-format msgid "Opening >filename:%s port:%d interface:%s<\n" msgstr "Otváranie >súbor:%s port:%d rozhranie:%s<\n" -#: src/input/input_rtp.c:637 +#: src/input/input_rtp.c:640 #, c-format msgid "input_rtp: can't create new thread (%s)\n" msgstr "input_rtp: nemožno vytvoriÅ¥ nové vlákno (%s)\n" -#: src/input/input_rtp.c:743 +#: src/input/input_rtp.c:746 msgid "RTP and UDP input plugin as shipped with xine" msgstr "modul vstupu zo siete protokolom RTP a UDP dodávaný s xine" @@ -3587,16 +3624,28 @@ msgstr "rtsp: zlé mrl: %s\n" msgid "rtsp: failed to connect to '%s'\n" msgstr "rtsp: nemožno sa pripojiÅ¥ k '%s'\n" -#: src/input/librtsp/rtsp_session.c:84 +#: src/input/librtsp/rtsp_session.c:93 src/input/input_mms.c:479 +#, fuzzy +msgid "network bandwidth" +msgstr "SieÅ¥ové prenosové pásmo" + +#: src/input/librtsp/rtsp_session.c:94 src/input/input_mms.c:480 +msgid "" +"Specify the bandwidth of your internet connection here. This will be used " +"when streaming servers offer different versions with different bandwidth " +"requirements of the same stream." +msgstr "" + +#: src/input/librtsp/rtsp_session.c:109 #, c-format msgid "rtsp_session: failed to connect to server %s\n" msgstr "rtsp_session: nemožno sa pripojiÅ¥ k servru %s\n" -#: src/input/librtsp/rtsp_session.c:118 +#: src/input/librtsp/rtsp_session.c:143 msgid "rtsp_session: session can not be established.\n" msgstr "rtsp_session: nemožno zaviesÅ¥ reláciu\n" -#: src/input/librtsp/rtsp_session.c:135 +#: src/input/librtsp/rtsp_session.c:161 #, c-format msgid "rtsp_session: rtsp server type '%s' not supported yet. sorry.\n" msgstr "" @@ -3650,41 +3699,45 @@ msgstr "cesta k rádio zariadeniu v4l" msgid "pnm streaming input plugin" msgstr "modul vstupu z prúdu pnm" -#: src/input/mmsh.c:195 +#: src/input/mmsh.c:201 msgid "libmmsh: send error\n" msgstr "libmmsh: chyba posielania\n" -#: src/input/mmsh.c:240 +#: src/input/mmsh.c:246 +#, c-format msgid "libmmsh: bad response format\n" msgstr "libmmsh: zlý formát odpovede\n" -#: src/input/mmsh.c:246 +#: src/input/mmsh.c:252 #, c-format msgid "libmmsh: 3xx redirection not implemented: >%d %s<\n" msgstr "libmmsh: presmerovanie 3xx nie je implementované: >%d %s<\n" -#: src/input/mmsh.c:253 +#: src/input/mmsh.c:259 #, c-format msgid "libmmsh: http status not 2xx: >%d %s<\n" msgstr "libmmsh: stav http nie je 2xx: >%d %s<\n" -#: src/input/mmsh.c:261 +#: src/input/mmsh.c:267 +#, c-format msgid "libmmsh: Location redirection not implemented\n" msgstr "libmmsh: Presmerovanie umiestnenia nie je implementované\n" -#: src/input/mmsh.c:471 +#: src/input/mmsh.c:476 msgid "Connecting MMS server (over http)..." msgstr "Pripájanie na MMS server (cez http)..." -#: src/input/mmsh.c:639 +#: src/input/mmsh.c:657 +#, c-format msgid "invalid url\n" msgstr "neplatné url\n" -#: src/input/mmsh.c:644 +#: src/input/mmsh.c:662 +#, c-format msgid "unsupported protocol\n" msgstr "nepodporovaný protokol\n" -#: src/input/mms.c:537 +#: src/input/mms.c:561 msgid "Connecting MMS server (over tcp)..." msgstr "Pripájanie k MMS serveru (cez tcp)..." @@ -3706,31 +3759,19 @@ msgstr "input_pnm: nemožno sa pripojiÅ¥ k '%s'\n" msgid "input_pnm: failed to set up stream\n" msgstr "input_pnm: zlyhalo nastavenie prúdu dát\n" -#: src/input/input_smb.c:154 +#: src/input/input_smb.c:158 msgid "CIFS/SMB input plugin based on libsmbclient" msgstr "" -#: src/input/input_mms.c:420 +#: src/input/input_mms.c:443 msgid "mms streaming input plugin" msgstr "modul vstupu zo siete protokolom mms" -#: src/input/input_mms.c:456 -#, fuzzy -msgid "network bandwidth" -msgstr "SieÅ¥ové prenosové pásmo" - -#: src/input/input_mms.c:457 -msgid "" -"Specify the bandwidth of your internet connection here. This will be used " -"when streaming servers offer different versions with different bandwidth " -"requirements of the same stream." -msgstr "" - -#: src/input/input_mms.c:466 +#: src/input/input_mms.c:489 msgid "MMS protocol" msgstr "MMS protokol" -#: src/input/input_mms.c:467 +#: src/input/input_mms.c:490 #, fuzzy msgid "" "Select the protocol to encapsulate MMS.\n" @@ -3744,85 +3785,86 @@ msgstr "" msgid "input_http: gethostbyname(%s) failed: %s\n" msgstr "input_rip: skok zlyhal: %s\n" -#: src/input/input_http.c:403 src/input/input_http.c:949 +#: src/input/input_http.c:400 src/input/input_http.c:941 #, c-format msgid "input_http: read error %d\n" msgstr "input_http: chyba pri ÄÃtanà %d\n" -#: src/input/input_http.c:630 +#: src/input/input_http.c:627 msgid "Connecting HTTP server..." msgstr "Pripájam sa na HTTP server..." -#: src/input/input_http.c:824 +#: src/input/input_http.c:816 +#, c-format msgid "input_http: invalid http answer\n" msgstr "input_http: neplatná odpoveÄ http\n" -#: src/input/input_http.c:831 +#: src/input/input_http.c:823 #, c-format msgid "input_http: 3xx redirection: >%d %s<\n" msgstr "input_http: presmerovanie 3xx: >%d %s<\n" -#: src/input/input_http.c:836 src/input/input_http.c:842 -#: src/input/input_http.c:849 +#: src/input/input_http.c:828 src/input/input_http.c:834 +#: src/input/input_http.c:841 #, c-format msgid "input_http: http status not 2xx: >%d %s<\n" msgstr "input_http: stav http nie je 2xx: >%d %s<\n" -#: src/input/input_http.c:859 +#: src/input/input_http.c:851 #, fuzzy, c-format msgid "input_http: content length = %<PRIdMAX> bytes\n" msgstr "input_http: dĺžka obsahu = %Ld bajtov\n" -#: src/input/input_http.c:928 +#: src/input/input_http.c:920 #, fuzzy, c-format msgid "input_http: buffer exhausted after %d bytes." msgstr "input_http: chyba pri ÄÃtanà %d\n" -#: src/input/input_http.c:1002 +#: src/input/input_http.c:994 msgid "http input plugin" msgstr "modul vstupu zo siete protokolom http" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 #, fuzzy msgid "HTTP proxy host" msgstr "adresa http proxy" -#: src/input/input_http.c:1068 +#: src/input/input_http.c:1060 msgid "The hostname of the HTTP proxy." msgstr "" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 #, fuzzy msgid "HTTP proxy port" msgstr "port http proxy" -#: src/input/input_http.c:1072 +#: src/input/input_http.c:1064 msgid "The port number of the HTTP proxy." msgstr "" -#: src/input/input_http.c:1082 +#: src/input/input_http.c:1074 #, fuzzy msgid "HTTP proxy username" msgstr "meno použÃvateľa pre http proxy" -#: src/input/input_http.c:1083 +#: src/input/input_http.c:1075 msgid "The user name for the HTTP proxy." msgstr "" -#: src/input/input_http.c:1086 +#: src/input/input_http.c:1078 #, fuzzy msgid "HTTP proxy password" msgstr "heslo pre http proxy" -#: src/input/input_http.c:1087 +#: src/input/input_http.c:1079 msgid "The password for the HTTP proxy." msgstr "" -#: src/input/input_http.c:1090 +#: src/input/input_http.c:1082 msgid "Domains for which to ignore the HTTP proxy" msgstr "" -#: src/input/input_http.c:1091 +#: src/input/input_http.c:1083 msgid "" "A comma-separated list of domain names for which the proxy is to be " "ignored.\n" @@ -3835,7 +3877,7 @@ msgstr "" msgid "input_dvd: Device %s failed to open during eject calls\n" msgstr "input_dvd: Zariadenie %s zlyhalo pri otvorenà poÄas volania eject\n" -#: src/input/input_rtsp.c:274 +#: src/input/input_rtsp.c:284 msgid "rtsp streaming input plugin" msgstr "modul vstupu zo siete protokolom rtsp" @@ -3845,73 +3887,86 @@ msgid "dvbsub: cannot create timer thread\n" msgstr "input_rtp: nemožno vytvoriÅ¥ nové vlákno (%s)\n" #: src/libxinevdec/bitplane.c:1272 +#, c-format msgid "bitplane: error doing ByteRun1 decompression\n" msgstr "bitplane: chyba pri ByteRun1 dekomprimácii\n" #: src/libxinevdec/bitplane.c:1331 +#, c-format msgid "bitplane: Anim Opt 1 is not supported at the moment\n" msgstr "bitplane: Anim Opt 1 nie je podporovaný momentálne\n" #: src/libxinevdec/bitplane.c:1338 +#, c-format msgid "bitplane: Anim Opt 2 is not supported at the moment\n" msgstr "bitplane: Anim Opt 2 nie je podporovaný momentálne\n" #: src/libxinevdec/bitplane.c:1388 +#, c-format msgid "bitplane: Anim ASCIIJ is not supported at the moment\n" msgstr "bitplane: Anim ASCIIJ nie je podporovaný momentálne\n" #: src/libxinevdec/bitplane.c:1394 +#, c-format msgid "bitplane: This anim-type is not supported at the moment\n" msgstr "bitplane: Tento anim-typ nie je podporovaný momentálne\n" -#: src/libsputext/demux_sputext.c:1507 +#: src/libsputext/demux_sputext.c:1506 #, fuzzy msgid "default duration of subtitle display in seconds" msgstr "Predvolený Äas na skrytie titulkov v sekundách" -#: src/libsputext/demux_sputext.c:1508 +#: src/libsputext/demux_sputext.c:1507 msgid "" "Some subtitle formats do not explicitly give a duration for each subtitle. " "For these, you can set a default duration here. Setting to zero will result " "in the subtitle being shown until the next one takes over." msgstr "" -#: src/libsputext/xine_decoder.c:913 +#: src/libsputext/xine_decoder.c:948 msgid "subtitle size" msgstr "" -#: src/libsputext/xine_decoder.c:914 +#: src/libsputext/xine_decoder.c:949 msgid "" "You can adjust the subtitle size here. The setting will be evaluated " "relative to the window size." msgstr "" -#: src/libsputext/xine_decoder.c:920 +#: src/libsputext/xine_decoder.c:955 #, fuzzy msgid "subtitle vertical offset" msgstr "Vertikálny posun titulkov (vzhľadom k velkosti okna)" -#: src/libsputext/xine_decoder.c:921 +#: src/libsputext/xine_decoder.c:956 msgid "" "You can adjust the vertical position of the subtitle. The setting will be " "evaluated relative to the window size." msgstr "" -#: src/libsputext/xine_decoder.c:927 +#: src/libsputext/xine_decoder.c:962 src/libsputext/xine_decoder.c:971 #, fuzzy msgid "font for subtitles" msgstr "Font pre externé titulky" -#: src/libsputext/xine_decoder.c:928 +#: src/libsputext/xine_decoder.c:963 msgid "A font from the xine font directory to be used for the subtitle text." msgstr "" -#: src/libsputext/xine_decoder.c:935 +#: src/libsputext/xine_decoder.c:972 +msgid "An outline font file (e.g. a .ttf) to be used for the subtitle text." +msgstr "" + +#: src/libsputext/xine_decoder.c:978 +msgid "whether to use a freetype font" +msgstr "" + +#: src/libsputext/xine_decoder.c:985 #, fuzzy msgid "encoding of the subtitles" msgstr "Kódovanie titulkov" -#: src/libsputext/xine_decoder.c:936 +#: src/libsputext/xine_decoder.c:986 msgid "" "The encoding of the subtitle text in the stream. This setting is used to " "render non-ASCII characters correctly. If non-ASCII characters are not " @@ -3919,12 +3974,12 @@ msgid "" "used." msgstr "" -#: src/libsputext/xine_decoder.c:944 +#: src/libsputext/xine_decoder.c:994 #, fuzzy msgid "use unscaled OSD if possible" msgstr "PoužiÅ¥ OSD bez zmeny mierky, ak je možné" -#: src/libsputext/xine_decoder.c:945 +#: src/libsputext/xine_decoder.c:995 msgid "" "The unscaled OSD will be rendered independently of the video frame and will " "always be sharp, even if the video is magnified. This will look better, but " @@ -4344,12 +4399,12 @@ msgstr "libareal: chutné nastavenie dekódera zlyhalo, kód chyby: 0x%x\n" msgid "libareal: oups, real can do more than 2 channels ?\n" msgstr "libareal: ach, real môže maÅ¥ viac ako 2 kanály ?\n" -#: src/libreal/audio_decoder.c:745 src/libreal/xine_decoder.c:638 +#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 #, fuzzy msgid "path to RealPlayer codecs" msgstr "cesta k real player kódekom, ak sú nainÅ¡talované" -#: src/libreal/audio_decoder.c:746 src/libreal/xine_decoder.c:639 +#: src/libreal/audio_decoder.c:747 src/libreal/xine_decoder.c:640 msgid "" "If you have RealPlayer installed, specify the path to its codec directory " "here. You can easily find the codec directory by looking for a file named " @@ -4836,6 +4891,7 @@ msgid "demux_avi: invalid avi chunk \"%c%c%c%c\" at pos %<PRIdMAX>\n" msgstr "demux_avi: neplatný avi blok \"%c%c%c%c\" na poz. %lld\n" #: src/demuxers/demux_avi.c:828 +#, c-format msgid "demux_avi: avi index is broken\n" msgstr "demux_avi: index avi súboru je poÅ¡kodený\n" @@ -4849,23 +4905,25 @@ msgid "demux_mpc: frame too big for buffer" msgstr "" #: src/demuxers/demux_film.c:188 +#, c-format msgid "invalid FILM chunk size\n" msgstr "neplatná veľkosÅ¥ FILM bloku\n" #: src/demuxers/demux_film.c:342 +#, c-format msgid "unrecognized FILM chunk\n" msgstr "nerozoznaný FILM blok\n" -#: src/demuxers/demux_asf.c:423 +#: src/demuxers/demux_asf.c:425 #, c-format msgid "demux_asf: warning: The stream id=%d is encrypted.\n" msgstr "demux_asf: varovanie: Prúd id=%d je kryptovaný.\n" -#: src/demuxers/demux_asf.c:425 +#: src/demuxers/demux_asf.c:427 msgid "Media stream scrambled/encrypted" msgstr "Media stream scrambled/encrypted" -#: src/demuxers/demux_asf.c:1633 +#: src/demuxers/demux_asf.c:1634 #, c-format msgid "demux_asf: Wrong ASX version: %s\n" msgstr "demux_asf: Zlá verzia ASX: %s\n" @@ -4896,7 +4954,8 @@ msgid "" "unknown VOC compression type (0x%02X); please report to xine developers\n" msgstr "neznáma VOC kompresia typu (0x%02X); prosÃm nahlásiÅ¥ tvorcom xine\n" -#: src/demuxers/demux_ogg.c:797 +#: src/demuxers/demux_ogg.c:801 +#, c-format msgid "ogg: vorbis audio track indicated but no vorbis stream header found.\n" msgstr "" "stopa ogg: vorbis audio indikovaná, ale hlaviÄka vorbis prúdu nenájdená.\n" @@ -4916,6 +4975,7 @@ msgid "" msgstr "demux_mpeg_block: chyba! uvoľňujem. ProsÃm nahláste to tvorcom xine.\n" #: src/demuxers/demux_mpeg_block.c:640 +#, c-format msgid "demux_mpeg_block: warning: PES header reserved 10 bits not found\n" msgstr "" "demux_mpeg_block: varovanie: rezervovaných 10 bit hlaviÄky PES nenajdené\n" @@ -4944,6 +5004,7 @@ msgid "demux_mpeg_pes: warning: PACK stream id=0x%x decode failed.\n" msgstr "demux_mpeg_pes: varovanie: dekódovanie PACK prúdu id=0x%x zlyhalo.\n" #: src/demuxers/demux_mpeg_pes.c:771 +#, c-format msgid "demux_mpeg_pes: warning: PES header reserved 10 bits not found\n" msgstr "" "demux_mpeg_pes: varovanie: rezervovaných 10 bit hlaviÄky PES nenajdené\n" @@ -4972,10 +5033,12 @@ msgid "demux_wc3movie: SHOT chunk referenced invalid palette (%d >= %d)\n" msgstr "demux_wc3movie: SHOT blok refercoval neznámu paletu (%d >= %d)\n" #: src/demuxers/demux_wc3movie.c:406 +#, c-format msgid "demux_wc3movie: There was a problem while loading palette chunks\n" msgstr "demux_wc3movie: Bol problém pri nahrávanà blokov palety\n" #: src/demuxers/demux_snd.c:104 +#, c-format msgid "demux_snd: bad header parameters\n" msgstr "demux_snd: zlé parametre hlaviÄky\n" @@ -5025,63 +5088,63 @@ msgstr "Dxr3enc: Maximálny kvantizér" msgid "The maximum compression to apply to an image in constant quality mode." msgstr "" -#: src/libffmpeg/audio_decoder.c:117 +#: src/libffmpeg/audio_decoder.c:120 #, c-format msgid "ffmpeg_audio_dec: increasing buffer to %d to avoid overflow.\n" msgstr "ffmpeg_audio_dec: zväÄÅ¡ujem buffer na %d aby sa prediÅ¡lo preteÄeniu.\n" -#: src/libffmpeg/audio_decoder.c:161 +#: src/libffmpeg/audio_decoder.c:164 #, c-format msgid "ffmpeg_audio_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "ffmpeg_audio_dec: nenaÅ¡iel ffmpeg dekóder pre buf typu 0x%X\n" -#: src/libffmpeg/audio_decoder.c:253 +#: src/libffmpeg/audio_decoder.c:256 #, fuzzy msgid "ffmpeg_audio_dec: trying to open null codec\n" msgstr "ffmpeg_audio_dec: nemôžem otvoriÅ¥ dekóder\n" -#: src/libffmpeg/audio_decoder.c:262 +#: src/libffmpeg/audio_decoder.c:265 msgid "ffmpeg_audio_dec: couldn't open decoder\n" msgstr "ffmpeg_audio_dec: nemôžem otvoriÅ¥ dekóder\n" -#: src/libffmpeg/dvaudio_decoder.c:302 +#: src/libffmpeg/dvaudio_decoder.c:286 #, fuzzy, c-format msgid "dvaudio: increasing buffer to %d to avoid overflow.\n" msgstr "ffmpeg_audio_dec: zväÄÅ¡ujem buffer na %d aby sa prediÅ¡lo preteÄeniu.\n" -#: src/libffmpeg/video_decoder.c:153 +#: src/libffmpeg/video_decoder.c:156 msgid "ffmpeg_video_dec: unsupported frame format, DR1 disabled.\n" msgstr "ffmpeg_video_dec: nepodporovaný formát snÃmku, DR1 nepovolený.\n" -#: src/libffmpeg/video_decoder.c:171 +#: src/libffmpeg/video_decoder.c:174 #, fuzzy msgid "ffmpeg_video_dec: unsupported frame dimensions, DR1 disabled.\n" msgstr "ffmpeg_video_dec: nepodporovaný formát snÃmku, DR1 nepovolený.\n" -#: src/libffmpeg/video_decoder.c:319 +#: src/libffmpeg/video_decoder.c:334 #, c-format msgid "ffmpeg_video_dec: couldn't find ffmpeg decoder for buf type 0x%X\n" msgstr "ffmpeg_video_dec: nenájdený ffmpeg dekóder pre buf typu 0x%X\n" -#: src/libffmpeg/video_decoder.c:348 +#: src/libffmpeg/video_decoder.c:363 msgid "ffmpeg_video_dec: couldn't open decoder\n" msgstr "ffmpeg_video_dec: nedá sa otvoriÅ¥ dekóder\n" -#: src/libffmpeg/video_decoder.c:383 +#: src/libffmpeg/video_decoder.c:398 msgid "ffmpeg_video_dec: direct rendering enabled\n" msgstr "ffmpeg_video_dec: priame vykreslovanie zapnuté\n" -#: src/libffmpeg/video_decoder.c:802 +#: src/libffmpeg/video_decoder.c:817 #, c-format msgid "ffmpeg_video_dec: increasing buffer to %d to avoid overflow.\n" msgstr "ffmpeg_video_dec: zväÄÅ¡ujem buffer na %d aby sa prediÅ¡lo preteÄeniu.\n" -#: src/libffmpeg/video_decoder.c:1474 +#: src/libffmpeg/video_decoder.c:1510 #, fuzzy msgid "MPEG-4 postprocessing quality" msgstr "kvalita ffmpeg mpeg-4 postspracovania" -#: src/libffmpeg/video_decoder.c:1475 +#: src/libffmpeg/video_decoder.c:1511 msgid "" "You can adjust the amount of post processing applied to MPEG-4 video.\n" "Higher values result in better quality, but need more CPU. Lower values may " diff --git a/src/.cvsignore b/src/.hgignore index 282522db0..282522db0 100644 --- a/src/.cvsignore +++ b/src/.hgignore diff --git a/src/Makefile.am b/src/Makefile.am index 67fbc38b8..0d5621593 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -30,4 +30,5 @@ SUBDIRS = \ libfaad \ libflac \ libmusepack \ - post + post \ + combined diff --git a/src/audio_out/.cvsignore b/src/audio_out/.hgignore index 7d926a554..7d926a554 100644 --- a/src/audio_out/.cvsignore +++ b/src/audio_out/.hgignore diff --git a/src/audio_out/Makefile.am b/src/audio_out/Makefile.am index 445622765..d52f700f3 100644 --- a/src/audio_out/Makefile.am +++ b/src/audio_out/Makefile.am @@ -94,7 +94,7 @@ xineplug_ao_out_oss_la_CFLAGS = $(VISIBILITY_FLAG) xineplug_ao_out_oss_la_LDFLAGS = -avoid-version -module xineplug_ao_out_alsa_la_SOURCES = audio_alsa_out.c -xineplug_ao_out_alsa_la_LIBADD = $(ALSA_LIBS) $(XINE_LIB) +xineplug_ao_out_alsa_la_LIBADD = $(ALSA_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) xineplug_ao_out_alsa_la_CFLAGS = $(VISIBILITY_FLAG) $(ALSA_CFLAGS) xineplug_ao_out_alsa_la_LDFLAGS = -avoid-version -module @@ -104,6 +104,7 @@ xineplug_ao_out_esd_la_CFLAGS = $(VISIBILITY_FLAG) $(ESD_CFLAGS) xineplug_ao_out_esd_la_LDFLAGS = -avoid-version -module xineplug_ao_out_sun_la_SOURCES = audio_sun_out.c +xineplug_ao_out_sun_la_LIBADD = $(XINE_LIB) xineplug_ao_out_sun_la_CFLAGS = $(VISIBILITY_FLAG) xineplug_ao_out_sun_la_LDFLAGS = -avoid-version -module @@ -113,7 +114,7 @@ xineplug_ao_out_sun_la_LDFLAGS = -avoid-version -module #xineplug_ao_out_irixal_la_LDFLAGS = -avoid-version -module xineplug_ao_out_arts_la_SOURCES = audio_arts_out.c -xineplug_ao_out_arts_la_LIBADD = $(ARTS_LIBS) +xineplug_ao_out_arts_la_LIBADD = $(ARTS_LIBS) $(XINE_LIB) xineplug_ao_out_arts_la_CFLAGS = $(VISIBILITY_FLAG) $(ARTS_CFLAGS) xineplug_ao_out_arts_la_LDFLAGS = -avoid-version -module @@ -140,7 +141,7 @@ xineplug_ao_out_pulseaudio_la_LDFLAGS = -avoid-version -module xineplug_ao_out_directx2_la_SOURCES = audio_directx2_out.c xineplug_ao_out_directx2_la_CPPFLAGS = $(DIRECTX_CPPFLAGS) -xineplug_ao_out_directx2_la_LIBADD = $(XINE_LIB) $(DIRECTX_AUDIO_LIBS) $(THREAD_LIBS) +xineplug_ao_out_directx2_la_LIBADD = $(XINE_LIB) $(DIRECTX_AUDIO_LIBS) $(PTHREAD_LIBS) xineplug_ao_out_directx2_la_CFLAGS = $(VISIBILITY_FLAG) xineplug_ao_out_directx2_la_LDFLAGS = -avoid-version -module diff --git a/src/audio_out/audio_alsa_out.c b/src/audio_out/audio_alsa_out.c index da8b87fc5..3651d21da 100644 --- a/src/audio_out/audio_alsa_out.c +++ b/src/audio_out/audio_alsa_out.c @@ -26,7 +26,7 @@ * (c) 2001 James Courtier-Dutton <James@superbug.demon.co.uk> * * - * $Id: audio_alsa_out.c,v 1.165 2006/09/08 20:40:34 miguelfreitas Exp $ + * $Id: audio_alsa_out.c,v 1.168 2007/02/25 22:33:25 miguelfreitas Exp $ */ #ifdef HAVE_CONFIG_H @@ -162,7 +162,6 @@ static int my_snd_mixer_wait(snd_mixer_t *mixer, int timeout) { static void *ao_alsa_handle_event_thread(void *data) { alsa_driver_t *this = (alsa_driver_t *) data; - this->mixer.running = 1; do { if(my_snd_mixer_wait(this->mixer.handle, 333) > 0) { @@ -665,6 +664,15 @@ static int ao_alsa_delay (ao_driver_t *this_gen) { printf("audio_alsa_out:delay:ENTERED\n"); #endif err=snd_pcm_delay( this->audio_fd, &delay ); + + int state = snd_pcm_state(this->audio_fd); + + /* check for idle states, which need to be handled as delay=0 */ + if(state == SND_PCM_STATE_PREPARED || state == SND_PCM_STATE_PAUSED || + state == SND_PCM_STATE_OPEN || SND_PCM_STATE_XRUN) { + return 0; + } + #ifdef LOG_DEBUG printf("audio_alsa_out:delay:delay all=%ld err=%d\n",delay, err); gettimeofday(&now, 0); @@ -1292,6 +1300,8 @@ static void ao_alsa_mixer_init(ao_driver_t *this_gen) { if (send_events && found) { pthread_attr_t pth_attrs; struct sched_param pth_params; + + this->mixer.running = 1; pthread_attr_init(&pth_attrs); @@ -1321,7 +1331,7 @@ static ao_driver_t *open_plugin (audio_driver_class_t *class_gen, const void *da char *pcm_device; snd_pcm_hw_params_t *params; /* for usability reasons, keep this in sync with audio_oss_out.c */ - static char *speaker_arrangement[] = {"Mono 1.0", "Stereo 2.0", "Headphones 2.0", "Stereo 2.1", + static const char *speaker_arrangement[] = {"Mono 1.0", "Stereo 2.0", "Headphones 2.0", "Stereo 2.1", "Surround 3.0", "Surround 4.0", "Surround 4.1", "Surround 5.0", "Surround 5.1", "Surround 6.0", "Surround 6.1", "Surround 7.1", "Pass Through", NULL}; #define MONO 0 @@ -1504,6 +1514,13 @@ static ao_driver_t *open_plugin (audio_driver_class_t *class_gen, const void *da this->capabilities |= AO_CAP_FLOAT32; xprintf(class->xine, XINE_VERBOSITY_LOG, _("32bit ")); } + if (0 == (this->capabilities & (AO_CAP_FLOAT32 | AO_CAP_24BITS | AO_CAP_16BITS | AO_CAP_8BITS))) { + xprintf (this->class->xine, XINE_VERBOSITY_DEBUG, + "\naudio_alsa_out: no supported PCM format found\n"); + snd_pcm_close(this->audio_fd); + free(this); + return NULL; + } if (!(snd_pcm_hw_params_test_channels(this->audio_fd, params, 1))) { this->capabilities |= AO_CAP_MODE_MONO; xprintf(class->xine, XINE_VERBOSITY_LOG, _("mono ")); diff --git a/src/audio_out/audio_coreaudio_out.c b/src/audio_out/audio_coreaudio_out.c index 80cab6d71..22f53c0ef 100644 --- a/src/audio_out/audio_coreaudio_out.c +++ b/src/audio_out/audio_coreaudio_out.c @@ -265,7 +265,9 @@ static int ao_coreaudio_open(ao_driver_t *this_gen, uint32_t bits, uint32_t rate format.mSampleRate = rate; format.mFormatID = kAudioFormatLinearPCM; format.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger +#ifdef WORDS_BIGENDIAN | kLinearPCMFormatFlagIsBigEndian +#endif | kLinearPCMFormatFlagIsPacked; format.mBitsPerChannel = this->bits_per_sample; format.mChannelsPerFrame = this->num_channels; diff --git a/src/audio_out/audio_fusionsound_out.c b/src/audio_out/audio_fusionsound_out.c index 1a6f44972..71a17f6e6 100644 --- a/src/audio_out/audio_fusionsound_out.c +++ b/src/audio_out/audio_fusionsound_out.c @@ -262,6 +262,12 @@ static uint32_t ao_fusionsound_get_capabilities(ao_driver_t *ao_driver) { static void ao_fusionsound_exit(ao_driver_t *ao_driver) { fusionsound_driver_t *this = (fusionsound_driver_t *) ao_driver; + if (this->playback) + this->playback->Release (this->playback); + + if (this->stream) + this->stream->Release (this->stream); + if (this->sound) this->sound->Release (this->sound); diff --git a/src/audio_out/audio_oss_out.c b/src/audio_out/audio_oss_out.c index 366fa250c..793b47650 100644 --- a/src/audio_out/audio_oss_out.c +++ b/src/audio_out/audio_oss_out.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_oss_out.c,v 1.117 2006/07/16 16:18:09 dsalt Exp $ + * $Id: audio_oss_out.c,v 1.120 2007/03/17 06:59:31 dgp85 Exp $ * * 20-8-2001 First implementation of Audio sync and Audio driver separation. * Copyright (C) 2001 James Courtier-Dutton James@superbug.demon.co.uk @@ -48,20 +48,19 @@ #include <fcntl.h> #include <math.h> #include <unistd.h> -#if defined(__OpenBSD__) -# include <soundcard.h> -#elif defined (__FreeBSD__) -# if __FreeBSD__ < 4 -# include <machine/soundcard.h> -# else -# include <sys/soundcard.h> -# endif -#else -# include <sys/soundcard.h> -#endif #include <sys/ioctl.h> #include <inttypes.h> +#ifdef HAVE_SYS_SOUNDCARD_H +# include <sys/soundcard.h> +#endif +#ifdef HAVE_MACHINE_SOUNDCARD_H +# include <sys/soundcard.h> +#endif +#ifdef HAVE_SOUNDCARD_H +# include <soundcard.h> +#endif + #define LOG_MODULE "audio_oss_out" #define LOG_VERBOSE /* @@ -75,9 +74,18 @@ #include <sys/time.h> +#ifndef SNDCTL_DSP_SETFMT +/* Deprecated OSS API */ +#define SNDCTL_DSP_SETFMT SOUND_PCM_SETFMT +#endif + +#ifndef SNDCTL_DSP_SPEED +/* Deprecated OSS API */ +#define SNDCTL_DSP_SPEED SOUND_PCM_WRITE_RATE +#endif + #ifndef AFMT_S16_NE -# if defined(sparc) || defined(__sparc__) || defined(PPC) -/* Big endian machines */ +# ifdef WORDS_BIGENDIAN # define AFMT_S16_NE AFMT_S16_BE # else # define AFMT_S16_NE AFMT_S16_LE @@ -515,7 +523,7 @@ static int ao_oss_get_property (ao_driver_t *this_gen, int property) { if(!this->mixer.mute) { if(this->mixer.fd != -1) { - int cmd = 0; + IOCTL_REQUEST_TYPE cmd = 0; int v; ioctl(this->mixer.fd, SOUND_MIXER_READ_DEVMASK, &audio_devs); @@ -554,7 +562,7 @@ static int ao_oss_set_property (ao_driver_t *this_gen, int property, int value) if(!this->mixer.mute) { if(this->mixer.fd != -1) { - int cmd = 0; + IOCTL_REQUEST_TYPE cmd = 0; int v; ioctl(this->mixer.fd, SOUND_MIXER_READ_DEVMASK, &audio_devs); @@ -583,7 +591,7 @@ static int ao_oss_set_property (ao_driver_t *this_gen, int property, int value) if(this->mixer.mute) { if(this->mixer.fd != -1) { - int cmd = 0; + IOCTL_REQUEST_TYPE cmd = 0; int v = 0; ioctl(this->mixer.fd, SOUND_MIXER_READ_DEVMASK, &audio_devs); @@ -789,9 +797,9 @@ static ao_driver_t *open_plugin (audio_driver_class_t *class_gen, const void *da */ arg = AFMT_S16_NE; - status = ioctl(audio_fd, SOUND_PCM_SETFMT, &arg); + status = ioctl(audio_fd, SNDCTL_DSP_SETFMT, &arg); arg = 44100; - status = ioctl(audio_fd, SOUND_PCM_WRITE_RATE, &arg); + status = ioctl(audio_fd, SNDCTL_DSP_SPEED, &arg); /* * find out which sync method to use @@ -903,12 +911,12 @@ static ao_driver_t *open_plugin (audio_driver_class_t *class_gen, const void *da this->capabilities = 0; arg = AFMT_U8; - if( ioctl(audio_fd, SOUND_PCM_SETFMT, &arg) != -1 && arg == AFMT_U8) + if( ioctl(audio_fd, SNDCTL_DSP_SETFMT, &arg) != -1 && arg == AFMT_U8) this->capabilities |= AO_CAP_8BITS; /* switch back to 16bits, because some soundcards otherwise do not report all their capabilities */ arg = AFMT_S16_NE; - if (ioctl(audio_fd, SOUND_PCM_SETFMT, &arg) == -1 || arg != AFMT_S16_NE) { + if (ioctl(audio_fd, SNDCTL_DSP_SETFMT, &arg) == -1 || arg != AFMT_S16_NE) { xprintf(class->xine, XINE_VERBOSITY_DEBUG, "audio_oss_out: switching the soundcard to 16 bits mode failed\n"); free(this); close(audio_fd); diff --git a/src/audio_out/audio_pulse_out.c b/src/audio_out/audio_pulse_out.c index 2cef1992d..9e6089730 100644 --- a/src/audio_out/audio_pulse_out.c +++ b/src/audio_out/audio_pulse_out.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2000-2006 the xine project + * Copyright (C) 2000-2007 the xine project * * This file is part of xine, a free video player. * @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_pulse_out.c,v 1.5 2006/11/10 12:10:54 dgp85 Exp $ + * $Id: audio_pulse_out.c,v 1.17 2007/04/01 00:32:29 dgp85 Exp $ * * ao plugin for pulseaudio (rename of polypaudio): * http://0pointer.de/lennart/projects/pulsaudio/ @@ -40,12 +40,9 @@ #include <math.h> #include <unistd.h> #include <inttypes.h> -#include <assert.h> #include <pthread.h> #include <pulse/pulseaudio.h> -#include <pulse/error.h> -#include <pulse/mainloop.h> #include "xine_internal.h" #include "xineutils.h" @@ -57,78 +54,146 @@ /* CHECKME: should this be conditional on autotools? */ extern const char *__progname; -typedef struct pulse_driver_s { +typedef struct { + audio_driver_class_t driver_class; + xine_t *xine; - ao_driver_t ao_driver; + pthread_mutex_t pa_mutex; /*< Mutex controlling PulseAudio access. */ + struct pa_context *context; /*< Pulseaudio connection context */ + struct pa_threaded_mainloop *mainloop; /*< Main event loop object */ +} pulse_class_t; - xine_t *xine; +typedef struct pulse_driver_s { + ao_driver_t ao_driver; + xine_t *xine; - /** The host to connect to */ - char *host; + pulse_class_t *pa_class; - /** The sink to connect to */ - char *sink; + char *host; /*< The host to connect to */ + char *sink; /*< The sink to connect to */ + struct pa_stream *stream; /*< Pulseaudio playback stream object */ - /** Pulseaudio playback stream object */ - struct pa_stream *stream; + pa_volume_t swvolume; + pa_cvolume cvolume; - /** Pulseaudio connection context */ - struct pa_context *context; + int capabilities; + int mode; - /** Main event loop object */ - struct pa_mainloop *mainloop; + int32_t sample_rate; + uint32_t num_channels; + uint32_t bits_per_sample; + uint32_t bytes_per_frame; - pa_volume_t swvolume; - pa_cvolume cvolume; + uint32_t frames_written; - int capabilities; - int mode; +} pulse_driver_t; - int32_t sample_rate; - uint32_t num_channels; - uint32_t bits_per_sample; - uint32_t bytes_per_frame; +/** + * @brief Callback function called when a stream operation succeed + * @param stream Stream which operation has succeeded + * @param success The success value for the operation (ignored) + * @param this_Gen pulse_driver_t pointer for the PulseAudio output + * instance. + */ +static void __xine_pa_stream_success_callback(pa_stream *const stream, const int success, + void *const this_gen) +{ + pulse_driver_t *const this = (pulse_driver_t*)this_gen; - uint32_t frames_written; + _x_assert(stream); _x_assert(this); + _x_assert(stream == this->stream); - pthread_mutex_t lock; + pa_threaded_mainloop_signal(this->pa_class->mainloop, 0); +} -} pulse_driver_t; +/** + * @brief Callback function called when the state of the context is changed + * @param ctx Context which operation has succeeded + * @param this_gen pulse_driver_t pointer for the PulseAudio output + * instance. + */ +static void __xine_pa_context_status_callback(pa_context *const ctx, void *const this_gen) +{ + pulse_driver_t *const this = (pulse_driver_t*)this_gen; -typedef struct { - audio_driver_class_t driver_class; + _x_assert(ctx); _x_assert(this); + _x_assert(ctx == this->pa_class->context); - xine_t *xine; -} pulse_class_t; + switch (pa_context_get_state(ctx)) { + case PA_CONTEXT_READY: + case PA_CONTEXT_TERMINATED: + case PA_CONTEXT_FAILED: + pa_threaded_mainloop_signal(this->pa_class->mainloop, 0); + break; + case PA_CONTEXT_CONNECTING: + case PA_CONTEXT_UNCONNECTED: + case PA_CONTEXT_AUTHORIZING: + case PA_CONTEXT_SETTING_NAME: + break; + } +} + +/** + * @brief Callback function called when a context operation succeed + * @param ctx Context which operation has succeeded + * @param success The success value for the operation (ignored) + * @param this_gen pulse_driver_t pointer for the PulseAudio output + * instance. + */ +static void __xine_pa_context_success_callback(pa_context *const ctx, const int success, + void *const this_gen) +{ + pulse_driver_t *const this = (pulse_driver_t*)this_gen; -/** Make sure that the connection context doesn't starve to death */ -static void keep_alive(pulse_driver_t *this) { - assert(this->context && this->mainloop); + _x_assert(ctx); _x_assert(this); + _x_assert(ctx == this->pa_class->context); - while (pa_mainloop_iterate(this->mainloop, 0, NULL) > 0); + pa_threaded_mainloop_signal(this->pa_class->mainloop, 0); } -/** Wait until no further actions are pending on the connection context */ -static void wait_for_completion(pulse_driver_t *this) { - assert(this->context && this->mainloop); +/** + * @brief Callback function called when the information on the + * context's sink is retrieved. + * @param ctx Context which operation has succeeded + * @param info Structure containing the sink's information + * @param this_gen pulse_driver_t pointer for the PulseAudio output + * instance. + * + * This function saves the volume field of the passed structure to the + * @c cvolume variable of the output instance. + */ +static void __xine_pa_sink_info_callback(pa_context *const ctx, const pa_sink_input_info *const info, + const int is_last, void *const userdata) { + + pulse_driver_t *const this = (pulse_driver_t *) userdata; - while (pa_context_is_pending(this->context)) { - int r = pa_mainloop_iterate(this->mainloop, 1, NULL); - assert(r >= 0); + if (is_last < 0) { + xprintf (this->xine, XINE_VERBOSITY_DEBUG, "audio_pulse_out: Failed to get sink input info: %s\n", + pa_strerror(pa_context_errno(this->pa_class->context))); + return; } + + if (!info) + return; + + this->cvolume = info->volume; + + __xine_pa_context_success_callback(ctx, 0, this); } -/** Wait until the specified operation completes */ -static void wait_for_operation(pulse_driver_t *this, struct pa_operation *o) { - assert(o && this->context && this->mainloop); +static int wait_for_operation(pulse_driver_t *this, pa_operation *o) +{ + _x_assert(this && o && this->pa_class->mainloop); - while (pa_operation_get_state(o) == PA_OPERATION_RUNNING) { - int r = pa_mainloop_iterate(this->mainloop, 1, NULL); - assert(r >= 0); - } + pa_threaded_mainloop_lock(this->pa_class->mainloop); + + while (pa_operation_get_state(o) == PA_OPERATION_RUNNING) + pa_threaded_mainloop_wait(this->pa_class->mainloop); + + pa_threaded_mainloop_unlock(this->pa_class->mainloop); - pa_operation_unref(o); + return 0; } /* @@ -140,6 +205,7 @@ static int ao_pulse_open(ao_driver_t *this_gen, pulse_driver_t *this = (pulse_driver_t *) this_gen; struct pa_sample_spec ss; struct pa_buffer_attr a; + pa_stream_state_t streamstate; xprintf (this->xine, XINE_VERBOSITY_DEBUG, "audio_pulse_out: ao_open bits=%d rate=%d, mode=%d\n", bits, rate, mode); @@ -171,68 +237,85 @@ static int ao_pulse_open(ao_driver_t *this_gen, ss.format = PA_SAMPLE_U8; break; case 16: -#ifdef WORDS_BIGENDIAN - ss.format = PA_SAMPLE_S16BE; -#else - ss.format = PA_SAMPLE_S16LE; -#endif + ss.format = PA_SAMPLE_S16NE; break; case 32: - ss.format = PA_SAMPLE_FLOAT32; + ss.format = PA_SAMPLE_FLOAT32NE; break; } - pthread_mutex_lock(&this->lock); - if (!pa_sample_spec_valid(&ss)) { xprintf (this->xine, XINE_VERBOSITY_DEBUG, "audio_pulse_out: Invalid sample spec\n"); goto fail; } - this->mainloop = pa_mainloop_new(); - assert(this->mainloop); + pthread_mutex_lock(&this->pa_class->pa_mutex); + if ( this->pa_class->context && pa_context_get_state(this->pa_class->context) > PA_CONTEXT_READY ) { + pa_context_unref(this->pa_class->context); + this->pa_class->context = NULL; + } + + if ( this->pa_class->context == NULL ) { + this->pa_class->context = pa_context_new(pa_threaded_mainloop_get_api(this->pa_class->mainloop), + __progname); + } + + pa_context_ref(this->pa_class->context); + + if ( pa_context_get_state(this->pa_class->context) == PA_CONTEXT_UNCONNECTED ) { + int ret; - this->context = pa_context_new(pa_mainloop_get_api(this->mainloop), __progname); - assert(this->context); + pa_threaded_mainloop_lock(this->pa_class->mainloop); + ret = pa_context_connect(this->pa_class->context, this->host, 1, NULL); + if ( ret < 0 ) + goto fail; - pa_context_connect(this->context, this->host, 1, NULL); + pa_context_set_state_callback(this->pa_class->context, __xine_pa_context_status_callback, this); - wait_for_completion(this); + pa_threaded_mainloop_wait(this->pa_class->mainloop); + pa_threaded_mainloop_unlock(this->pa_class->mainloop); + } - if (pa_context_get_state(this->context) != PA_CONTEXT_READY) { + if (pa_context_get_state(this->pa_class->context) != PA_CONTEXT_READY) { xprintf (this->xine, XINE_VERBOSITY_DEBUG, "audio_pulse_out: Failed to connect to server: %s\n", - pa_strerror(pa_context_errno(this->context))); + pa_strerror(pa_context_errno(this->pa_class->context))); goto fail; } - this->stream = pa_stream_new(this->context, "audio stream", &ss, NULL); - assert(this->stream); + this->stream = pa_stream_new(this->pa_class->context, "audio stream", &ss, NULL); + _x_assert(this->stream); a.maxlength = pa_bytes_per_second(&ss)*1; a.tlength = a.maxlength*9/10; a.prebuf = a.tlength/2; a.minreq = a.tlength/10; - pa_cvolume_set(&this->cvolume, pa_stream_get_sample_spec(this->stream)->channels, this->swvolume); pa_stream_connect_playback(this->stream, this->sink, &a, PA_STREAM_INTERPOLATE_TIMING|PA_STREAM_AUTO_TIMING_UPDATE, - &this->cvolume, NULL); + NULL, NULL); - wait_for_completion(this); + do { + xine_usec_sleep (100); - if (pa_stream_get_state(this->stream) != PA_STREAM_READY) { - xprintf (this->xine, XINE_VERBOSITY_DEBUG, "audio_pulse_out: Failed to connect to server: %s\n", - pa_strerror(pa_context_errno(this->context))); + streamstate = pa_stream_get_state(this->stream); + } while (streamstate < PA_STREAM_READY); + + pthread_mutex_unlock(&this->pa_class->pa_mutex); + + if (streamstate != PA_STREAM_READY) { + xprintf (this->xine, XINE_VERBOSITY_LOG, "audio_pulse_out: Failed to connect to server: %s\n", + pa_strerror(pa_context_errno(this->pa_class->context))); goto fail; } - pthread_mutex_unlock(&this->lock); - this->frames_written = 0; + this->ao_driver.set_property(this, AO_PROP_PCM_VOL, 100); + return this->sample_rate; fail: - pthread_mutex_unlock(&this->lock); + pa_threaded_mainloop_unlock(this->pa_class->mainloop); + pthread_mutex_unlock(&this->pa_class->pa_mutex); this_gen->close(this_gen); return 0; } @@ -262,22 +345,16 @@ static int ao_pulse_write(ao_driver_t *this_gen, int16_t *data, int size = num_frames * this->bytes_per_frame; int ret = 0; - assert(this->stream && this->context); - - pthread_mutex_lock(&this->lock); - - if (pa_stream_get_state(this->stream) == PA_STREAM_READY) { + if ( !this->stream || !this->pa_class->context) + return -1; + switch( pa_stream_get_state(this->stream) ) { + case PA_STREAM_READY: while (size > 0) { size_t l; - keep_alive(this); - while (!(l = pa_stream_writable_size(this->stream))) { - pthread_mutex_unlock(&this->lock); xine_usec_sleep (10000); - pthread_mutex_lock(&this->lock); - keep_alive(this); } if (l > size) @@ -286,16 +363,15 @@ static int ao_pulse_write(ao_driver_t *this_gen, int16_t *data, pa_stream_write(this->stream, data, l, NULL, 0, PA_SEEK_RELATIVE); data = (int16_t *) ((uint8_t*) data + l); size -= l; - - wait_for_completion(this); } this->frames_written += num_frames; if (pa_stream_get_state(this->stream) == PA_STREAM_READY) ret = 1; + + break; } - pthread_mutex_unlock(&this->lock); return ret; } @@ -307,20 +383,25 @@ static int ao_pulse_delay (ao_driver_t *this_gen) pa_usec_t latency = 0; int delay_frames; - pthread_mutex_lock(&this->lock); + if ( ! this->stream ) return this->frames_written; - for (;;) { - if (pa_stream_get_latency(this->stream, &latency, NULL) >= 0) - break; + pthread_mutex_lock(&this->pa_class->pa_mutex); - if (pa_context_errno(this->context) != PA_ERR_NODATA) { - /* error */ - } - keep_alive(this); - } + if (pa_stream_get_latency(this->stream, &latency, NULL) < 0) { + pa_context_unref(this->pa_class->context); + this->pa_class->context = NULL; - pthread_mutex_unlock(&this->lock); + pa_stream_disconnect(this->stream); + pa_stream_unref(this->stream); + this->stream = NULL; + + pthread_mutex_unlock(&this->pa_class->pa_mutex); + return 0; + } + + pthread_mutex_unlock(&this->pa_class->pa_mutex); + /* convert latency (us) to frame units. */ delay_frames = (int)(latency * this->sample_rate / 1000000); @@ -334,26 +415,19 @@ static void ao_pulse_close(ao_driver_t *this_gen) { pulse_driver_t *this = (pulse_driver_t *) this_gen; - pthread_mutex_lock(&this->lock); if (this->stream) { + pthread_mutex_lock(&this->pa_class->pa_mutex); + if (pa_stream_get_state(this->stream) == PA_STREAM_READY) - wait_for_operation(this, pa_stream_drain(this->stream, NULL, NULL)); + wait_for_operation(this, pa_stream_drain(this->stream, __xine_pa_stream_success_callback, this)); pa_stream_disconnect(this->stream); pa_stream_unref(this->stream); this->stream = NULL; - } - if (this->context) { - pa_context_disconnect(this->context); - pa_context_unref(this->context); - this->context = NULL; - } + pa_context_unref(this->pa_class->context); - if (this->mainloop) { - pa_mainloop_free(this->mainloop); - this->mainloop = NULL; + pthread_mutex_unlock(&this->pa_class->pa_mutex); } - pthread_mutex_unlock(&this->lock); } static uint32_t ao_pulse_get_capabilities (ao_driver_t *this_gen) { @@ -368,101 +442,124 @@ static void ao_pulse_exit(ao_driver_t *this_gen) free (this); } -/** A callback function that is called when the - * pa_context_get_sink_input_info() operation completes. Saves the - * volume field of the specified structure to the global variable volume. */ -static void info_func(struct pa_context *c, const struct pa_sink_input_info *i, int is_last, void *userdata) { - - pulse_driver_t *this = (pulse_driver_t *) userdata; - if (is_last < 0) { - xprintf (this->xine, XINE_VERBOSITY_DEBUG, "audio_pulse_out: Failed to get sink input info: %s\n", - pa_strerror(pa_context_errno(this->context))); - return; - } - - if (!i) - return; - - this->cvolume = i->volume; -} - - static int ao_pulse_get_property (ao_driver_t *this_gen, int property) { pulse_driver_t *this = (pulse_driver_t *) this_gen; + int result = 0; + + if ( ! this->stream || ! this->pa_class->context ) + return 0; + pthread_mutex_lock(&this->pa_class->pa_mutex); + switch(property) { case AO_PROP_PCM_VOL: case AO_PROP_MIXER_VOL: - pthread_mutex_lock(&this->lock); - if( this->stream && this->context ) - wait_for_operation(this, - pa_context_get_sink_input_info(this->context, pa_stream_get_index(this->stream), info_func, this)); - pthread_mutex_unlock(&this->lock); - return (int) (pa_sw_volume_to_linear(this->swvolume)*100); + { + pa_operation *o = pa_context_get_sink_input_info(this->pa_class->context, + pa_stream_get_index(this->stream), + __xine_pa_sink_info_callback, this); + if ( ! o ) return 0; + wait_for_operation(this, o); + + result = (pa_sw_volume_to_linear(this->swvolume)*100); + } break; + case AO_PROP_MUTE_VOL: + result = pa_cvolume_is_muted(&this->cvolume); break; } - return 0; + pthread_mutex_unlock(&this->pa_class->pa_mutex); + + return result; } static int ao_pulse_set_property (ao_driver_t *this_gen, int property, int value) { pulse_driver_t *this = (pulse_driver_t *) this_gen; + int result = ~value; + + if ( ! this->stream || ! this->pa_class->context ) + return result; + + pthread_mutex_lock(&this->pa_class->pa_mutex); switch(property) { case AO_PROP_PCM_VOL: case AO_PROP_MIXER_VOL: - pthread_mutex_lock(&this->lock); this->swvolume = pa_sw_volume_from_linear((double)value/100.0); - if( this->stream && this->context ) { - pa_cvolume_set(&this->cvolume, pa_stream_get_sample_spec(this->stream)->channels, this->swvolume); - wait_for_operation(this, - pa_context_set_sink_input_volume(this->context, pa_stream_get_index(this->stream), - &this->cvolume, NULL, NULL)); - } - pthread_mutex_unlock(&this->lock); + pa_cvolume_set(&this->cvolume, pa_stream_get_sample_spec(this->stream)->channels, this->swvolume); + wait_for_operation(this, + pa_context_set_sink_input_volume(this->pa_class->context, pa_stream_get_index(this->stream), + &this->cvolume, __xine_pa_context_success_callback, this)); + + result = value; break; + case AO_PROP_MUTE_VOL: + if ( value ) + pa_cvolume_mute(&this->cvolume, pa_stream_get_sample_spec(this->stream)->channels); + else + pa_cvolume_set(&this->cvolume, pa_stream_get_sample_spec(this->stream)->channels, this->swvolume); + + wait_for_operation(this, + pa_context_set_sink_input_volume(this->pa_class->context, pa_stream_get_index(this->stream), + &this->cvolume, __xine_pa_context_success_callback, this)); + + result = value; break; } - return 0; + pthread_mutex_unlock(&this->pa_class->pa_mutex); + + return result; } static int ao_pulse_ctrl(ao_driver_t *this_gen, int cmd, ...) { pulse_driver_t *this = (pulse_driver_t *) this_gen; - pthread_mutex_lock(&this->lock); + if ( ! this->stream ) return 0; + switch (cmd) { case AO_CTRL_PLAY_PAUSE: - assert(this->stream && this->context ); + _x_assert(this->stream && this->pa_class->context ); + + pthread_mutex_lock(&this->pa_class->pa_mutex); if(pa_stream_get_state(this->stream) == PA_STREAM_READY) - wait_for_operation(this,pa_stream_cork(this->stream, 1, NULL, NULL)); + wait_for_operation(this,pa_stream_cork(this->stream, 1, __xine_pa_stream_success_callback, this)); + pthread_mutex_unlock(&this->pa_class->pa_mutex); + break; case AO_CTRL_PLAY_RESUME: - assert(this->stream && this->context); + _x_assert(this->stream && this->pa_class->context); + + pthread_mutex_lock(&this->pa_class->pa_mutex); if(pa_stream_get_state(this->stream) == PA_STREAM_READY) { struct pa_operation *o2, *o1; - o1 = pa_stream_prebuf(this->stream, NULL, NULL); - o2 = pa_stream_cork(this->stream, 0, NULL, NULL); - assert(o1 && o2); - wait_for_operation(this,o1); - wait_for_operation(this,o2); - wait_for_completion(this); + o1 = pa_stream_prebuf(this->stream, __xine_pa_stream_success_callback, this); + _x_assert(o1); wait_for_operation(this, o1); + + o2 = pa_stream_cork(this->stream, 0, __xine_pa_stream_success_callback, this); + _x_assert(o2); wait_for_operation(this,o2); } + pthread_mutex_unlock(&this->pa_class->pa_mutex); + break; case AO_CTRL_FLUSH_BUFFERS: - assert(this->stream && this->context); + _x_assert(this->stream && this->pa_class->context); + + pthread_mutex_lock(&this->pa_class->pa_mutex); if(pa_stream_get_state(this->stream) == PA_STREAM_READY) - wait_for_operation(this,pa_stream_flush(this->stream, NULL, NULL)); + wait_for_operation(this,pa_stream_flush(this->stream, __xine_pa_stream_success_callback, this)); + pthread_mutex_unlock(&this->pa_class->pa_mutex); + this->frames_written = 0; + break; } - pthread_mutex_unlock(&this->lock); return 0; } @@ -470,7 +567,6 @@ static int ao_pulse_ctrl(ao_driver_t *this_gen, int cmd, ...) { static ao_driver_t *open_plugin (audio_driver_class_t *class_gen, const void *data) { pulse_class_t *class = (pulse_class_t *) class_gen; pulse_driver_t *this; - char hn[128]; char *device; lprintf ("audio_pulse_out: open_plugin called\n"); @@ -490,7 +586,8 @@ static ao_driver_t *open_plugin (audio_driver_class_t *class_gen, const void *da AO_CAP_16BITS | AO_CAP_FLOAT32; this->sample_rate = 0; - this->swvolume = PA_VOLUME_NORM; + this->host = NULL; + this->sink = NULL; this->ao_driver.get_capabilities = ao_pulse_get_capabilities; this->ao_driver.get_property = ao_pulse_get_property; @@ -514,35 +611,27 @@ static ao_driver_t *open_plugin (audio_driver_class_t *class_gen, const void *da 10, NULL, NULL); - if (device && strlen(device)) { - int i = strcspn(device, ":"); - if (i >= sizeof(hn)) - i = sizeof(hn)-1; - - if (i > 0) { - strncpy(this->host = hn, device, i); - hn[i] = 0; - } - - if (device[i] == ':') - this->sink = device+i+1; + if (device && *device) { + char *sep = strchr(device, ':'); + if ( sep ) { + this->host = strndup(device, sep-device); + this->sink = strdup(&sep[1]); + } else + this->host = strdup(device); } xprintf (class->xine, XINE_VERBOSITY_DEBUG, "audio_pulse_out: host %s sink %s\n", this->host ? this->host : "(null)", this->sink ? this->sink : "(null)"); - pthread_mutex_init (&this->lock, NULL); - - /* test pulseaudio connection */ - if( this->ao_driver.open(&this->ao_driver, 16, 44100, AO_CAP_MODE_STEREO) != 0 ) { - this->ao_driver.close(&this->ao_driver); - } else { - free(this); - xprintf (class->xine, XINE_VERBOSITY_DEBUG, "audio_pulse_out: open_plugin failed.\n"); - return NULL; - } + this->pa_class = class; return &this->ao_driver; + + fail: + pthread_mutex_unlock(&this->pa_class->pa_mutex); + free(this); + xprintf (class->xine, XINE_VERBOSITY_DEBUG, "audio_pulse_out: open_plugin failed.\n"); + return NULL; } /* @@ -561,6 +650,15 @@ static void dispose_class (audio_driver_class_t *this_gen) { pulse_class_t *this = (pulse_class_t *) this_gen; + pthread_mutex_lock(&this->pa_mutex); + + if ( this->context ) + pa_context_unref(this->context); + + pa_threaded_mainloop_stop(this->mainloop); + pa_threaded_mainloop_free(this->mainloop); + + pthread_mutex_destroy(&this->pa_mutex); free (this); } @@ -581,6 +679,18 @@ static void *init_class (xine_t *xine, void *data) { this->xine = xine; + pthread_mutex_init(&this->pa_mutex, NULL); + pthread_mutex_lock(&this->pa_mutex); + + this->mainloop = pa_threaded_mainloop_new(); + _x_assert(this->mainloop); + + pa_threaded_mainloop_start(this->mainloop); + + this->context = NULL; + + pthread_mutex_unlock(&this->pa_mutex); + return this; } @@ -598,3 +708,4 @@ const plugin_info_t xine_plugin_info[] EXPORTED = { { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; + diff --git a/src/audio_out/audio_sun_out.c b/src/audio_out/audio_sun_out.c index 95e38d811..93361d2f3 100644 --- a/src/audio_out/audio_sun_out.c +++ b/src/audio_out/audio_sun_out.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_sun_out.c,v 1.45 2006/07/16 16:18:09 dsalt Exp $ + * $Id: audio_sun_out.c,v 1.47 2007/03/10 00:55:14 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -41,13 +41,20 @@ #ifdef __svr4__ #include <stropts.h> #endif +#include <sys/param.h> + +#if (defined(BSD) && BSD >= 199306) +typedef unsigned uint_t; +#endif #include "xine_internal.h" #include "xineutils.h" #include "audio_out.h" +#ifdef __svr4__ #define CS4231_WORKAROUND 1 /* enable workaround for audiocs play.samples bug */ #define SW_SAMPLE_COUNT 1 +#endif #ifndef AUDIO_CHANNELS_MONO @@ -89,7 +96,9 @@ typedef struct sun_driver_s { uint32_t num_channels; int bytes_per_frame; +#ifdef __svr4__ uint32_t frames_in_buffer; /* number of frames writen to audio hardware */ +#endif enum { RTSC_UNKNOWN = 0, @@ -114,12 +123,14 @@ typedef struct sun_driver_s { unsigned buf_len; #endif +#ifdef __svr4__ #if SW_SAMPLE_COUNT struct timeval tv0; uint_t sample0; #endif uint_t last_samplecnt; +#endif } sun_driver_t; @@ -129,6 +140,7 @@ typedef struct sun_driver_s { */ static int realtime_samplecounter_available(xine_t *xine, char *dev) { +#ifdef __svr4__ int fd = -1; audio_info_t info; int rtsc_ok = RTSC_DISABLED; @@ -247,6 +259,9 @@ error: } return rtsc_ok; +#else + return RTSC_ENABLED; +#endif } @@ -430,7 +445,9 @@ static int ao_sun_open(ao_driver_t *this_gen, this->mode = mode; this->input_sample_rate = rate; +#ifdef __svr4__ this->frames_in_buffer = 0; +#endif /* * open audio device @@ -462,6 +479,9 @@ static int ao_sun_open(ao_driver_t *this_gen, info.play.sample_rate = this->input_sample_rate; info.play.eof = 0; info.play.samples = 0; +#ifndef __svr4__ + info.blocksize = 1024; +#endif this->convert_u8_s8 = 0; @@ -523,7 +543,9 @@ static int ao_sun_open(ao_driver_t *this_gen, return 0; } +#ifdef __svr4__ this->last_samplecnt = 0; +#endif this->output_sample_rate = info.play.sample_rate; this->num_channels = info.play.channels; @@ -564,6 +586,7 @@ static int ao_sun_delay(ao_driver_t *this_gen) sun_driver_t *this = (sun_driver_t *) this_gen; audio_info_t info; +#ifdef __svr4__ if (ioctl(this->audio_fd, AUDIO_GETINFO, &info) == 0 && (this->frames_in_buffer == 0 || info.play.samples > 0)) { @@ -610,6 +633,10 @@ static int ao_sun_delay(ao_driver_t *this_gen) } #endif } +#else + if (ioctl(this->audio_fd, AUDIO_GETINFO, &info) == 0) + return info.play.seek / this->bytes_per_frame; +#endif return NOT_REAL_TIME; } @@ -718,7 +745,9 @@ static int ao_sun_write(ao_driver_t *this_gen, if (num_written > 0) { int buffered_samples; +#ifdef __svr4__ this->frames_in_buffer += num_written / this->bytes_per_frame; +#endif /* * Avoid storing too much data in the sound driver's buffers. @@ -862,6 +891,9 @@ static int ao_sun_ctrl(ao_driver_t *this_gen, int cmd, ...) { this->frames_in_buffer = 0; this->last_samplecnt = 0; #endif +#ifdef __NetBSD__ + ioctl(this->audio_fd, AUDIO_FLUSH); +#endif break; } @@ -888,9 +920,10 @@ static ao_driver_t *ao_sun_open_plugin (audio_driver_class_t *class_gen, const v audiodev = getenv("AUDIODEV"); /* This config entry is security critical, is it really necessary? */ - devname = config->register_string(config, + devname = config->register_filename(config, "audio.device.sun_audio_device", audiodev && *audiodev ? audiodev : "/dev/audio", + XINE_CONFIG_STRING_IS_DEVICE_NAME, _("Sun audio device name"), _("Specifies the file name for the Sun audio device " "to be used.\nThis setting is security critical, " @@ -945,7 +978,10 @@ static ao_driver_t *ao_sun_open_plugin (audio_driver_class_t *class_gen, const v */ this->capabilities = AO_CAP_MODE_MONO | AO_CAP_MODE_STEREO | AO_CAP_8BITS - | AO_CAP_PCM_VOL | AO_CAP_MUTE_VOL; + | AO_CAP_16BITS | AO_CAP_PCM_VOL; +#ifdef __svr4__ + this->capabilities |= AO_CAP_MUTE_VOL; +#endif /* * get initial mixer volume diff --git a/src/demuxers/.cvsignore b/src/combined/.hgignore index 7d926a554..7d926a554 100644 --- a/src/demuxers/.cvsignore +++ b/src/combined/.hgignore diff --git a/src/combined/Makefile.am b/src/combined/Makefile.am new file mode 100644 index 000000000..0d27f71c0 --- /dev/null +++ b/src/combined/Makefile.am @@ -0,0 +1,12 @@ +include $(top_srcdir)/misc/Makefile.common + +if HAVE_WAVPACK +xineplug_wavpack = xineplug_wavpack.la +endif + +xineplug_LTLIBRARIES = $(xineplug_wavpack) + +xineplug_wavpack_la_SOURCES = demux_wavpack.c decoder_wavpack.c combined_wavpack.c combined_wavpack.h +xineplug_wavpack_la_CFLAGS = $(VISIBILITY_FLAG) $(WAVPACK_CFLAGS) -I$(srcdir)/../demuxers +xineplug_wavpack_la_LIBADD = $(XINE_LIB) $(WAVPACK_LIBS) +xineplug_wavpack_la_LDFLAGS = $(xineplug_ldflags) diff --git a/src/combined/combined_wavpack.c b/src/combined/combined_wavpack.c new file mode 100644 index 000000000..7a334b15c --- /dev/null +++ b/src/combined/combined_wavpack.c @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2007 the xine project + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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 + * + * xine interface to libwavpack by Diego Pettenò <flameeyes@gmail.com> + * + * $Id: combined_wavpack.c,v 1.3 2007/03/17 07:34:02 dgp85 Exp $ + */ + +#include "xine_internal.h" +#include "combined_wavpack.h" + +static const demuxer_info_t demux_info_wv = { + 0 /* priority */ +}; + +static uint32_t audio_types[] = { + BUF_AUDIO_WAVPACK, 0 + }; + +static const decoder_info_t decoder_info_wv = { + audio_types, /* supported types */ + 7 /* priority */ +}; + +const plugin_info_t xine_plugin_info[] EXPORTED = { + /* type, API, "name", version, special_info, init_function */ + { PLUGIN_DEMUX, 26, "wavpack", XINE_VERSION_CODE, &demux_info_wv, demux_wv_init_plugin }, + { PLUGIN_AUDIO_DECODER, 15, "wavpackdec", XINE_VERSION_CODE, &decoder_info_wv, decoder_wavpack_init_plugin }, + { PLUGIN_NONE, 0, NULL, 0, NULL, NULL } +}; diff --git a/src/combined/combined_wavpack.h b/src/combined/combined_wavpack.h new file mode 100644 index 000000000..b7bf32acb --- /dev/null +++ b/src/combined/combined_wavpack.h @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2007 the xine project + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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 + * + * xine interface to libwavpack by Diego Pettenò <flameeyes@gmail.com> + * + * $Id: combined_wavpack.h,v 1.3 2007/03/17 07:34:02 dgp85 Exp $ + */ + +#include "os_types.h" + +typedef struct { + uint32_t idcode; /* This should always be the string "wvpk" */ + uint32_t block_size; /* Size of the rest of the frame */ + uint16_t wv_version; /* Version of the wavpack, 0x0403 should be latest */ + uint8_t track; /* Unused, has to be 0 */ + uint8_t index; /* Unused, has to be 0 */ + uint32_t file_samples; /* (uint32_t)-1 if unknown, else the total number + of samples for the file */ + uint32_t samples_index; /* Index of the first sample in block, from the + start of the file */ + uint32_t samples_count; /* Count of samples in the current frame */ + uint32_t flags; /* Misc flags */ + uint32_t decoded_crc32; /* CRC32 of the decoded data */ +} __attribute__((packed)) wvheader_t; + +#ifdef WORDS_BIGENDIAN +static const uint32_t wvpk_signature = ('k' + ('p' << 8) + ('v' << 16) + ('w' << 24)); +#else +static const uint32_t wvpk_signature = ('w' + ('v' << 8) + ('p' << 16) + ('k' << 24)); +#endif + +void *demux_wv_init_plugin (xine_t *const xine, void *const data); +void *decoder_wavpack_init_plugin (xine_t *xine, void *data); diff --git a/src/combined/decoder_wavpack.c b/src/combined/decoder_wavpack.c new file mode 100644 index 000000000..ec14dfbf5 --- /dev/null +++ b/src/combined/decoder_wavpack.c @@ -0,0 +1,337 @@ +/* + * Copyright (C) 2007 the xine project + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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 + * + * xine interface to libwavpack by Diego Pettenò <flameeyes@gmail.com> + * + * $Id: decoder_wavpack.c,v 1.14 2007/03/29 19:45:33 dgp85 Exp $ + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#define LOG_MODULE "decode_wavpack" +#define LOG_VERBOSE + +#include "xine_internal.h" +#include "attributes.h" +#include "bswap.h" + +#include <wavpack/wavpack.h> +#include "combined_wavpack.h" + +typedef struct { + audio_decoder_class_t decoder_class; +} wavpack_class_t; + +typedef struct { + audio_decoder_t audio_decoder; + + xine_stream_t *stream; + + uint8_t *buf; + size_t buf_size; + size_t buf_pos; + + int sample_rate; + uint16_t bits_per_sample:6; + uint16_t channels:4; + + uint16_t output_open:1; + +} wavpack_decoder_t; + +/* Wrapper functions for Wavpack */ +static int32_t xine_buffer_read_bytes(void *const this_gen, void *const data, + int32_t bcount) { + wavpack_decoder_t *const this = (wavpack_decoder_t*)this_gen; + + if ( bcount <= 0 ) + return 0; + + if ( bcount > (this->buf_size - this->buf_pos) ) + bcount = (this->buf_size - this->buf_pos); + + xine_fast_memcpy(data, this->buf + this->buf_pos, bcount); + this->buf_pos += bcount; + + return bcount; +} + +static uint32_t xine_buffer_get_pos(void *const this_gen) { + wavpack_decoder_t *const this = (wavpack_decoder_t*)this_gen; + return this->buf_pos; +} + +static int xine_buffer_set_pos_rel(void *const this_gen, const int32_t delta, + const int mode) { + wavpack_decoder_t *const this = (wavpack_decoder_t*)this_gen; + + switch(mode) { + case SEEK_SET: + if ( delta < 0 || delta > this->buf_size ) + return -1; + + this->buf_pos = delta; + return 0; + case SEEK_CUR: + if ( (this->buf_pos+delta) < 0 || (this->buf_pos+delta) > this->buf_size ) + return -1; + + this->buf_pos += delta; + return 0; + case SEEK_END: + if ( delta < 0 || delta > this->buf_size ) + return -1; + + this->buf_pos = this->buf_size - delta; + + return 0; + } +} + +static int xine_buffer_set_pos_abs(void *const this_gen, const uint32_t pos) { + return xine_buffer_set_pos_rel(this_gen, pos, SEEK_SET); +} + +static int xine_buffer_push_back_byte(void *const this_gen, const int c) { + if ( ! xine_buffer_set_pos_rel(this_gen, -1, SEEK_CUR) ) + return EOF; + return c; +} + +static uint32_t xine_buffer_get_length(void *const this_gen) { + wavpack_decoder_t *const this = (wavpack_decoder_t*)this_gen; + return this->buf_size; +} + +static int xine_buffer_can_seek(void *const this_gen) { + return 1; +} + +static int32_t xine_buffer_write_bytes(__attr_unused void *const id, + __attr_unused void *const data, + __attr_unused const int32_t bcount) { + lprintf("xine_buffer_write_bytes: access is read-only.\n"); + return 0; +} + +/* Wavpack plugin functions */ +static void wavpack_reset (audio_decoder_t *const this_gen) +{ + wavpack_decoder_t *const this = (wavpack_decoder_t *) this_gen; + + this->buf_pos = 0; +} + +static void wavpack_discontinuity (audio_decoder_t *const this_gen) +{ + /* wavpack_decoder_t *this = (wavpack_decoder_t *) this_gen; */ + + lprintf("Discontinuity!\n"); +} + +static void wavpack_decode_data (audio_decoder_t *const this_gen, buf_element_t *const buf) +{ + wavpack_decoder_t *const this = (wavpack_decoder_t *) this_gen; + + /* We are getting the stream header, open up the audio + * device, and collect information about the stream + */ + if (buf->decoder_flags & BUF_FLAG_STDHEADER) + { + int mode = AO_CAP_MODE_MONO; + + this->sample_rate = buf->decoder_info[1]; + _x_assert(buf->decoder_info[2] <= 32); + this->bits_per_sample = buf->decoder_info[2]; + _x_assert(buf->decoder_info[3] <= 8); + this->channels = buf->decoder_info[3]; + + mode = _x_ao_channels2mode(this->channels); + + _x_meta_info_set(this->stream, XINE_META_INFO_AUDIOCODEC, + "WavPack"); + + if (!this->output_open) + { + this->output_open = this->stream->audio_out->open ( + this->stream->audio_out, + this->stream, + this->bits_per_sample, + this->sample_rate, + mode) ? 1 : 0; + } + this->buf_pos = 0; + } else if (this->output_open) { + /* This isn't a header frame and we have opened the output device */ + + /* What we have buffered so far, and what is coming in + * is larger than our buffer + */ + if (this->buf_pos + buf->size > this->buf_size) + { + this->buf_size += 2 * buf->size; + this->buf = realloc (this->buf, this->buf_size); + lprintf("reallocating buffer to %zd\n", this->buf_size); + } + + xine_fast_memcpy (&this->buf[this->buf_pos], buf->content, buf->size); + this->buf_pos += buf->size; + + if ( buf->decoder_flags & BUF_FLAG_FRAME_END ) { + static WavpackStreamReader wavpack_buffer_reader = { + .read_bytes = xine_buffer_read_bytes, + .get_pos = xine_buffer_get_pos, + .set_pos_abs = xine_buffer_set_pos_abs, + .set_pos_rel = xine_buffer_set_pos_rel, + .push_back_byte = xine_buffer_push_back_byte, + .get_length = xine_buffer_get_length, + .can_seek = xine_buffer_can_seek, + .write_bytes = xine_buffer_write_bytes + }; + + WavpackContext *ctx = NULL; + /* Current version of wavpack (4.40) does not write more than this */ + char error[256] = { 0, }; + int32_t samples_left; uint32_t samples_total; + const wvheader_t *header = (const wvheader_t*)this->buf; + + this->buf_pos = 0; + + if ( le2me_32(header->samples_count) == 0 ) return; + + ctx = WavpackOpenFileInputEx(&wavpack_buffer_reader, this, NULL, error, OPEN_STREAMING, 0); + if ( ! ctx ) { + lprintf("unable to open the stream: %s\n", error); + this->buf_pos = 0; + return; + } + + samples_left = samples_total = header->samples_count; + while ( samples_left > 0 ) { + uint32_t buf_samples, decoded_count; + audio_buffer_t *audio_buffer = this->stream->audio_out->get_buffer(this->stream->audio_out); + int32_t *decoded; + int i; + + buf_samples = audio_buffer->mem_size / (this->channels * (this->bits_per_sample/8)); + if ( buf_samples > samples_left ) buf_samples = samples_left; + + decoded = alloca(buf_samples * this->channels * sizeof(int32_t)); + + decoded_count = WavpackUnpackSamples(ctx, decoded, buf_samples); + if ( decoded_count == 0 && *error ) { + lprintf("Error during decode: %s\n", error); + this->stream->audio_out->put_buffer (this->stream->audio_out, audio_buffer, NULL); + break; + } + + if ( decoded_count == 0 ) { + lprintf("Finished decoding, but still %d samples left?\n", samples_left); + this->stream->audio_out->put_buffer (this->stream->audio_out, audio_buffer, NULL); + break; + } + + lprintf("Decoded %d samples\n", buf_samples); + + samples_left -= decoded_count; + + audio_buffer->num_frames = decoded_count; + audio_buffer->vpts = 0; /* TODO: Fix the pts calculation */ + // audio_buffer->vpts = (buf->pts * (samples_total-samples_left)) / samples_total; + lprintf("Audio buffer with pts %"PRId64"\n", audio_buffer->vpts); + + switch(this->bits_per_sample) { + case 8: { + int8_t *data8 = (int8_t*)audio_buffer->mem; + for(i = 0; i < decoded_count*this->channels; i++) + data8[i] = decoded[i]; + } + break; + case 16: { + int16_t *data16 = (int16_t*)audio_buffer->mem; + for(i = 0; i < decoded_count*this->channels; i++) + data16[i] = decoded[i]; + } + } + + this->stream->audio_out->put_buffer (this->stream->audio_out, audio_buffer, this->stream); + } + + WavpackCloseFile(ctx); + this->buf_pos = 0; + } + } +} + +static void wavpack_dispose (audio_decoder_t *this_gen) { + wavpack_decoder_t *this = (wavpack_decoder_t *) this_gen; + + if (this->output_open) + this->stream->audio_out->close (this->stream->audio_out, this->stream); + + free(this->buf); + + free (this_gen); +} + +static audio_decoder_t *open_plugin (audio_decoder_class_t *class_gen, xine_stream_t *stream) { + wavpack_decoder_t * const this = (wavpack_decoder_t *) xine_xmalloc (sizeof (wavpack_decoder_t)); + + this->audio_decoder.decode_data = wavpack_decode_data; + this->audio_decoder.reset = wavpack_reset; + this->audio_decoder.discontinuity = wavpack_discontinuity; + this->audio_decoder.dispose = wavpack_dispose; + this->stream = stream; + + this->buf = NULL; + this->buf_size = 0; + + return (audio_decoder_t *) this; +} + +/* + * wavpack plugin class + */ + +static char *get_identifier (audio_decoder_class_t *this) { + return "wavpackdec"; +} + +static char *get_description (audio_decoder_class_t *this) { + return "wavpack audio decoder plugin"; +} + +static void dispose_class (audio_decoder_class_t *this) { + free (this); +} + +void *decoder_wavpack_init_plugin (xine_t *xine, void *data) { + wavpack_class_t *this; + + this = (wavpack_class_t *) xine_xmalloc (sizeof (wavpack_class_t)); + + this->decoder_class.open_plugin = open_plugin; + this->decoder_class.get_identifier = get_identifier; + this->decoder_class.get_description = get_description; + this->decoder_class.dispose = dispose_class; + + return this; +} diff --git a/src/combined/demux_wavpack.c b/src/combined/demux_wavpack.c new file mode 100644 index 000000000..6a0e33e19 --- /dev/null +++ b/src/combined/demux_wavpack.c @@ -0,0 +1,414 @@ +/* + * Copyright (C) 2006-2007 the xine project + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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 + * + * xine interface to libwavpack by Diego Pettenò <flameeyes@gmail.com> + * + * $Id: demux_wavpack.c,v 1.11 2007/03/17 07:34:02 dgp85 Exp $ + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#define LOG_MODULE "demux_wavpack" +#define LOG_VERBOSE + +#include "xine_internal.h" +#include "xineutils.h" +#include "demux.h" +#include "bswap.h" +#include "attributes.h" + +#include <wavpack/wavpack.h> +#include "combined_wavpack.h" + +typedef struct { + demux_plugin_t demux_plugin; + + xine_stream_t *stream; + fifo_buffer_t *audio_fifo; + input_plugin_t *input; + int status; + + uint32_t current_sample; + uint32_t samples; + uint32_t samplerate; + uint16_t bits_per_sample:6; + uint16_t channels:4; +} demux_wv_t; + +typedef struct { + demux_class_t demux_class; +} demux_wv_class_t; + +static int32_t xine_input_read_bytes(void *const this_gen, void *const data, + const int32_t bcount) { + input_plugin_t *const this = (input_plugin_t*)this_gen; + return this->read(this, data, bcount); +} + +static uint32_t xine_input_get_pos(void *const this_gen) { + input_plugin_t *const this = (input_plugin_t*)this_gen; + return this->get_current_pos(this); +} + +static int xine_input_set_pos_abs(void *const this_gen, const uint32_t pos) { + input_plugin_t *const this = (input_plugin_t*)this_gen; + return this->seek(this, pos, SEEK_SET); +} + +static int xine_input_set_pos_rel(void *const this_gen, const int32_t delta, + const int mode) { + input_plugin_t *const this = (input_plugin_t*)this_gen; + return this->seek(this, delta, mode); +} + +static int xine_input_push_back_byte(void *const this_gen, const int c) { + input_plugin_t *const this = (input_plugin_t*)this_gen; + if ( this->seek(this, -1, SEEK_CUR) ) { + return c; + } else { + lprintf("xine_input_push_back_byte: unable to seek.\n"); + return EOF; + } +} + +static uint32_t xine_input_get_length(void *const this_gen) { + input_plugin_t *const this = (input_plugin_t*)this_gen; + return this->get_length(this); +} + +static int xine_input_can_seek(void *const this_gen) { + input_plugin_t *const this = (input_plugin_t*)this_gen; + return INPUT_IS_SEEKABLE(this); +} + +static int32_t xine_input_write_bytes(__attr_unused void *const id, + __attr_unused void *const data, + __attr_unused const int32_t bcount) { + lprintf("xine_input_write_bytes: acces is read-only.\n"); + return 0; +} + +static WavpackStreamReader wavpack_input_reader = { + .read_bytes = xine_input_read_bytes, + .get_pos = xine_input_get_pos, + .set_pos_abs = xine_input_set_pos_abs, + .set_pos_rel = xine_input_set_pos_rel, + .push_back_byte = xine_input_push_back_byte, + .get_length = xine_input_get_length, + .can_seek = xine_input_can_seek, + .write_bytes = xine_input_write_bytes +}; + +static int open_wv_file(demux_wv_t *const this) { + WavpackContext *ctx = NULL; + char error[256]; /* Current version of wavpack (4.31) does not write more than this */ + wvheader_t header; + uint32_t tmp; + + /* Right now we don't support non-seekable streams */ + if (! INPUT_IS_SEEKABLE(this->input) ) { + lprintf("open_wv_file: non-seekable inputs aren't supported yet.\n"); + return 0; + } + + /* Read the file header */ + if (_x_demux_read_header(this->input, (uint8_t*)(&header), sizeof(wvheader_t)) != sizeof(wvheader_t)) + return 0; + + /* Validate header, we currently support only Wavpack 4 */ + if ( header.idcode != wvpk_signature || (le2me_16(header.wv_version) >> 8) != 4 ) + return 0; + + /* Rewind */ + this->input->seek(this->input, 0, SEEK_SET); + + ctx = WavpackOpenFileInputEx(&wavpack_input_reader, this->input, NULL, error, 0, 0); + if ( ! ctx ) { + lprintf("xine_open_wavpack_input: unable to open the stream: %s\n", error); + return 0; + } + + this->current_sample = 0; + this->samples = WavpackGetNumSamples(ctx); + lprintf("number of samples: %u\n", this->samples); + this->samplerate = WavpackGetSampleRate(ctx); + lprintf("samplerate: %u Hz\n", this->samplerate); + + tmp = WavpackGetBitsPerSample(ctx); _x_assert(tmp <= 32); + lprintf("bits_per_sample: %u\n", tmp); + this->bits_per_sample = tmp; + + tmp = WavpackGetNumChannels(ctx); _x_assert(tmp <= 8); + lprintf("channels: %u\n", tmp); + this->channels = tmp; + + _x_stream_info_set(this->stream, XINE_STREAM_INFO_HAS_AUDIO, 1); + _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_FOURCC, + wvpk_signature); + _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_CHANNELS, + this->channels); + _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_SAMPLERATE, + this->samplerate); + _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_BITS, + this->bits_per_sample); + + WavpackCloseFile(ctx); + this->input->seek(this->input, SEEK_SET, 0); + + return 1; +} + +static int demux_wv_send_chunk(demux_plugin_t *const this_gen) { + demux_wv_t *const this = (demux_wv_t *) this_gen; + uint32_t bytes_to_read; uint8_t header_sent = 0; + wvheader_t header; + + lprintf("new frame\n"); + + /* Check if we've finished */ + if (this->current_sample >= this->samples) { + lprintf("all frames read\n"); + this->status = DEMUX_FINISHED; + return this->status; + } + + lprintf("current sample: %u\n", this->current_sample); + + do { + if ( this->input->read(this->input, (uint8_t*)(&header), sizeof(wvheader_t)) != sizeof(wvheader_t) ) { + this->status = DEMUX_FINISHED; + return this->status; + } + + /* The size of the block is «of course» minus 8, and + it also includes the size of the header. + */ + bytes_to_read = le2me_32(header.block_size) + 8 - sizeof(wvheader_t); + + lprintf("demux_wavpack: going to read %u bytes.\n", bytes_to_read); + + while(bytes_to_read) { + off_t bytes_read = 0, bytes_to_read_now, offset = 0; + buf_element_t *buf = NULL; + int64_t input_time_guess; + + /* Get a buffer */ + buf = this->audio_fifo->buffer_pool_alloc(this->audio_fifo); + buf->type = BUF_AUDIO_WAVPACK; + buf->decoder_flags = 0; + + /* Set normalised position */ + buf->extra_info->input_normpos = + (int) ((double) this->input->get_current_pos(this->input) * 65535 / + this->input->get_length(this->input)); + + buf->pts = (((this->current_sample) / this->samplerate))*90000; + lprintf("Sending buffer with PTS %"PRId64"\n", buf->pts); + + /* Set time */ + input_time_guess = this->samples; + input_time_guess /= this->samplerate; + input_time_guess *= 1000; + input_time_guess *= buf->extra_info->input_normpos; + input_time_guess /= 65535; + buf->extra_info->input_time = input_time_guess; + + bytes_to_read_now = ( bytes_to_read > buf->max_size ) ? buf->max_size : bytes_to_read; + if ( ! header_sent ) { + bytes_to_read_now -= (offset = sizeof(wvheader_t)); + + header_sent = 1; + xine_fast_memcpy(buf->content, &header, sizeof(wvheader_t)); + } + + bytes_read = this->input->read(this->input, &buf->content[offset], bytes_to_read_now); + + buf->size = offset + bytes_read; + + bytes_to_read -= bytes_read; + + if ( bytes_to_read <= 0 && (le2me_32(header.flags) & FINAL_BLOCK) == FINAL_BLOCK) + buf->decoder_flags |= BUF_FLAG_FRAME_END; + + this->audio_fifo->put(this->audio_fifo, buf); + } + } while ( (le2me_32(header.flags) & FINAL_BLOCK) != FINAL_BLOCK ); + + this->current_sample += le2me_32(header.samples_count); + + return this->status; +} + +static void demux_wv_send_headers(demux_plugin_t *const this_gen) { + demux_wv_t *const this = (demux_wv_t *) this_gen; + buf_element_t *buf; + + this->audio_fifo = this->stream->audio_fifo; + + this->status = DEMUX_OK; + + /* Send start buffers */ + _x_demux_control_start(this->stream); + + /* Send header to decoder */ + if (this->audio_fifo) { + buf = this->audio_fifo->buffer_pool_alloc (this->audio_fifo); + + buf->type = BUF_AUDIO_WAVPACK; + buf->decoder_flags = BUF_FLAG_HEADER|BUF_FLAG_STDHEADER|BUF_FLAG_FRAME_END; + buf->decoder_info[0] = this->input->get_length(this->input); + buf->decoder_info[1] = this->samplerate; + buf->decoder_info[2] = this->bits_per_sample; + buf->decoder_info[3] = this->channels; + + buf->size = 0; + + this->audio_fifo->put (this->audio_fifo, buf); + } +} + +static int demux_wv_seek (demux_plugin_t *this_gen, + off_t start_pos, int start_time, int playing) { + demux_wv_t *const this = (demux_wv_t *) this_gen; + + /* If thread is not running, initialize demuxer */ + if( !playing ) { + + /* send new pts */ + _x_demux_control_newpts(this->stream, 0, 0); + + this->status = DEMUX_OK; + + } + + return this->status; +} + +static void demux_wv_dispose (demux_plugin_t *const this_gen) { + demux_wv_t *const this = (demux_wv_t *) this_gen; + + free(this); +} + +static int demux_wv_get_status (demux_plugin_t *const this_gen) { + const demux_wv_t *const this = (const demux_wv_t *) this_gen; + + return this->status; +} + +static int demux_wv_get_stream_length (demux_plugin_t *const this_gen) { + const demux_wv_t *const this = (demux_wv_t *) this_gen; + + return (this->samples*1000) / this->samplerate; +} + +static uint32_t demux_wv_get_capabilities(demux_plugin_t *const this_gen) { + return DEMUX_CAP_NOCAP; +} + +static int demux_wv_get_optional_data(demux_plugin_t *const this_gen, + void *data, const int data_type) { + return DEMUX_OPTIONAL_UNSUPPORTED; +} + +static demux_plugin_t *open_plugin (demux_class_t *const class_gen, + xine_stream_t *const stream, + input_plugin_t *const input) { + demux_wv_t *const this = xine_xmalloc (sizeof (demux_wv_t)); + this->stream = stream; + this->input = input; + + this->demux_plugin.send_headers = demux_wv_send_headers; + this->demux_plugin.send_chunk = demux_wv_send_chunk; + this->demux_plugin.seek = demux_wv_seek; + this->demux_plugin.dispose = demux_wv_dispose; + this->demux_plugin.get_status = demux_wv_get_status; + this->demux_plugin.get_stream_length = demux_wv_get_stream_length; + this->demux_plugin.get_capabilities = demux_wv_get_capabilities; + this->demux_plugin.get_optional_data = demux_wv_get_optional_data; + this->demux_plugin.demux_class = class_gen; + + this->status = DEMUX_FINISHED; + switch (stream->content_detection_method) { + + case METHOD_BY_EXTENSION: { + const char *const mrl = input->get_mrl (input); + const char *const extensions = class_gen->get_extensions (class_gen); + + if (!_x_demux_check_extension (mrl, extensions)) { + free (this); + return NULL; + } + } + /* Falling through is intended */ + + case METHOD_BY_CONTENT: + case METHOD_EXPLICIT: + + if (!open_wv_file(this)) { + free (this); + return NULL; + } + + break; + + default: + free (this); + return NULL; + } + + return &this->demux_plugin; +} + +static const char *get_description (demux_class_t *const this_gen) { + return "Wavpack demux plugin"; +} + +static const char *get_identifier (demux_class_t *const this_gen) { + return "Wavpack"; +} + +static const char *get_extensions (demux_class_t *const this_gen) { + return "wv"; +} + +static const char *get_mimetypes (demux_class_t *const this_gen) { + return NULL; +} + +static void class_dispose (demux_class_t *const this_gen) { + demux_wv_class_t *const this = (demux_wv_class_t *) this_gen; + + free (this); +} + +void *demux_wv_init_plugin (xine_t *const xine, void *const data) { + demux_wv_class_t *const this = xine_xmalloc (sizeof (demux_wv_class_t)); + + this->demux_class.open_plugin = open_plugin; + this->demux_class.get_description = get_description; + this->demux_class.get_identifier = get_identifier; + this->demux_class.get_mimetypes = get_mimetypes; + this->demux_class.get_extensions = get_extensions; + this->demux_class.dispose = class_dispose; + + return this; +} diff --git a/src/dxr3/.cvsignore b/src/demuxers/.hgignore index 7d926a554..7d926a554 100644 --- a/src/dxr3/.cvsignore +++ b/src/demuxers/.hgignore diff --git a/src/demuxers/Makefile.am b/src/demuxers/Makefile.am index 4523afc27..8a931c2d6 100644 --- a/src/demuxers/Makefile.am +++ b/src/demuxers/Makefile.am @@ -1,12 +1,7 @@ include $(top_srcdir)/misc/Makefile.common -AM_CFLAGS = $(VORBIS_CFLAGS) $(THEORA_CFLAGS) $(SPEEX_CFLAGS) \ - $(LIBMODPLUG_CFLAGS) $(VISIBILITY_FLAG) -AM_CPPFLAGS = $(ZLIB_CPPFLAGS) - -libdir = $(XINE_PLUGINDIR) - -# Sensing of OGG/VORBIS, ZLIB and ASF is broken in cvscompile.sh. +AM_CFLAGS = $(VISIBILITY_FLAG) +AM_LDFLAGS = $(xineplug_ldflags) if HAVE_VORBIS ogg_module = xineplug_dmx_ogg.la @@ -29,7 +24,7 @@ endif # --------- # All of xine demuxer plugins should be named like the scheme "xineplug_dmx_" -lib_LTLIBRARIES = $(ogg_module) $(asf_module) $(mng_module) $(image_module) \ +xineplug_LTLIBRARIES = $(ogg_module) $(asf_module) $(mng_module) $(image_module) \ xineplug_dmx_games.la \ xineplug_dmx_audio.la \ xineplug_dmx_mpeg_ts.la \ @@ -52,65 +47,53 @@ lib_LTLIBRARIES = $(ogg_module) $(asf_module) $(mng_module) $(image_module) \ xineplug_dmx_flv.la xineplug_dmx_ogg_la_SOURCES = demux_ogg.c -xineplug_dmx_ogg_la_LIBADD = $(VORBIS_LIBS) $(SPEEX_LIBS) $(THEORA_LIBS) $(OGG_LIBS) $(XINE_LIB) -xineplug_dmx_ogg_la_LDFLAGS = -avoid-version -module +xineplug_dmx_ogg_la_LIBADD = $(VORBIS_LIBS) $(SPEEX_LIBS) $(THEORA_LIBS) $(OGG_LIBS) $(XINE_LIB) +xineplug_dmx_ogg_la_CFLAGS = $(AM_CFLAGS) $(VORBIS_CFLAGS) $(SPEEX_CFLAGS) $(THEORA_CFLAGS) $(OGG_CFLAGS) xineplug_dmx_avi_la_SOURCES = demux_avi.c xineplug_dmx_avi_la_LIBADD = $(XINE_LIB) -xineplug_dmx_avi_la_LDFLAGS = -avoid-version -module xineplug_dmx_mpeg_block_la_SOURCES = demux_mpeg_block.c xineplug_dmx_mpeg_block_la_LIBADD = $(XINE_LIB) -xineplug_dmx_mpeg_block_la_LDFLAGS = -avoid-version -module xineplug_dmx_mpeg_la_SOURCES = demux_mpeg.c xineplug_dmx_mpeg_la_LIBADD = $(XINE_LIB) -xineplug_dmx_mpeg_la_LDFLAGS = -avoid-version -module xineplug_dmx_mpeg_elem_la_SOURCES = demux_elem.c xineplug_dmx_mpeg_elem_la_LIBADD = $(XINE_LIB) -xineplug_dmx_mpeg_elem_la_LDFLAGS = -avoid-version -module xineplug_dmx_mpeg_pes_la_SOURCES = demux_mpeg_pes.c xineplug_dmx_mpeg_pes_la_LIBADD = $(XINE_LIB) -xineplug_dmx_mpeg_pes_la_LDFLAGS = -avoid-version -module xineplug_dmx_mpeg_ts_la_SOURCES = demux_ts.c xineplug_dmx_mpeg_ts_la_LIBADD = $(XINE_LIB) -xineplug_dmx_mpeg_ts_la_LDFLAGS = -avoid-version -module xineplug_dmx_qt_la_SOURCES = demux_qt.c xineplug_dmx_qt_la_LIBADD = $(XINE_LIB) $(ZLIB_LIBS) -xineplug_dmx_qt_la_LDFLAGS = -avoid-version -module +xineplug_dmx_qt_la_CPPFLAGS = $(ZLIB_CPPFLAGS) xineplug_dmx_asf_la_SOURCES = demux_asf.c asfheader.c xineplug_dmx_asf_la_LIBADD = $(XINE_LIB) -xineplug_dmx_asf_la_CFLAGS = -fno-strict-aliasing -xineplug_dmx_asf_la_LDFLAGS = -avoid-version -module +xineplug_dmx_asf_la_CFLAGS = $(AM_CFLAGS) -fno-strict-aliasing xineplug_dmx_fli_la_SOURCES = demux_fli.c xineplug_dmx_fli_la_LIBADD = $(XINE_LIB) -xineplug_dmx_fli_la_LDFLAGS = -avoid-version -module xineplug_dmx_yuv4mpeg2_la_SOURCES = demux_yuv4mpeg2.c xineplug_dmx_yuv4mpeg2_la_LIBADD = $(XINE_LIB) -xineplug_dmx_yuv4mpeg2_la_LDFLAGS = -avoid-version -module xineplug_dmx_real_la_SOURCES = demux_real.c xineplug_dmx_real_la_LIBADD = $(XINE_LIB) -xineplug_dmx_real_la_LDFLAGS = -avoid-version -module xineplug_dmx_rawdv_la_SOURCES = demux_rawdv.c xineplug_dmx_rawdv_la_LIBADD = $(XINE_LIB) -xineplug_dmx_rawdv_la_LDFLAGS = -avoid-version -module xineplug_dmx_mng_la_SOURCES = demux_mng.c xineplug_dmx_mng_la_LIBADD = $(XINE_LIB) $(ZLIB_LIBS) $(MNG_LIBS) -xineplug_dmx_mng_la_LDFLAGS = -avoid-version -module +xineplug_dmx_mng_la_CPPFLAGS = $(ZLIB_CPPFLAGS) xineplug_dmx_pva_la_SOURCES = demux_pva.c xineplug_dmx_pva_la_LIBADD = $(XINE_LIB) -xineplug_dmx_pva_la_LDFLAGS = -avoid-version -module xineplug_dmx_games_la_SOURCES = group_games.c demux_eawve.c \ demux_idcin.c demux_ipmovie.c demux_roq.c \ @@ -125,38 +108,33 @@ xineplug_dmx_audio_la_SOURCES = group_audio.c demux_aud.c demux_aiff.c \ demux_realaudio.c demux_snd.c demux_voc.c \ demux_vox.c demux_wav.c demux_ac3.c id3.c \ demux_aac.c demux_mod.c demux_flac.c \ - demux_mpc.c demux_dts.c demux_shn.c + demux_mpc.c demux_dts.c demux_shn.c \ + demux_tta.c xineplug_dmx_audio_la_LIBADD = $(XINE_LIB) $(LIBMODPLUG_LIBS) -xineplug_dmx_audio_la_LDFLAGS = -avoid-version -module +xineplug_dmx_audio_la_CFLAGS = $(AM_CFLAGS) $(LIBMODPLUG_CFLAGS) xineplug_dmx_yuv_frames_la_SOURCES = demux_yuv_frames.c xineplug_dmx_yuv_frames_la_LIBADD = $(XINE_LIB) -xineplug_dmx_yuv_frames_la_LDFLAGS = -avoid-version -module xineplug_dmx_slave_la_SOURCES = demux_slave.c xineplug_dmx_slave_la_LIBADD = $(XINE_LIB) -xineplug_dmx_slave_la_LDFLAGS = -avoid-version -module xineplug_dmx_image_la_SOURCES = demux_image.c xineplug_dmx_image_la_LIBADD = $(XINE_LIB) -xineplug_dmx_image_la_LDFLAGS = -avoid-version -module xineplug_dmx_nsv_la_SOURCES = demux_nsv.c xineplug_dmx_nsv_la_LIBADD = $(XINE_LIB) -xineplug_dmx_nsv_la_LDFLAGS = -avoid-version -module xineplug_dmx_matroska_la_SOURCES = demux_matroska.c ebml.c xineplug_dmx_matroska_la_LIBADD = $(XINE_LIB) $(ZLIB_LIBS) -xineplug_dmx_matroska_la_CFLAGS = -fno-strict-aliasing -xineplug_dmx_matroska_la_LDFLAGS = -avoid-version -module +xineplug_dmx_matroska_la_CPPFLAGS = $(ZLIB_CPPFLAGS) +xineplug_dmx_matroska_la_CFLAGS = $(AM_CFLAGS) -fno-strict-aliasing xineplug_dmx_iff_la_SOURCES = demux_iff.c xineplug_dmx_iff_la_LIBADD = $(XINE_LIB) -xineplug_dmx_iff_la_LDFLAGS = -avoid-version -module xineplug_dmx_flv_la_SOURCES = demux_flv.c xineplug_dmx_flv_la_LIBADD = $(XINE_LIB) -xineplug_dmx_flv_la_LDFLAGS = -avoid-version -module -include_HEADERS = demux.h +xineinclude_HEADERS = demux.h noinst_HEADERS = asfheader.h qtpalette.h group_games.h group_audio.h id3.h ebml.h matroska.h iff.h flacutils.h diff --git a/src/demuxers/demux.h b/src/demuxers/demux.h index 0ce33b090..157519a87 100644 --- a/src/demuxers/demux.h +++ b/src/demuxers/demux.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux.h,v 1.39 2005/02/06 15:26:00 tmattern Exp $ + * $Id: demux.h,v 1.40 2007/01/19 00:26:39 dgp85 Exp $ */ #ifndef HAVE_DEMUX_H @@ -58,19 +58,19 @@ struct demux_class_s { /* * return human readable (verbose = 1 line) description for this plugin */ - char* (*get_description) (demux_class_t *this); + const char* (*get_description) (demux_class_t *this); /* * return human readable identifier for this plugin */ - char* (*get_identifier) (demux_class_t *this); + const char* (*get_identifier) (demux_class_t *this); /* * return MIME types supported for this plugin */ - char* (*get_mimetypes) (demux_class_t *this); + const char* (*get_mimetypes) (demux_class_t *this); /* * return ' ' seperated list of file extensions this @@ -79,7 +79,7 @@ struct demux_class_s { * file selection dialogs) */ - char* (*get_extensions) (demux_class_t *this); + const char* (*get_extensions) (demux_class_t *this); /* * close down, free all resources diff --git a/src/demuxers/demux_4xm.c b/src/demuxers/demux_4xm.c index c6d2d3f0e..56360542c 100644 --- a/src/demuxers/demux_4xm.c +++ b/src/demuxers/demux_4xm.c @@ -23,7 +23,7 @@ * For more information on the 4xm file format, visit: * http://www.pcisys.net/~melanson/codecs/ * - * $Id: demux_4xm.c,v 1.15 2004/06/13 21:28:52 miguelfreitas Exp $ + * $Id: demux_4xm.c,v 1.16 2007/01/19 00:26:39 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -493,7 +493,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -523,19 +523,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "4X Technologies (4xm) demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "4X Technologies"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "4xm"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_aac.c b/src/demuxers/demux_aac.c index b9e4c4084..ab71e8382 100644 --- a/src/demuxers/demux_aac.c +++ b/src/demuxers/demux_aac.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2005 the xine project + * Copyright (C) 2001-2007 the xine project * * This file is part of xine, a free video player. * @@ -21,7 +21,7 @@ * This demuxer detects ADIF and ADTS headers in AAC files. * Then it shovels buffer-sized chunks over to the AAC decoder. * - * $Id: demux_aac.c,v 1.12 2006/11/14 21:51:32 dsalt Exp $ + * $Id: demux_aac.c,v 1.17 2007/03/03 01:41:16 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -48,6 +48,8 @@ #include "bswap.h" #include "group_audio.h" +#include "id3.h" + typedef struct { demux_plugin_t demux_plugin; @@ -57,7 +59,6 @@ typedef struct { input_plugin_t *input; int status; - off_t data_start; off_t data_size; int seek_flag; /* this is set when a seek just occurred */ @@ -72,11 +73,30 @@ static int open_aac_file(demux_aac_t *this) { int i; uint8_t peak[MAX_PREVIEW_SIZE]; uint16_t syncword = 0; + uint32_t id3size = 0; + off_t data_start = 0; - /* Check for an ADIF header - should be at the start of the file */ - if (_x_demux_read_header(this->input, peak, 4) != 4) + _x_assert(MAX_PREVIEW_SIZE > 10); + + /* Get enough data to be able to check the size of ID3 tag */ + if (_x_demux_read_header(this->input, peak, 10) != 10) return 0; + /* Check if there's an ID3v2 tag at the start */ + if ( id3v2_istag(peak) ) { + id3size = id3v2_tagsize(&peak[6]); + + this->input->seek(this->input, 4, SEEK_SET); + + id3v2_parse_tag(this->input, this->stream, peak); + + lprintf("ID3v2 tag encountered, skipping %u bytes.\n", id3size); + } + + if ( this->input->read(this->input, peak, 4) != 4 ) + return 0; + + /* Check for an ADIF header - should be at the start of the file */ if ((peak[0] == 'A') && (peak[1] == 'D') && (peak[2] == 'I') && (peak[3] == 'F')) { lprintf("found ADIF header\n"); @@ -84,13 +104,20 @@ static int open_aac_file(demux_aac_t *this) { } /* Look for an ADTS header - might not be at the start of the file */ - if (_x_demux_read_header(this->input, peak, MAX_PREVIEW_SIZE) != - MAX_PREVIEW_SIZE) + if ( id3size != 0 && this->input->get_capabilities(this->input) & INPUT_CAP_SEEKABLE ) { + lprintf("Getting a buffer of size %u starting from %u\n", MAX_PREVIEW_SIZE, id3size); + + this->input->seek(this->input, id3size, SEEK_SET); + if ( this->input->read(this->input, peak, MAX_PREVIEW_SIZE) != MAX_PREVIEW_SIZE ) + return 0; + this->input->seek(this->input, 0, SEEK_SET); + } else if (_x_demux_read_header(this->input, peak, MAX_PREVIEW_SIZE) != + MAX_PREVIEW_SIZE) return 0; for (i=0; i<MAX_PREVIEW_SIZE; i++) { if ((syncword & 0xfff6) == 0xfff0) { - this->data_start = i - 2; + data_start = i - 2; lprintf("found ADTS header at offset %d\n", i-2); break; } @@ -99,27 +126,27 @@ static int open_aac_file(demux_aac_t *this) { } /* Look for second ADTS header to confirm it's really aac */ - if (this->data_start + 5 < MAX_PREVIEW_SIZE) { - int frame_size = ((peak[this->data_start+3] & 0x03) << 11) | - (peak[this->data_start+4] << 3) | - ((peak[this->data_start+5] & 0xe0) >> 5); + if (data_start + 5 < MAX_PREVIEW_SIZE) { + int frame_size = ((peak[data_start+3] & 0x03) << 11) | + (peak[data_start+4] << 3) | + ((peak[data_start+5] & 0xe0) >> 5); lprintf("first frame size %d\n", frame_size); if ((frame_size > 0) && - (this->data_start+frame_size < MAX_PREVIEW_SIZE-1) && + (data_start+frame_size < MAX_PREVIEW_SIZE-1) && /* first 28 bits must be identical */ - (peak[this->data_start ] ==peak[this->data_start+frame_size ]) && - (peak[this->data_start+1] ==peak[this->data_start+frame_size+1]) && - (peak[this->data_start+2] ==peak[this->data_start+frame_size+2]) && - (peak[this->data_start+3]>>4==peak[this->data_start+frame_size+3]>>4)) + (peak[data_start ] ==peak[data_start+frame_size ]) && + (peak[data_start+1] ==peak[data_start+frame_size+1]) && + (peak[data_start+2] ==peak[data_start+frame_size+2]) && + (peak[data_start+3]>>4==peak[data_start+frame_size+3]>>4)) { lprintf("found second ADTS header\n"); _x_stream_info_set(this->stream, XINE_STREAM_INFO_HAS_VIDEO, 0); _x_stream_info_set(this->stream, XINE_STREAM_INFO_HAS_AUDIO, 1); - this->input->seek(this->input, this->data_start, SEEK_SET); + this->input->seek(this->input, data_start+id3size, SEEK_SET); return 1; } } @@ -255,7 +282,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -283,19 +310,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "ADIF/ADTS AAC demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "AAC"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "aac"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_ac3.c b/src/demuxers/demux_ac3.c index fa2dddfed..7f3dadeb7 100644 --- a/src/demuxers/demux_ac3.c +++ b/src/demuxers/demux_ac3.c @@ -23,7 +23,7 @@ * This demuxer detects raw AC3 data in a file and shovels AC3 data * directly to the AC3 decoder. * - * $Id: demux_ac3.c,v 1.19 2005/06/04 20:32:08 jstembridge Exp $ + * $Id: demux_ac3.c,v 1.21 2007/03/19 16:42:32 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -51,7 +51,6 @@ #include "group_audio.h" #define DATA_TAG 0x61746164 -#define PEAK_SIZE 7056 /* 3 raw cd frames */ typedef struct { demux_plugin_t demux_plugin; @@ -129,31 +128,29 @@ static const struct frmsize_s frmsizecod_tbl[64] = static int open_ac3_file(demux_ac3_t *this) { int i; int offset = 0; - int peak_size = 0; + size_t peak_size = 0; int spdif_mode = 0; uint32_t syncword = 0; uint32_t blocksize; - uint8_t peak[PEAK_SIZE]; + uint8_t *peak; - lprintf("open_ac3_file\n"); - - /* block based demuxer (i.e. cdda) will only allow reads in block - * sized pieces */ blocksize = this->input->get_blocksize(this->input); - if (blocksize && INPUT_IS_SEEKABLE(this->input)) { - int read; - + if (blocksize) { this->input->seek(this->input, 0, SEEK_SET); - while (peak_size < PEAK_SIZE) { - read = this->input->read(this->input, &peak[peak_size], blocksize); - if (read) - peak_size += read; - else - break; - } + buf_element_t *buf = this->input->read_block(this->input, + this->audio_fifo, + blocksize); this->input->seek(this->input, 0, SEEK_SET); + + if (!buf) + return 0; + + peak = alloca(peak_size = buf->size); + xine_fast_memcpy(peak, buf->content, peak_size); + + buf->free_buffer(buf); } else { - peak_size = MAX_PREVIEW_SIZE; + peak = alloca(peak_size = MAX_PREVIEW_SIZE); if (_x_demux_read_header(this->input, peak, peak_size) != peak_size) return 0; @@ -163,10 +160,7 @@ static int open_ac3_file(demux_ac3_t *this) { /* Check for wav header, as we'll handle AC3 with a wav header shoved * on the front for CD burning */ - if ((peak[0] == 'R') && (peak[1] == 'I') && (peak[2] == 'F') && - (peak[3] == 'F') && (peak[8] == 'W') && (peak[9] == 'A') && - (peak[10] == 'V') && (peak[11] == 'E') && (peak[12] == 'f') && - (peak[13] == 'm') && (peak[14] == 't') && (peak[15] == ' ')) { + if ( memcmp(peak, "RIFF", 4) == 0 || memcmp(&peak[8], "WAVEfmt ", 8) == 0 ) { /* Check this looks like a cd audio wav */ unsigned int audio_type; xine_waveformatex *wave = (xine_waveformatex *) &peak[20]; @@ -441,7 +435,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -471,19 +465,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Raw AC3 demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "AC3"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "ac3"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_aiff.c b/src/demuxers/demux_aiff.c index 253827454..f88c58572 100644 --- a/src/demuxers/demux_aiff.c +++ b/src/demuxers/demux_aiff.c @@ -21,7 +21,7 @@ /* * AIFF File Demuxer by Mike Melanson (melanson@pcisys.net) * - * $Id: demux_aiff.c,v 1.40 2004/12/15 21:03:02 mroi Exp $ + * $Id: demux_aiff.c,v 1.41 2007/01/19 00:26:40 dgp85 Exp $ * */ @@ -359,7 +359,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -389,19 +389,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "AIFF file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "AIFF"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "aif aiff"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return "audio/x-aiff: aif, aiff: AIFF audio;" "audio/aiff: aif, aiff: AIFF audio;" "audio/x-pn-aiff: aif, aiff: AIFF audio;"; diff --git a/src/demuxers/demux_asf.c b/src/demuxers/demux_asf.c index ba31d6e51..65838138f 100644 --- a/src/demuxers/demux_asf.c +++ b/src/demuxers/demux_asf.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_asf.c,v 1.188 2006/11/29 21:26:52 dgp85 Exp $ + * $Id: demux_asf.c,v 1.194 2007/03/09 23:18:19 dgp85 Exp $ * * demultiplexer for asf streams * @@ -38,6 +38,9 @@ #include <unistd.h> #include <string.h> #include <stdlib.h> +#ifdef HAVE_ALLOCA_H +#include <alloca.h> +#endif #define LOG_MODULE "demux_asf" #define LOG_VERBOSE @@ -408,7 +411,9 @@ static int asf_read_header (demux_asf_t *this) { this->length = 0; /* compute average byterate (needed for seeking) */ - if (this->length) + if (this->asf_header->file->max_bitrate) + this->rate = this->asf_header->file->max_bitrate >> 3; + else if (this->length) this->rate = (int64_t) this->input->get_length(this->input) * 1000 / this->length; _x_stream_info_set(this->stream, XINE_STREAM_INFO_BITRATE, this->asf_header->file->max_bitrate); @@ -639,15 +644,15 @@ static void check_newpts (demux_asf_t *this, int64_t pts, int video, int frame_e #ifdef LOG if (pts) { if (video) { - printf ("demux_asf: VIDEO: pts = %8lld, diff = %8lld\n", pts, pts - this->last_pts[video]); + printf ("demux_asf: VIDEO: pts = %8"PRId64", diff = %8"PRId64"\n", pts, pts - this->last_pts[video]); } else { - printf ("demux_asf: AUDIO: pts = %8lld, diff = %8lld\n", pts, pts - this->last_pts[video]); + printf ("demux_asf: AUDIO: pts = %8"PRId64", diff = %8"PRId64"\n", pts, pts - this->last_pts[video]); } } #endif if (pts && (this->send_newpts || (this->last_pts[video] && abs(diff) > WRAP_THRESHOLD))) { - lprintf ("sending newpts %lld (video = %d diff = %lld)\n", pts, video, diff); + lprintf ("sending newpts %"PRId64" (video = %d diff = %"PRId64")\n", pts, video, diff); if (this->buf_flag_seek) { _x_demux_control_newpts(this->stream, pts, BUF_FLAG_SEEK); @@ -674,7 +679,7 @@ static void asf_send_buffer_nodefrag (demux_asf_t *this, asf_demux_stream_t *str int bufsize; int package_done; - lprintf ("pts=%lld, off=%d, len=%d, total=%d\n", + lprintf ("pts=%"PRId64", off=%d, len=%d, total=%d\n", timestamp * 90, frag_offset, frag_len, stream->payload_size); if (frag_offset == 0) { @@ -758,7 +763,7 @@ static void asf_send_buffer_defrag (demux_asf_t *this, asf_demux_stream_t *strea printf("asf_send_buffer seq=%d frag_offset=%d frag_len=%d\n", seq, frag_offset, frag_len ); */ - lprintf ("asf_send_buffer_defrag: timestamp=%lld, pts=%lld\n", timestamp, timestamp * 90); + lprintf ("asf_send_buffer_defrag: timestamp=%"PRId64", pts=%"PRId64"\n", timestamp, timestamp * 90); if (frag_offset == 0) { /* new packet */ @@ -864,11 +869,11 @@ static int asf_parse_packet_align(demux_asf_t *this) { /* check packet_count */ packet_num = (packet_pos - this->first_packet_pos) / this->packet_size; - lprintf("packet_num=%lld, packet_count=%lld\n", packet_num, this->packet_count); + lprintf("packet_num=%"PRId64", packet_count=%"PRId64"\n", packet_num, this->packet_count); if (packet_num >= this->packet_count) { /* end of payload data */ current_pos = this->input->get_current_pos (this->input); - lprintf("end of payload data, current_pos=%lld\n", current_pos); + lprintf("end of payload data, current_pos=%"PRId64"\n", current_pos); { /* check new asf header */ if (get_guid(this) == GUID_ASF_HEADER) { @@ -998,7 +1003,7 @@ static int asf_parse_packet_payload_header(demux_asf_t *this, uint32_t p_hdr_siz timestamp = get_le32(this); p_hdr_size += 4; duration = get_le16(this); p_hdr_size += 2; - lprintf ("timestamp=%lld, duration=%lld\n", timestamp, duration); + lprintf ("timestamp=%"PRId64", duration=%"PRId64"\n", timestamp, duration); if ((this->packet_len_flags >> 5) & 3) { /* absolute data size */ @@ -1354,7 +1359,6 @@ static int demux_asf_parse_http_references( demux_asf_t *this) { int buf_used = 0; int len; char *href = NULL; - char *mrl; int free_href = 0; /* read file to memory. @@ -1379,7 +1383,7 @@ static int demux_asf_parse_http_references( demux_asf_t *this) { ptr = buf; if (!strncmp(ptr, "[Reference]", 11)) { - mrl = this->input->get_mrl(this->input); + const char *const mrl = this->input->get_mrl(this->input); if (!strncmp(mrl, "http", 4)) { /* never trust a ms server, reopen the same mrl with the mms input plugin * some servers are badly configured and return a incorrect reference. @@ -1789,11 +1793,7 @@ static int demux_asf_seek (demux_plugin_t *this_gen, int i, state; int64_t ts; - start_time /= 1000; - start_pos = (off_t) ( (double) start_pos / 65535 * - this->input->get_length (this->input) ); - - lprintf ("demux_asf_seek: start_pos=%lld, start_time=%d\n", + lprintf ("demux_asf_seek: start_pos=%"PRId64", start_time=%d\n", start_pos, start_time); this->status = DEMUX_OK; @@ -1824,6 +1824,10 @@ static int demux_asf_seek (demux_plugin_t *this_gen, _x_demux_flush_engine(this->stream); + start_time /= 1000; + start_pos = (off_t) ( (double) start_pos / 65535 * + this->input->get_length (this->input) ); + if ( (!start_pos) && (start_time)) start_pos = start_time * this->rate; @@ -1910,13 +1914,13 @@ static int demux_asf_seek (demux_plugin_t *this_gen, } state = 1; /* search an audio packet with pts < this->keyframe_pts */ - lprintf ("demux_asf_seek: keyframe found at %lld, timestamp = %lld\n", start_pos, ts); + lprintf ("demux_asf_seek: keyframe found at %"PRId64", timestamp = %"PRId64"\n", start_pos, ts); check_newpts (this, ts * 90, 1, 0); } } else if (state == 1) { if ((this->audio_stream != -1 && stream_id == this->asf_header->streams[this->audio_stream]->stream_number) && ts && (ts <= this->keyframe_ts)) { - lprintf ("demux_asf_seek: audio packet found at %lld, ts = %lld\n", start_pos, ts); + lprintf ("demux_asf_seek: audio packet found at %"PRId64", ts = %"PRId64"\n", start_pos, ts); state = 5; /* end */ break; @@ -1927,7 +1931,7 @@ static int demux_asf_seek (demux_plugin_t *this_gen, this->keyframe_ts = ts; state = 5; /* end */ - lprintf ("demux_asf_seek: audio packet found at %lld, timestamp = %lld\n", start_pos, ts); + lprintf ("demux_asf_seek: audio packet found at %"PRId64", timestamp = %"PRId64"\n", start_pos, ts); check_newpts (this, ts * 90, 0, 0); } } @@ -1941,7 +1945,7 @@ static int demux_asf_seek (demux_plugin_t *this_gen, } else { this->input->seek (this->input, start_pos + this->packet_size, SEEK_SET); } - lprintf ("demux_asf_seek: keyframe_found=%d, keyframe_ts=%lld\n", + lprintf ("demux_asf_seek: keyframe_found=%d, keyframe_ts=%"PRId64"\n", this->keyframe_found, this->keyframe_ts); if (this->video_stream >= 0) { this->streams[this->video_stream].resync = 1; @@ -1951,6 +1955,22 @@ static int demux_asf_seek (demux_plugin_t *this_gen, this->streams[this->audio_stream].resync = 1; this->streams[this->audio_stream].skip = 1; } + } else if (!playing && this->input->seek_time != NULL) { + if (start_pos && !start_time) + start_time = this->length * start_pos / 65535; + + this->input->seek_time (this->input, start_time, SEEK_SET); + + this->keyframe_ts = 0; + this->keyframe_found = 0; /* means next keyframe */ + if (this->video_stream >= 0) { + this->streams[this->video_stream].resync = 1; + this->streams[this->video_stream].skip = 1; + } + if (this->audio_stream >= 0) { + this->streams[this->audio_stream].resync = 0; + this->streams[this->audio_stream].skip = 0; + } } else { /* "streaming" mode */ this->keyframe_ts = 0; @@ -2034,15 +2054,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, break; case METHOD_BY_EXTENSION: { - char *ending, *mrl; - - mrl = input->get_mrl (input); - - /* - * check extension - */ - - ending = strrchr (mrl, '.'); + const char *const mrl = input->get_mrl (input); + const char *const ending = strrchr (mrl, '.'); if (!ending) return NULL; @@ -2105,20 +2118,20 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "ASF demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "ASF"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { /* asx, wvx, wax are metafile or playlist */ return "asf wmv wma asx wvx wax"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return "video/x-ms-asf: asf: ASF stream;" "video/x-ms-wmv: wmv: Windows Media Video;" diff --git a/src/demuxers/demux_aud.c b/src/demuxers/demux_aud.c index 5ebf25e13..ea57a6939 100644 --- a/src/demuxers/demux_aud.c +++ b/src/demuxers/demux_aud.c @@ -34,7 +34,7 @@ * data. This makes seeking conceptually impossible. Upshot: Random * seeking is not supported. * - * $Id: demux_aud.c,v 1.19 2004/06/13 21:28:52 miguelfreitas Exp $ + * $Id: demux_aud.c,v 1.20 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -292,7 +292,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str case METHOD_BY_CONTENT: /* no reliable detection */ case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -320,19 +320,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Westwood Studios AUD file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "Westwood Studios AUD"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "aud"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_avi.c b/src/demuxers/demux_avi.c index 4f4cbc428..fe324c2f4 100644 --- a/src/demuxers/demux_avi.c +++ b/src/demuxers/demux_avi.c @@ -19,7 +19,7 @@ */ /* - * $Id: demux_avi.c,v 1.228 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: demux_avi.c,v 1.232 2007/03/29 19:24:18 dgp85 Exp $ * * demultiplexer for avi streams * @@ -194,8 +194,8 @@ typedef struct{ uint32_t audio_posb; /* Audio position: byte within chunk */ + int wavex_len; xine_waveformatex *wavex; - int wavex_len; audio_index_t audio_idx; @@ -251,28 +251,27 @@ typedef struct demux_avi_s { input_plugin_t *input; int status; - avi_t *avi; - - int no_audio; - uint32_t video_step; uint32_t AVI_errno; - idx_grow_t idx_grow; - - int streaming; - int last_index_entry_type; - int has_index; - /* seeking args backup */ - int seek_request; - off_t seek_start_pos; int seek_start_time; + off_t seek_start_pos; + + avi_t *avi; + + idx_grow_t idx_grow; + + uint8_t no_audio:1; + + uint8_t streaming:1; + uint8_t has_index:1; + + uint8_t seek_request:1; /* discontinuity detection (only at seek) */ - int send_newpts; - int buf_flag_seek; - + uint8_t buf_flag_seek:1; + uint8_t send_newpts:1; } demux_avi_t ; typedef struct { @@ -1392,7 +1391,7 @@ static avi_t *AVI_init(demux_avi_t *this) { AVI->video_posf = 0; AVI->video_posb = 0; - lprintf("done, pos=%lld, AVI->movi_start=%" PRIdMAX "\n", this->input->get_current_pos(this->input), (intmax_t)AVI->movi_start); + lprintf("done, pos=%"PRId64", AVI->movi_start=%" PRIdMAX "\n", this->input->get_current_pos(this->input), (intmax_t)AVI->movi_start); return AVI; } @@ -2259,7 +2258,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str break; case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -2316,19 +2315,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str * demux avi class */ -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "AVI/RIFF demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "AVI"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "avi"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return "video/msvideo: avi: AVI video;" "video/x-msvideo: avi: AVI video;"; } diff --git a/src/demuxers/demux_cdda.c b/src/demuxers/demux_cdda.c index 3790ee6b9..d92a8ba23 100644 --- a/src/demuxers/demux_cdda.c +++ b/src/demuxers/demux_cdda.c @@ -24,7 +24,7 @@ * linear PCM "decoder" (which in turn sends them directly to the audio * output target; this is a really fancy CD-playing architecture). * - * $Id: demux_cdda.c,v 1.19 2004/06/13 21:28:52 miguelfreitas Exp $ + * $Id: demux_cdda.c,v 1.20 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -227,19 +227,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "CD Digital Audio demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "CDDA"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return NULL; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_dts.c b/src/demuxers/demux_dts.c index 16f14211d..7baeae377 100644 --- a/src/demuxers/demux_dts.c +++ b/src/demuxers/demux_dts.c @@ -19,7 +19,7 @@ * * Raw DTS Demuxer by James Stembridge (jstembridge@gmail.com) * - * $Id: demux_dts.c,v 1.6 2005/06/04 20:32:08 jstembridge Exp $ + * $Id: demux_dts.c,v 1.8 2007/03/19 16:42:32 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -47,7 +47,6 @@ #include "group_audio.h" #define DATA_TAG 0x61746164 -#define PEAK_SIZE 7056 /* 3 raw cd frames */ typedef struct { demux_plugin_t demux_plugin; @@ -79,29 +78,29 @@ static const int dts_sample_rates[] = static int open_dts_file(demux_dts_t *this) { int i, offset = 0; uint32_t syncword = 0; - int peak_size = 0; + size_t peak_size = 0; uint32_t blocksize; - uint8_t peak[PEAK_SIZE]; + uint8_t *peak; lprintf("open_dts_file\n"); - /* block based demuxer (i.e. cdda) will only allow reads in block - * sized pieces */ blocksize = this->input->get_blocksize(this->input); - if (blocksize && INPUT_IS_SEEKABLE(this->input)) { - int read; - + if (blocksize) { this->input->seek(this->input, 0, SEEK_SET); - while (peak_size < PEAK_SIZE) { - read = this->input->read(this->input, &peak[peak_size], blocksize); - if (read) - peak_size += read; - else - break; - } + buf_element_t *buf = this->input->read_block(this->input, + this->audio_fifo, + blocksize); this->input->seek(this->input, 0, SEEK_SET); + + if (!buf) + return 0; + + peak = alloca(peak_size = buf->size); + xine_fast_memcpy(peak, buf->content, peak_size); + + buf->free_buffer(buf); } else { - peak_size = MAX_PREVIEW_SIZE; + peak = alloca(peak_size = MAX_PREVIEW_SIZE); if (_x_demux_read_header(this->input, peak, peak_size) != peak_size) return 0; @@ -111,10 +110,7 @@ static int open_dts_file(demux_dts_t *this) { /* Check for wav header, as we'll handle DTS with a wav header shoved * on the front for CD burning */ - if ((peak[0] == 'R') && (peak[1] == 'I') && (peak[2] == 'F') && - (peak[3] == 'F') && (peak[8] == 'W') && (peak[9] == 'A') && - (peak[10] == 'V') && (peak[11] == 'E') && (peak[12] == 'f') && - (peak[13] == 'm') && (peak[14] == 't') && (peak[15] == ' ')) { + if ( memcmp(peak, "RIFF", 4) == 0 || memcmp(&peak[8], "WAVEfmt ", 8) == 0 ) { /* Check this looks like a cd audio wav */ unsigned int audio_type; xine_waveformatex *wave = (xine_waveformatex *) &peak[20]; @@ -368,7 +364,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -396,19 +392,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Raw DTS demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "DTS"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "dts"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_eawve.c b/src/demuxers/demux_eawve.c index 7d7cc922a..67c087208 100644 --- a/src/demuxers/demux_eawve.c +++ b/src/demuxers/demux_eawve.c @@ -19,7 +19,7 @@ */ /* - * $Id: demux_eawve.c,v 1.28 2004/06/13 21:28:52 miguelfreitas Exp $ + * $Id: demux_eawve.c,v 1.29 2007/01/19 00:26:40 dgp85 Exp $ * * demux_eawve.c, Demuxer plugin for Electronic Arts' WVE file format * @@ -370,7 +370,7 @@ static demux_plugin_t* open_plugin(demux_class_t *class_gen, xine_stream_t *stre switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -400,19 +400,19 @@ static demux_plugin_t* open_plugin(demux_class_t *class_gen, xine_stream_t *stre return &this->demux_plugin; } -static char *get_description(demux_class_t *this_gen){ +static const char *get_description(demux_class_t *this_gen){ return "Electronics Arts WVE format demux plugin"; } -static char *get_identifier(demux_class_t *this_gen){ +static const char *get_identifier(demux_class_t *this_gen){ return "EA WVE"; } -static char *get_extensions(demux_class_t *this_gen){ +static const char *get_extensions(demux_class_t *this_gen){ return "wve"; } -static char *get_mimetypes(demux_class_t *this_gen){ +static const char *get_mimetypes(demux_class_t *this_gen){ return NULL; } diff --git a/src/demuxers/demux_elem.c b/src/demuxers/demux_elem.c index 2645992bc..be86b32ed 100644 --- a/src/demuxers/demux_elem.c +++ b/src/demuxers/demux_elem.c @@ -19,7 +19,7 @@ */ /* - * $Id: demux_elem.c,v 1.89 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: demux_elem.c,v 1.91 2007/02/20 00:34:55 dgp85 Exp $ * * demultiplexer for elementary mpeg streams */ @@ -73,7 +73,7 @@ static int demux_mpeg_elem_next (demux_mpeg_elem_t *this, int preview_mode) { buf = this->video_fifo->buffer_pool_alloc(this->video_fifo); blocksize = (this->blocksize ? this->blocksize : buf->max_size); done = this->input->read(this->input, buf->mem, blocksize); - lprintf ("read size = %lld\n", done); + lprintf ("read size = %"PRId64"\n", done); if (done <= 0) { buf->free_buffer (buf); @@ -160,7 +160,7 @@ static int demux_mpeg_elem_seek (demux_plugin_t *this_gen, this->status = DEMUX_FINISHED; return this->status; } - lprintf ("seeking to %lld\n", start_pos); + lprintf ("seeking to %"PRId64"\n", start_pos); } /* @@ -225,7 +225,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str break; case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -261,19 +261,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Elementary MPEG stream demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "MPEG_ELEM"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "mpv"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_film.c b/src/demuxers/demux_film.c index f4a27c22b..d3cedc0e1 100644 --- a/src/demuxers/demux_film.c +++ b/src/demuxers/demux_film.c @@ -21,7 +21,7 @@ * For more information on the FILM file format, visit: * http://www.pcisys.net/~melanson/codecs/ * - * $Id: demux_film.c,v 1.81 2006/11/19 16:07:50 dgp85 Exp $ + * $Id: demux_film.c,v 1.82 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -874,7 +874,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -904,19 +904,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "FILM (CPK) demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "FILM (CPK)"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "cpk cak film"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_flac.c b/src/demuxers/demux_flac.c index bd5c19350..f52da4d03 100644 --- a/src/demuxers/demux_flac.c +++ b/src/demuxers/demux_flac.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2000-2004 the xine project + * Copyright (C) 2000-2007 the xine project * * This file is part of xine, a free video player. * @@ -23,7 +23,7 @@ * For more information on the FLAC file format, visit: * http://flac.sourceforge.net/ * - * $Id: demux_flac.c,v 1.12 2006/11/09 23:51:29 dgp85 Exp $ + * $Id: demux_flac.c,v 1.17 2007/03/29 16:52:23 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -49,6 +49,7 @@ #include "bswap.h" #include "group_audio.h" +#include "id3.h" #include "flacutils.h" typedef struct { @@ -66,10 +67,10 @@ typedef struct { off_t data_start; off_t data_size; - unsigned char streaminfo[sizeof(xine_waveformatex) + FLAC_STREAMINFO_SIZE]; flac_seekpoint_t *seekpoints; int seekpoint_count; + unsigned char streaminfo[sizeof(xine_waveformatex) + FLAC_STREAMINFO_SIZE]; } demux_flac_t; typedef struct { @@ -81,7 +82,7 @@ typedef struct { * It returns 1 if flac file was opened successfully. */ static int open_flac_file(demux_flac_t *flac) { - unsigned char preamble[4]; + unsigned char preamble[10]; unsigned int block_length; unsigned char buffer[FLAC_SEEKPOINT_SIZE]; unsigned char *streaminfo = flac->streaminfo + sizeof(xine_waveformatex); @@ -89,26 +90,19 @@ static int open_flac_file(demux_flac_t *flac) { flac->seekpoints = NULL; - /* fetch the file signature */ - if (_x_demux_read_header(flac->input, preamble, 4) != 4) + /* fetch the file signature, get enough bytes so that id3 can also + be skipped and/or parsed */ + if (_x_demux_read_header(flac->input, preamble, 10) != 10) return 0; - /* validate signature */ - if ((preamble[0] != 'f') || - (preamble[1] != 'L') || - (preamble[2] != 'a') || - (preamble[3] != 'C')) { - + /* Unfortunately some FLAC files have an ID3 flag prefixed on them + * before the actual FLAC headers... these are barely legal, but + * users use them and want them working, so check and skip the ID3 + * tag if present. + */ + if ( id3v2_istag(preamble) ) { uint32_t id3size; - /* Unfortunately some FLAC files have an ID3 flag prefixed on them - * before the actual FLAC headers... these are barely legal, but - * users use them and want them working, so check and skip the ID3 - * tag if present. - */ - if ( preamble[0] != 'I' || preamble[1] != 'D' || preamble[2] != '3' ) - return 0; - /* First 3 bytes are the ID3 signature as above, then comes two bytes * encoding the major and minor version of ID3 used, that we can ignore * as long as we don't try to read the metadata; after those there's a @@ -117,24 +111,22 @@ static int open_flac_file(demux_flac_t *flac) { * is encoded as four bytes.. but only 7 out of 8 bits of every byte is * used... don't ask. */ - flac->input->seek(flac->input, 6, SEEK_SET); - if ( flac->input->read(flac->input, preamble, 4) != 4 ) - return 0; + id3size = id3v2_tagsize(&preamble[6]); - id3size = (preamble[0] << 7*3) + (preamble[1] << 7*2) + (preamble[2] << 7) + preamble[3]; - - flac->input->seek(flac->input, id3size, SEEK_CUR); + id3v2_parse_tag(flac->input, flac->stream, preamble); + + flac->input->seek(flac->input, id3size, SEEK_SET); if ( flac->input->read(flac->input, preamble, 4) != 4 ) return 0; - - if ( preamble[0] != 'f' || preamble[1] != 'L' || preamble[2] != 'a' || preamble[3] != 'C' ) - return 0; - - } else - /* file is qualified; skip over the signature bytes in the stream */ + } else flac->input->seek(flac->input, 4, SEEK_SET); + /* validate signature */ + if ((preamble[0] != 'f') || (preamble[1] != 'L') || + (preamble[2] != 'a') || (preamble[3] != 'C')) + return 0; + /* loop through the metadata blocks; use a do-while construct since there * will always be 1 metadata block */ do { @@ -166,7 +158,7 @@ static int open_flac_file(demux_flac_t *flac) { flac->bits_per_sample = ((flac->sample_rate >> 4) & 0x1F) + 1; flac->sample_rate >>= 12; flac->total_samples = BE_64(&streaminfo[10]) & UINT64_C(0x0FFFFFFFFF); /* 36 bits */ - lprintf ("%d Hz, %d bits, %d channels, %lld total samples\n", + lprintf ("%d Hz, %d bits, %d channels, %"PRId64" total samples\n", flac->sample_rate, flac->bits_per_sample, flac->channels, flac->total_samples); break; @@ -193,15 +185,15 @@ static int open_flac_file(demux_flac_t *flac) { if (flac->input->read(flac->input, buffer, FLAC_SEEKPOINT_SIZE) != FLAC_SEEKPOINT_SIZE) return 0; flac->seekpoints[i].sample_number = BE_64(&buffer[0]); - lprintf (" %d: sample %lld, ", i, flac->seekpoints[i].sample_number); + lprintf (" %d: sample %"PRId64", ", i, flac->seekpoints[i].sample_number); flac->seekpoints[i].offset = BE_64(&buffer[8]); flac->seekpoints[i].size = BE_16(&buffer[16]); - lprintf ("@ 0x%llX, size = %d bytes, ", + lprintf ("@ 0x%"PRIX64", size = %d bytes, ", flac->seekpoints[i].offset, flac->seekpoints[i].size); flac->seekpoints[i].pts = flac->seekpoints[i].sample_number; flac->seekpoints[i].pts *= 90000; flac->seekpoints[i].pts /= flac->sample_rate; - lprintf ("pts = %lld\n", flac->seekpoints[i].pts); + lprintf ("pts = %"PRId64"\n", flac->seekpoints[i].pts); } break; @@ -524,7 +516,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -554,19 +546,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Free Lossless Audio Codec (flac) demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "FLAC"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "flac"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_fli.c b/src/demuxers/demux_fli.c index e17e47258..c9cc26cf1 100644 --- a/src/demuxers/demux_fli.c +++ b/src/demuxers/demux_fli.c @@ -24,7 +24,7 @@ * avoid while programming a FLI decoder, visit: * http://www.pcisys.net/~melanson/codecs/ * - * $Id: demux_fli.c,v 1.59 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: demux_fli.c,v 1.60 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -324,7 +324,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -354,19 +354,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Autodesk Animator FLI/FLC demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "FLI/FLC"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "fli flc"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return "video/x-flic: fli,flc: Autodesk FLIC files;"; } diff --git a/src/demuxers/demux_flv.c b/src/demuxers/demux_flv.c index 57f83e002..0588b408e 100644 --- a/src/demuxers/demux_flv.c +++ b/src/demuxers/demux_flv.c @@ -20,11 +20,13 @@ /* * Flash Video (.flv) File Demuxer - * by Mike Melanson (melanson@pcisys.net) + * by Mike Melanson (melanson@pcisys.net) and + * Claudio Ciccani (klan@directfb.org) + * * For more information on the FLV file format, visit: * http://download.macromedia.com/pub/flash/flash_file_format_specification.pdf * - * $Id: demux_flv.c,v 1.9 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: demux_flv.c,v 1.21 2007/03/17 11:29:43 klan Exp $ */ #ifdef HAVE_CONFIG_H @@ -42,7 +44,6 @@ /* #define LOG */ - #include "xine_internal.h" #include "xineutils.h" #include "compat.h" @@ -51,103 +52,448 @@ #include "group_games.h" typedef struct { + unsigned int pts; + unsigned int offset; +} flv_index_entry_t; + +typedef struct { demux_plugin_t demux_plugin; + xine_t *xine; xine_stream_t *stream; fifo_buffer_t *video_fifo; fifo_buffer_t *audio_fifo; input_plugin_t *input; int status; - unsigned int video_type; - unsigned int audio_type; - - off_t data_start; - off_t data_size; - - unsigned char bih[sizeof(xine_bmiheader)]; - xine_waveformatex wave; - + unsigned char flags; + off_t start; /* in bytes */ + off_t size; /* in bytes */ + + unsigned char got_video; + unsigned char got_audio; + + unsigned int length; /* in ms */ + int width; + int height; + double framerate; + + flv_index_entry_t *index; + int num_indices; + + unsigned int cur_pts; + + int64_t last_pts[2]; + int send_newpts; + int buf_flag_seek; } demux_flv_t ; typedef struct { demux_class_t demux_class; } demux_flv_class_t; + +#define FLV_FLAG_HAS_VIDEO 0x01 +#define FLV_FLAG_HAS_AUDIO 0x04 + +#define FLV_TAG_TYPE_AUDIO 0x08 +#define FLV_TAG_TYPE_VIDEO 0x09 +#define FLV_TAG_TYPE_SCRIPT 0x12 + +#define FLV_SOUND_FORMAT_PCM_BE 0x00 +#define FLV_SOUND_FORMAT_ADPCM 0x01 +#define FLV_SOUND_FORMAT_MP3 0x02 +#define FLV_SOUND_FORMAT_PCM_LE 0x03 +#define FLV_SOUND_FORMAT_NELLY8 0x05 /* Nellymoser 8KHz */ +#define FLV_SOUND_FORMAT_NELLY 0x06 /* Nellymoser */ + +#define FLV_VIDEO_FORMAT_FLV1 0x02 /* Sorenson H.263 */ +#define FLV_VIDEO_FORMAT_SCREEN 0x03 +#define FLV_VIDEO_FORMAT_VP6 0x04 /* On2 VP6 */ +#define FLV_VIDEO_FORMAT_VP6A 0x05 /* On2 VP6 with alphachannel */ +#define FLV_VIDEO_FORMAT_SCREEN2 0x06 + +#define FLV_DATA_TYPE_NUMBER 0x00 +#define FLV_DATA_TYPE_BOOL 0x01 +#define FLV_DATA_TYPE_STRING 0x02 +#define FLV_DATA_TYPE_OBJECT 0x03 +#define FLC_DATA_TYPE_CLIP 0x04 +#define FLV_DATA_TYPE_REFERENCE 0x07 +#define FLV_DATA_TYPE_ECMARRAY 0x08 +#define FLV_DATA_TYPE_ENDOBJECT 0x09 +#define FLV_DATA_TYPE_ARRAY 0x0a +#define FLV_DATA_TYPE_DATE 0x0b +#define FLV_DATA_TYPE_LONGSTRING 0x0c + + +/* redefine abs as macro to handle 64-bit diffs. + i guess llabs may not be available everywhere */ +#define abs(x) ( ((x)<0) ? -(x) : (x) ) + +#define WRAP_THRESHOLD 220000 +#define PTS_AUDIO 0 +#define PTS_VIDEO 1 + +static void check_newpts(demux_flv_t *this, int64_t pts, int video) { + int64_t diff; + + diff = pts - this->last_pts[video]; + lprintf ("check_newpts %"PRId64"\n", pts); + + if (pts && (this->send_newpts || (this->last_pts[video] && abs(diff)>WRAP_THRESHOLD))) { + lprintf ("diff=%"PRId64"\n", diff); + + if (this->buf_flag_seek) { + _x_demux_control_newpts(this->stream, pts, BUF_FLAG_SEEK); + this->buf_flag_seek = 0; + } else { + _x_demux_control_newpts(this->stream, pts, 0); + } + this->send_newpts = 0; + this->last_pts[1-video] = 0; + } + + if (pts) + this->last_pts[video] = pts; +} + /* returns 1 if the FLV file was opened successfully, 0 otherwise */ static int open_flv_file(demux_flv_t *this) { + unsigned char buffer[9]; - unsigned char buffer[4]; - off_t first_offset; - - if (_x_demux_read_header(this->input, buffer, 4) != 4) + if (_x_demux_read_header(this->input, buffer, 9) != 9) return 0; if ((buffer[0] != 'F') || (buffer[1] != 'L') || (buffer[2] != 'V')) return 0; + + if (buffer[3] != 0x01) { + xprintf(this->xine, XINE_VERBOSITY_LOG, + _("unsupported FLV version (%d).\n"), buffer[3]); + return 0; + } - this->video_type = this->audio_type = 0; - if (buffer[3] & 0x1) - this->video_type = BUF_VIDEO_FLV1; -/* buffer[3] * 0x4 indicates audio, possibly always MP3; deal with - that later */ - - /* file is qualified at this point; position to start of first packet */ - this->input->seek(this->input, 5, SEEK_SET); - if (this->input->read(this->input, buffer, 4) != 4) + this->flags = buffer[4]; + if ((this->flags & (FLV_FLAG_HAS_VIDEO | FLV_FLAG_HAS_AUDIO)) == 0) { + xprintf(this->xine, XINE_VERBOSITY_LOG, + _("neither video nor audio stream in this file.\n")); return 0; + } - first_offset = BE_32(buffer); - this->input->seek(this->input, first_offset, SEEK_SET); + this->start = BE_32(&buffer[5]); + this->size = this->input->get_length(this->input); + + if (INPUT_IS_SEEKABLE(this->input)) + this->input->seek(this->input, this->start, SEEK_SET); + else if (this->start > 9) + this->input->seek(this->input, this->start-9, SEEK_CUR); + lprintf(" qualified FLV file, repositioned @ offset 0x%" PRIxMAX "\n", - (intmax_t)first_offset); + (intmax_t)this->start); return 1; } -static int demux_flv_send_chunk(demux_plugin_t *this_gen) { - - demux_flv_t *this = (demux_flv_t *) this_gen; - buf_element_t *buf = NULL; - unsigned int remaining_bytes; - unsigned char chunk_type, sub_type; - int64_t pts; - - unsigned char buffer[12]; +#define BE_F64(buf) ({\ + union { uint64_t q; double d; } _tmp;\ + _tmp.q = BE_64(buf);\ + _tmp.d;\ +})\ + +static int parse_flv_var(demux_flv_t *this, + unsigned char *buf, int size, char *key, int keylen) { + unsigned char *tmp = buf; + unsigned char *end = buf + size; + char *str; + unsigned char type; + int len, num; + + if (size < 1) + return 0; + + type = *tmp++; + + switch (type) { + case FLV_DATA_TYPE_NUMBER: + lprintf(" got number (%f)\n", BE_F64(tmp)); + if (key) { + double val = BE_F64(tmp); + if (keylen == 8 && !strncmp(key, "duration", 8)) { + this->length = val * 1000.0; + } + else if (keylen == 5 && !strncmp(key, "width", 5)) { + this->width = val; + _x_stream_info_set(this->stream, XINE_STREAM_INFO_VIDEO_WIDTH, this->width); + } + else if (keylen == 6 && !strncmp(key, "height", 6)) { + this->height = val; + _x_stream_info_set(this->stream, XINE_STREAM_INFO_VIDEO_HEIGHT, this->height); + } + else if (keylen == 9 && !strncmp(key, "framerate", 9)) { + this->framerate = val; + } + else if (keylen == 13 && !strncmp(key, "videodatarate", 13)) { + _x_stream_info_set(this->stream, XINE_STREAM_INFO_BITRATE, val*1000.0); + } + } + tmp += 8; + break; + case FLV_DATA_TYPE_BOOL: + lprintf(" got bool (%d)\n", *tmp); + tmp++; + break; + case FLV_DATA_TYPE_STRING: + lprintf(" got string (%s)\n", tmp+2); + len = BE_16(tmp); + tmp += len + 2; + break; + case FLV_DATA_TYPE_OBJECT: + while ((len = BE_16(tmp)) && tmp < end) { + lprintf(" got object var (%s)\n", tmp+2); + str = tmp + 2; + tmp += len + 2; + len = parse_flv_var(this, tmp, end-tmp, str, len); + tmp += len; + } + if (*tmp++ != FLV_DATA_TYPE_ENDOBJECT) + return 0; + break; + case FLV_DATA_TYPE_ECMARRAY: + lprintf(" got EMCA array (%d indices)\n", BE_32(tmp)); + num = BE_32(tmp); + tmp += 4; + while (num-- && tmp < end) { + lprintf(" got array key (%s)\n", tmp+2); + len = BE_16(tmp); + str = tmp + 2; + tmp += len + 2; + len = parse_flv_var(this, tmp, end-tmp, str, len); + tmp += len; + } + break; + case FLV_DATA_TYPE_ARRAY: + lprintf(" got array (%d indices)\n", BE_32(tmp)); + num = BE_32(tmp); + tmp += 4; + if (key && keylen == 5 && !strncmp(key, "times", 5)) { + if (this->index) + free (this->index); + this->index = xine_xmalloc(num*sizeof(flv_index_entry_t)); + this->num_indices = num; + for (num = 0; num < this->num_indices && tmp < end; num++) { + if (*tmp++ == FLV_DATA_TYPE_NUMBER) { + lprintf(" got number (%f)\n", BE_F64(tmp)); + this->index[num].pts = BE_F64(tmp) * 1000.0; + tmp += 8; + } + } + break; + } + if (key && keylen == 13 && !strncmp(key, "filepositions", 13)) { + if (this->index && this->num_indices == num) { + for (num = 0; num < this->num_indices && tmp < end; num++) { + if (*tmp++ == FLV_DATA_TYPE_NUMBER) { + lprintf(" got number (%f)\n", BE_F64(tmp)); + this->index[num].offset = BE_F64(tmp); + tmp += 8; + } + } + break; + } + } + while (num-- && tmp < end) { + len = parse_flv_var(this, tmp, end-tmp, NULL, 0); + tmp += len; + } + break; + case FLV_DATA_TYPE_DATE: + lprintf(" got date (%"PRId64", %d)\n", BE_64(tmp), BE_16(tmp+8)); + tmp += 10; + break; + default: + lprintf(" got type %d\n", type); + break; + } + + return (tmp - buf); +} - lprintf (" sending FLV chunk...\n"); - this->input->seek(this->input, 4, SEEK_CUR); - if (this->input->read(this->input, buffer, 12) != 12) { +static void parse_flv_script(demux_flv_t *this, int size) { + unsigned char *buf = xine_xmalloc(size); + unsigned char *tmp = buf; + unsigned char *end = buf + size; + int len; + + if (this->input->read(this->input, buf, size ) != size) { this->status = DEMUX_FINISHED; - return this->status; + free(buf); + return; } - chunk_type = buffer[0]; - remaining_bytes = BE_32(&buffer[0]); - remaining_bytes &= 0x00FFFFFF; - pts = BE_32(&buffer[3]); - pts &= 0x00FFFFFF; - sub_type = buffer[11]; - - /* Flash timestamps are in milliseconds; multiply by 90 to get xine pts */ - pts *= 90; - - lprintf (" chunk_type = %X, 0x%X -1 bytes, pts %lld, sub-type = %X\n", - chunk_type, remaining_bytes, pts, sub_type); - - /* only handle the chunk right now if chunk type is 9 and lower nibble - * of sub-type is 2 */ - if ((chunk_type != 9) || ((sub_type & 0x0F) != 2)) { - this->input->seek(this->input, remaining_bytes - 1, SEEK_CUR); - } else { - /* send the chunk off to the video demuxer */ - remaining_bytes--; /* sub-type byte does not count */ + while (tmp < end) { + len = parse_flv_var(this, tmp, end-tmp, NULL, 0); + if (len < 1) + break; + tmp += len; + } + + free(buf); +} + +static int read_flv_packet(demux_flv_t *this) { + fifo_buffer_t *fifo = NULL; + buf_element_t *buf = NULL; + unsigned char buffer[12]; + unsigned char tag_type; + unsigned int remaining_bytes; + unsigned int buf_type = 0; + unsigned int buf_flags = 0; + unsigned int pts; + + while (1) { + lprintf (" reading FLV tag...\n"); + this->input->seek(this->input, 4, SEEK_CUR); + if (this->input->read(this->input, buffer, 11) != 11) { + this->status = DEMUX_FINISHED; + return this->status; + } + + tag_type = buffer[0]; + remaining_bytes = BE_24(&buffer[1]); + pts = BE_24(&buffer[4]) | (buffer[7] << 24); + + lprintf(" tag_type = 0x%02X, 0x%X bytes, pts %u\n", + tag_type, remaining_bytes, pts/90); + + switch (tag_type) { + case FLV_TAG_TYPE_AUDIO: + lprintf(" got audio tag..\n"); + if (this->input->read(this->input, buffer, 1) != 1) { + this->status = DEMUX_FINISHED; + return this->status; + } + remaining_bytes--; + + switch (buffer[0] >> 4) { + case FLV_SOUND_FORMAT_PCM_BE: + buf_type = BUF_AUDIO_LPCM_BE; + break; + case FLV_SOUND_FORMAT_ADPCM: + buf_type = BUF_AUDIO_FLVADPCM; + break; + case FLV_SOUND_FORMAT_MP3: + buf_type = BUF_AUDIO_MPEG; + break; + case FLV_SOUND_FORMAT_PCM_LE: + buf_type = BUF_AUDIO_LPCM_LE; + break; + default: + lprintf(" unsupported audio format (%d)...\n", buffer[0] >> 4); + buf_type = BUF_AUDIO_UNKNOWN; + break; + } + + fifo = this->audio_fifo; + if (!this->got_audio) { + /* send init info to audio decoder */ + buf = fifo->buffer_pool_alloc(fifo); + buf->decoder_flags = BUF_FLAG_HEADER|BUF_FLAG_STDHEADER|BUF_FLAG_FRAME_END; + buf->decoder_info[0] = 0; + buf->decoder_info[1] = 44100 >> (3 - ((buffer[0] >> 2) & 3)); /* samplerate */ + buf->decoder_info[2] = (buffer[0] & 2) ? 16 : 8; /* bits per sample */ + buf->decoder_info[3] = (buffer[0] & 1) + 1; /* channels */ + buf->size = 0; /* no extra data */ + buf->type = buf_type; + + fifo->put(fifo, buf); + + this->got_audio = 1; + } + break; + + case FLV_TAG_TYPE_VIDEO: + lprintf(" got video tag..\n"); + if (this->input->read(this->input, buffer, 1) != 1) { + this->status = DEMUX_FINISHED; + return this->status; + } + remaining_bytes--; + + if ((buffer[0] >> 4) == 0x01) + buf_flags = BUF_FLAG_KEYFRAME; + + switch (buffer[0] & 0x0F) { + case FLV_VIDEO_FORMAT_FLV1: + buf_type = BUF_VIDEO_FLV1; + break; + case FLV_VIDEO_FORMAT_VP6: + buf_type = BUF_VIDEO_VP6F; + /* VP6 extra header */ + this->input->read(this->input, buffer, 1 ); + remaining_bytes--; + break; + case FLV_VIDEO_FORMAT_VP6A: + buf_type = BUF_VIDEO_VP6F; + /* VP6A extra header */ + this->input->read(this->input, buffer, 4); + remaining_bytes -= 4; + break; + default: + lprintf(" unsupported video format (%d)...\n", buffer[0] & 0x0F); + buf_type = BUF_VIDEO_UNKNOWN; + break; + } + + fifo = this->video_fifo; + if (!this->got_video) { + xine_bmiheader *bih; + /* send init info to video decoder; send the bitmapinfo header to the decoder + * primarily as a formality since there is no real data inside */ + buf = fifo->buffer_pool_alloc(fifo); + buf->decoder_flags = BUF_FLAG_HEADER | BUF_FLAG_STDHEADER | + BUF_FLAG_FRAMERATE | BUF_FLAG_FRAME_END; + buf->decoder_info[0] = this->framerate ? (90000.0/this->framerate) : 0; + bih = (xine_bmiheader *) buf->content; + memset(bih, 0, sizeof(xine_bmiheader)); + bih->biSize = sizeof(xine_bmiheader); + bih->biWidth = this->width; + bih->biHeight = this->height; + buf->size = sizeof(xine_bmiheader); + buf->type = buf_type; + if (buf_type == BUF_VIDEO_VP6F) { + *((unsigned char *)buf->content+buf->size) = buffer[0]; + bih->biSize++; + buf->size++; + } + + fifo->put(fifo, buf); + + this->got_video = 1; + } + break; + + case FLV_TAG_TYPE_SCRIPT: + lprintf(" got script tag...\n"); + parse_flv_script(this, remaining_bytes); + continue; + + default: + lprintf(" skipping packet...\n"); + this->input->seek(this->input, remaining_bytes, SEEK_CUR); + continue; + } + while (remaining_bytes) { - buf = this->video_fifo->buffer_pool_alloc (this->video_fifo); - buf->type = BUF_VIDEO_FLV1; - if( this->input->get_length (this->input) ) - buf->extra_info->input_normpos = (int)( (double) this->input->get_current_pos (this->input) * - 65535 / this->input->get_length (this->input) ); + buf = fifo->buffer_pool_alloc(fifo); + buf->type = buf_type; + buf->pts = (int64_t) pts * 90; + check_newpts(this, buf->pts, (tag_type == FLV_TAG_TYPE_VIDEO)); + + buf->extra_info->input_time = pts; + if (this->input->get_length(this->input)) { + buf->extra_info->input_normpos = + (int)((double)this->input->get_current_pos(this->input) * 65535.0 / this->size); + } if (remaining_bytes > buf->max_size) buf->size = buf->max_size; @@ -155,28 +501,120 @@ static int demux_flv_send_chunk(demux_plugin_t *this_gen) { buf->size = remaining_bytes; remaining_bytes -= buf->size; + buf->decoder_flags = buf_flags; if (!remaining_bytes) buf->decoder_flags |= BUF_FLAG_FRAME_END; - if (this->input->read(this->input, buf->content, buf->size) != - buf->size) { + if (this->input->read(this->input, buf->content, buf->size) != buf->size) { buf->free_buffer(buf); this->status = DEMUX_FINISHED; break; } - buf->pts = pts; - buf->extra_info->input_time = buf->pts / 90; - this->video_fifo->put(this->video_fifo, buf); + fifo->put(fifo, buf); } + + this->cur_pts = pts; + break; } - + return this->status; } +static void seek_flv_file(demux_flv_t *this, int seek_pts) { + unsigned char buffer[16]; + unsigned int pts = this->cur_pts; + int len = 0; + int next_tag = 0; + int do_rewind = (seek_pts < this->cur_pts); + + lprintf(" seeking %s to %d...\n", + do_rewind ? "backward" : "forward", seek_pts); + + if (seek_pts == 0) { + this->input->seek(this->input, this->start, SEEK_SET); + this->cur_pts = 0; + return; + } + + if (this->index) { + int i; + + if (do_rewind) { + for (i = this->num_indices-1; i > 0; i--) { + if (this->index[i-1].pts < seek_pts) + break; + } + } + else { + for (i = 0; i < (this->num_indices-1); i++) { + if (this->index[i+1].pts > seek_pts) + break; + } + } + + if (this->index[i].offset >= this->start+4) { + lprintf(" seeking to index entry %d (pts:%u, offset:%u).\n", + i, this->index[i].pts, this->index[i].offset); + + this->input->seek(this->input, this->index[i].offset-4, SEEK_SET); + this->cur_pts = this->index[i].pts; + return; + } + } + + while (do_rewind ? (seek_pts < this->cur_pts) : (seek_pts > this->cur_pts)) { + unsigned char tag_type; + int data_size; + int ptag_size; + + if (next_tag) + this->input->seek(this->input, next_tag, SEEK_CUR); + + len = this->input->read(this->input, buffer, 16); + if (len != 16) { + len = (len < 0) ? 0 : len; + break; + } + + ptag_size = BE_32(&buffer[0]); + tag_type = buffer[4]; + data_size = BE_24(&buffer[5]); + pts = BE_24(&buffer[8]) | (buffer[11] << 24); + + if (do_rewind) { + if (!ptag_size) break; /* beginning of movie */ + next_tag = -(ptag_size + 16 + 4); + } + else { + next_tag = data_size - 1; + } + + if (this->flags & FLV_FLAG_HAS_VIDEO) { + /* sync to video key frame */ + if (tag_type != FLV_TAG_TYPE_VIDEO || (buffer[15] >> 4) != 0x01) + continue; + lprintf(" video keyframe found at %d...\n", pts); + } + this->cur_pts = pts; + } + + /* seek back to the beginning of the tag */ + this->input->seek(this->input, -len, SEEK_CUR); + + lprintf( " seeked to %d.\n", pts); +} + + +static int demux_flv_send_chunk(demux_plugin_t *this_gen) { + demux_flv_t *this = (demux_flv_t *) this_gen; + + return read_flv_packet(this); +} + static void demux_flv_send_headers(demux_plugin_t *this_gen) { demux_flv_t *this = (demux_flv_t *) this_gen; - buf_element_t *buf; + int i; this->video_fifo = this->stream->video_fifo; this->audio_fifo = this->stream->audio_fifo; @@ -185,24 +623,23 @@ static void demux_flv_send_headers(demux_plugin_t *this_gen) { /* load stream information */ _x_stream_info_set(this->stream, XINE_STREAM_INFO_HAS_VIDEO, - (this->video_type ? 1 : 0)); + (this->flags & FLV_FLAG_HAS_VIDEO) ? 1 : 0); _x_stream_info_set(this->stream, XINE_STREAM_INFO_HAS_AUDIO, - (this->audio_type ? 1 : 0)); + (this->flags & FLV_FLAG_HAS_AUDIO) ? 1 : 0); /* send start buffers */ _x_demux_control_start(this->stream); - /* send init info to decoders; send the bitmapinfo header to the decoder - * primarily as a formality since there is no real data inside */ - buf = this->video_fifo->buffer_pool_alloc (this->video_fifo); - buf->decoder_flags = BUF_FLAG_HEADER|BUF_FLAG_STDHEADER|BUF_FLAG_FRAMERATE| - BUF_FLAG_FRAME_END; - buf->decoder_info[0] = 7470; /* initial duration */ - memcpy(buf->content, this->bih, sizeof(xine_bmiheader)); - buf->size = sizeof(xine_bmiheader); - buf->type = BUF_VIDEO_FLV1; - this->video_fifo->put (this->video_fifo, buf); - + /* find first audio/video packets and send headers */ + for (i = 0; i < 20; i++) { + if (read_flv_packet(this) != DEMUX_OK) + break; + if (((this->flags & FLV_FLAG_HAS_VIDEO) && this->got_video) && + ((this->flags & FLV_FLAG_HAS_AUDIO) && this->got_audio)) { + lprintf(" headers sent...\n"); + break; + } + } } static int demux_flv_seek (demux_plugin_t *this_gen, @@ -210,10 +647,21 @@ static int demux_flv_seek (demux_plugin_t *this_gen, demux_flv_t *this = (demux_flv_t *) this_gen; - /* if thread is not running, initialize demuxer */ - if( !playing ) { - this->status = DEMUX_OK; - } + this->status = DEMUX_OK; + + if (INPUT_IS_SEEKABLE(this->input)) { + if (start_pos && !start_time) + start_time = (int64_t) this->length * start_pos / 65535; + + if (!this->length || start_time < this->length) { + seek_flv_file(this, start_time); + + if (playing) { + this->buf_flag_seek = 1; + _x_demux_flush_engine(this->stream); + } + } + } return this->status; } @@ -221,6 +669,8 @@ static int demux_flv_seek (demux_plugin_t *this_gen, static void demux_flv_dispose (demux_plugin_t *this_gen) { demux_flv_t *this = (demux_flv_t *) this_gen; + if (this->index) + free(this->index); free(this); } @@ -231,9 +681,9 @@ static int demux_flv_get_status (demux_plugin_t *this_gen) { } static int demux_flv_get_stream_length (demux_plugin_t *this_gen) { -/* demux_flv_t *this = (demux_flv_t *) this_gen;*/ + demux_flv_t *this = (demux_flv_t *) this_gen; - return 0; + return this->length; } static uint32_t demux_flv_get_capabilities(demux_plugin_t *this_gen) { @@ -247,10 +697,10 @@ static int demux_flv_get_optional_data(demux_plugin_t *this_gen, static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *stream, input_plugin_t *input) { + demux_flv_t *this; - demux_flv_t *this; - - this = xine_xmalloc (sizeof (demux_flv_t)); + this = xine_xmalloc(sizeof (demux_flv_t)); + this->xine = stream->xine; this->stream = stream; this->input = input; @@ -267,52 +717,43 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->status = DEMUX_FINISHED; switch (stream->content_detection_method) { + case METHOD_BY_EXTENSION: + if (!_x_demux_check_extension(input->get_mrl(input), "flv")) { + free (this); + return NULL; + } + + /* falling through is intended */ + case METHOD_BY_CONTENT: + case METHOD_EXPLICIT: + if (!open_flv_file(this)) { + free (this); + return NULL; + } + break; - case METHOD_BY_EXTENSION: { - char *extensions, *mrl; - - mrl = input->get_mrl (input); - extensions = class_gen->get_extensions (class_gen); - - if (!_x_demux_check_extension (mrl, extensions)) { - free (this); - return NULL; - } - } - /* falling through is intended */ - - case METHOD_BY_CONTENT: - case METHOD_EXPLICIT: - - if (!open_flv_file(this)) { + default: free (this); return NULL; - } - - break; - - default: - free (this); - return NULL; } return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Flash Video file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "FLV"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "flv"; } -static char *get_mimetypes (demux_class_t *this_gen) { - return NULL; +static const char *get_mimetypes (demux_class_t *this_gen) { + return "video/x-flv: flv: Flash video;"; } static void class_dispose (demux_class_t *this_gen) { diff --git a/src/demuxers/demux_idcin.c b/src/demuxers/demux_idcin.c index a778d4c6f..461771425 100644 --- a/src/demuxers/demux_idcin.c +++ b/src/demuxers/demux_idcin.c @@ -65,7 +65,7 @@ * - if any bytes exceed 63, do not shift the bytes at all before * transmitting them to the video decoder * - * $Id: demux_idcin.c,v 1.53 2005/11/21 10:28:18 valtri Exp $ + * $Id: demux_idcin.c,v 1.55 2007/02/20 00:34:55 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -222,7 +222,7 @@ static int demux_idcin_send_chunk(demux_plugin_t *this_gen) { if (!remaining_sample_bytes) buf->decoder_flags |= BUF_FLAG_FRAME_END; - lprintf("sending video buf with %d bytes, %lld pts\n", buf->size, buf->pts); + lprintf("sending video buf with %d bytes, %"PRId64" pts\n", buf->size, buf->pts); this->video_fifo->put(this->video_fifo, buf); } @@ -263,7 +263,7 @@ static int demux_idcin_send_chunk(demux_plugin_t *this_gen) { if (!remaining_sample_bytes) buf->decoder_flags |= BUF_FLAG_FRAME_END; - lprintf("sending audio buf with %d bytes, %lld pts\n", buf->size, buf->pts); + lprintf("sending audio buf with %d bytes, %"PRId64" pts\n", buf->size, buf->pts); this->audio_fifo->put(this->audio_fifo, buf); } } @@ -493,7 +493,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -524,19 +524,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Id Quake II Cinematic file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "Id CIN"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "cin"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_iff.c b/src/demuxers/demux_iff.c index 213ac4c99..cc4df0c85 100644 --- a/src/demuxers/demux_iff.c +++ b/src/demuxers/demux_iff.c @@ -36,7 +36,7 @@ * * ANIM (Animations) * - Animation works fine, without seeking. * - * $Id: demux_iff.c,v 1.17 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: demux_iff.c,v 1.19 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -827,7 +827,8 @@ static int demux_iff_send_chunk(demux_plugin_t *this_gen) { } } else { for (j = 0, k = (interleave_index / 2); j < (buf->size / 2); j += this->audio_channels) { - zw_16 = BE_16(&pointer16_from[k++]); + zw_16 = BE_16(&pointer16_from[k]); + k++; zw_rescale = zw_16; zw_rescale *= this->audio_volume_left; zw_rescale /= max_volume; @@ -856,7 +857,8 @@ static int demux_iff_send_chunk(demux_plugin_t *this_gen) { } } else { for (j = 1; j < (buf->size / 2); j += this->audio_channels) { - zw_16 = BE_16(&pointer16_from[k++]); + zw_16 = BE_16(&pointer16_from[k]); + k++; zw_rescale = zw_16; zw_rescale *= this->audio_volume_left; zw_rescale /= max_volume; @@ -1253,7 +1255,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -1283,19 +1285,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "IFF demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "IFF"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "iff svx 8svx 16sv ilbm ham ham6 ham8 anim anim3 anim5 anim7 anim8"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return "audio/x-8svx: 8svx: IFF-8SVX Audio;" "audio/8svx: 8svx: IFF-8SVX Audio;" "audio/x-16sv: 16sv: IFF-16SV Audio;" diff --git a/src/demuxers/demux_image.c b/src/demuxers/demux_image.c index 727d80a29..d799c2324 100644 --- a/src/demuxers/demux_image.c +++ b/src/demuxers/demux_image.c @@ -19,7 +19,7 @@ */ /* - * $Id: demux_image.c,v 1.25 2006/08/13 23:51:33 miguelfreitas Exp $ + * $Id: demux_image.c,v 1.26 2007/01/19 00:26:40 dgp85 Exp $ * * image dummy demultiplexer */ @@ -177,7 +177,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, break; case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -225,19 +225,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, * image demuxer class */ -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "image demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "imagedmx"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "png gif jpg jpeg"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_ipmovie.c b/src/demuxers/demux_ipmovie.c index 20c1c3118..6fe185b1a 100644 --- a/src/demuxers/demux_ipmovie.c +++ b/src/demuxers/demux_ipmovie.c @@ -23,7 +23,7 @@ * For more information regarding the Interplay MVE file format, visit: * http://www.pcisys.net/~melanson/codecs/ * - * $Id: demux_ipmovie.c,v 1.25 2004/06/13 21:28:53 miguelfreitas Exp $ + * $Id: demux_ipmovie.c,v 1.27 2007/02/20 00:34:55 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -326,7 +326,7 @@ static int process_ipmovie_chunk(demux_ipmovie_t *this) { audio_pts *= this->audio_frame_count; audio_pts /= this->wave.nSamplesPerSec; - lprintf("sending audio frame with pts %lld (%d audio frames)\n", + lprintf("sending audio frame with pts %"PRId64" (%d audio frames)\n", audio_pts, this->audio_frame_count); if(this->audio_fifo) { @@ -432,7 +432,7 @@ static int process_ipmovie_chunk(demux_ipmovie_t *this) { lprintf("set video data\n"); current_file_pos = this->input->get_current_pos(this->input); - lprintf("sending video data with pts %lld\n", + lprintf("sending video data with pts %"PRId64"\n", this->video_pts); /* send off any new palette data */ @@ -693,7 +693,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -723,19 +723,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Interplay MVE Movie demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "Interplay MVE"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "mve mv8"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_matroska.c b/src/demuxers/demux_matroska.c index bcc5f52ea..2bd8f3540 100644 --- a/src/demuxers/demux_matroska.c +++ b/src/demuxers/demux_matroska.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2000-2005 the xine project + * Copyright (C) 2000-2007 the xine project * * This file is part of xine, a free video player. * @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_matroska.c,v 1.49 2006/11/14 14:17:31 dgp85 Exp $ + * $Id: demux_matroska.c,v 1.53 2007/03/12 16:27:21 dgp85 Exp $ * * demultiplexer for matroska streams * @@ -362,6 +362,140 @@ static int parse_audio_track (demux_matroska_t *this, matroska_audio_track_t *at } +static int parse_content_compression (demux_matroska_t *this, matroska_track_t *track) { + ebml_parser_t *ebml = this->ebml; + int next_level = 6; + + while (next_level == 6) { + ebml_elem_t elem; + uint64_t val; + + if (!ebml_read_elem_head(ebml, &elem)) + return 0; + + switch (elem.id) { + case MATROSKA_ID_CE_COMPALGO: + lprintf("ContentCompAlgo\n"); + if (!ebml_read_uint(ebml, &elem, &val)) + return 0; + switch (val) + { + case MATROSKA_COMPRESS_ZLIB: + case MATROSKA_COMPRESS_BZLIB: + case MATROSKA_COMPRESS_LZO1X: + case MATROSKA_COMPRESS_HEADER_STRIP: + track->compress_algo = val; + break; + default: + track->compress_algo = MATROSKA_COMPRESS_UNKNOWN; + break; + } + break; + case MATROSKA_ID_CE_COMPSETTINGS: + lprintf("ContentCompSettings (UNSUPPORTED)\n"); + if (!ebml_skip(ebml, &elem)) + return 0; + break; + default: + lprintf("Unhandled ID: 0x%x\n", elem.id); + if (!ebml_skip(ebml, &elem)) + return 0; + } + next_level = ebml_get_next_level(ebml, &elem); + } + return 1; +} + + +static int parse_content_encoding (demux_matroska_t *this, matroska_track_t *track) { + ebml_parser_t *ebml = this->ebml; + int next_level = 5; + + while (next_level == 5) { + ebml_elem_t elem; + uint64_t val; + + if (!ebml_read_elem_head(ebml, &elem)) + return 0; + + switch (elem.id) { + case MATROSKA_ID_CE_ORDER: + lprintf("ContentEncodingOrder\n"); + if (!ebml_read_uint(ebml, &elem, &val)) + return 0; + if (val != 0) { // multiple content encoding isn't supported + lprintf(" warning: a non-zero encoding order is UNSUPPORTED\n"); + return 0; + } + break; + case MATROSKA_ID_CE_SCOPE: + lprintf("ContentEncodingScope\n"); + if (!ebml_read_uint(ebml, &elem, &val)) + return 0; + if (val != 1) { // 1 (all frame contents) is the only supported option + lprintf(" warning: UNSUPPORTED encoding scope (%" PRId64 ")\n", val); + return 0; + } + break; + case MATROSKA_ID_CE_TYPE: + lprintf("ContentEncodingType\n"); + if (!ebml_read_uint(ebml, &elem, &val)) + return 0; + if (val != 0) // only compression (0) is supported + return 0; + break; + case MATROSKA_ID_CE_COMPRESSION: + lprintf("ContentCompression\n"); + if (!ebml_read_master (ebml, &elem)) + return 0; + if ((elem.len > 0) && !parse_content_compression(this, track)) + return 0; + break; + case MATROSKA_ID_CE_ENCRYPTION: + lprintf("ContentEncryption (UNSUPPORTED)\n"); + if (!ebml_skip(ebml, &elem)) + return 0; + break; + default: + lprintf("Unhandled ID: 0x%x\n", elem.id); + if (!ebml_skip(ebml, &elem)) + return 0; + } + next_level = ebml_get_next_level(ebml, &elem); + } + return 1; +} + + +static int parse_content_encodings (demux_matroska_t *this, matroska_track_t *track) { + ebml_parser_t *ebml = this->ebml; + int next_level = 4; + + while (next_level == 4) { + ebml_elem_t elem; + + if (!ebml_read_elem_head(ebml, &elem)) + return 0; + + switch (elem.id) { + case MATROSKA_ID_CONTENTENCODING: + lprintf("ContentEncoding\n"); + if (!ebml_read_master (ebml, &elem)) + return 0; + if ((elem.len > 0) && !parse_content_encoding(this, track)) + return 0; + break; + default: + lprintf("Unhandled ID: 0x%x\n", elem.id); + if (!ebml_skip(ebml, &elem)) + return 0; + } + next_level = ebml_get_next_level(ebml, &elem); + } + return 1; +} + + static void init_codec_video(demux_matroska_t *this, matroska_track_t *track) { buf_element_t *buf; @@ -937,45 +1071,67 @@ static void handle_vobsub (demux_plugin_t *this_gen, matroska_track_t *track, int input_normpos, int input_time) { demux_matroska_t *this = (demux_matroska_t *) this_gen; buf_element_t *buf; - z_stream zstream; - uint8_t *dest; - int old_data_len, result; - - old_data_len = data_len; - zstream.zalloc = (alloc_func) 0; - zstream.zfree = (free_func) 0; - zstream.opaque = (voidpf) 0; - if (inflateInit (&zstream) != Z_OK) { - xprintf(this->stream->xine, XINE_VERBOSITY_LOG, - "demux_matroska: VobSub: zlib inflateInit failed.\n"); - return; - } - zstream.next_in = (Bytef *)data; - zstream.avail_in = data_len; - dest = (uint8_t *)malloc(data_len); - zstream.avail_out = data_len; - do { - data_len += 4000; - dest = (uint8_t *)realloc(dest, data_len); - zstream.next_out = (Bytef *)(dest + zstream.total_out); - result = inflate (&zstream, Z_NO_FLUSH); - if ((result != Z_OK) && (result != Z_STREAM_END)) { + if (track->compress_algo == MATROSKA_COMPRESS_ZLIB || + track->compress_algo == MATROSKA_COMPRESS_UNKNOWN) { + z_stream zstream; + uint8_t *dest; + int old_data_len, result; + + old_data_len = data_len; + zstream.zalloc = (alloc_func) 0; + zstream.zfree = (free_func) 0; + zstream.opaque = (voidpf) 0; + if (inflateInit (&zstream) != Z_OK) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, - "demux_matroska: VobSub: zlib decompression failed.\n"); - free(dest); - inflateEnd(&zstream); + "demux_matroska: VobSub: zlib inflateInit failed.\n"); return; } - zstream.avail_out += 4000; - } while ((zstream.avail_out == 4000) && - (zstream.avail_in != 0) && (result != Z_STREAM_END)); - - data_len = zstream.total_out; - inflateEnd(&zstream); - - lprintf("VobSub: decompression for track %d from %d to %d\n", - (int)track->track_num, old_data_len, data_len); + zstream.next_in = (Bytef *)data; + zstream.avail_in = data_len; + + dest = (uint8_t *)malloc(data_len); + zstream.avail_out = data_len; + do { + data_len += 4000; + dest = (uint8_t *)realloc(dest, data_len); + zstream.next_out = (Bytef *)(dest + zstream.total_out); + result = inflate (&zstream, Z_NO_FLUSH); + if ((result != Z_OK) && (result != Z_STREAM_END)) { + xprintf(this->stream->xine, XINE_VERBOSITY_LOG, + "demux_matroska: VobSub: zlib decompression failed for track %d (result = %d).\n", + (int)track->track_num, result); + free(dest); + inflateEnd(&zstream); + + if (result == Z_DATA_ERROR && track->compress_algo == MATROSKA_COMPRESS_UNKNOWN) { + track->compress_algo = MATROSKA_COMPRESS_NONE; + data_len = old_data_len; + xprintf(this->stream->xine, XINE_VERBOSITY_LOG, + "demux_matroska: VobSub: falling back to uncompressed mode.\n"); + break; + } + return; + } + zstream.avail_out += 4000; + } while ((zstream.avail_out == 4000) && + (zstream.avail_in != 0) && (result != Z_STREAM_END)); + + if (track->compress_algo != MATROSKA_COMPRESS_NONE) { + data_len = zstream.total_out; + inflateEnd(&zstream); + + data = dest; + track->compress_algo = MATROSKA_COMPRESS_ZLIB; + lprintf("VobSub: decompression for track %d from %d to %d\n", + (int)track->track_num, old_data_len, data_len); + } + } + else + { + lprintf("VobSub: track %d isn't compressed (%d bytes)\n", + (int)track->track_num, data_len); + } buf = track->fifo->buffer_pool_alloc(track->fifo); @@ -986,8 +1142,8 @@ static void handle_vobsub (demux_plugin_t *this_gen, matroska_track_t *track, buf->decoder_info[2] = SPU_DVD_SUBTYPE_VOBSUB_PACKAGE; buf->type = track->buf_type; - xine_fast_memcpy(buf->content, dest, data_len); - + xine_fast_memcpy(buf->content, data, data_len); + buf->extra_info->input_normpos = input_normpos; buf->extra_info->input_time = input_time; @@ -1000,7 +1156,8 @@ static void handle_vobsub (demux_plugin_t *this_gen, matroska_track_t *track, buf->free_buffer(buf); } - free(dest); + if (track->compress_algo == MATROSKA_COMPRESS_ZLIB) + free(data); } static int parse_track_entry(demux_matroska_t *this, matroska_track_t *track) { @@ -1100,7 +1257,16 @@ static int parse_track_entry(demux_matroska_t *this, matroska_track_t *track) { if (!ebml_read_uint(ebml, &elem, &val)) return 0; track->default_duration = val; - lprintf("Default Duration: %lld\n", track->default_duration); + lprintf("Default Duration: %"PRIu64"\n", track->default_duration); + } + break; + + case MATROSKA_ID_CONTENTENCODINGS: { + lprintf("ContentEncodings\n"); + if (!ebml_read_master (ebml, &elem)) + return 0; + if ((elem.len > 0) && !parse_content_encodings(this, track)) + return 0; } break; @@ -1230,6 +1396,10 @@ static int parse_track_entry(demux_matroska_t *this, matroska_track_t *track) { init_codec = init_codec_audio; } else if (!strcmp(track->codec_id, MATROSKA_CODEC_ID_A_DTS)) { + lprintf("MATROSKA_CODEC_ID_A_DTS\n"); + track->buf_type = BUF_AUDIO_DTS; + init_codec = init_codec_audio; + } else if (!strcmp(track->codec_id, MATROSKA_CODEC_ID_A_VORBIS)) { lprintf("MATROSKA_CODEC_ID_A_VORBIS\n"); @@ -1289,6 +1459,14 @@ static int parse_track_entry(demux_matroska_t *this, matroska_track_t *track) { track->buf_type = BUF_SPU_DVD; track->handle_content = handle_vobsub; init_codec = init_codec_vobsub; + + /* Enable autodetection of the zlib compression, unless it was + * explicitely set. Most vobsubs are compressed with zlib but + * are not declared as such. + */ + if (track->compress_algo == MATROSKA_COMPRESS_NONE) { + track->compress_algo = MATROSKA_COMPRESS_UNKNOWN; + } } else { lprintf("unknown codec\n"); } @@ -1339,12 +1517,17 @@ static int parse_tracks(demux_matroska_t *this) { switch (elem.id) { case MATROSKA_ID_TR_ENTRY: { + matroska_track_t *track; + /* alloc and initialize a track with 0 */ - this->tracks[this->num_tracks] = xine_xmalloc(sizeof(matroska_track_t)); + track = xine_xmalloc(sizeof(matroska_track_t)); + track->compress_algo = MATROSKA_COMPRESS_NONE; + this->tracks[this->num_tracks] = track; + lprintf("TrackEntry\n"); if (!ebml_read_master (ebml, &elem)) return 0; - if ((elem.len > 0) && !parse_track_entry(this, this->tracks[this->num_tracks])) + if ((elem.len > 0) && !parse_track_entry(this, track)) return 0; this->num_tracks++; } @@ -2623,13 +2806,11 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str break; case METHOD_BY_EXTENSION: { - char *mrl = input->get_mrl(input); - char *extensions; + const char *const mrl = input->get_mrl(input); + const char *const extensions = class_gen->get_extensions (class_gen);; lprintf ("stage by extension %s\n", mrl); - extensions = class_gen->get_extensions (class_gen); - if (!_x_demux_check_extension (mrl, extensions)) return NULL; @@ -2687,22 +2868,22 @@ error: * demux matroska class */ -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "matroska demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "matroska"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "mkv"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return "video/mkv: mkv: matroska;"; } diff --git a/src/demuxers/demux_mng.c b/src/demuxers/demux_mng.c index 7f7b5bd84..e2ab1e4ea 100644 --- a/src/demuxers/demux_mng.c +++ b/src/demuxers/demux_mng.c @@ -19,7 +19,7 @@ */ /* - * $Id: demux_mng.c,v 1.28 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: demux_mng.c,v 1.29 2007/01/19 00:26:40 dgp85 Exp $ * * demux_mng.c, Demuxer plugin for Multiple-image Network Graphics format * @@ -288,7 +288,7 @@ static demux_plugin_t* open_plugin(demux_class_t *class_gen, xine_stream_t *stre break; case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl(input); extensions = class_gen->get_extensions (class_gen); @@ -336,19 +336,19 @@ static demux_plugin_t* open_plugin(demux_class_t *class_gen, xine_stream_t *stre return &this->demux_plugin; } -static char *get_description(demux_class_t *this_gen){ +static const char *get_description(demux_class_t *this_gen){ return "Multiple-image Network Graphics demux plugin"; } -static char *get_identifier(demux_class_t *this_gen){ +static const char *get_identifier(demux_class_t *this_gen){ return "MNG"; } -static char *get_extensions(demux_class_t *this_gen){ +static const char *get_extensions(demux_class_t *this_gen){ return "png mng"; } -static char *get_mimetypes(demux_class_t *this_gen){ +static const char *get_mimetypes(demux_class_t *this_gen){ return "image/png: png: PNG image;" "image/x-png: png: PNG image;" "video/mng: mng: MNG animation;" diff --git a/src/demuxers/demux_mod.c b/src/demuxers/demux_mod.c index 185ef5c97..37e066b13 100644 --- a/src/demuxers/demux_mod.c +++ b/src/demuxers/demux_mod.c @@ -50,6 +50,7 @@ #include "demux.h" #include "group_audio.h" #include "modplug.h" +#include "bswap.h" #define MOD_SAMPLERATE 44100 #define MOD_BITS 16 @@ -89,6 +90,43 @@ typedef struct { demux_class_t demux_class; } demux_mod_class_t; +#define FOURCC_32(a, b, c, d) (d + (c<<8) + (b<<16) + (a<<24)) + +/** + * @brief Probes if the given file can be demuxed using modplug or not + * @retval 0 The file is not a valid modplug file (or the probe isn't complete yet) + * @retval 1 The file has been identified as a valid modplug file + * @todo Just Protracker files are detected right now. + */ +static int probe_mod_file(demux_mod_t *this) { + /* We need the value present at offset 1080, of size 4 */ + union { + uint8_t buffer[1080+4]; /* The raw buffer */ + uint32_t values[(1080+4)/sizeof(uint32_t)]; + } header; + + if (_x_demux_read_header(this->input, header.buffer, 1080+4) != 1080+4) + return 0; + + /* Magic numbers taken from GNU file's magic description */ + switch( ABE_32(header.values + (1080/sizeof(uint32_t))) ) { + case FOURCC_32('M', '.', 'K', '.'): /* 4-channel Protracker module sound data */ + case FOURCC_32('M', '!', 'K', '!'): /* 4-channel Protracker module sound data */ + case FOURCC_32('F', 'L', 'T', '4'): /* 4-channel Startracker module sound data */ + case FOURCC_32('F', 'L', 'T', '8'): /* 8-channel Startracker module sound data */ + case FOURCC_32('4', 'C', 'H', 'N'): /* 4-channel Fasttracker module sound data */ + case FOURCC_32('6', 'C', 'H', 'N'): /* 6-channel Fasttracker module sound data */ + case FOURCC_32('8', 'C', 'H', 'N'): /* 8-channel Fasttracker module sound data */ + case FOURCC_32('C', 'D', '8', '1'): /* 8-channel Octalyser module sound data */ + case FOURCC_32('O', 'K', 'T', 'A'): /* 8-channel Oktalyzer module sound data */ + case FOURCC_32('1', '6', 'C', 'N'): /* 16-channel Taketracker module sound data */ + case FOURCC_32('3', '2', 'C', 'N'): /* 32-channel Taketracker module sound data */ + return 1; + } + + return 0; +} + /* returns 1 if the MOD file was opened successfully, 0 otherwise */ static int open_mod_file(demux_mod_t *this) { int total_read; @@ -289,7 +327,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str case METHOD_EXPLICIT: case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -306,6 +344,9 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str break; case METHOD_BY_CONTENT: + if (probe_mod_file(this) && open_mod_file(this)) + break; + default: free (this); return NULL; @@ -314,19 +355,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "ModPlug Amiga MOD Music file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "mod"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "mod it stm s3m 669 amf med mdl xm"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_mpc.c b/src/demuxers/demux_mpc.c index ab2ef511d..e1a3f28b9 100644 --- a/src/demuxers/demux_mpc.c +++ b/src/demuxers/demux_mpc.c @@ -24,7 +24,7 @@ * APE tag reading * Seeking?? * - * $Id: demux_mpc.c,v 1.3 2005/03/06 11:41:00 jstembridge Exp $ + * $Id: demux_mpc.c,v 1.5 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -119,11 +119,11 @@ static int open_mpc_file(demux_mpc_t *this) { } } - /* Validate signature - We only support SV7 at the moment */ + /* Validate signature - We only support SV 7.x at the moment */ if ((this->header[0] != 'M') || (this->header[1] != 'P') || (this->header[2] != '+') || - (this->header[3] != 0x07)) + ((this->header[3]&0x0f) != 0x07)) return 0; /* Get frame count */ @@ -344,7 +344,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -374,19 +374,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Musepack demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "Musepack"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "mpc mp+"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_mpeg.c b/src/demuxers/demux_mpeg.c index 61d7cc3ca..c9d49efa2 100644 --- a/src/demuxers/demux_mpeg.c +++ b/src/demuxers/demux_mpeg.c @@ -19,7 +19,7 @@ */ /* - * $Id: demux_mpeg.c,v 1.150 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: demux_mpeg.c,v 1.152 2007/02/20 00:34:55 dgp85 Exp $ * * demultiplexer for mpeg 1/2 program streams * reads streams of variable blocksizes @@ -310,7 +310,7 @@ static void parse_mpeg2_packet (demux_mpeg_t *this, int stream_id, int64_t scr) check_newpts( this, this->pts, PTS_VIDEO ); */ this->video_fifo->put (this->video_fifo, buf); - lprintf ("SPU SVCD PACK (pts: %lld, spu id: %d) put on FIFO\n", + lprintf ("SPU SVCD PACK (pts: %"PRId64", spu id: %d) put on FIFO\n", buf->pts, spu_id); return; @@ -1199,7 +1199,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str } case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -1222,19 +1222,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "MPEG program stream demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "MPEG"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "mpg mpeg"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return "video/mpeg: mpeg, mpg, mpe: MPEG animation;" "video/x-mpeg: mpeg, mpg, mpe: MPEG animation;"; } diff --git a/src/demuxers/demux_mpeg_block.c b/src/demuxers/demux_mpeg_block.c index ef17ac948..7083d33d9 100644 --- a/src/demuxers/demux_mpeg_block.c +++ b/src/demuxers/demux_mpeg_block.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_mpeg_block.c,v 1.217 2006/10/16 22:18:24 valtri Exp $ + * $Id: demux_mpeg_block.c,v 1.220 2007/02/20 00:34:55 dgp85 Exp $ * * demultiplexer for mpeg 1/2 program streams * used with fixed blocksize devices (like dvd/vcd) @@ -458,7 +458,7 @@ static int32_t parse_program_stream_pack_header(demux_mpeg_block_t *this, uint8_ this->scr += ( (p[8] & 0x03 << 7) | (p[9] & 0xFE >> 1) ); */ - lprintf ("SCR=%lld\n", this->scr); + lprintf ("SCR=%"PRId64"\n", this->scr); /* mux_rate */ @@ -525,7 +525,7 @@ static int32_t parse_private_stream_2(demux_mpeg_block_t *this, uint8_t *p, buf_ this->last_begin_time = buf->extra_info->input_time; } - lprintf ("NAV packet, start pts = %lld, end_pts = %lld\n", + lprintf ("NAV packet, start pts = %"PRId64", end_pts = %"PRId64"\n", start_pts, end_pts); if (this->nav_last_end_pts != start_pts && !this->preview_mode) { @@ -664,7 +664,7 @@ static int32_t parse_pes_for_pts(demux_mpeg_block_t *this, uint8_t *p, buf_eleme this->pts |= p[12] << 7 ; this->pts |= (p[13] & 0xFE) >> 1 ; - lprintf ("pts = %lld\n", this->pts); + lprintf ("pts = %"PRId64"\n", this->pts); } else this->pts = 0; @@ -731,7 +731,7 @@ static int32_t parse_private_stream_1(demux_mpeg_block_t *this, uint8_t *p, buf_ check_newpts( this, this->pts, PTS_VIDEO ); */ this->video_fifo->put (this->video_fifo, buf); - lprintf ("SPU SVCD PACK (%lld, %d) put on fifo\n", this->pts, spu_id); + lprintf ("SPU SVCD PACK (%"PRId64", %d) put on fifo\n", this->pts, spu_id); return -1; } @@ -749,7 +749,7 @@ static int32_t parse_private_stream_1(demux_mpeg_block_t *this, uint8_t *p, buf_ check_newpts( this, this->pts, PTS_VIDEO ); */ this->video_fifo->put (this->video_fifo, buf); - lprintf ("SPU CVD PACK (%lld, %d) put on fifo\n", this->pts, spu_id); + lprintf ("SPU CVD PACK (%"PRId64", %d) put on fifo\n", this->pts, spu_id); return -1; } @@ -1146,7 +1146,7 @@ static int demux_mpeg_block_estimate_rate (demux_mpeg_block_t *this) { count ++; /* - printf ("demux_mpeg_block: stream_id %02x, pos: %lld, pts: %d, cur_rate = %d, overall rate : %d\n", + printf ("demux_mpeg_block: stream_id %02x, pos: %"PRId64", pts: %d, cur_rate = %d, overall rate : %d\n", stream_id, pos, pts, cur_rate, rate); */ } @@ -1456,9 +1456,9 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str break; case METHOD_BY_EXTENSION: { - char *ending, *mrl; + char *ending; - mrl = input->get_mrl (input); + const char *const mrl = input->get_mrl (input); if(!strncmp(mrl, "vcd:", 4)) { this->blocksize = 2324; @@ -1516,19 +1516,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "DVD/VOB demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "MPEG_BLOCK"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "vob"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_mpeg_pes.c b/src/demuxers/demux_mpeg_pes.c index cb9732e53..c5769e3e3 100644 --- a/src/demuxers/demux_mpeg_pes.c +++ b/src/demuxers/demux_mpeg_pes.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_mpeg_pes.c,v 1.37 2006/10/16 22:18:24 valtri Exp $ + * $Id: demux_mpeg_pes.c,v 1.43 2007/03/29 17:11:36 dgp85 Exp $ * * demultiplexer for mpeg 2 PES (Packetized Elementary Streams) * reads streams of variable blocksizes @@ -81,20 +81,23 @@ typedef struct demux_mpeg_pes_s { int64_t nav_last_end_pts; int64_t nav_last_start_pts; int64_t last_pts[2]; - int send_newpts; - int preview_mode; - int buf_flag_seek; int64_t scr; uint32_t packet_len; + uint32_t stream_id; + int64_t pts; int64_t dts; - uint32_t stream_id; - int32_t mpeg1; - int32_t wait_for_program_stream_pack_header; + uint8_t send_newpts:1; + uint8_t buf_flag_seek:1; + uint8_t preview_mode:1; + uint8_t mpeg1:1; + uint8_t wait_for_program_stream_pack_header:1; + uint8_t mpeg12_h264_detected:2; + + int last_begin_time; int64_t last_cell_time; off_t last_cell_pos; - int last_begin_time; uint8_t preview_data[ MAX_PREVIEW_SIZE ]; off_t preview_size, preview_done; @@ -417,6 +420,9 @@ static int32_t parse_padding_stream(demux_mpeg_pes_t *this, uint8_t *p, buf_elem done += i; } + /* trigger detection of MPEG 1/2 respectively H.264 content */ + this->mpeg12_h264_detected = 0; + buf->free_buffer(buf); return this->packet_len + 6; } @@ -572,7 +578,7 @@ static int32_t parse_program_stream_pack_header(demux_mpeg_pes_t *this, uint8_t this->scr += ( (p[8] & 0x03 << 7) | (p[9] & 0xFE >> 1) ); */ - lprintf ("SCR=%lld\n", this->scr); + lprintf ("SCR=%"PRId64"\n", this->scr); /* mux_rate */ @@ -649,7 +655,7 @@ static int32_t parse_private_stream_2(demux_mpeg_pes_t *this, uint8_t *p, buf_el this->last_begin_time = buf->extra_info->input_time; } - lprintf ("NAV packet, start pts = %lld, end_pts = %lld\n", + lprintf ("NAV packet, start pts = %"PRId64", end_pts = %"PRId64"\n", start_pts, end_pts); if (this->nav_last_end_pts != start_pts && !this->preview_mode) { @@ -795,7 +801,7 @@ static int32_t parse_pes_for_pts(demux_mpeg_pes_t *this, uint8_t *p, buf_element this->pts |= (int64_t) p[12] << 7 ; this->pts |= (int64_t) (p[13] & 0xFE) >> 1 ; - lprintf ("pts = %lld\n", this->pts); + lprintf ("pts = %"PRId64"\n", this->pts); } else this->pts = 0; @@ -862,7 +868,7 @@ static int32_t parse_private_stream_1(demux_mpeg_pes_t *this, uint8_t *p, buf_el check_newpts( this, this->pts, PTS_VIDEO ); */ this->video_fifo->put (this->video_fifo, buf); - lprintf ("SPU SVCD PACK (%lld, %d) put on fifo\n", this->pts, spu_id); + lprintf ("SPU SVCD PACK (%"PRId64", %d) put on fifo\n", this->pts, spu_id); return this->packet_len + result; } @@ -880,7 +886,7 @@ static int32_t parse_private_stream_1(demux_mpeg_pes_t *this, uint8_t *p, buf_el check_newpts( this, this->pts, PTS_VIDEO ); */ this->video_fifo->put (this->video_fifo, buf); - lprintf ("SPU CVD PACK (%lld, %d) put on fifo\n", this->pts, spu_id); + lprintf ("SPU CVD PACK (%"PRId64", %d) put on fifo\n", this->pts, spu_id); return this->packet_len + result; } @@ -1062,21 +1068,102 @@ static int32_t parse_video_stream(demux_mpeg_pes_t *this, uint8_t *p, buf_elemen uint32_t todo_length=0; uint32_t i; uint32_t chunk_length; + int buf_type = BUF_VIDEO_MPEG; + int payload_size; result = parse_pes_for_pts(this, p, buf); if (result < 0) return -1; p += result; - buf->content = p; + buf->content = p; + payload_size = buf->max_size - result; + if (payload_size > this->packet_len) + payload_size = this->packet_len; + + /* H.264 broadcasts via DVB-S use standard video PES packets, + so there is no way other than scanning the video data to + detect whether BUF_VIDEO_H264 needs to be used. + For performance reasons, this is not a general scanner for + H.264 content, as this kind of data format is likely to be + used only by VDR and VDR will ensure that an AUD-NAL unit + will be at the beginning of the PES packet's payload. + To minimize false hits, the whole payload is scanned for + MPEG 1/2 start codes, so there is only a little chance left + that a MPEG 1/2 slice 9 start code will be considered as a + H.264 access unit delimiter (should only happen after a seek). + + Meaning of bit 0 and 1 of mpeg12_h264_detected: + Bit 0: H.264 access unit delimiter seen + Bit 1: H.264 AUD seen again or MPEG 1/2 start code seen + + For performance reasons, the scanner is only active until + a H.264 AUD has been seen a second time or a MPEG 1/2 start + code has been seen. The scanner get's activated initially + (e. g. when opening the stream), after seeking or when VDR + sends a padding packet. + Until the scanner is convinced of it's decision by setting + bit 1, the default behaviour is to assume MPEG 1/2 unless + an AUD has been found at the beginning of the payload. + */ + if (this->mpeg12_h264_detected < 2) { + uint8_t *pp = p + 2, *pp_limit = p + payload_size - 1; + while (0 < pp && pp < pp_limit) { + if (pp[0] == 0x01 && pp[-1] == 0x00 && pp[-2] == 0x00) { + if (pp[1] >= 0x80) { /* MPEG 1/2 start code */ + this->mpeg12_h264_detected = 2; + break; + } else { + int nal_type_code = pp[1] & 0x1f; + if (nal_type_code == 9 && pp == (p + 2)) { /* access unit delimiter */ + if (this->mpeg12_h264_detected == 1) { + this->mpeg12_h264_detected = 3; + break; + } + this->mpeg12_h264_detected = 1; + } + } + } + pp++; + pp = memchr(pp, 0x01, pp_limit - pp); + } + lprintf("%s%c\n", (this->mpeg12_h264_detected & 1) ? "H.264" : "MPEG1/2", (this->mpeg12_h264_detected & 2) ? '!' : '?'); + } - if (this->packet_len <= (buf->max_size - 6)) { - buf->size = this->packet_len; + /* when an H.264 AUD is seen, we first need to tell the decoder that the + previous frame was complete. + */ + if (this->mpeg12_h264_detected & 1) { + buf_type = BUF_VIDEO_H264; + int nal_type_code = -1; + if (payload_size >= 4 && p[2] == 0x01 && p[1] == 0x00 && p[0] == 0x00) + nal_type_code = p[3] & 0x1f; + if (nal_type_code == 9) { /* access unit delimiter */ + buf_element_t *b = this->video_fifo->buffer_pool_alloc (this->video_fifo); + b->content = b->mem; + b->size = 0; + b->pts = 0; + b->type = buf_type; + b->decoder_flags = BUF_FLAG_FRAME_END; + this->video_fifo->put (this->video_fifo, b); + } + } + + if (this->packet_len <= (buf->max_size - result)) { + buf->size = this->packet_len; + /* VDR ensures that H.264 still images end with an end of sequence NAL unit. We + need to detect this to inform the decoder that the current frame is complete. + */ + if (this->mpeg12_h264_detected & 1) { + uint8_t *t = buf->content + buf->size; + if (buf->size >=4 && t[-1] == 10 && t[-2] == 0x01 && t[-3] == 0x00 && t[-4] == 0x00) /* end of sequence */ + buf->decoder_flags = BUF_FLAG_FRAME_END; + } } else { - buf->size = buf->max_size - result; - todo_length = this->packet_len - buf->size; + buf->size = buf->max_size - result; + todo_length = this->packet_len - buf->size; } - buf->type = BUF_VIDEO_MPEG; + buf->type = buf_type; buf->pts = this->pts; buf->decoder_info[0] = this->pts - this->dts; if( !this->preview_mode ) @@ -1098,10 +1185,20 @@ static int32_t parse_video_stream(demux_mpeg_pes_t *this, uint8_t *p, buf_elemen } buf->content = buf->mem; buf->size = chunk_length; - buf->type = BUF_VIDEO_MPEG; + buf->type = buf_type; buf->pts = 0; - this->video_fifo->put (this->video_fifo, buf); todo_length -= chunk_length; + + /* VDR ensures that H.264 still images end with an end of sequence NAL unit. We + need to detect this to inform the decoder that the current frame is complete. + */ + if ((this->mpeg12_h264_detected & 1) && todo_length <= 0) { + uint8_t *t = buf->content + buf->size; + if (buf->size >= 4 && t[-1] == 10 && t[-2] == 0x01 && t[-3] == 0x00 && t[-4] == 0x00) /* end of sequence */ + buf->decoder_flags = BUF_FLAG_FRAME_END; + } + + this->video_fifo->put (this->video_fifo, buf); } lprintf ("MPEG Video PACK put on fifo\n"); @@ -1283,7 +1380,7 @@ static int demux_mpeg_pes_estimate_rate (demux_mpeg_pes_t *this) { count ++; /* - printf ("demux_mpeg_pes: stream_id %02x, pos: %lld, pts: %d, cur_rate = %d, overall rate : %d\n", + printf ("demux_mpeg_pes: stream_id %02x, pos: %"PRId64", pts: %d, cur_rate = %d, overall rate : %d\n", stream_id, pos, pts, cur_rate, rate); */ } @@ -1426,6 +1523,8 @@ static int demux_mpeg_pes_seek (demux_plugin_t *this_gen, } else { this->buf_flag_seek = 1; this->nav_last_end_pts = this->nav_last_start_pts = 0; + /* trigger detection of MPEG 1/2 respectively H.264 content */ + this->mpeg12_h264_detected = 0; _x_demux_flush_engine(this->stream); } @@ -1500,7 +1599,9 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str this->status = DEMUX_FINISHED; /* Don't start demuxing stream until we see a program_stream_pack_header */ /* We need to system header in order to identify is the stream is mpeg1 or mpeg2. */ - this->wait_for_program_stream_pack_header=1; + this->wait_for_program_stream_pack_header = 1; + /* trigger detection of MPEG 1/2 respectively H.264 content */ + this->mpeg12_h264_detected = 0; this->preview_size = 0; @@ -1594,11 +1695,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str break; case METHOD_BY_EXTENSION: { - char *ending, *mrl; - - mrl = input->get_mrl (input); - - ending = strrchr(mrl, '.'); + const char *const mrl = input->get_mrl (input); + const char *const ending = strrchr(mrl, '.'); if (!ending) { free (this->scratch_base); @@ -1630,19 +1728,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "mpeg pes demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "MPEG_PES"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "pes"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_mpgaudio.c b/src/demuxers/demux_mpgaudio.c index 13724026c..31b2d33ff 100644 --- a/src/demuxers/demux_mpgaudio.c +++ b/src/demuxers/demux_mpgaudio.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2000-2003 the xine project + * Copyright (C) 2000-2007 the xine project * * This file is part of xine, a free video player. * @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_mpgaudio.c,v 1.145 2006/09/03 02:03:21 dgp85 Exp $ + * $Id: demux_mpgaudio.c,v 1.156 2007/03/29 16:32:12 dgp85 Exp $ * * demultiplexer for mpeg audio (i.e. mp3) streams * @@ -79,28 +79,16 @@ /* mp3 frame struct */ typedef struct { /* header */ - uint16_t frame_sync; - uint8_t mpeg25_bit; - uint8_t lsf_bit; - uint8_t layer; - uint8_t protection_bit; - uint8_t bitrate_idx; - uint8_t freq_idx; - uint8_t padding_bit; - uint8_t private_bit; - uint8_t channel_mode; - uint8_t mode_extension; - uint8_t copyright; - uint8_t original; - uint8_t emphasis; - - uint8_t version_idx; /* 0: mpeg1, 1: mpeg2, 2: mpeg2.5 */ - int bitrate; /* in bit per second */ - int freq; /* in Hz */ - int samples; /* samples per frame */ - int padding; /* padding bytes (0, 1 or 4)*/ - int size; /* in bytes */ - double duration; /* in xine pts */ + double duration; + uint32_t size; /* in bytes */ + uint32_t bitrate; /* in bit per second */ + uint16_t freq; /* in Hz */ + + uint8_t layer; + + uint8_t version_idx:2; /* 0: mpeg1, 1: mpeg2, 2: mpeg2.5 */ + uint8_t lsf_bit:1; + uint8_t channel_mode:3; } mpg_audio_frame_t; /* Xing Vbr Header struct */ @@ -163,61 +151,72 @@ typedef struct { } demux_mpgaudio_class_t; -/* bitrate table[mpeg version][layer][bitrate index] - * values stored in kbps - */ -const int mp3_bitrates[3][3][16] = { - { {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448,}, - {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384,}, - {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320,} }, - { {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256,}, - {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,}, - {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,} }, - { {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256,}, - {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,}, - {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,} } -}; - -/* frequency table[mpeg version][frequence index] (in KHz) */ -static int mp3_freqs[3][3] = { - { 44100, 48000, 32000 }, - { 22050, 24000, 16000 }, - { 11025, 12000, 8000 } -}; - -/* samples per frame table[mpeg version][layer] */ -static int mp3_samples[3][3] = { - { 384, 1152, 1152 }, - { 384, 1152, 576 }, - { 384, 1152, 576 } -}; - -/* samples per frame table[layer][padding bit] */ -static int mp3_paddings[3][2] = { - { 0, 4 }, - { 0, 1 }, - { 0, 1 } -}; - /* * Parse a mp3 frame * return 1 on success */ -static int parse_frame_header(mpg_audio_frame_t *frame, uint8_t *buf) { - uint32_t head; +static int parse_frame_header(mpg_audio_frame_t *const frame, const uint8_t *const buf) { + /* bitrate table[mpeg version][layer][bitrate index] + * values stored in kbps + */ + static const uint16_t mp3_bitrates[3][3][16] = { + { {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448,}, + {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384,}, + {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320,} }, + { {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256,}, + {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,}, + {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,} }, + { {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256,}, + {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,}, + {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160,} } + }; + + /* frequency table[mpeg version][frequence index] (in KHz) */ + static const uint16_t mp3_freqs[3][3] = { + { 44100, 48000, 32000 }, + { 22050, 24000, 16000 }, + { 11025, 12000, 8000 } + }; + + /* samples per frame table[mpeg version][layer] */ + static const uint16_t mp3_samples[3][3] = { + { 384, 1152, 1152 }, + { 384, 1152, 576 }, + { 384, 1152, 576 } + }; + + struct { + uint16_t mpeg25_bit:1; + uint16_t bitrate_idx:4; + uint16_t freq_idx:3; + uint16_t padding_bit:1; + uint16_t channel_mode:3; + +#if 0 /* Unused */ + uint16_t protection_bit:1; + uint16_t private_bit:1; + uint16_t mode_extension:3; + uint16_t copyright:1; + uint16_t original:1; +#endif - head = BE_32(buf); +#if defined(OPT_STRICT) + uint16_t emphasis:3; +#endif + } frame_header; + + const uint32_t head = BE_32(buf); + const uint16_t frame_sync = head >> 21; lprintf("header: %08X\n", head); - frame->frame_sync = head >> 21; - if (frame->frame_sync != 0x7ff) { + if (frame_sync != 0x7ff) { lprintf("invalid frame sync\n"); return 0; } - frame->mpeg25_bit = (head >> 20) & 0x1; + frame_header.mpeg25_bit = (head >> 20) & 0x1; frame->lsf_bit = (head >> 19) & 0x1; - if (!frame->mpeg25_bit) { + if (!frame_header.mpeg25_bit) { if (frame->lsf_bit) { lprintf("reserved mpeg25 lsf combination\n"); return 0; @@ -236,54 +235,60 @@ static int parse_frame_header(mpg_audio_frame_t *frame, uint8_t *buf) { return 0; } - frame->protection_bit = (head >> 16) & 0x1; - frame->bitrate_idx = (head >> 12) & 0xf; - if ((frame->bitrate_idx == 0) || (frame->bitrate_idx == 15)) { + frame_header.bitrate_idx = (head >> 12) & 0xf; + if ((frame_header.bitrate_idx == 0) || (frame_header.bitrate_idx == 15)) { lprintf("invalid bitrate index\n"); return 0; } - frame->freq_idx = (head >> 10) & 0x3; - if (frame->freq_idx == 3) { + frame_header.freq_idx = (head >> 10) & 0x3; + if (frame_header.freq_idx == 3) { lprintf("invalid frequence index\n"); return 0; } - frame->padding_bit = (head >> 9) & 0x1; - frame->private_bit = (head >> 8) & 0x1; - frame->channel_mode = (head >> 6) & 0x3; - frame->mode_extension = (head >> 4) & 0x3; - frame->copyright = (head >> 3) & 0x1; - frame->original = (head >> 2) & 0x1; - frame->emphasis = head & 0x3; + frame_header.padding_bit = (head >> 9) & 0x1; + frame_header.channel_mode = (head >> 6) & 0x3; + +#if 0 /* Unused */ + frame_header.protection_bit = (head >> 16) & 0x1; + frame_header.private_bit = (head >> 8) & 0x1; + frame_header.mode_extension = (head >> 4) & 0x3; + frame_header.copyright = (head >> 3) & 0x1; + frame_header.original = (head >> 2) & 0x1; +#endif #if defined(OPT_STRICT) + frame_header.emphasis = head & 0x3; + /* * ISO/IEC 11172-3 says this is a reserved emphasis value, but * streams exist which use it anyway. Since the value is not important * to the decoder proper, we allow it unless OPT_STRICT is defined. */ - if (frame->emphasis == 2) { + if (frame_header.emphasis == 2) { lprintf("reserved emphasis\n"); return 0; } #endif - frame->bitrate = mp3_bitrates[frame->version_idx][frame->layer - 1][frame->bitrate_idx] * 1000; - frame->freq = mp3_freqs[frame->version_idx][frame->freq_idx]; - frame->samples = mp3_samples[frame->version_idx][frame->layer - 1]; - frame->padding = mp3_paddings[frame->layer - 1][frame->padding_bit]; + { + const uint16_t samples = mp3_samples[frame->version_idx][frame->layer - 1]; + frame->bitrate = mp3_bitrates[frame->version_idx][frame->layer - 1][frame_header.bitrate_idx] * 1000; + frame->freq = mp3_freqs[frame->version_idx][frame_header.freq_idx]; - frame->size = frame->samples * (frame->bitrate / 8); - frame->size /= frame->freq; - frame->size += frame->padding; + frame->size = samples * (frame->bitrate / 8); + frame->size /= frame->freq; + /* Padding: only if padding_bit is set; 4 bytes for Layer 1 and 1 byte for others */ + frame->size += ( frame_header.padding_bit ? ( frame->layer == 1 ? 4 : 1 ) : 0 ); - frame->duration = 1000.0f * (double)frame->samples / (double)frame->freq; + frame->duration = 1000.0f * (double)samples / (double)frame->freq; + } lprintf("mpeg %d, layer %d\n", frame->version_idx + 1, frame->layer); lprintf("bitrate: %d bps, samplerate: %d Hz\n", frame->bitrate, frame->freq); lprintf("length: %d bytes, %f ms\n", frame->size, frame->duration); - lprintf("padding: %d bytes\n", frame->padding); + lprintf("padding: %d bytes\n", ( frame_header.padding_bit ? ( frame->layer == 1 ? 4 : 1 ) : 0 )); return 1; } @@ -294,7 +299,9 @@ static int parse_frame_header(mpg_audio_frame_t *frame, uint8_t *buf) { static xing_header_t* parse_xing_header(mpg_audio_frame_t *frame, uint8_t *buf, int bufsize) { +#ifdef LOG int i; +#endif uint8_t *ptr = buf; xing_header_t *xing; @@ -338,14 +345,12 @@ static xing_header_t* parse_xing_header(mpg_audio_frame_t *frame, lprintf("toc found\n"); if (ptr >= (buf + bufsize - XING_TOC_LENGTH)) return 0; - for (i = 0; i < XING_TOC_LENGTH; i++) { - xing->toc[i] = *(ptr + i); + memcpy(xing->toc, ptr, XING_TOC_LENGTH); #ifdef LOG - printf("%d ", xing->toc[i]); -#endif + for (i = 0; i < XING_TOC_LENGTH; i++) { + lprintf("%d ", xing->toc[i]); } -#ifdef LOG - printf("\n"); + lprintf("\n"); #endif ptr += XING_TOC_LENGTH; } @@ -437,7 +442,7 @@ static vbri_header_t* parse_vbri_header(mpg_audio_frame_t *frame, for (i = 0; i <= vbri->toc_entries; i++) { toc_stream_size += vbri->toc[i]; } - lprintf("stream size from toc: %lld\n", toc_stream_size); + lprintf("stream size from toc: %"PRId64"\n", toc_stream_size); } return vbri; @@ -460,7 +465,7 @@ static int parse_frame_payload(demux_mpgaudio_t *this, uint64_t pts = 0; frame_pos = this->input->get_current_pos(this->input) - 4; - lprintf("frame_pos = %lld\n", frame_pos); + lprintf("frame_pos = %"PRId64"\n", frame_pos); buf = this->audio_fifo->buffer_pool_alloc(this->audio_fifo); @@ -510,7 +515,7 @@ static int parse_frame_payload(demux_mpgaudio_t *this, buf->decoder_flags = decoder_flags|BUF_FLAG_FRAME_END; this->audio_fifo->put(this->audio_fifo, buf); - lprintf("send buffer: pts=%lld\n", pts); + lprintf("send buffer: pts=%"PRId64"\n", pts); this->cur_time += this->cur_frame.duration; return 1; } @@ -606,39 +611,14 @@ static int demux_mpgaudio_next (demux_mpgaudio_t *this, int decoder_flags, int s return parse_frame_payload(this, header_buf, decoder_flags); - } else if ((BE_32(header_buf)) == ID3V22_TAG) { - xprintf(this->stream->xine, XINE_VERBOSITY_LOG, - "demux_mpgaudio: ID3V2.2 tag\n"); - if (!id3v22_parse_tag(this->input, this->stream, header_buf)) { + } else if ( id3v2_istag(header_buf) ) { + if (!id3v2_parse_tag(this->input, this->stream, header_buf)) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, - "demux_mpgaudio: ID3V2.2 tag parsing error\n"); + LOG_MODULE ": ID3V2 tag parsing error\n"); bytes = 1; /* resync */ } else { bytes = 4; } - - } else if ((BE_32(header_buf)) == ID3V23_TAG) { - xprintf(this->stream->xine, XINE_VERBOSITY_LOG, - "demux_mpgaudio: ID3V2.3 tag\n"); - if (!id3v23_parse_tag(this->input, this->stream, header_buf)) { - xprintf(this->stream->xine, XINE_VERBOSITY_LOG, - "demux_mpgaudio: ID3V2.3 tag parsing error\n"); - bytes = 1; /* resync */ - } else { - bytes = 4; - } - - } else if ((BE_32(header_buf)) == ID3V24_TAG) { - xprintf(this->stream->xine, XINE_VERBOSITY_LOG, - "demux_mpgaudio: ID3V2.4 tag\n"); - if (!id3v24_parse_tag(this->input, this->stream, header_buf)) { - xprintf(this->stream->xine, XINE_VERBOSITY_LOG, - "demux_mpgaudio: ID3V2.4 tag parsing error\n"); - bytes = 1; /* resync */ - } else { - bytes = 4; - } - } else { /* skip */ bytes = 1; @@ -718,10 +698,7 @@ static int detect_mpgaudio_file(input_plugin_t *input) { * flac files can contain id3v2 tags */ uint8_t *ptr = &buf[6]; - uint32_t tag_size = ((uint32_t)ptr[0] << 21) + - ((uint32_t)ptr[1] << 14) + - ((uint32_t)ptr[2] << 7) + - (uint32_t)ptr[3]; + uint32_t tag_size = id3v2_tagsize(ptr); lprintf("try to skip id3v2 tag (%d bytes)\n", tag_size); if ((10 + tag_size) >= preview_len) { lprintf("cannot skip id3v2 tag\n"); @@ -823,9 +800,9 @@ static void demux_mpgaudio_send_headers (demux_plugin_t *this_gen) { _x_stream_info_set(this->stream, XINE_STREAM_INFO_BITRATE, this->br); _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_BITRATE, this->br); - lprintf("frame_start: %lld, frame_end: %lld\n", + lprintf("frame_start: %"PRId64", frame_end: %"PRId64"\n", this->mpg_frame_start, this->mpg_frame_end); - lprintf("stream size: %lld, mp3 size: %lld\n", + lprintf("stream size: %"PRId64", mp3 size: %"PRId64"\n", this->input->get_length(this->input), this->mpg_size); lprintf("stream_length: %d ms\n", this->stream_length); @@ -939,7 +916,7 @@ static int demux_mpgaudio_seek (demux_plugin_t *this_gen, /* Convert position seek to time seek */ if (!start_time) { start_time = (int)((double)start_pos * (double)this->stream_length / 65535.0f); - lprintf("position seek: start_pos=%lld => start_time=%d\n", start_pos, start_time); + lprintf("position seek: start_pos=%"PRId64" => start_time=%d\n", start_pos, start_time); } if (start_time < 0) @@ -951,14 +928,14 @@ static int demux_mpgaudio_seek (demux_plugin_t *this_gen, if (this->xing_header && (this->xing_header->flags & (XING_TOC_FLAG | XING_BYTES_FLAG))) { seek_pos += xing_get_seek_point(this->xing_header, start_time, this->stream_length); - lprintf("time seek: xing: time=%d, pos=%lld\n", start_time, seek_pos); + lprintf("time seek: xing: time=%d, pos=%"PRId64"\n", start_time, seek_pos); } else if (this->vbri_header) { seek_pos += vbri_get_seek_point(this->vbri_header, start_time, this->stream_length); - lprintf("time seek: vbri: time=%d, pos=%lld\n", start_time, seek_pos); + lprintf("time seek: vbri: time=%d, pos=%"PRId64"\n", start_time, seek_pos); } else { /* cbr */ seek_pos += ((double)start_time / 1000.0) * ((double)this->br / 8.0); - lprintf("time seek: cbr: time=%d, pos=%lld\n", start_time, seek_pos); + lprintf("time seek: cbr: time=%d, pos=%"PRId64"\n", start_time, seek_pos); } } /* assume seeking is always perfect... */ @@ -1016,8 +993,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str break; case METHOD_BY_EXTENSION: { - char *mrl = input->get_mrl(input); - char *extensions = class_gen->get_extensions (class_gen); + const char *const mrl = input->get_mrl(input); + const char *const extensions = class_gen->get_extensions (class_gen); lprintf ("stage by extension %s\n", mrl); @@ -1058,15 +1035,15 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str * demux mpegaudio class */ -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "MPEG audio demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "MPEGAUDIO"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { demux_mpgaudio_class_t *this = (demux_mpgaudio_class_t *) this_gen; if( _x_decoder_available(this->xine, BUF_AUDIO_MPEG) ) @@ -1075,7 +1052,7 @@ static char *get_extensions (demux_class_t *this_gen) { return ""; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { demux_mpgaudio_class_t *this = (demux_mpgaudio_class_t *) this_gen; if( _x_decoder_available(this->xine, BUF_AUDIO_MPEG) ) @@ -1085,7 +1062,7 @@ static char *get_mimetypes (demux_class_t *this_gen) { "audio/x-mpeg3: mp3: MPEG audio;" "audio/mpeg: mpa,abs,mpega: MPEG audio;" "audio/x-mpeg: mpa,abs,mpega: MPEG audio;" - "x-mpegurl: mp3: MPEG audio;" + "audio/x-mpegurl: mp3: MPEG audio;" "audio/mpegurl: mp3: MPEG audio;" "audio/mp3: mp3: MPEG audio;" "audio/x-mp3: mp3: MPEG audio;"; diff --git a/src/demuxers/demux_nsf.c b/src/demuxers/demux_nsf.c index dae756d8d..7408274d5 100644 --- a/src/demuxers/demux_nsf.c +++ b/src/demuxers/demux_nsf.c @@ -30,7 +30,7 @@ * For more information regarding the NSF format, visit: * http://www.tripoint.org/kevtris/nes/nsfspec.txt * - * $Id: demux_nsf.c,v 1.22 2004/06/13 21:28:54 miguelfreitas Exp $ + * $Id: demux_nsf.c,v 1.24 2007/03/29 17:03:06 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -71,12 +71,14 @@ typedef struct { input_plugin_t *input; int status; - char *title; - char *artist; - char *copyright; int total_songs; int current_song; int new_song; /* indicates song change */ + + char *title; + char *artist; + char *copyright; + off_t filesize; int64_t current_pts; @@ -322,7 +324,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -352,19 +354,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "NES Music file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "NSF"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "nsf"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_nsv.c b/src/demuxers/demux_nsv.c index 6f71a6264..6d43b247c 100644 --- a/src/demuxers/demux_nsv.c +++ b/src/demuxers/demux_nsv.c @@ -23,7 +23,7 @@ * For more information regarding the NSV file format, visit: * http://www.pcisys.net/~melanson/codecs/ * - * $Id: demux_nsv.c,v 1.24 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: demux_nsv.c,v 1.25 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -615,7 +615,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -645,19 +645,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Nullsoft Video demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "Nullsoft NSV"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "nsv"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_ogg.c b/src/demuxers/demux_ogg.c index 3ea07306b..f868018af 100644 --- a/src/demuxers/demux_ogg.c +++ b/src/demuxers/demux_ogg.c @@ -19,7 +19,7 @@ */ /* - * $Id: demux_ogg.c,v 1.171 2006/11/10 14:53:23 dgp85 Exp $ + * $Id: demux_ogg.c,v 1.177 2007/03/29 19:38:51 dgp85 Exp $ * * demultiplexer for ogg streams * @@ -126,17 +126,20 @@ typedef struct demux_ogg_s { input_plugin_t *input; int status; + int frame_duration; + #ifdef HAVE_THEORA theora_info t_info; theora_comment t_comment; #endif - int frame_duration; - ogg_sync_state oy; ogg_page og; int64_t start_pts; + int64_t last_pts[2]; + + int time_length; int num_streams; stream_info_t *si[MAX_STREAMS]; /* stream info */ @@ -148,16 +151,14 @@ typedef struct demux_ogg_s { off_t avg_bitrate; - int64_t last_pts[2]; - int send_newpts; - int buf_flag_seek; - int keyframe_needed; - int ignore_keyframes; - int time_length; - char *title; chapter_info_t *chapter_info; xine_event_queue_t *event_queue; + + uint8_t send_newpts:1; + uint8_t buf_flag_seek:1; + uint8_t keyframe_needed:1; + uint8_t ignore_keyframes:1; } demux_ogg_t ; typedef struct { @@ -536,7 +537,11 @@ static void update_chapter_display (demux_ogg_t *this, int stream_num, ogg_packe if (chapter >= 0) { char t_title[256]; - snprintf(t_title, sizeof (t_title), "%s / %s", this->title, this->chapter_info->entries[chapter].name); + if (this->title) { + snprintf(t_title, sizeof (t_title), "%s / %s", this->title, this->chapter_info->entries[chapter].name); + } else { + snprintf(t_title, sizeof (t_title), "%s", this->chapter_info->entries[chapter].name); + } title = t_title; } else { title = this->title; @@ -714,7 +719,7 @@ static void send_ogg_buf (demux_ogg_t *this, buf->size = 12 + op->bytes + 1; - lprintf ("CMML stream %d (bytes=%ld): PTS %lld: %s\n", + lprintf ("CMML stream %d (bytes=%ld): PTS %"PRId64": %s\n", stream_num, op->bytes, buf->pts, str); this->video_fifo->put (this->video_fifo, buf); @@ -1861,9 +1866,7 @@ static int format_lang_string (demux_ogg_t * this, uint32_t buf_mask, uint32_t b for (stream_num=0; stream_num<this->num_streams; stream_num++) { if ((this->si[stream_num]->buf_types & buf_mask) == buf_type) { if (this->si[stream_num]->language) { - strncpy (str, this->si[stream_num]->language, XINE_LANG_MAX); - str[XINE_LANG_MAX - 1] = '\0'; - if (strlen(this->si[stream_num]->language) >= XINE_LANG_MAX) + if (snprintf (str, XINE_LANG_MAX, "%s", this->si[stream_num]->language) >= XINE_LANG_MAX) /* the string got truncated */ str[XINE_LANG_MAX - 2] = str[XINE_LANG_MAX - 3] = str[XINE_LANG_MAX - 4] = '.'; /* TODO: provide long version in XINE_META_INFO_FULL_LANG */ @@ -1926,7 +1929,7 @@ static int detect_ogg_content (int detection_method, demux_class_t *class_gen, } case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -1988,7 +1991,7 @@ static int detect_anx_content (int detection_method, demux_class_t *class_gen, #undef ANNODEX_SIGNATURE_SEARCH case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -2099,19 +2102,19 @@ static demux_plugin_t *ogg_open_plugin (demux_class_t *class_gen, * Annodex demuxer class */ -static char *anx_get_description (demux_class_t *this_gen) { +static const char *anx_get_description (demux_class_t *this_gen) { return "Annodex demux plugin"; } -static char *anx_get_identifier (demux_class_t *this_gen) { +static const char *anx_get_identifier (demux_class_t *this_gen) { return "Annodex"; } -static char *anx_get_extensions (demux_class_t *this_gen) { +static const char *anx_get_extensions (demux_class_t *this_gen) { return "anx axa axv"; } -static char *anx_get_mimetypes (demux_class_t *this_gen) { +static const char *anx_get_mimetypes (demux_class_t *this_gen) { return "application/x-annodex: ogg: Annodex media;"; } @@ -2140,22 +2143,23 @@ static void *anx_init_class (xine_t *xine, void *data) { * ogg demuxer class */ -static char *ogg_get_description (demux_class_t *this_gen) { +static const char *ogg_get_description (demux_class_t *this_gen) { return "OGG demux plugin"; } -static char *ogg_get_identifier (demux_class_t *this_gen) { +static const char *ogg_get_identifier (demux_class_t *this_gen) { return "OGG"; } -static char *ogg_get_extensions (demux_class_t *this_gen) { +static const char *ogg_get_extensions (demux_class_t *this_gen) { return "ogg ogm spx"; } -static char *ogg_get_mimetypes (demux_class_t *this_gen) { +static const char *ogg_get_mimetypes (demux_class_t *this_gen) { return "audio/x-ogg: ogg: OggVorbis Audio;" "audio/x-speex: ogg: Speex Audio;" - "application/x-ogg: ogg: OggVorbis Audio;"; + "application/x-ogg: ogg: Ogg Stream;" + "application/ogg: ogg: Ogg Stream;"; } static void ogg_class_dispose (demux_class_t *this_gen) { diff --git a/src/demuxers/demux_pva.c b/src/demuxers/demux_pva.c index 44e5112c6..55b1f7644 100644 --- a/src/demuxers/demux_pva.c +++ b/src/demuxers/demux_pva.c @@ -23,7 +23,7 @@ * For more information regarding the PVA file format, refer to this PDF: * http://www.technotrend.de/download/av_format_v1.pdf * - * $Id: demux_pva.c,v 1.24 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: demux_pva.c,v 1.25 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -451,7 +451,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -480,19 +480,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "TechnoTrend PVA demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "TechnoTrend PVA"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "pva"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_qt.c b/src/demuxers/demux_qt.c index b4646b3e5..4144f3049 100644 --- a/src/demuxers/demux_qt.c +++ b/src/demuxers/demux_qt.c @@ -30,7 +30,7 @@ * build_frame_table * free_qt_info * - * $Id: demux_qt.c,v 1.212 2006/11/11 12:23:44 molivier Exp $ + * $Id: demux_qt.c,v 1.214 2007/01/19 01:05:24 dgp85 Exp $ * */ @@ -2993,11 +2993,8 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str break; case METHOD_BY_EXTENSION: { - char *ending, *mrl; - - mrl = input->get_mrl (input); - - ending = strrchr(mrl, '.'); + const char *const mrl = input->get_mrl (input); + const char *const ending = strrchr(mrl, '.'); if (!ending) { free (this); @@ -3041,19 +3038,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Apple Quicktime (MOV) and MPEG-4 demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "MOV/MPEG-4"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "mov qt mp4 m4a m4b"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return "video/quicktime: mov,qt: Quicktime animation;" "video/x-quicktime: mov,qt: Quicktime animation;" "audio/x-m4a: m4a,m4b: MPEG-4 audio;" diff --git a/src/demuxers/demux_rawdv.c b/src/demuxers/demux_rawdv.c index 6c7d672e8..7a4cbaec9 100644 --- a/src/demuxers/demux_rawdv.c +++ b/src/demuxers/demux_rawdv.c @@ -19,7 +19,7 @@ */ /* - * $Id: demux_rawdv.c,v 1.29 2006/08/08 03:15:02 miguelfreitas Exp $ + * $Id: demux_rawdv.c,v 1.30 2007/01/19 00:26:40 dgp85 Exp $ * * demultiplexer for raw dv streams */ @@ -385,7 +385,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str break; case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -413,19 +413,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Raw DV Video stream"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "raw_dv"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "dv dif"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_real.c b/src/demuxers/demux_real.c index 7441c8619..11b0dbf38 100644 --- a/src/demuxers/demux_real.c +++ b/src/demuxers/demux_real.c @@ -31,7 +31,7 @@ * * Based on FFmpeg's libav/rm.c. * - * $Id: demux_real.c,v 1.109 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: demux_real.c,v 1.113 2007/02/20 00:34:56 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -181,7 +181,7 @@ static void real_parse_index(demux_real_t *this) { real_index_entry_t **index; while(next_index_chunk) { - lprintf("reading index chunk at %llX\n", next_index_chunk); + lprintf("reading index chunk at %"PRIX64"\n", next_index_chunk); /* Seek to index chunk */ this->input->seek(this->input, next_index_chunk, SEEK_SET); @@ -401,9 +401,9 @@ static void real_parse_headers (demux_real_t *this) { this->avg_bitrate = BE_32(&chunk_buffer[6]); lprintf("PROP: duration: %d ms\n", this->duration); - lprintf("PROP: index start: %llX\n", this->index_start); - lprintf("PROP: data start: %llX\n", this->data_start); - lprintf("PROP: average bit rate: %lld\n", this->avg_bitrate); + lprintf("PROP: index start: %"PRIX64"\n", this->index_start); + lprintf("PROP: data start: %"PRIX64"\n", this->data_start); + lprintf("PROP: average bit rate: %"PRId64"\n", this->avg_bitrate); if (this->avg_bitrate<1) this->avg_bitrate = 1; @@ -854,12 +854,12 @@ static void check_newpts (demux_real_t *this, int64_t pts, int video, int previe int64_t diff; diff = pts - this->last_pts[video]; - lprintf ("check_newpts %lld\n", pts); + lprintf ("check_newpts %"PRId64"\n", pts); if (!preview && pts && (this->send_newpts || (this->last_pts[video] && abs(diff)>WRAP_THRESHOLD) ) ) { - lprintf ("diff=%lld\n", diff); + lprintf ("diff=%"PRId64"\n", diff); if (this->buf_flag_seek) { _x_demux_control_newpts(this->stream, pts, BUF_FLAG_SEEK); @@ -1012,7 +1012,7 @@ static int demux_real_send_chunk(demux_plugin_t *this_gen) { size--; } - lprintf ("packet of stream %d, 0x%X bytes @ %llX, pts = %lld%s\n", + lprintf ("packet of stream %d, 0x%X bytes @ %"PRIX64", pts = %"PRId64"%s\n", stream, size, offset, pts, keyframe ? ", keyframe" : ""); if (this->video_stream && (stream == this->video_stream->mdpr->stream_number)) { @@ -1409,12 +1409,15 @@ static int demux_real_seek (demux_plugin_t *this_gen, real_index_entry_t *index, *other_index = NULL; int i = 0, entries; - start_pos = (off_t) ( (double) start_pos / 65535 * - this->input->get_length (this->input) ); + lprintf("seek start_pos=%d, start_time=%d, playing=%d\n", + (int)start_pos, start_time, playing); if((this->input->get_capabilities(this->input) & INPUT_CAP_SEEKABLE) && ((this->audio_stream && this->audio_stream->index) || (this->video_stream && this->video_stream->index))) { + + start_pos = (off_t) ( (double) start_pos / 65535 * + this->input->get_length (this->input) ); /* video index has priority over audio index */ if(this->video_stream && this->video_stream->index) { @@ -1453,6 +1456,13 @@ static int demux_real_seek (demux_plugin_t *this_gen, _x_demux_flush_engine(this->stream); } } + else if (!playing && this->input->seek_time != NULL) { + /* RTSP supports only time based seek */ + if (start_pos && !start_time) + start_time = (int64_t) this->duration * start_pos / 65535; + + this->input->seek_time(this->input, start_time, SEEK_SET); + } this->send_newpts = 1; this->old_seqnum = -1; @@ -1555,7 +1565,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str break; case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -1608,19 +1618,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "RealMedia file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "Real"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "rm rmvb ram"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return "audio/x-pn-realaudio: ra, rm, ram: Real Media file;" "audio/x-pn-realaudio-plugin: rpm: Real Media plugin file;" "audio/x-real-audio: ra, rm, ram: Real Media file;" diff --git a/src/demuxers/demux_realaudio.c b/src/demuxers/demux_realaudio.c index d1de83015..bf8de0dad 100644 --- a/src/demuxers/demux_realaudio.c +++ b/src/demuxers/demux_realaudio.c @@ -22,7 +22,7 @@ * RealAudio File Demuxer by Mike Melanson (melanson@pcisys.net) * improved by James Stembridge (jstembridge@users.sourceforge.net) * - * $Id: demux_realaudio.c,v 1.32 2004/06/13 21:28:54 miguelfreitas Exp $ + * $Id: demux_realaudio.c,v 1.34 2007/03/29 17:00:32 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -57,16 +57,15 @@ typedef struct { unsigned int fourcc; unsigned int audio_type; + unsigned short block_align; + + uint8_t seek_flag:1; /* this is set when a seek just occurred */ + off_t data_start; off_t data_size; - unsigned short block_align; - unsigned int bytes_per_sec; - unsigned char *header; unsigned int header_size; - - int seek_flag; /* this is set when a seek just occurred */ } demux_ra_t; typedef struct { @@ -316,10 +315,7 @@ static int demux_ra_get_status (demux_plugin_t *this_gen) { static int demux_ra_get_stream_length (demux_plugin_t *this_gen) { demux_ra_t *this = (demux_ra_t *) this_gen; - if(this->bytes_per_sec) - return (int)((int64_t) this->data_size * 1000 / this->bytes_per_sec); - else - return 0; + return 0; } static uint32_t demux_ra_get_capabilities(demux_plugin_t *this_gen) { @@ -355,7 +351,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -385,19 +381,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "RealAudio file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "RA"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "ra"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return "audio/x-realaudio: ra: RealAudio File;"; } diff --git a/src/demuxers/demux_roq.c b/src/demuxers/demux_roq.c index ed261d728..0e7c93b97 100644 --- a/src/demuxers/demux_roq.c +++ b/src/demuxers/demux_roq.c @@ -23,7 +23,7 @@ * For more information regarding the RoQ file format, visit: * http://www.csse.monash.edu.au/~timf/ * - * $Id: demux_roq.c,v 1.53 2004/06/13 21:28:54 miguelfreitas Exp $ + * $Id: demux_roq.c,v 1.54 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -432,7 +432,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -462,19 +462,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Id RoQ file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "RoQ"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "roq"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_shn.c b/src/demuxers/demux_shn.c index 8e3602634..3db568aab 100644 --- a/src/demuxers/demux_shn.c +++ b/src/demuxers/demux_shn.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_shn.c,v 1.2 2006/09/28 22:27:52 dgp85 Exp $ + * $Id: demux_shn.c,v 1.4 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -67,8 +67,8 @@ static int open_shn_file(demux_shn_t *this) { if (_x_demux_read_header(this->input, peak, 4) != 4) return 0; - if ((peak[0] != 'a') && (peak[1] != 'j') && - (peak[2] != 'k') && (peak[3] != 'g')) { + if ((peak[0] != 'a') || (peak[1] != 'j') || + (peak[2] != 'k') || (peak[3] != 'g')) { return 0; } @@ -202,7 +202,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -230,19 +230,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Shorten demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "Shorten"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "shn"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_slave.c b/src/demuxers/demux_slave.c index 306b14ed4..a00ad0661 100644 --- a/src/demuxers/demux_slave.c +++ b/src/demuxers/demux_slave.c @@ -21,7 +21,7 @@ */ /* - * $Id: demux_slave.c,v 1.21 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: demux_slave.c,v 1.23 2007/01/19 01:05:24 dgp85 Exp $ * * demuxer for slave "protocol" * master xine must be started with XINE_PARAM_BROADCASTER_PORT set, that is, @@ -338,9 +338,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *mrl; - - mrl = input->get_mrl (input); + const char *const mrl = input->get_mrl (input); if(!strncmp(mrl, "slave://", 8)) break; @@ -393,19 +391,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return ""; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "slave"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return ""; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_smjpeg.c b/src/demuxers/demux_smjpeg.c index afe28328d..9c86314c5 100644 --- a/src/demuxers/demux_smjpeg.c +++ b/src/demuxers/demux_smjpeg.c @@ -23,7 +23,7 @@ * For more information on the SMJPEG file format, visit: * http://www.lokigames.com/development/smjpeg.php3 * - * $Id: demux_smjpeg.c,v 1.50 2004/06/13 21:28:54 miguelfreitas Exp $ + * $Id: demux_smjpeg.c,v 1.51 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -421,7 +421,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -451,19 +451,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "SMJPEG file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "SMJPEG"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "mjpg"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_snd.c b/src/demuxers/demux_snd.c index c1925bc71..99415890a 100644 --- a/src/demuxers/demux_snd.c +++ b/src/demuxers/demux_snd.c @@ -21,7 +21,7 @@ /* * SND/AU File Demuxer by Mike Melanson (melanson@pcisys.net) * - * $Id: demux_snd.c,v 1.40 2004/10/18 18:20:32 miguelfreitas Exp $ + * $Id: demux_snd.c,v 1.41 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -339,7 +339,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -369,19 +369,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "SND/AU file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "SND/AU"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "snd au"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return "audio/basic: snd,au: ULAW (Sun) audio;" "audio/x-basic: snd,au: ULAW (Sun) audio;" "audio/x-pn-au: snd,au: ULAW (Sun) audio;"; diff --git a/src/demuxers/demux_str.c b/src/demuxers/demux_str.c index ddb800260..90dbf2117 100644 --- a/src/demuxers/demux_str.c +++ b/src/demuxers/demux_str.c @@ -24,7 +24,7 @@ * This demuxer handles either raw STR files (which are just a concatenation * of raw compact disc sectors) or STR files with RIFF headers. * - * $Id: demux_str.c,v 1.25 2004/06/13 21:28:54 miguelfreitas Exp $ + * $Id: demux_str.c,v 1.26 2007/01/19 00:26:40 dgp85 Exp $ */ /* @@ -576,7 +576,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -605,20 +605,20 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Sony Playstation STR file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "PSX STR"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { /* also .mov, but we don't want to hijack that extension */ return "str iki ik2 dps dat xa xa1 xa2 xas xap"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_ts.c b/src/demuxers/demux_ts.c index ef68cb698..aea0c8ca1 100644 --- a/src/demuxers/demux_ts.c +++ b/src/demuxers/demux_ts.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_ts.c,v 1.123 2006/08/08 03:58:15 miguelfreitas Exp $ + * $Id: demux_ts.c,v 1.129 2007/04/02 10:46:08 dgp85 Exp $ * * Demultiplexer for MPEG2 Transport Streams. * @@ -254,7 +254,7 @@ typedef struct { } demux_ts_media; /* DVBSUB */ -#define MAX_NO_SPU_LANGS 16 +#define MAX_SPU_LANGS 16 typedef struct { spu_dvb_descriptor_t desc; @@ -262,6 +262,14 @@ typedef struct { int media_index; } demux_ts_spu_lang; +/* Audio Channels */ +#define MAX_AUDIO_TRACKS 16 + +typedef struct { + int pid; + int media_index; + char lang[4]; +} demux_ts_audio_track; typedef struct { /* @@ -299,10 +307,10 @@ typedef struct { unsigned int pid; unsigned int pid_count; unsigned int videoPid; - unsigned int audioPid; unsigned int videoMedia; - unsigned int audioMedia; - char audioLang[4]; + + demux_ts_audio_track audio_tracks[MAX_AUDIO_TRACKS]; + int audio_tracks_count; int send_end_buffers; int64_t last_pts[2]; @@ -319,8 +327,8 @@ typedef struct { /* DVBSUB */ unsigned int spu_pid; unsigned int spu_media; - demux_ts_spu_lang spu_langs[MAX_NO_SPU_LANGS]; - int no_spu_langs; + demux_ts_spu_lang spu_langs[MAX_SPU_LANGS]; + int spu_langs_count; int current_spu_channel; /* dvb */ @@ -457,7 +465,7 @@ static void demux_ts_update_spu_channel(demux_ts_t *this) buf->size = 0; if (this->current_spu_channel >= 0 - && this->current_spu_channel < this->no_spu_langs) + && this->current_spu_channel < this->spu_langs_count) { demux_ts_spu_lang *lang = &this->spu_langs[this->current_spu_channel]; @@ -627,7 +635,7 @@ static void demux_ts_parse_pat (demux_ts_t*this, unsigned char *original_pkt, /* force PMT reparsing when pmt_pid changes */ if (this->pmt_pid[program_count] != pmt_pid) { this->pmt_pid[program_count] = pmt_pid; - this->audioPid = INVALID_PID; + this->audio_tracks_count = 0; this->videoPid = INVALID_PID; this->spu_pid = INVALID_PID; } @@ -737,7 +745,7 @@ static int demux_ts_parse_pes_header (xine_t *xine, demux_ts_media *m, (p[0] == 0x0B && p[1] == 0x77)) { /* ac3 - syncword */ m->content = p; m->size = packet_len; - m->type = BUF_AUDIO_A52; + m->type |= BUF_AUDIO_A52; return 1; } else if (m->descriptor_tag == 0x06 @@ -761,7 +769,7 @@ static int demux_ts_parse_pes_header (xine_t *xine, demux_ts_media *m, m->content = p+4; m->size = packet_len - 4; - m->type = BUF_AUDIO_A52 + track; + m->type |= BUF_AUDIO_A52 + track; return 1; } else if ((p[0]&0xf0) == 0xa0) { @@ -777,7 +785,7 @@ static int demux_ts_parse_pes_header (xine_t *xine, demux_ts_media *m, m->content = p+pcm_offset; m->size = packet_len-pcm_offset; - m->type = BUF_AUDIO_LPCM_BE + track; + m->type |= BUF_AUDIO_LPCM_BE + track; return 1; } @@ -818,16 +826,16 @@ static int demux_ts_parse_pes_header (xine_t *xine, demux_ts_media *m, case ISO_11172_AUDIO: case ISO_13818_AUDIO: lprintf ("demux_ts: found MPEG audio track.\n"); - m->type = BUF_AUDIO_MPEG + track; + m->type |= BUF_AUDIO_MPEG + track; break; case ISO_13818_PART7_AUDIO: case ISO_14496_PART3_AUDIO: lprintf ("demux_ts: found AAC audio track.\n"); - m->type = BUF_AUDIO_AAC + track; + m->type |= BUF_AUDIO_AAC + track; break; default: lprintf ("demux_ts: unknown audio type: %d, defaulting to MPEG.\n", m->descriptor_tag); - m->type = BUF_AUDIO_MPEG + track; + m->type |= BUF_AUDIO_MPEG + track; break; } return 1; @@ -1212,7 +1220,7 @@ printf("Program Number is %i, looking for %i\n",program_number,this->program_num /* * Extract the elementary streams. */ - this->no_spu_langs = 0; + this->spu_langs_count = 0; while (section_length > 0) { unsigned int stream_info_length; @@ -1248,15 +1256,26 @@ printf("Program Number is %i, looking for %i\n",program_number,this->program_num case ISO_13818_AUDIO: case ISO_13818_PART7_AUDIO: case ISO_14496_PART3_AUDIO: - if (this->audioPid == INVALID_PID) { + if (this->audio_tracks_count < MAX_AUDIO_TRACKS) { + int i, found = 0; + for(i = 0; i < this->audio_tracks_count; i++) { + if(this->audio_tracks[i].pid == pid) { + found = 1; + break; + } + } + if(!found) { #ifdef TS_PMT_LOG - printf ("demux_ts: PMT audio pid 0x%.4x\n", pid); + printf ("demux_ts: PMT audio pid 0x%.4x\n", pid); #endif - demux_ts_pes_new(this, this->media_num, pid, this->audio_fifo,stream[0]); - this->audioPid = pid; - this->audioMedia = this->media_num; - demux_ts_get_lang_desc(this, this->audioLang, + demux_ts_pes_new(this, this->media_num, pid, this->audio_fifo,stream[0]); + this->audio_tracks[this->audio_tracks_count].pid = pid; + this->audio_tracks[this->audio_tracks_count].media_index = this->media_num; + this->media[this->media_num].type = this->audio_tracks_count; + demux_ts_get_lang_desc(this, this->audio_tracks[this->audio_tracks_count].lang, stream + 5, stream_info_length); + this->audio_tracks_count++; + } } break; case ISO_13818_PRIVATE: @@ -1275,30 +1294,31 @@ printf("Program Number is %i, looking for %i\n",program_number,this->program_num break; case ISO_13818_PES_PRIVATE: for (i = 5; i < coded_length; i += stream[i+1] + 2) { - if ((stream[i] == 0x6a) && (this->audioPid == INVALID_PID)) { + if ((stream[i] == 0x6a) && (this->audio_tracks_count < MAX_AUDIO_TRACKS)) { uint32_t format_identifier=0; + int i, found = 0; + for(i = 0; i < this->audio_tracks_count; i++) { + if(this->audio_tracks[i].pid == pid) { + found = 1; + break; + } + } + if(!found) { #ifdef TS_PMT_LOG - printf ("demux_ts: PMT AC3 audio pid 0x%.4x\n", pid); + printf ("demux_ts: PMT AC3 audio pid 0x%.4x\n", pid); #endif - demux_ts_get_reg_desc(this, &format_identifier, - stream + 5, stream_info_length); - if (format_identifier == 0x41432d33) /* AC-3 */ - demux_ts_pes_new(this, this->media_num, pid, - this->audio_fifo, 0x81); - else if((stream[i+1]>1) && (stream[i+2] & 0x80 ) && (stream[3] & 0x40)) /* AC3 Full Service */ - demux_ts_pes_new(this, this->media_num, pid, - this->audio_fifo, 0x81); - else - demux_ts_pes_new(this, this->media_num, pid, - this->audio_fifo,stream[0]); - - this->audioPid = pid; - this->audioMedia = this->media_num; - demux_ts_get_lang_desc(this, this->audioLang, - stream + 5, stream_info_length); + demux_ts_pes_new(this, this->media_num, pid, + this->audio_fifo, 0x81); + + this->audio_tracks[this->audio_tracks_count].pid = pid; + this->audio_tracks[this->audio_tracks_count].media_index = this->media_num; + this->media[this->media_num].type = this->audio_tracks_count; + demux_ts_get_lang_desc(this, this->audio_tracks[this->audio_tracks_count].lang, + stream + 5, stream_info_length); + this->audio_tracks_count++; break; + } } - /* Teletext */ else if (stream[i] == 0x56) { @@ -1318,13 +1338,13 @@ printf("Program Number is %i, looking for %i\n",program_number,this->program_num int pos; for (pos = i + 2; pos + 8 <= i + 2 + stream[i + 1] - && this->no_spu_langs < MAX_NO_SPU_LANGS; + && this->spu_langs_count < MAX_SPU_LANGS; pos += 8) { - int no = this->no_spu_langs; + int no = this->spu_langs_count; demux_ts_spu_lang *lang = &this->spu_langs[no]; - this->no_spu_langs++; + this->spu_langs_count++; memcpy(lang->desc.lang, &stream[pos], 3); lang->desc.lang[3] = 0; @@ -1356,18 +1376,29 @@ printf("Program Number is %i, looking for %i\n",program_number,this->program_num * if is does, we tag this as an audio stream. * FIXME: This will need expanding if we ever see a DTS or other media format here. */ - if (this->audioPid == INVALID_PID && (stream[0] >= 0x80) ) { - uint32_t format_identifier=0; - demux_ts_get_reg_desc(this, &format_identifier, - stream + 5, stream_info_length); - /* If no format identifier, assume A52 */ - if ((format_identifier == 0x41432d33) || (format_identifier == 0)) { - demux_ts_pes_new(this, this->media_num, pid, this->audio_fifo, stream[0]); - this->audioPid = pid; - this->audioMedia = this->media_num; - demux_ts_get_lang_desc(this, this->audioLang, - stream + 5, stream_info_length); - break; + if ((this->audio_tracks_count < MAX_AUDIO_TRACKS) && (stream[0] >= 0x80) ) { + int i, found = 0; + for(i = 0; i < this->audio_tracks_count; i++) { + if(this->audio_tracks[i].pid == pid) { + found = 1; + break; + } + } + if(!found) { + uint32_t format_identifier=0; + demux_ts_get_reg_desc(this, &format_identifier, + stream + 5, stream_info_length); + /* If no format identifier, assume A52 */ + if ((format_identifier == 0x41432d33) || (format_identifier == 0)) { + demux_ts_pes_new(this, this->media_num, pid, this->audio_fifo, stream[0]); + this->audio_tracks[this->audio_tracks_count].pid = pid; + this->audio_tracks[this->audio_tracks_count].media_index = this->media_num; + this->media[this->media_num].type = this->audio_tracks_count; + demux_ts_get_lang_desc(this, this->audio_tracks[this->audio_tracks_count].lang, + stream + 5, stream_info_length); + this->audio_tracks_count++; + break; + } } } else { #ifdef TS_PMT_LOG @@ -1612,6 +1643,16 @@ static int64_t demux_ts_adaptation_field_parse(uint8_t *data, return PCR; } +/* check if an apid is in the list of known apids */ +static int apid_check(demux_ts_t*this, unsigned int pid) { + int i; + for(i=0; i<this->audio_tracks_count; i++) { + if(this->audio_tracks[i].pid == pid) + return i; + } + return -1; +} + /* transport stream packet layer */ static void demux_ts_parse_packet (demux_ts_t*this) { @@ -1753,15 +1794,27 @@ static void demux_ts_parse_packet (demux_ts_t*this) { demux_ts_pes_new(this, this->media_num++, pid, this->video_fifo, pes_stream_id); } } else if ( (pes_stream_id >= AUDIO_STREAM_S) && (pes_stream_id <= AUDIO_STREAM_E) ) { - if ( this->audioPid == INVALID_PID) { - - xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG, - "demux_ts: auto-detected audio pid 0x%.4x\n", pid); - - this->audioPid = pid; - this->audioMedia = this->media_num; - demux_ts_pes_new(this, this->media_num++, pid, this->audio_fifo, pes_stream_id); - } + if (this->audio_tracks_count < MAX_AUDIO_TRACKS) { + int i, found = 0; + for(i = 0; i < this->audio_tracks_count; i++) { + if(this->audio_tracks[i].pid == pid) { + found = 1; + break; + } + } + if(!found) { +#ifdef TS_PMT_LOG + xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG, + "demux_ts: auto-detected audio pid 0x%.4x\n", pid); +#endif + this->audio_tracks[this->audio_tracks_count].pid = pid; + this->audio_tracks[this->audio_tracks_count].media_index = this->media_num; + this->media[this->media_num].type = this->audio_tracks_count; + demux_ts_pes_new(this, this->media_num++, pid, + this->audio_fifo,pes_stream_id); + this->audio_tracks_count++; + } + } } } @@ -1775,6 +1828,7 @@ static void demux_ts_parse_packet (demux_ts_t*this) { /* * Do the demuxing in descending order of packet frequency! */ + int index; if (pid == this->videoPid) { #ifdef TS_LOG printf ("demux_ts: Video pid: 0x%.4x\n", pid); @@ -1785,12 +1839,13 @@ static void demux_ts_parse_packet (demux_ts_t*this) { data_len); return; } - else if (pid == this->audioPid) { + else if ((index = apid_check(this, pid)) > -1) { #ifdef TS_LOG printf ("demux_ts: Audio pid: 0x%.4x\n", pid); #endif - check_newpts(this, this->media[this->audioMedia].pts, PTS_AUDIO); - demux_ts_buffer_pes (this, originalPkt+data_offset, this->audioMedia, + check_newpts(this, this->media[this->audio_tracks[index].media_index].pts, PTS_AUDIO); + demux_ts_buffer_pes (this, originalPkt+data_offset, + this->audio_tracks[index].media_index, payload_unit_start_indicator, continuity_counter, data_len); return; @@ -1830,12 +1885,12 @@ static void demux_ts_event_handler (demux_ts_t *this) { case XINE_EVENT_PIDS_CHANGE: this->videoPid = INVALID_PID; - this->audioPid = INVALID_PID; + this->audio_tracks_count = 0; this->media_num = 0; this->send_newpts = 1; this->spu_pid = INVALID_PID; this->spu_media = 0; - this->no_spu_langs= 0; + this->spu_langs_count= 0; _x_demux_control_start (this->stream); break; @@ -1909,7 +1964,7 @@ static void demux_ts_send_headers (demux_plugin_t *this_gen) { */ this->videoPid = INVALID_PID; - this->audioPid = INVALID_PID; + this->audio_tracks_count = 0; this->media_num= 0; _x_demux_control_start (this->stream); @@ -1927,7 +1982,7 @@ static void demux_ts_send_headers (demux_plugin_t *this_gen) { /* DVBSUB */ this->spu_pid = INVALID_PID; - this->no_spu_langs = 0; + this->spu_langs_count = 0; this->current_spu_channel = this->stream->spu_channel; /* FIXME ? */ @@ -2005,6 +2060,8 @@ static int demux_ts_get_optional_data(demux_plugin_t *this_gen, { demux_ts_t *this = (demux_ts_t *) this_gen; char *str = data; + int channel = *((int *)data); + int track_num; /* be a bit paranoid */ if (this == NULL || this->stream == NULL) @@ -2013,22 +2070,24 @@ static int demux_ts_get_optional_data(demux_plugin_t *this_gen, switch (data_type) { case DEMUX_OPTIONAL_DATA_AUDIOLANG: - if (this->audioLang[0]) - { - strcpy(str, this->audioLang); - } + if ((channel >= 0) && (channel < this->audio_tracks_count)) { + if(this->audio_tracks[channel].lang) + strcpy(str, this->audio_tracks[channel].lang); + else + sprintf(str, "%3i", _x_get_audio_channel(this->stream)); + } else { - sprintf(str, "%3i", _x_get_audio_channel(this->stream)); + snprintf(str, XINE_LANG_MAX, "%3i", _x_get_audio_channel(this->stream)); } return DEMUX_OPTIONAL_SUCCESS; case DEMUX_OPTIONAL_DATA_SPULANG: if (this->current_spu_channel >= 0 - && this->current_spu_channel < this->no_spu_langs) + && this->current_spu_channel < this->spu_langs_count) { memcpy(str, this->spu_langs[this->current_spu_channel].desc.lang, 3); - str[4] = 0; + str[3] = 0; } else if (this->current_spu_channel == -1) { @@ -2036,7 +2095,7 @@ static int demux_ts_get_optional_data(demux_plugin_t *this_gen, } else { - sprintf(str, "%3i", this->current_spu_channel); + snprintf(str, XINE_LANG_MAX, "%3i", this->current_spu_channel); } return DEMUX_OPTIONAL_SUCCESS; @@ -2089,12 +2148,10 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, break; case METHOD_BY_EXTENSION: { - char *extensions, *mrl; - - mrl = input->get_mrl (input); + const char *const mrl = input->get_mrl (input); /* check extension */ - extensions = class_gen->get_extensions (class_gen); + const char *const extensions = class_gen->get_extensions (class_gen); if (_x_demux_check_extension (mrl, extensions)) break; @@ -2163,7 +2220,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, this->pcrPid = INVALID_PID; this->scrambled_npids = 0; this->videoPid = INVALID_PID; - this->audioPid = INVALID_PID; + this->audio_tracks_count = 0; this->rate = 16000; /* FIXME */ @@ -2177,7 +2234,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, /* DVBSUB */ this->spu_pid = INVALID_PID; - this->no_spu_langs = 0; + this->spu_langs_count = 0; this->current_spu_channel = this->stream->spu_channel; /* dvb */ @@ -2190,19 +2247,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, * ts demuxer class */ -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "MPEG Transport Stream demuxer"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "MPEG_TS"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "ts m2t trp"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_tta.c b/src/demuxers/demux_tta.c new file mode 100644 index 000000000..2e4808b9c --- /dev/null +++ b/src/demuxers/demux_tta.c @@ -0,0 +1,322 @@ +/* + * Copyright (C) 2006 the xine project + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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 + * + * True Audio demuxer by Diego Pettenò <flameeyes@gentoo.org> + * Inspired by tta libavformat demuxer by Alex Beregszaszi + * + * $Id: demux_tta.c,v 1.4 2007/03/29 16:46:23 dgp85 Exp $ + */ + +#define LOG_MODULE "demux_tta" +#define LOG_VERBOSE + +#include "xine_internal.h" +#include "xineutils.h" +#include "demux.h" +#include "buffer.h" +#include "bswap.h" +#include "group_audio.h" + +typedef struct { + demux_plugin_t demux_plugin; + + xine_stream_t *stream; + fifo_buffer_t *video_fifo; + fifo_buffer_t *audio_fifo; + input_plugin_t *input; + + uint32_t *seektable; + uint32_t totalframes; + uint32_t currentframe; + + int status; + + union { + struct tta_header { + uint32_t signature; /* TTA1 */ + uint16_t flags; /* Skipped */ + uint16_t channels; + uint16_t bits_per_sample; + uint32_t samplerate; + uint32_t data_length; + uint32_t crc32; + } __attribute__((__packed__)) tta; + uint8_t buffer[22]; /* This is the size of the header */ + } header; +} demux_tta_t; + +typedef struct { + demux_class_t demux_class; +} demux_tta_class_t; + +#define FOURCC_32(a, b, c, d) (d + (c<<8) + (b<<16) + (a<<24)) + +static int open_tta_file(demux_tta_t *this) { + uint8_t peek[4]; + uint32_t framelen; + + if (_x_demux_read_header(this->input, peek, 4) != 4) + return 0; + + if ( BE_32(peek) != FOURCC_32('T', 'T', 'A', '1') ) + return 0; + + if ( this->input->read(this->input, this->header.buffer, sizeof(this->header)) != sizeof(this->header) ) + return 0; + + framelen = 1.04489795918367346939 * le2me_32(this->header.tta.samplerate); + this->totalframes = le2me_32(this->header.tta.data_length) / framelen + ((le2me_32(this->header.tta.data_length) % framelen) ? 1 : 0); + this->currentframe = 0; + + if(this->totalframes >= UINT_MAX/sizeof(uint32_t)) { + xprintf(this->stream->xine, XINE_VERBOSITY_DEBUG, _("demux_tta: total frames count too high\n")); + return 0; + } + + this->seektable = xine_xmalloc(sizeof(uint32_t)*this->totalframes); + this->input->read(this->input, this->seektable, sizeof(uint32_t)*this->totalframes); + + /* Skip the CRC32 */ + this->input->seek(this->input, 4, SEEK_CUR); + + return 1; +} + +static int demux_tta_send_chunk(demux_plugin_t *this_gen) { + demux_tta_t *this = (demux_tta_t *) this_gen; + uint32_t bytes_to_read; + + if ( this->currentframe > this->totalframes ) { + this->status = DEMUX_FINISHED; + return this->status; + } + + bytes_to_read = le2me_32(this->seektable[this->currentframe]); + + while(bytes_to_read) { + off_t bytes_read = 0; + buf_element_t *buf = NULL; + + /* Get a buffer */ + buf = this->audio_fifo->buffer_pool_alloc(this->audio_fifo); + buf->type = BUF_AUDIO_TTA; + buf->pts = 0; + buf->extra_info->total_time = this->totalframes; + buf->decoder_flags = 0; + + /* Set normalised position */ + buf->extra_info->input_normpos = + (int) ((double) this->currentframe * 65535 / this->totalframes); + + /* Set time */ + /* buf->extra_info->input_time = this->current_sample / this->samplerate; */ + + bytes_read = this->input->read(this->input, buf->content, ( bytes_to_read > buf->max_size ) ? buf->max_size : bytes_to_read); + + buf->size = bytes_read; + + bytes_to_read -= bytes_read; + + if ( bytes_to_read <= 0 ) + buf->decoder_flags |= BUF_FLAG_FRAME_END; + + this->audio_fifo->put(this->audio_fifo, buf); + } + + this->currentframe++; + + return this->status; +} + +static void demux_tta_send_headers(demux_plugin_t *this_gen) { + demux_tta_t *this = (demux_tta_t *) this_gen; + buf_element_t *buf; + + this->audio_fifo = this->stream->audio_fifo; + + this->status = DEMUX_OK; + + _x_stream_info_set(this->stream, XINE_STREAM_INFO_HAS_VIDEO, 0); + _x_stream_info_set(this->stream, XINE_STREAM_INFO_HAS_AUDIO, 1); + _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_CHANNELS, + le2me_16(this->header.tta.channels)); + _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_SAMPLERATE, + le2me_32(this->header.tta.samplerate)); + _x_stream_info_set(this->stream, XINE_STREAM_INFO_AUDIO_BITS, + le2me_16(this->header.tta.bits_per_sample)); + + /* send start buffers */ + _x_demux_control_start(this->stream); + + /* send init info to decoders */ + if (this->audio_fifo) { + xine_waveformatex wave; + + buf = this->audio_fifo->buffer_pool_alloc (this->audio_fifo); + buf->type = BUF_AUDIO_TTA; + buf->decoder_flags = BUF_FLAG_HEADER|BUF_FLAG_STDHEADER|BUF_FLAG_FRAME_END; + buf->decoder_info[0] = 0; + buf->decoder_info[1] = le2me_32(this->header.tta.samplerate); + buf->decoder_info[2] = le2me_16(this->header.tta.bits_per_sample); + buf->decoder_info[3] = le2me_16(this->header.tta.channels); + + buf->size = sizeof(xine_waveformatex) + sizeof(this->header) + sizeof(uint32_t)*this->totalframes; + memcpy(buf->content+sizeof(xine_waveformatex), this->header.buffer, sizeof(this->header)); + memcpy(buf->content+sizeof(xine_waveformatex)+sizeof(this->header), this->seektable, sizeof(uint32_t)*this->totalframes); + + wave.cbSize = buf->size - sizeof(xine_waveformatex); + memcpy(buf->content, &wave, sizeof(wave)); + + this->audio_fifo->put (this->audio_fifo, buf); + } +} + +static int demux_tta_seek (demux_plugin_t *this_gen, + off_t start_pos, int start_time, int playing) { + demux_tta_t *this = (demux_tta_t *) this_gen; + + /* if thread is not running, initialize demuxer */ + if( !playing ) { + + /* send new pts */ + _x_demux_control_newpts(this->stream, 0, 0); + + this->status = DEMUX_OK; + } + + return this->status; +} + +static void demux_tta_dispose (demux_plugin_t *this_gen) { + demux_tta_t *this = (demux_tta_t *) this_gen; + + free(this); +} + +static int demux_tta_get_status (demux_plugin_t *this_gen) { + demux_tta_t *this = (demux_tta_t *) this_gen; + + return this->status; +} + +static int demux_tta_get_stream_length (demux_plugin_t *this_gen) { +// demux_tta_t *this = (demux_tta_t *) this_gen; + + return 0; +} + +static uint32_t demux_tta_get_capabilities(demux_plugin_t *this_gen) { + return DEMUX_CAP_NOCAP; +} + +static int demux_tta_get_optional_data(demux_plugin_t *this_gen, + void *data, int data_type) { + return DEMUX_OPTIONAL_UNSUPPORTED; +} + +static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *stream, + input_plugin_t *input) { + + demux_tta_t *this; + + this = xine_xmalloc (sizeof (demux_tta_t)); + this->stream = stream; + this->input = input; + + this->demux_plugin.send_headers = demux_tta_send_headers; + this->demux_plugin.send_chunk = demux_tta_send_chunk; + this->demux_plugin.seek = demux_tta_seek; + this->demux_plugin.dispose = demux_tta_dispose; + this->demux_plugin.get_status = demux_tta_get_status; + this->demux_plugin.get_stream_length = demux_tta_get_stream_length; + this->demux_plugin.get_capabilities = demux_tta_get_capabilities; + this->demux_plugin.get_optional_data = demux_tta_get_optional_data; + this->demux_plugin.demux_class = class_gen; + + this->status = DEMUX_FINISHED; + + this->seektable = NULL; + + switch (stream->content_detection_method) { + + case METHOD_BY_EXTENSION: { + const char *extensions, *mrl; + + mrl = input->get_mrl (input); + extensions = class_gen->get_extensions (class_gen); + + if (!_x_demux_check_extension (mrl, extensions)) { + free (this); + return NULL; + } + } + /* Falling through is intended */ + + case METHOD_BY_CONTENT: + case METHOD_EXPLICIT: + if (!open_tta_file(this)) { + free (this); + return NULL; + } + break; + + default: + free (this); + return NULL; + } + + return &this->demux_plugin; +} + +static const char *get_description (demux_class_t *this_gen) { + return "True Audio demux plugin"; +} + +static const char *get_identifier (demux_class_t *this_gen) { + return "True Audio"; +} + +static const char *get_extensions (demux_class_t *this_gen) { + return "tta"; +} + +static const char *get_mimetypes (demux_class_t *this_gen) { + return NULL; +} + +static void class_dispose (demux_class_t *this_gen) { + demux_tta_class_t *this = (demux_tta_class_t *) this_gen; + + free (this); +} + +void *demux_tta_init_plugin (xine_t *xine, void *data) { + demux_tta_class_t *this; + + this = xine_xmalloc (sizeof (demux_tta_class_t)); + + this->demux_class.open_plugin = open_plugin; + this->demux_class.get_description = get_description; + this->demux_class.get_identifier = get_identifier; + this->demux_class.get_mimetypes = get_mimetypes; + this->demux_class.get_extensions = get_extensions; + this->demux_class.dispose = class_dispose; + + return this; +} diff --git a/src/demuxers/demux_vmd.c b/src/demuxers/demux_vmd.c index fb7174031..e2b68fbb1 100644 --- a/src/demuxers/demux_vmd.c +++ b/src/demuxers/demux_vmd.c @@ -28,7 +28,7 @@ * checking the first 2 bytes, which are 0x2E 0x03 in a Sierra VMD file. * There is a 1/65536 chance of a false positive using this method. * - * $Id: demux_vmd.c,v 1.3 2004/06/13 21:28:54 miguelfreitas Exp $ + * $Id: demux_vmd.c,v 1.4 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -442,7 +442,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -472,19 +472,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Sierra VMD file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "VMD"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "vmd"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_voc.c b/src/demuxers/demux_voc.c index cfd67a9e6..1c1675b92 100644 --- a/src/demuxers/demux_voc.c +++ b/src/demuxers/demux_voc.c @@ -25,7 +25,7 @@ * It will only play that block if it is PCM data. More variations will be * supported as they are encountered. * - * $Id: demux_voc.c,v 1.40 2005/12/24 00:08:42 tmmm Exp $ + * $Id: demux_voc.c,v 1.41 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -317,7 +317,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -347,19 +347,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "VOC file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "VOC"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "voc"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_vox.c b/src/demuxers/demux_vox.c index 53e8d2399..c772e4978 100644 --- a/src/demuxers/demux_vox.c +++ b/src/demuxers/demux_vox.c @@ -22,7 +22,7 @@ * VOX Demuxer by Mike Melanson (melanson@pcisys.net) * This a demuxer for .vox files containing raw Dialogic ADPCM data. * - * $Id: demux_vox.c,v 1.13 2004/06/13 21:28:54 miguelfreitas Exp $ + * $Id: demux_vox.c,v 1.14 2007/01/19 00:26:40 dgp85 Exp $ * */ @@ -192,7 +192,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str case METHOD_BY_CONTENT: case METHOD_EXPLICIT: case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -225,19 +225,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Dialogic VOX file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "VOX"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "vox"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_vqa.c b/src/demuxers/demux_vqa.c index 41209ce75..56fbde7d1 100644 --- a/src/demuxers/demux_vqa.c +++ b/src/demuxers/demux_vqa.c @@ -29,7 +29,7 @@ * block needs information from the previous audio block in order to be * decoded, thus making random seeking difficult. * - * $Id: demux_vqa.c,v 1.41 2004/06/13 21:28:55 miguelfreitas Exp $ + * $Id: demux_vqa.c,v 1.42 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -355,7 +355,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -385,19 +385,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Westwood Studios VQA file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "VQA"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "vqa"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_wav.c b/src/demuxers/demux_wav.c index e23f43aa5..1e46d8526 100644 --- a/src/demuxers/demux_wav.c +++ b/src/demuxers/demux_wav.c @@ -22,7 +22,7 @@ * MS WAV File Demuxer by Mike Melanson (melanson@pcisys.net) * based on WAV specs that are available far and wide * - * $Id: demux_wav.c,v 1.63 2005/06/04 20:29:16 jstembridge Exp $ + * $Id: demux_wav.c,v 1.65 2007/03/17 20:57:04 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -86,18 +86,7 @@ static int open_wav_file(demux_wav_t *this) { if (_x_demux_read_header(this->input, signature, WAV_SIGNATURE_SIZE) != WAV_SIGNATURE_SIZE) return 0; - if ((signature[0] != 'R') || - (signature[1] != 'I') || - (signature[2] != 'F') || - (signature[3] != 'F') || - (signature[8] != 'W') || - (signature[9] != 'A') || - (signature[10] != 'V') || - (signature[11] != 'E') || - (signature[12] != 'f') || - (signature[13] != 'm') || - (signature[14] != 't') || - (signature[15] != ' ')) + if (memcmp(signature, "RIFF", 4) || memcmp(&signature[8], "WAVEfmt ", 8) ) return 0; /* file is qualified; skip over the header bytes in the stream */ @@ -108,7 +97,7 @@ static int open_wav_file(demux_wav_t *this) { (unsigned char *)&this->wave_size, 4) != 4) return 0; this->wave_size = le2me_32(this->wave_size); - this->wave = (xine_waveformatex *) malloc( this->wave_size ); + this->wave = xine_xmalloc( this->wave_size ); if (this->input->read(this->input, (void *)this->wave, this->wave_size) != this->wave_size) { @@ -365,7 +354,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -404,19 +393,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "WAV file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "WAV"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "wav"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return "audio/x-wav: wav: WAV audio;" "audio/wav: wav: WAV audio;" "audio/x-pn-wav: wav: WAV audio;" diff --git a/src/demuxers/demux_wc3movie.c b/src/demuxers/demux_wc3movie.c index a41637ba1..fa1cfb17d 100644 --- a/src/demuxers/demux_wc3movie.c +++ b/src/demuxers/demux_wc3movie.c @@ -24,7 +24,7 @@ * For more information on the MVE file format, visit: * http://www.pcisys.net/~melanson/codecs/ * - * $Id: demux_wc3movie.c,v 1.53 2005/07/26 22:10:40 tmattern Exp $ + * $Id: demux_wc3movie.c,v 1.54 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -688,7 +688,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -718,19 +718,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "Wing Commander III Movie (MVE) demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "WC3 Movie"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "mve"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_yuv4mpeg2.c b/src/demuxers/demux_yuv4mpeg2.c index 126370453..4e0bb1069 100644 --- a/src/demuxers/demux_yuv4mpeg2.c +++ b/src/demuxers/demux_yuv4mpeg2.c @@ -24,7 +24,7 @@ * tools, visit: * http://mjpeg.sourceforge.net/ * - * $Id: demux_yuv4mpeg2.c,v 1.43 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: demux_yuv4mpeg2.c,v 1.44 2007/01/19 00:26:40 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -424,7 +424,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *extensions, *mrl; + const char *extensions, *mrl; mrl = input->get_mrl (input); extensions = class_gen->get_extensions (class_gen); @@ -454,19 +454,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, xine_stream_t *str return &this->demux_plugin; } -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "YUV4MPEG2 file demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "YUV4MPEG2"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return "y4m"; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/demux_yuv_frames.c b/src/demuxers/demux_yuv_frames.c index 06115a4d3..3866f0437 100644 --- a/src/demuxers/demux_yuv_frames.c +++ b/src/demuxers/demux_yuv_frames.c @@ -20,7 +20,7 @@ */ /* - * $Id: demux_yuv_frames.c,v 1.22 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: demux_yuv_frames.c,v 1.24 2007/01/19 01:05:24 dgp85 Exp $ * * dummy demultiplexer for raw yuv frames (delivered by v4l) */ @@ -185,9 +185,7 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, break; case METHOD_BY_EXTENSION: { - char *mrl; - - mrl = input->get_mrl (input); + const char *const mrl = input->get_mrl (input); if (strncmp (mrl, "v4l:/", 5)) return NULL; @@ -232,19 +230,19 @@ static demux_plugin_t *open_plugin (demux_class_t *class_gen, * demuxer class */ -static char *get_description (demux_class_t *this_gen) { +static const char *get_description (demux_class_t *this_gen) { return "YUV frames dummy demux plugin"; } -static char *get_identifier (demux_class_t *this_gen) { +static const char *get_identifier (demux_class_t *this_gen) { return "YUV_FRAMES"; } -static char *get_extensions (demux_class_t *this_gen) { +static const char *get_extensions (demux_class_t *this_gen) { return NULL; } -static char *get_mimetypes (demux_class_t *this_gen) { +static const char *get_mimetypes (demux_class_t *this_gen) { return NULL; } diff --git a/src/demuxers/group_audio.c b/src/demuxers/group_audio.c index 7139ee5b9..b8f0e1ed4 100644 --- a/src/demuxers/group_audio.c +++ b/src/demuxers/group_audio.c @@ -19,7 +19,7 @@ * * This file contains plugin entries for several demuxers used in games * - * $Id: group_audio.c,v 1.24 2006/07/10 22:08:13 dgp85 Exp $ + * $Id: group_audio.c,v 1.26 2007/03/03 02:06:09 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -36,7 +36,7 @@ */ static const demuxer_info_t demux_info_aac = { - 0 /* priority */ + -1 /* priority */ }; static const demuxer_info_t demux_info_ac3 = { @@ -87,6 +87,10 @@ static const demuxer_info_t demux_info_snd = { 10 /* priority */ }; +static const demuxer_info_t demux_info_tta = { + 10 /* priority */ +}; + static const demuxer_info_t demux_info_voc = { 10 /* priority */ }; @@ -120,6 +124,7 @@ const plugin_info_t xine_plugin_info[] EXPORTED = { { PLUGIN_DEMUX, 26, "realaudio", XINE_VERSION_CODE, &demux_info_realaudio, demux_realaudio_init_plugin }, { PLUGIN_DEMUX, 26, "shn", XINE_VERSION_CODE, &demux_info_shn, demux_shn_init_plugin }, { PLUGIN_DEMUX, 26, "snd", XINE_VERSION_CODE, &demux_info_snd, demux_snd_init_plugin }, + { PLUGIN_DEMUX, 26, "tta", XINE_VERSION_CODE, &demux_info_tta, demux_tta_init_plugin }, { PLUGIN_DEMUX, 26, "voc", XINE_VERSION_CODE, &demux_info_voc, demux_voc_init_plugin }, { PLUGIN_DEMUX, 26, "vox", XINE_VERSION_CODE, &demux_info_vox, demux_vox_init_plugin }, { PLUGIN_DEMUX, 26, "wav", XINE_VERSION_CODE, &demux_info_wav, demux_wav_init_plugin }, diff --git a/src/demuxers/group_audio.h b/src/demuxers/group_audio.h index fba22cffa..7f1fccc5e 100644 --- a/src/demuxers/group_audio.h +++ b/src/demuxers/group_audio.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: group_audio.h,v 1.8 2005/05/29 19:20:48 jstembridge Exp $ + * $Id: group_audio.h,v 1.9 2006/12/26 16:59:55 dgp85 Exp $ */ #ifndef HAVE_GROUP_AUDIO_H @@ -38,6 +38,7 @@ void *demux_nsf_init_plugin (xine_t *xine, void *data); void *demux_realaudio_init_plugin (xine_t *xine, void *data); void *demux_shn_init_plugin (xine_t *xine, void *data); void *demux_snd_init_plugin (xine_t *xine, void *data); +void *demux_tta_init_plugin (xine_t *xine, void *data); void *demux_voc_init_plugin (xine_t *xine, void *data); void *demux_vox_init_plugin (xine_t *xine, void *data); void *demux_wav_init_plugin (xine_t *xine, void *data); diff --git a/src/demuxers/id3.c b/src/demuxers/id3.c index ffa022a59..b707166b6 100644 --- a/src/demuxers/id3.c +++ b/src/demuxers/id3.c @@ -29,7 +29,7 @@ * * ID3v2 specs: http://www.id3.org/ * - * $Id: id3.c,v 1.12 2006/04/05 22:12:18 valtri Exp $ + * $Id: id3.c,v 1.13 2007/03/03 00:58:52 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -878,3 +878,33 @@ int id3v24_parse_tag(input_plugin_t *input, return 0; } } + +int id3v2_parse_tag(input_plugin_t *input, + xine_stream_t *stream, + int8_t *mp3_frame_header) { + _x_assert(mp3_frame_header[0] == 'I' && mp3_frame_header[1] == 'D' && mp3_frame_header[2] == '3'); + + int result = 0; + + switch(mp3_frame_header[3]) { + case 2: + xprintf(stream->xine, XINE_VERBOSITY_LOG, "ID3V2.2 tag\n"); + result = id3v22_parse_tag(input, stream, mp3_frame_header); + break; + + case 3: + xprintf(stream->xine, XINE_VERBOSITY_LOG, "ID3V2.3 tag\n"); + result = id3v23_parse_tag(input, stream, mp3_frame_header); + break; + + case 4: + xprintf(stream->xine, XINE_VERBOSITY_LOG, "ID3V2.3 tag\n"); + result = id3v24_parse_tag(input, stream, mp3_frame_header); + break; + + default: + xprintf(stream->xine, XINE_VERBOSITY_LOG, "Unknown ID3v2 version: 0x%02x.\n", mp3_frame_header[3]); + } + + return result; +} diff --git a/src/demuxers/id3.h b/src/demuxers/id3.h index 2d8970ea7..9d08f6817 100644 --- a/src/demuxers/id3.h +++ b/src/demuxers/id3.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2000-2003 the xine project + * Copyright (C) 2000-2007 the xine project * * This file is part of xine, a free video player. * @@ -21,7 +21,7 @@ * * Supported versions: v1, v1.1, v2.2, v2.3, v2.4 * - * $Id: id3.h,v 1.4 2005/09/15 18:45:15 tmattern Exp $ + * $Id: id3.h,v 1.6 2007/03/03 01:41:16 dgp85 Exp $ */ #ifndef ID3_H @@ -38,6 +38,7 @@ #define ID3V24_TAG FOURCC_TAG('I', 'D', '3', 4) /* id3 v2.4 header tag */ #define ID3V24_FOOTER_TAG FOURCC_TAG('3', 'D', 'I', 0) /* id3 v2.4 footer tag */ + /* * ID3 v2.2 */ @@ -164,4 +165,24 @@ int id3v24_parse_tag(input_plugin_t *input, xine_stream_t *stream, int8_t *mp3_frame_header); +/* Generic function that switch between the three above */ +int id3v2_parse_tag(input_plugin_t *input, + xine_stream_t *stream, + int8_t *mp3_frame_header); + +static inline int id3v2_istag(uint8_t *ptr) { + return + (ptr[0] == 'I') && + (ptr[1] == 'D') && + (ptr[2] == '3'); +} + +static inline uint32_t id3v2_tagsize(uint8_t *ptr) { + return + ((uint32_t)ptr[0] << 21) + + ((uint32_t)ptr[1] << 14) + + ((uint32_t)ptr[2] << 7) + + (uint32_t)ptr[3]; +} + #endif /* ID3_H */ diff --git a/src/demuxers/matroska.h b/src/demuxers/matroska.h index 926d6d0a6..3bfdbdc0c 100644 --- a/src/demuxers/matroska.h +++ b/src/demuxers/matroska.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2000-2003 the xine project + * Copyright (C) 2000-2007 the xine project * * This file is part of xine, a free video player. * @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: matroska.h,v 1.10 2006/11/14 07:09:46 molivier Exp $ + * $Id: matroska.h,v 1.11 2007/01/07 12:33:50 molivier Exp $ * */ #ifndef MATROSKA_H @@ -224,6 +224,7 @@ struct matroska_track_s { uint8_t *codec_private; uint32_t codec_private_len; int default_flag; + uint32_t compress_algo; uint32_t buf_type; fifo_buffer_t *fifo; @@ -305,4 +306,12 @@ struct matroska_track_s { #define MATROSKA_TRACK_SUBTITLE 0x11 #define MATROSKA_TRACK_CONTROL 0x20 +/* compression algorithms */ +#define MATROSKA_COMPRESS_ZLIB 0x00 +#define MATROSKA_COMPRESS_BZLIB 0x01 +#define MATROSKA_COMPRESS_LZO1X 0x02 +#define MATROSKA_COMPRESS_HEADER_STRIP 0x03 +#define MATROSKA_COMPRESS_UNKNOWN 0xFFFFFFFE /* Xine internal type */ +#define MATROSKA_COMPRESS_NONE 0xFFFFFFFF /* Xine internal type */ + #endif /* MATROSKA_H */ diff --git a/src/input/.cvsignore b/src/dxr3/.hgignore index 7d926a554..7d926a554 100644 --- a/src/input/.cvsignore +++ b/src/dxr3/.hgignore diff --git a/src/dxr3/Makefile.am b/src/dxr3/Makefile.am index f364a375e..8bf9c9427 100644 --- a/src/dxr3/Makefile.am +++ b/src/dxr3/Makefile.am @@ -22,7 +22,7 @@ endif lib_LTLIBRARIES = $(dxr3_modules) xineplug_decode_dxr3_video_la_SOURCES = dxr3_decode_video.c -xineplug_decode_dxr3_video_la_LIBADD = $(XINE_LIB) +xineplug_decode_dxr3_video_la_LIBADD = $(XINE_LIB) xineplug_decode_dxr3_video_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_decode_dxr3_video_la_LDFLAGS = -avoid-version -module @@ -44,7 +44,7 @@ xineplug_vo_out_dxr3_la_SOURCES = \ dxr3_scr.c \ video_out_dxr3.c -xineplug_vo_out_dxr3_la_LIBADD = $(link_fame) $(link_rte) $(link_x_libs) $(XINE_LIB) +xineplug_vo_out_dxr3_la_LIBADD = $(link_fame) $(link_rte) $(link_x_libs) $(XINE_LIB) $(DYNAMIC_LD_LIBS) -lm xineplug_vo_out_dxr3_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_vo_out_dxr3_la_LDFLAGS = -avoid-version -module diff --git a/src/dxr3/dxr3_mpeg_encoders.c b/src/dxr3/dxr3_mpeg_encoders.c index 6fe2ff397..cba47aad4 100644 --- a/src/dxr3/dxr3_mpeg_encoders.c +++ b/src/dxr3/dxr3_mpeg_encoders.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: dxr3_mpeg_encoders.c,v 1.24 2005/11/28 12:24:57 valtri Exp $ + * $Id: dxr3_mpeg_encoders.c,v 1.25 2007/03/10 17:25:13 dgp85 Exp $ */ /* mpeg encoders for the dxr3 video out plugin. @@ -44,6 +44,7 @@ #include <fcntl.h> #include <errno.h> #include <math.h> +#include <unistd.h> #define LOG_MODULE "dxr3_mpeg_encoder" /* #define LOG_VERBOSE */ diff --git a/src/input/libdvdnav/.cvsignore b/src/input/.hgignore index 7d926a554..7d926a554 100644 --- a/src/input/libdvdnav/.cvsignore +++ b/src/input/.hgignore diff --git a/src/input/Makefile.am b/src/input/Makefile.am index c0924f829..68adf84be 100644 --- a/src/input/Makefile.am +++ b/src/input/Makefile.am @@ -77,17 +77,17 @@ xineplug_inp_file_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_file_la_LDFLAGS = -avoid-version -module xineplug_inp_dvd_la_SOURCES = input_dvd.c media_helper.c -xineplug_inp_dvd_la_LIBADD = $(XINE_LIB) $(link_dvdnav) $(THREAD_LIBS) +xineplug_inp_dvd_la_LIBADD = $(XINE_LIB) $(link_dvdnav) $(PTHREAD_LIBS) $(DYNAMIC_LD_LIBS) xineplug_inp_dvd_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_dvd_la_LDFLAGS = -avoid-version -module xineplug_inp_net_la_SOURCES = input_net.c net_buf_ctrl.c -xineplug_inp_net_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) +xineplug_inp_net_la_LIBADD = $(XINE_LIB) $(NET_LIBS) $(PTHREAD_LIBS) xineplug_inp_net_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_net_la_LDFLAGS = -avoid-version -module xineplug_inp_mms_la_SOURCES = input_mms.c net_buf_ctrl.c mms.c mmsh.c http_helper.c ../demuxers/asfheader.c -xineplug_inp_mms_la_LIBADD = $(XINE_LIB) @LIBICONV@ $(THREAD_LIBS) +xineplug_inp_mms_la_LIBADD = $(XINE_LIB) @LIBICONV@ $(PTHREAD_LIBS) xineplug_inp_mms_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_mms_la_LDFLAGS = -avoid-version -module @@ -97,32 +97,32 @@ xineplug_inp_vcdo_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_vcdo_la_LDFLAGS = -avoid-version -module xineplug_inp_stdin_fifo_la_SOURCES = input_stdin_fifo.c net_buf_ctrl.c -xineplug_inp_stdin_fifo_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) +xineplug_inp_stdin_fifo_la_LIBADD = $(XINE_LIB) $(PTHREAD_LIBS) xineplug_inp_stdin_fifo_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_stdin_fifo_la_LDFLAGS = -avoid-version -module xineplug_inp_rtp_la_SOURCES = input_rtp.c net_buf_ctrl.c -xineplug_inp_rtp_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) +xineplug_inp_rtp_la_LIBADD = $(XINE_LIB) $(NET_LIBS) $(PTHREAD_LIBS) xineplug_inp_rtp_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_rtp_la_LDFLAGS = -avoid-version -module xineplug_inp_http_la_SOURCES = input_http.c net_buf_ctrl.c http_helper.c -xineplug_inp_http_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) +xineplug_inp_http_la_LIBADD = $(XINE_LIB) $(NET_LIBS) $(PTHREAD_LIBS) xineplug_inp_http_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_http_la_LDFLAGS = -avoid-version -module xineplug_inp_pnm_la_SOURCES = input_pnm.c net_buf_ctrl.c pnm.c -xineplug_inp_pnm_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) +xineplug_inp_pnm_la_LIBADD = $(XINE_LIB) $(PTHREAD_LIBS) xineplug_inp_pnm_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_pnm_la_LDFLAGS = -avoid-version -module xineplug_inp_dvb_la_SOURCES = input_dvb.c net_buf_ctrl.c -xineplug_inp_dvb_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) +xineplug_inp_dvb_la_LIBADD = $(XINE_LIB) $(PTHREAD_LIBS) xineplug_inp_dvb_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_dvb_la_LDFLAGS = -avoid-version -module xineplug_inp_rtsp_la_SOURCES = input_rtsp.c net_buf_ctrl.c -xineplug_inp_rtsp_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) libreal/libreal.la librtsp/librtsp.la +xineplug_inp_rtsp_la_LIBADD = $(XINE_LIB) $(PTHREAD_LIBS) libreal/libreal.la librtsp/librtsp.la xineplug_inp_rtsp_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_rtsp_la_LDFLAGS = -avoid-version -module @@ -137,7 +137,7 @@ xineplug_inp_v4l_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_v4l_la_LDFLAGS = -avoid-version -module xineplug_inp_gnome_vfs_la_SOURCES = input_gnome_vfs.c net_buf_ctrl.c -xineplug_inp_gnome_vfs_la_LIBADD = $(GNOME_VFS_LIBS) $(XINE_LIB) $(THREAD_LIBS) +xineplug_inp_gnome_vfs_la_LIBADD = $(GNOME_VFS_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) xineplug_inp_gnome_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_gnome_vfs_la_LDFLAGS = -avoid-version -module @@ -147,10 +147,10 @@ xineplug_inp_smb_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_smb_la_LDFLAGS = -avoid-version -module xineplug_inp_pvr_la_SOURCES = input_pvr.c -xineplug_inp_pvr_la_LIBADD = $(XINE_LIB) +xineplug_inp_pvr_la_LIBADD = $(XINE_LIB) $(PTHREAD_LIBS) xineplug_inp_pvr_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_inp_pvr_la_LDFLAGS = -avoid-version -module -include_HEADERS = input_plugin.h +xineinclude_HEADERS = input_plugin.h noinst_HEADERS = net_buf_ctrl.h mms.h mmsh.h pnm.h media_helper.h videodev2.h http_helper.h diff --git a/src/input/dvb/.cvsignore b/src/input/dvb/.hgignore index 282522db0..282522db0 100644 --- a/src/input/dvb/.cvsignore +++ b/src/input/dvb/.hgignore diff --git a/src/input/input_cdda.c b/src/input/input_cdda.c index f51ffc646..d21c8e4db 100644 --- a/src/input/input_cdda.c +++ b/src/input/input_cdda.c @@ -20,7 +20,7 @@ * Compact Disc Digital Audio (CDDA) Input Plugin * by Mike Melanson (melanson@pcisys.net) * - * $Id: input_cdda.c,v 1.90 2006/08/11 21:40:02 dsalt Exp $ + * $Id: input_cdda.c,v 1.94 2007/03/10 00:48:59 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -86,6 +86,7 @@ #define CD_FRAMES_PER_SECOND 75 #define CD_RAW_FRAME_SIZE 2352 #define CD_LEADOUT_TRACK 0xAA +#define CD_BLOCK_OFFSET 150 typedef struct _cdrom_toc_entry { int track_mode; @@ -613,14 +614,20 @@ static int read_cdrom_frames(cdda_input_plugin_t *this_gen, int frame, int num_f return 0; } -#elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) || defined(__NetBSD__) #include <sys/cdio.h> +#include <sys/scsiio.h> static int read_cdrom_toc(int fd, cdrom_toc *toc) { struct ioc_toc_header tochdr; +#if defined(__FreeBSD__) struct ioc_read_toc_single_entry tocentry; +#elif defined(__NetBSD__) + struct ioc_read_toc_entry tocentry; + struct cd_toc_entry data; +#endif int i; /* fetch the table of contents */ @@ -646,13 +653,26 @@ static int read_cdrom_toc(int fd, cdrom_toc *toc) { memset(&tocentry, 0, sizeof(tocentry)); +#if defined(__FreeBSD__) tocentry.track = i; tocentry.address_format = CD_MSF_FORMAT; if (ioctl(fd, CDIOREADTOCENTRY, &tocentry) == -1) { perror("CDIOREADTOCENTRY"); return -1; } +#elif defined(__NetBSD__) + memset(&data, 0, sizeof(data)); + tocentry.data_len = sizeof(data); + tocentry.data = &data; + tocentry.starting_track = i; + tocentry.address_format = CD_MSF_FORMAT; + if (ioctl(fd, CDIOREADTOCENTRYS, &tocentry) == -1) { + perror("CDIOREADTOCENTRYS"); + return -1; + } +#endif +#if defined(__FreeBSD__) toc->toc_entries[i-1].track_mode = (tocentry.entry.control & 0x04) ? 1 : 0; toc->toc_entries[i-1].first_frame_minute = tocentry.entry.addr.msf.minute; toc->toc_entries[i-1].first_frame_second = tocentry.entry.addr.msf.second; @@ -661,18 +681,41 @@ static int read_cdrom_toc(int fd, cdrom_toc *toc) { (tocentry.entry.addr.msf.minute * CD_SECONDS_PER_MINUTE * CD_FRAMES_PER_SECOND) + (tocentry.entry.addr.msf.second * CD_FRAMES_PER_SECOND) + tocentry.entry.addr.msf.frame; +#elif defined(__NetBSD__) + toc->toc_entries[i-1].track_mode = (tocentry.data->control & 0x04) ? 1 : 0; + toc->toc_entries[i-1].first_frame_minute = tocentry.data->addr.msf.minute; + toc->toc_entries[i-1].first_frame_second = tocentry.data->addr.msf.second; + toc->toc_entries[i-1].first_frame_frame = tocentry.data->addr.msf.frame; + toc->toc_entries[i-1].first_frame = + (tocentry.data->addr.msf.minute * CD_SECONDS_PER_MINUTE * CD_FRAMES_PER_SECOND) + + (tocentry.data->addr.msf.second * CD_FRAMES_PER_SECOND) + + tocentry.data->addr.msf.frame - CD_BLOCK_OFFSET; +#endif } /* fetch the leadout as well */ memset(&tocentry, 0, sizeof(tocentry)); +#if defined(__FreeBSD__) tocentry.track = CD_LEADOUT_TRACK; tocentry.address_format = CD_MSF_FORMAT; if (ioctl(fd, CDIOREADTOCENTRY, &tocentry) == -1) { perror("CDIOREADTOCENTRY"); return -1; } +#elif defined(__NetBSD__) + memset(&data, 0, sizeof(data)); + tocentry.data_len = sizeof(data); + tocentry.data = &data; + tocentry.starting_track = CD_LEADOUT_TRACK; + tocentry.address_format = CD_MSF_FORMAT; + if (ioctl(fd, CDIOREADTOCENTRYS, &tocentry) == -1) { + perror("CDIOREADTOCENTRYS"); + return -1; + } +#endif +#if defined(__FreeBSD__) toc->leadout_track.track_mode = (tocentry.entry.control & 0x04) ? 1 : 0; toc->leadout_track.first_frame_minute = tocentry.entry.addr.msf.minute; toc->leadout_track.first_frame_second = tocentry.entry.addr.msf.second; @@ -681,6 +724,16 @@ static int read_cdrom_toc(int fd, cdrom_toc *toc) { (tocentry.entry.addr.msf.minute * CD_SECONDS_PER_MINUTE * CD_FRAMES_PER_SECOND) + (tocentry.entry.addr.msf.second * CD_FRAMES_PER_SECOND) + tocentry.entry.addr.msf.frame; +#elif defined(__NetBSD__) + toc->leadout_track.track_mode = (tocentry.data->control & 0x04) ? 1 : 0; + toc->leadout_track.first_frame_minute = tocentry.data->addr.msf.minute; + toc->leadout_track.first_frame_second = tocentry.data->addr.msf.second; + toc->leadout_track.first_frame_frame = tocentry.data->addr.msf.frame; + toc->leadout_track.first_frame = + (tocentry.data->addr.msf.minute * CD_SECONDS_PER_MINUTE * CD_FRAMES_PER_SECOND) + + (tocentry.data->addr.msf.second * CD_FRAMES_PER_SECOND) + + tocentry.data->addr.msf.frame - CD_BLOCK_OFFSET; +#endif return 0; } @@ -689,12 +742,12 @@ static int read_cdrom_frames(cdda_input_plugin_t *this_gen, int frame, int num_f unsigned char *data) { int fd = this_gen->fd; -#if __FreeBSD_version < 501106 - struct ioc_read_audio cdda; -#endif while( num_frames ) { +#if defined(__FreeBSD__) #if __FreeBSD_version < 501106 + struct ioc_read_audio cdda; + cdda.address_format = CD_MSF_FORMAT; cdda.address.msf.minute = frame / CD_SECONDS_PER_MINUTE / CD_FRAMES_PER_SECOND; cdda.address.msf.second = (frame / CD_FRAMES_PER_SECOND) % CD_SECONDS_PER_MINUTE; @@ -712,6 +765,33 @@ static int read_cdrom_frames(cdda_input_plugin_t *this_gen, int frame, int num_f perror("CDIOCREADAUDIO"); return -1; } +#elif defined(__NetBSD__) + scsireq_t req; + int nblocks = 1; + + memset(&req, 0, sizeof(req)); + req.cmd[0] = 0xbe; + req.cmd[1] = 0; + req.cmd[2] = (frame >> 24) & 0xff; + req.cmd[3] = (frame >> 16) & 0xff; + req.cmd[4] = (frame >> 8) & 0xff; + req.cmd[5] = (frame >> 0) & 0xff; + req.cmd[6] = (nblocks >> 16) & 0xff; + req.cmd[7] = (nblocks >> 8) & 0xff; + req.cmd[8] = (nblocks >> 0) & 0xff; + req.cmd[9] = 0x78; + req.cmdlen = 10; + + req.datalen = nblocks * CD_RAW_FRAME_SIZE; + req.databuf = data; + req.timeout = 10000; + req.flags = SCCMD_READ; + + if(ioctl(fd, SCIOCCOMMAND, &req) < 0) { + perror("SCIOCCOMMAND"); + return -1; + } +#endif data += CD_RAW_FRAME_SIZE; frame++; @@ -2270,7 +2350,7 @@ static uint32_t cdda_plugin_get_blocksize (input_plugin_t *this_gen) { return CD_RAW_FRAME_SIZE; } -static char* cdda_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* cdda_plugin_get_mrl (input_plugin_t *this_gen) { cdda_input_plugin_t *this = (cdda_input_plugin_t *) this_gen; return this->mrl; @@ -2623,7 +2703,7 @@ static const char *cdda_class_get_identifier (input_class_t *this_gen) { return "cdda"; } -static char *cdda_class_get_description (input_class_t *this_gen) { +static const char *cdda_class_get_description (input_class_t *this_gen) { return _("CD Digital Audio (aka. CDDA)"); } @@ -2675,8 +2755,8 @@ static void *init_plugin (xine_t *xine, void *data) { this->mrls_allocated_entries = 0; this->ip = NULL; - this->cdda_device = config->register_string(config, "media.audio_cd.device", - DEFAULT_CDDA_DEVICE, + this->cdda_device = config->register_filename(config, "media.audio_cd.device", + DEFAULT_CDDA_DEVICE, XINE_CONFIG_STRING_IS_DEVICE_NAME, _("device used for CD audio"), _("The path to the device, usually a " "CD or DVD drive, which you intend to use " @@ -2704,8 +2784,8 @@ static void *init_plugin (xine_t *xine, void *data) { "title and track information from."), XINE_CONFIG_SECURITY, port_changed_cb, (void *) this); - config->register_string(config, "media.audio_cd.cddb_cachedir", - (_cdda_cddb_get_default_location()), + config->register_filename(config, "media.audio_cd.cddb_cachedir", + (_cdda_cddb_get_default_location()), XINE_CONFIG_STRING_IS_DIRECTORY_NAME, _("CDDB cache directory"), _("The replies from the CDDB server will be " "cached in this directory.\nThis setting is security critical, because files " "with uncontrollable names will be created in this directory. Be sure to use " diff --git a/src/input/input_dvb.c b/src/input/input_dvb.c index 8d06cb61e..39507ac15 100644 --- a/src/input/input_dvb.c +++ b/src/input/input_dvb.c @@ -2651,7 +2651,7 @@ static void dvb_plugin_dispose (input_plugin_t *this_gen) { free (this); } -static char* dvb_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* dvb_plugin_get_mrl (input_plugin_t *this_gen) { dvb_input_plugin_t *this = (dvb_input_plugin_t *) this_gen; return this->mrl; @@ -3085,7 +3085,7 @@ static input_plugin_t *dvb_class_get_instance (input_class_t *class_gen, * dvb input plugin class stuff */ -static char *dvb_class_get_description (input_class_t *this_gen) { +static const char *dvb_class_get_description (input_class_t *this_gen) { return _("DVB (Digital TV) input plugin"); } @@ -3183,15 +3183,14 @@ static char **dvb_class_get_autoplay_list(input_class_t * this_gen, } if (lastchannel_enable.num_value){ - if (lastchannel.num_value>-1) /* plugin has been used before - channel is valid */ - sprintf(foobuffer,"dvb://%s",channels[lastchannel.num_value].name); - else /* set a reasonable default - the first channel */ - sprintf(foobuffer,"dvb://%s",channels[lastchannel_enable.num_value].name); - if(class->autoplaylist[0]) - free(class->autoplaylist[0]); - class->autoplaylist[0]=xine_xmalloc(128); - _x_assert(class->autoplaylist[0] != NULL); - class->autoplaylist[0]=strdup(foobuffer); + if (lastchannel.num_value > -1 && lastchannel.num_value < num_channels) + /* plugin has been used before - channel is valid */ + sprintf (foobuffer, "dvb://%s", channels[lastchannel.num_value].name); + else + /* set a reasonable default - the first channel */ + sprintf (foobuffer, "dvb://%s", num_channels ? channels[0].name : "0"); + free(class->autoplaylist[0]); + class->autoplaylist[0]=strdup(foobuffer); } free(tmpbuffer); diff --git a/src/input/input_dvd.c b/src/input/input_dvd.c index 26eb67e24..944ae88bd 100644 --- a/src/input/input_dvd.c +++ b/src/input/input_dvd.c @@ -18,7 +18,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: input_dvd.c,v 1.211 2006/10/29 19:39:39 hadess Exp $ + * $Id: input_dvd.c,v 1.216 2007/02/20 01:04:07 dgp85 Exp $ * */ @@ -930,7 +930,7 @@ static uint32_t dvd_plugin_get_blocksize (input_plugin_t *this_gen) { return DVD_BLOCK_SIZE; } -static char* dvd_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* dvd_plugin_get_mrl (input_plugin_t *this_gen) { dvd_input_plugin_t *this = (dvd_input_plugin_t*)this_gen; trace_print("Called\n"); @@ -1278,7 +1278,7 @@ static int dvd_plugin_get_optional_data (input_plugin_t *this_gen, if(this && this->stream && this->dvdnav) { if(!(dvdnav_is_domain_vts(this->dvdnav))) { - sprintf(data, "%s", "menu"); + strcpy(data, "menu"); if (channel <= 0) return INPUT_OPTIONAL_SUCCESS; else @@ -1297,11 +1297,11 @@ static int dvd_plugin_get_optional_data (input_plugin_t *this_gen, sprintf(data, " %c%c", lang >> 8, lang & 0xff); /* TODO: provide long version in XINE_META_INFO_FULL_LANG */ else - sprintf(data, " %c%c", '?', '?'); + strcpy(data, " ??"); return INPUT_OPTIONAL_SUCCESS; } else { if (channel == -1) { - sprintf(data, "%s", "none"); + strcpy(data, "none"); return INPUT_OPTIONAL_SUCCESS; } } @@ -1680,7 +1680,7 @@ static input_plugin_t *dvd_class_get_instance (input_class_t *class_gen, xine_st return &this->input_plugin; } -static char *dvd_class_get_description (input_class_t *this_gen) { +static const char *dvd_class_get_description (input_class_t *this_gen) { trace_print("Called\n"); return "DVD Navigator"; @@ -1749,9 +1749,9 @@ static void *init_class (xine_t *xine, void *data) { dvd_input_class_t *this; config_values_t *config = xine->config; void *dvdcss; - static char *skip_modes[] = {"skip program", "skip part", "skip title", NULL}; - static char *seek_modes[] = {"seek in program chain", "seek in program", NULL}; - static char *play_single_chapter_modes[] = {"entire dvd", "one chapter", NULL}; + static const char *skip_modes[] = {"skip program", "skip part", "skip title", NULL}; + static const char *seek_modes[] = {"seek in program chain", "seek in program", NULL}; + static const char *play_single_chapter_modes[] = {"entire dvd", "one chapter", NULL}; trace_print("Called\n"); #ifdef INPUT_DEBUG @@ -1779,9 +1779,9 @@ static void *init_class (xine_t *xine, void *data) { this->ip = NULL; - this->dvd_device = config->register_string(config, + this->dvd_device = config->register_filename(config, "media.dvd.device", - DVD_PATH, + DVD_PATH, XINE_CONFIG_STRING_IS_DEVICE_NAME, _("device used for DVD playback"), _("The path to the device, usually a " "DVD drive, which you intend to use for playing DVDs."), @@ -1795,12 +1795,13 @@ static void *init_class (xine_t *xine, void *data) { { /* we have found libdvdcss, enable the specific config options */ char *raw_device; - static char *decrypt_modes[] = { "key", "disc", "title", NULL }; + static const char *decrypt_modes[] = { "key", "disc", "title", NULL }; char *css_cache_default, *css_cache; int mode; - raw_device = config->register_string(config, "media.dvd.raw_device", - RDVD_PATH, _("raw device set up for DVD access"), + raw_device = config->register_filename(config, "media.dvd.raw_device", + RDVD_PATH, XINE_CONFIG_STRING_IS_DEVICE_NAME, + _("raw device set up for DVD access"), _("If this points to a raw device connected to your " "DVD device, xine will use the raw device for playback. " "This has the advantage of being slightly faster and " @@ -1822,7 +1823,7 @@ static void *init_class (xine_t *xine, void *data) { css_cache_default = (char *)malloc(strlen(xine_get_homedir()) + 10); sprintf(css_cache_default, "%s/.dvdcss/", xine_get_homedir()); - css_cache = config->register_string(config, "media.dvd.css_cache_path", css_cache_default, + css_cache = config->register_filename(config, "media.dvd.css_cache_path", css_cache_default, XINE_CONFIG_STRING_IS_DIRECTORY_NAME, _("path to the title key cache"), _("Since cracking the copy protection of scrambled DVDs can " "be quite time consuming, libdvdcss will cache the cracked " diff --git a/src/input/input_file.c b/src/input/input_file.c index 93d208c4e..fd2b0e733 100644 --- a/src/input/input_file.c +++ b/src/input/input_file.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: input_file.c,v 1.117 2006/10/01 20:14:43 dgp85 Exp $ + * $Id: input_file.c,v 1.122 2007/03/29 19:47:17 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -66,8 +66,8 @@ typedef struct { xine_t *xine; config_values_t *config; - int show_hidden_files; char *origin_path; + int show_hidden_files; int mrls_allocated_entries; xine_mrl_t **mrls; @@ -280,11 +280,6 @@ static off_t file_plugin_get_length (input_plugin_t *this_gen) { } static uint32_t file_plugin_get_blocksize (input_plugin_t *this_gen) { - file_input_plugin_t *this = (file_input_plugin_t *) this_gen; -#if 0 && defined(HAVE_MMAP) - if ( check_mmap_file(this) ) - return this->mmap_len; -#endif return 0; } @@ -299,7 +294,7 @@ static int is_a_dir(char *filepathname) { return (S_ISDIR(pstat.st_mode)); } -static char* file_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* file_plugin_get_mrl (input_plugin_t *this_gen) { file_input_plugin_t *this = (file_input_plugin_t *) this_gen; return this->mrl; @@ -659,7 +654,7 @@ static off_t get_file_size(char *filepathname, char *origin) { return pstat.st_size; } -static char *file_class_get_description (input_class_t *this_gen) { +static const char *file_class_get_description (input_class_t *this_gen) { return _("file input plugin"); } @@ -1027,8 +1022,8 @@ static void *init_plugin (xine_t *xine, void *data) { if(getcwd(current_dir, sizeof(current_dir)) == NULL) strcpy(current_dir, "."); - this->origin_path = config->register_string(config, "media.files.origin_path", - current_dir, + this->origin_path = config->register_filename(config, "media.files.origin_path", + current_dir, XINE_CONFIG_STRING_IS_DIRECTORY_NAME, _("file browsing start location"), _("The browser to select the file to play will " "start at this location."), diff --git a/src/input/input_gnome_vfs.c b/src/input/input_gnome_vfs.c index 3ada09d19..b9f516931 100644 --- a/src/input/input_gnome_vfs.c +++ b/src/input/input_gnome_vfs.c @@ -18,7 +18,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: input_gnome_vfs.c,v 1.32 2006/09/08 06:20:37 tmattern Exp $ + * $Id: input_gnome_vfs.c,v 1.34 2007/01/19 01:05:25 dgp85 Exp $ */ @@ -204,7 +204,7 @@ gnomevfs_plugin_get_blocksize (input_plugin_t *this_gen) return 32 * 1024; } -static char* +static const char* gnomevfs_plugin_get_mrl (input_plugin_t *this_gen) { gnomevfs_input_t *this = (gnomevfs_input_t *) this_gen; @@ -212,7 +212,7 @@ gnomevfs_plugin_get_mrl (input_plugin_t *this_gen) return this->mrl; } -static char +static const char *gnomevfs_klass_get_description (input_class_t *this_gen) { return _("gnome-vfs input plugin as shipped with xine"); diff --git a/src/input/input_http.c b/src/input/input_http.c index 0ba143091..3adbc836b 100644 --- a/src/input/input_http.c +++ b/src/input/input_http.c @@ -19,7 +19,7 @@ * * input plugin for http network streams * - * $Id: input_http.c,v 1.124 2006/11/30 10:54:18 dgp85 Exp $ + * $Id: input_http.c,v 1.129 2007/03/17 16:47:16 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -335,12 +335,9 @@ static int http_plugin_read_metainf (http_input_plugin_t *this) { /* prepares the event */ radio = _x_meta_info_get(this->stream, XINE_META_INFO_ALBUM); if (radio) { - int len = strlen(radio); - strncpy(data.str, radio, sizeof(data.str)); - strncat(data.str, " - ", sizeof(data.str) - len); - strncat(data.str, songtitle, sizeof(data.str) - len - 3); + snprintf (data.str, sizeof(data.str), "%s - %s", radio, songtitle); } else { - strncpy(data.str, songtitle, sizeof(data.str)); + strncpy(data.str, songtitle, sizeof(data.str)-1); } data.str[sizeof(data.str) - 1] = '\0'; data.str_len = strlen(data.str) + 1; @@ -366,7 +363,7 @@ static off_t http_plugin_read_int (http_input_plugin_t *this, int read_bytes = 0; int nlen; - lprintf("total=%lld\n", total); + lprintf("total=%"PRId64"\n", total); while (total) { nlen = total; if (this->shoutcast_mode && @@ -418,7 +415,7 @@ static off_t http_plugin_read (input_plugin_t *this_gen, else n = nlen; - lprintf ("%lld bytes from preview (which has %lld bytes)\n", n, this->preview_size); + lprintf ("%"PRId64" bytes from preview (which has %"PRId64" bytes)\n", n, this->preview_size); memcpy (buf, &this->preview[this->curpos], n); num_bytes += n; @@ -577,7 +574,7 @@ static off_t http_plugin_seek(input_plugin_t *this_gen, off_t offset, int origin return this->curpos; } -static char* http_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* http_plugin_get_mrl (input_plugin_t *this_gen) { http_input_plugin_t *this = (http_input_plugin_t *) this_gen; return this->mrl; @@ -766,13 +763,11 @@ static int http_plugin_open (input_plugin_t *this_gen ) { } snprintf(this->buf + buflen, BUFSIZE - buflen, - "User-Agent: xine/%s\015\012", VERSION); - buflen = strlen(this->buf); - strncat (this->buf, "Accept: */*\015\012", BUFSIZE - buflen); - buflen = strlen(this->buf); - strncat (this->buf, "Icy-MetaData: 1\015\012", BUFSIZE - buflen); - buflen = strlen(this->buf); - strncat (this->buf, "\015\012", BUFSIZE - buflen); + "User-Agent: xine/%s\015\012" + "Accept: */*\015\012" + "Icy-MetaData: 1\015\012" + "\015\012", + VERSION); buflen = strlen(this->buf); if (_x_io_tcp_write (this->stream, this->fh, this->buf, buflen) != buflen) { _x_message(this->stream, XINE_MSG_CONNECTION_REFUSED, "couldn't send request", NULL); @@ -809,18 +804,20 @@ static int http_plugin_open (input_plugin_t *this_gen ) { if (linenum == 1) { int httpver, httpsub; - char httpstatus[51]; - - if (sscanf(this->buf, "HTTP/%d.%d %d %50[^\015\012]", &httpver, &httpsub, - &httpcode, httpstatus) != 4) { - - /* icecast 1 ? */ - if (sscanf(this->buf, "ICY %d %50[^\015\012]", &httpcode, httpstatus) != 2) { + char httpstatus[51] = { 0, }; + + if ( + (sscanf(this->buf, "HTTP/%d.%d %d %50[^\015\012]", &httpver, &httpsub, + &httpcode, httpstatus) != 4) && + (sscanf(this->buf, "HTTP/%d.%d %d", &httpver, &httpsub, + &httpcode) != 3) && + (sscanf(this->buf, "ICY %d %50[^\015\012]", /* icecast 1 ? */ + &httpcode, httpstatus) != 2) + ) { _x_message(this->stream, XINE_MSG_CONNECTION_REFUSED, "invalid http answer", NULL); xine_log (this->stream->xine, XINE_LOG_MSG, _("input_http: invalid http answer\n")); return -6; - } } if (httpcode >= 300 && httpcode < 400) { @@ -947,7 +944,7 @@ static int http_plugin_open (input_plugin_t *this_gen ) { return -12; } - lprintf("preview_size=%lld\n", this->preview_size); + lprintf("preview_size=%"PRId64"\n", this->preview_size); this->curpos = 0; return 1; @@ -995,7 +992,7 @@ static input_plugin_t *http_class_get_instance (input_class_t *cls_gen, xine_str return &this->input_plugin; } -static char *http_class_get_description (input_class_t *this_gen) { +static const char *http_class_get_description (input_class_t *this_gen) { return _("http input plugin"); } diff --git a/src/input/input_mms.c b/src/input/input_mms.c index d4f6cb940..05c0b168b 100644 --- a/src/input/input_mms.c +++ b/src/input/input_mms.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: input_mms.c,v 1.64 2006/10/23 21:18:18 hadess Exp $ + * $Id: input_mms.c,v 1.70 2007/02/20 00:51:39 dgp85 Exp $ * * mms input plugin based on work from major mms */ @@ -56,18 +56,18 @@ #define PROTOCOL_MMSH 2 /* network bandwidth */ -const uint32_t mms_bandwidths[]={14400,19200,28800,33600,34430,57600, - 115200,262200,393216,524300,1544000,10485800}; +static const uint32_t mms_bandwidths[]={14400,19200,28800,33600,34430,57600, + 115200,262200,393216,524300,1544000,10485800}; -const char * mms_bandwidth_strs[]={"14.4 Kbps (Modem)", "19.2 Kbps (Modem)", - "28.8 Kbps (Modem)", "33.6 Kbps (Modem)", - "34.4 Kbps (Modem)", "57.6 Kbps (Modem)", - "115.2 Kbps (ISDN)", "262.2 Kbps (Cable/DSL)", - "393.2 Kbps (Cable/DSL)","524.3 Kbps (Cable/DSL)", - "1.5 Mbps (T1)", "10.5 Mbps (LAN)", NULL}; +static const char * mms_bandwidth_strs[]={"14.4 Kbps (Modem)", "19.2 Kbps (Modem)", + "28.8 Kbps (Modem)", "33.6 Kbps (Modem)", + "34.4 Kbps (Modem)", "57.6 Kbps (Modem)", + "115.2 Kbps (ISDN)", "262.2 Kbps (Cable/DSL)", + "393.2 Kbps (Cable/DSL)","524.3 Kbps (Cable/DSL)", + "1.5 Mbps (T1)", "10.5 Mbps (LAN)", NULL}; /* connection methods */ -const char *mms_protocol_strs[]={"auto", "TCP", "HTTP", NULL}; +static const char *mms_protocol_strs[]={"auto", "TCP", "HTTP", NULL}; typedef struct { input_plugin_t input_plugin; @@ -102,7 +102,7 @@ static off_t mms_plugin_read (input_plugin_t *this_gen, mms_input_plugin_t *this = (mms_input_plugin_t *) this_gen; off_t n = 0; - lprintf ("mms_plugin_read: %lld bytes ...\n", len); + lprintf ("mms_plugin_read: %"PRId64" bytes ...\n", len); switch (this->protocol) { case PROTOCOL_MMST: @@ -122,7 +122,7 @@ static buf_element_t *mms_plugin_read_block (input_plugin_t *this_gen, buf_element_t *buf = fifo->buffer_pool_alloc (fifo); int total_bytes; - lprintf ("mms_plugin_read_block: %lld bytes...\n", todo); + lprintf ("mms_plugin_read_block: %"PRId64" bytes...\n", todo); buf->content = buf->mem; buf->type = BUF_DEMUX_BLOCK; @@ -144,7 +144,7 @@ static off_t mms_plugin_seek (input_plugin_t *this_gen, off_t offset, int origin off_t dest = 0; off_t curpos = 0; - lprintf ("mms_plugin_seek: %lld offset, %d origin...\n", offset, origin); + lprintf ("mms_plugin_seek: %"PRId64" offset, %d origin...\n", offset, origin); switch (this->protocol) { @@ -201,6 +201,28 @@ static off_t mms_plugin_seek (input_plugin_t *this_gen, off_t offset, int origin return curpos; } +static off_t mms_plugin_seek_time (input_plugin_t *this_gen, int time_offset, int origin) { + mms_input_plugin_t *this = (mms_input_plugin_t *) this_gen; + off_t curpos = 0; + + lprintf ("seek_time %d msec, origin %d\n", time_offset, origin); + + switch (this->protocol) { + case PROTOCOL_MMST: + if (origin == SEEK_SET) + mms_set_start_time (this->mms, time_offset); + curpos = mms_get_current_pos (this->mms); + break; + case PROTOCOL_MMSH: + if (origin == SEEK_SET) + mmsh_set_start_time (this->mmsh, time_offset); + curpos = mmsh_get_current_pos (this->mmsh); + break; + } + + return curpos; +} + static off_t mms_plugin_get_length (input_plugin_t *this_gen) { mms_input_plugin_t *this = (mms_input_plugin_t *) this_gen; off_t length = 0; @@ -217,7 +239,7 @@ static off_t mms_plugin_get_length (input_plugin_t *this_gen) { break; } - lprintf ("length is %lld\n", length); + lprintf ("length is %"PRId64"\n", length); return length; @@ -270,7 +292,7 @@ static void mms_plugin_dispose (input_plugin_t *this_gen) { free (this); } -static char* mms_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* mms_plugin_get_mrl (input_plugin_t *this_gen) { mms_input_plugin_t *this = (mms_input_plugin_t *) this_gen; return this->mrl; @@ -400,6 +422,7 @@ static input_plugin_t *mms_class_get_instance (input_class_t *cls_gen, xine_stre this->input_plugin.read = mms_plugin_read; this->input_plugin.read_block = mms_plugin_read_block; this->input_plugin.seek = mms_plugin_seek; + this->input_plugin.seek_time = mms_plugin_seek_time; this->input_plugin.get_current_pos = mms_plugin_get_current_pos; this->input_plugin.get_length = mms_plugin_get_length; this->input_plugin.get_blocksize = mms_plugin_get_blocksize; @@ -416,7 +439,7 @@ static input_plugin_t *mms_class_get_instance (input_class_t *cls_gen, xine_stre * mms input plugin class stuff */ -static char *mms_class_get_description (input_class_t *this_gen) { +static const char *mms_class_get_description (input_class_t *this_gen) { return _("mms streaming input plugin"); } @@ -452,7 +475,7 @@ static void *init_class (xine_t *xine, void *data) { this->input_class.eject_media = NULL; xine->config->register_enum(xine->config, "media.network.bandwidth", 10, - (char **)mms_bandwidth_strs, + mms_bandwidth_strs, _("network bandwidth"), _("Specify the bandwidth of your internet connection here. " "This will be used when streaming servers offer different versions " @@ -462,7 +485,7 @@ static void *init_class (xine_t *xine, void *data) { this->protocol = xine->config->register_enum(xine->config, "media.network.mms_protocol", 0, - (char **)mms_protocol_strs, + mms_protocol_strs, _("MMS protocol"), _("Select the protocol to encapsulate MMS.\nTCP is better but you may need HTTP behind a firewall."), 20, diff --git a/src/input/input_net.c b/src/input/input_net.c index 19326c301..0ce2e1340 100644 --- a/src/input/input_net.c +++ b/src/input/input_net.c @@ -20,7 +20,7 @@ * Read from a tcp network stream over a lan (put a tweaked mp1e encoder the * other end and you can watch tv anywhere in the house ..) * - * $Id: input_net.c,v 1.68 2006/07/10 22:08:15 dgp85 Exp $ + * $Id: input_net.c,v 1.70 2007/01/19 01:05:25 dgp85 Exp $ * * how to set up mp1e for use with this plugin: * @@ -367,7 +367,7 @@ static off_t net_plugin_seek (input_plugin_t *this_gen, off_t offset, int origin } -static char* net_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* net_plugin_get_mrl (input_plugin_t *this_gen) { net_input_plugin_t *this = (net_input_plugin_t *) this_gen; return this->mrl; @@ -506,7 +506,7 @@ static input_plugin_t *net_class_get_instance (input_class_t *cls_gen, xine_stre * net plugin class */ -static char *net_class_get_description (input_class_t *this_gen) { +static const char *net_class_get_description (input_class_t *this_gen) { return _("net input plugin as shipped with xine"); } diff --git a/src/input/input_plugin.h b/src/input/input_plugin.h index 2e9f0dca6..370dc6a71 100644 --- a/src/input/input_plugin.h +++ b/src/input/input_plugin.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: input_plugin.h,v 1.60 2005/10/14 21:02:16 miguelfreitas Exp $ + * $Id: input_plugin.h,v 1.64 2007/01/19 01:05:25 dgp85 Exp $ */ #ifndef HAVE_INPUT_PLUGIN_H @@ -60,7 +60,7 @@ struct input_class_s { * return human readable (verbose = 1 line) description for * this plugin class */ - char* (*get_description) (input_class_t *this); + const char* (*get_description) (input_class_t *this); /* * ls function, optional: may be NULL @@ -201,7 +201,7 @@ struct input_plugin_s { /* * return current MRL */ - char * (*get_mrl) (input_plugin_t *this); + const char * (*get_mrl) (input_plugin_t *this); /* @@ -297,6 +297,7 @@ struct input_plugin_s { #define INPUT_CAP_RIP_FORBIDDEN 0x00000100 + #define INPUT_IS_SEEKABLE(input) (((input)->get_capabilities(input) & INPUT_CAP_SEEKABLE) != 0) #define INPUT_OPTIONAL_UNSUPPORTED 0 diff --git a/src/input/input_pnm.c b/src/input/input_pnm.c index 26fdd350e..e1413b0f7 100644 --- a/src/input/input_pnm.c +++ b/src/input/input_pnm.c @@ -80,7 +80,7 @@ static off_t pnm_plugin_read (input_plugin_t *this_gen, pnm_input_plugin_t *this = (pnm_input_plugin_t *) this_gen; off_t n; - lprintf ("pnm_plugin_read: %lld bytes ...\n", len); + lprintf ("pnm_plugin_read: %"PRId64" bytes ...\n", len); nbc_check_buffers (this->nbc); @@ -96,7 +96,7 @@ static buf_element_t *pnm_plugin_read_block (input_plugin_t *this_gen, buf_element_t *buf = fifo->buffer_pool_alloc (fifo); int total_bytes; - lprintf ("pnm_plugin_read_block: %lld bytes...\n", todo); + lprintf ("pnm_plugin_read_block: %"PRId64" bytes...\n", todo); buf->content = buf->mem; buf->type = BUF_DEMUX_BLOCK; @@ -156,7 +156,7 @@ static off_t pnm_plugin_get_current_pos (input_plugin_t *this_gen){ pnm_input_plugin_t *this = (pnm_input_plugin_t *) this_gen; /* - printf ("current pos is %lld\n", this->curpos); + printf ("current pos is %"PRId64"\n", this->curpos); */ return this->curpos; @@ -181,7 +181,7 @@ static void pnm_plugin_dispose (input_plugin_t *this_gen) { free (this); } -static char* pnm_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* pnm_plugin_get_mrl (input_plugin_t *this_gen) { pnm_input_plugin_t *this = (pnm_input_plugin_t *) this_gen; return this->mrl; @@ -258,7 +258,7 @@ static input_plugin_t *pnm_class_get_instance (input_class_t *cls_gen, xine_stre * pnm input plugin class stuff */ -static char *pnm_class_get_description (input_class_t *this_gen) { +static const char *pnm_class_get_description (input_class_t *this_gen) { return _("pnm streaming input plugin"); } diff --git a/src/input/input_pvr.c b/src/input/input_pvr.c index 1461d0f9e..bcf93af2b 100644 --- a/src/input/input_pvr.c +++ b/src/input/input_pvr.c @@ -38,7 +38,7 @@ * usage: * xine pvr:/<prefix_to_tmp_files>\!<prefix_to_saved_files>\!<max_page_age> * - * $Id: input_pvr.c,v 1.62 2006/07/10 22:08:15 dgp85 Exp $ + * $Id: input_pvr.c,v 1.65 2007/01/19 01:05:25 dgp85 Exp $ */ /************************************************************************** @@ -1317,7 +1317,7 @@ static uint32_t pvr_plugin_get_blocksize (input_plugin_t *this_gen) { return PVR_BLOCK_SIZE; } -static char* pvr_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* pvr_plugin_get_mrl (input_plugin_t *this_gen) { pvr_input_plugin_t *this = (pvr_input_plugin_t *) this_gen; return this->mrl; @@ -1524,7 +1524,7 @@ static input_plugin_t *pvr_class_get_instance (input_class_t *cls_gen, xine_stre * plugin class functions */ -static char *pvr_class_get_description (input_class_t *this_gen) { +static const char *pvr_class_get_description (input_class_t *this_gen) { return _("WinTV-PVR 250/350 input plugin"); } @@ -1548,9 +1548,9 @@ static void *init_plugin (xine_t *xine, void *data) { this->xine = xine; this->config = xine->config; - this->devname = this->config->register_string(this->config, + this->devname = this->config->register_filename(this->config, "media.wintv_pvr.device", - PVR_DEVICE, + PVR_DEVICE, XINE_CONFIG_STRING_IS_DEVICE_NAME, _("device used for WinTV-PVR 250/350 (pvr plugin)"), _("The path to the device of your WinTV card."), 10, NULL, diff --git a/src/input/input_rtp.c b/src/input/input_rtp.c index b23ecb895..d4ba804c6 100644 --- a/src/input/input_rtp.c +++ b/src/input/input_rtp.c @@ -174,7 +174,10 @@ static int host_connect_attempt(struct in_addr ia, int port, const char *interface, xine_t *xine) { int s=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); - struct sockaddr_in sin; + union { + struct sockaddr_in in; + struct sockaddr sa; + } saddr; int optval; int multicast = 0; /* boolean, assume unicast */ @@ -183,12 +186,12 @@ static int host_connect_attempt(struct in_addr ia, int port, return -1; } - sin.sin_family = AF_INET; - sin.sin_addr = ia; - sin.sin_port = htons(port); + saddr.in.sin_family = AF_INET; + saddr.in.sin_addr = ia; + saddr.in.sin_port = htons(port); /* Is it a multicast address? */ - if ((ntohl(sin.sin_addr.s_addr) >> 28) == 0xe) { + if ((ntohl(saddr.in.sin_addr.s_addr) >> 28) == 0xe) { LOG_MSG(xine, _("IP address specified is multicast\n")); multicast = 1; /* boolean true */ } @@ -205,14 +208,14 @@ static int host_connect_attempt(struct in_addr ia, int port, /* If multicast we allow multiple readers to open the same address */ if (multicast) { if ((setsockopt(s, SOL_SOCKET, SO_REUSEADDR, - &sin, sizeof(sin))) < 0) { + &saddr.in, sizeof(saddr.in))) < 0) { LOG_MSG(xine, _("setsockopt(SO_REUSEADDR): %s.\n"), strerror(errno)); return -1; } } /* datagram socket */ - if (bind(s, (struct sockaddr *)&sin, sizeof(sin))) { + if (bind(s, &saddr.sa, sizeof(saddr.in))) { LOG_MSG(xine, _("bind(): %s.\n"), strerror(errno)); return -1; } @@ -240,7 +243,7 @@ static int host_connect_attempt(struct in_addr ia, int port, } /* struct ip_mreq mreq; */ - mreq.imr_multiaddr.s_addr = sin.sin_addr.s_addr; + mreq.imr_multiaddr.s_addr = saddr.in.sin_addr.s_addr; if (interface == NULL) { mreq.imr_interface.s_addr = htonl(INADDR_ANY); } @@ -559,7 +562,7 @@ static uint32_t rtp_plugin_get_blocksize (input_plugin_t *this_gen) { /* * */ -static char* rtp_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* rtp_plugin_get_mrl (input_plugin_t *this_gen) { rtp_input_plugin_t *this = (rtp_input_plugin_t *) this_gen; return this->mrl; @@ -739,7 +742,7 @@ static input_plugin_t *rtp_class_get_instance (input_class_t *cls_gen, * net plugin class */ -static char *rtp_class_get_description (input_class_t *this_gen) { +static const char *rtp_class_get_description (input_class_t *this_gen) { return _("RTP and UDP input plugin as shipped with xine"); } diff --git a/src/input/input_rtsp.c b/src/input/input_rtsp.c index 0256edc8d..693e8af66 100644 --- a/src/input/input_rtsp.c +++ b/src/input/input_rtsp.c @@ -81,7 +81,7 @@ static off_t rtsp_plugin_read (input_plugin_t *this_gen, rtsp_input_plugin_t *this = (rtsp_input_plugin_t *) this_gen; off_t n; - lprintf ("rtsp_plugin_read: %lld bytes ...\n", len); + lprintf ("rtsp_plugin_read: %"PRId64" bytes ...\n", len); nbc_check_buffers (this->nbc); @@ -97,7 +97,7 @@ static buf_element_t *rtsp_plugin_read_block (input_plugin_t *this_gen, buf_element_t *buf = fifo->buffer_pool_alloc (fifo); int total_bytes; - lprintf ("rtsp_plugin_read_block: %lld bytes...\n", todo); + lprintf ("rtsp_plugin_read_block: %"PRId64" bytes...\n", todo); buf->content = buf->mem; buf->type = BUF_DEMUX_BLOCK; @@ -118,7 +118,7 @@ static off_t rtsp_plugin_seek (input_plugin_t *this_gen, off_t offset, int origi rtsp_input_plugin_t *this = (rtsp_input_plugin_t *) this_gen; - lprintf ("seek %lld bytes, origin %d\n", offset, origin); + lprintf ("seek %"PRId64" bytes, origin %d\n", offset, origin); /* only realtive forward-seeking is implemented */ @@ -134,6 +134,18 @@ static off_t rtsp_plugin_seek (input_plugin_t *this_gen, off_t offset, int origi return this->curpos; } +static off_t rtsp_plugin_seek_time (input_plugin_t *this_gen, int time_offset, int origin) { + + rtsp_input_plugin_t *this = (rtsp_input_plugin_t *) this_gen; + + lprintf ("seek_time %d msec, origin %d\n", time_offset, origin); + + if (origin == SEEK_SET) + rtsp_session_set_start_time (this->rtsp, time_offset); + + return this->curpos; +} + static off_t rtsp_plugin_get_length (input_plugin_t *this_gen) { /* @@ -156,7 +168,7 @@ static off_t rtsp_plugin_get_current_pos (input_plugin_t *this_gen){ rtsp_input_plugin_t *this = (rtsp_input_plugin_t *) this_gen; /* - printf ("current pos is %lld\n", this->curpos); + printf ("current pos is %"PRId64"\n", this->curpos); */ return this->curpos; @@ -184,7 +196,7 @@ static void rtsp_plugin_dispose (input_plugin_t *this_gen) { free (this); } -static char* rtsp_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* rtsp_plugin_get_mrl (input_plugin_t *this_gen) { rtsp_input_plugin_t *this = (rtsp_input_plugin_t *) this_gen; return this->public_mrl; @@ -212,7 +224,7 @@ static int rtsp_plugin_open (input_plugin_t *this_gen) { lprintf ("trying to open '%s'\n", this->mrl); - rtsp = rtsp_session_start(this->stream,this->mrl); + rtsp = rtsp_session_start(this->stream, this->mrl); if (!rtsp) { lprintf ("returning null.\n"); @@ -226,22 +238,19 @@ static int rtsp_plugin_open (input_plugin_t *this_gen) { } static input_plugin_t *rtsp_class_get_instance (input_class_t *cls_gen, xine_stream_t *stream, - const char *data) { + const char *mrl) { /* rtsp_input_class_t *cls = (rtsp_input_class_t *) cls_gen; */ rtsp_input_plugin_t *this; - char *mrl = strdup(data); - if (strncasecmp (mrl, "rtsp://", 6)) { - free (mrl); + if (strncasecmp (mrl, "rtsp://", 6)) return NULL; - } this = (rtsp_input_plugin_t *) xine_xmalloc (sizeof (rtsp_input_plugin_t)); this->stream = stream; this->rtsp = NULL; - this->mrl = mrl; + this->mrl = strdup (mrl); /* since we handle only real streams yet, we can savely add * an .rm extention to force handling by demux_real. */ @@ -255,6 +264,7 @@ static input_plugin_t *rtsp_class_get_instance (input_class_t *cls_gen, xine_str this->input_plugin.read = rtsp_plugin_read; this->input_plugin.read_block = rtsp_plugin_read_block; this->input_plugin.seek = rtsp_plugin_seek; + this->input_plugin.seek_time = rtsp_plugin_seek_time; this->input_plugin.get_current_pos = rtsp_plugin_get_current_pos; this->input_plugin.get_length = rtsp_plugin_get_length; this->input_plugin.get_blocksize = rtsp_plugin_get_blocksize; @@ -270,7 +280,7 @@ static input_plugin_t *rtsp_class_get_instance (input_class_t *cls_gen, xine_str * rtsp input plugin class stuff */ -static char *rtsp_class_get_description (input_class_t *this_gen) { +static const char *rtsp_class_get_description (input_class_t *this_gen) { return _("rtsp streaming input plugin"); } diff --git a/src/input/input_smb.c b/src/input/input_smb.c index 21b45fa73..1b1f15565 100644 --- a/src/input/input_smb.c +++ b/src/input/input_smb.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: input_smb.c,v 1.15 2006/07/10 22:08:16 dgp85 Exp $ + * $Id: input_smb.c,v 1.16 2007/01/26 17:06:05 dgp85 Exp $ */ @@ -148,6 +148,10 @@ smb_plugin_get_mrl (input_plugin_t *this_gen) return this->mrl; } +static uint32_t smb_plugin_get_blocksize (input_plugin_t *this_gen) { + return 0; +} + static char *smb_class_get_description (input_class_t *this_gen) { @@ -485,7 +489,7 @@ smb_class_get_instance (input_class_t *class_gen, xine_stream_t *stream, this->input_plugin.seek = smb_plugin_seek; this->input_plugin.get_current_pos = smb_plugin_get_current_pos; this->input_plugin.get_length = smb_plugin_get_length; - this->input_plugin.get_blocksize = NULL; + this->input_plugin.get_blocksize = smb_plugin_get_blocksize; this->input_plugin.get_mrl = smb_plugin_get_mrl; this->input_plugin.get_optional_data = smb_plugin_get_optional_data; diff --git a/src/input/input_stdin_fifo.c b/src/input/input_stdin_fifo.c index 3780a1cef..939f56f25 100644 --- a/src/input/input_stdin_fifo.c +++ b/src/input/input_stdin_fifo.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: input_stdin_fifo.c,v 1.67 2006/07/10 22:08:16 dgp85 Exp $ + * $Id: input_stdin_fifo.c,v 1.70 2007/02/20 00:34:56 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -86,14 +86,14 @@ static off_t stdin_plugin_read (input_plugin_t *this_gen, stdin_input_plugin_t *this = (stdin_input_plugin_t *) this_gen; off_t n, total; - lprintf ("reading %lld bytes...\n", len); + lprintf ("reading %"PRId64" bytes...\n", len); total=0; if (this->curpos < this->preview_size) { n = this->preview_size - this->curpos; if (n > (len - total)) n = len - total; - lprintf ("%lld bytes from preview (which has %lld bytes)\n", n, this->preview_size); + lprintf ("%"PRId64" bytes from preview (which has %"PRId64" bytes)\n", n, this->preview_size); memcpy (&buf[total], &this->preview[this->curpos], n); this->curpos += n; @@ -103,7 +103,7 @@ static off_t stdin_plugin_read (input_plugin_t *this_gen, if( (len-total) > 0 ) { n = _x_io_file_read (this->stream, this->fh, &buf[total], len - total); - lprintf ("got %lld bytes (%lld/%lld bytes read)\n", n,total,len); + lprintf ("got %"PRId64" bytes (%"PRId64"/%"PRId64" bytes read)\n", n,total,len); if (n < 0) { _x_message(this->stream, XINE_MSG_READ_ERROR, NULL); @@ -143,7 +143,7 @@ static off_t stdin_plugin_seek (input_plugin_t *this_gen, off_t offset, int orig stdin_input_plugin_t *this = (stdin_input_plugin_t *) this_gen; - lprintf ("seek %lld offset, %d origin...\n", offset, origin); + lprintf ("seek %"PRId64" offset, %d origin...\n", offset, origin); if ((origin == SEEK_CUR) && (offset >= 0)) { @@ -202,7 +202,7 @@ static off_t stdin_plugin_get_current_pos (input_plugin_t *this_gen){ return this->curpos; } -static char* stdin_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* stdin_plugin_get_mrl (input_plugin_t *this_gen) { stdin_input_plugin_t *this = (stdin_input_plugin_t *) this_gen; return this->mrl; @@ -346,7 +346,7 @@ static input_plugin_t *stdin_class_get_instance (input_class_t *class_gen, * stdin input plugin class stuff */ -static char *stdin_class_get_description (input_class_t *this_gen) { +static const char *stdin_class_get_description (input_class_t *this_gen) { return _("stdin streaming input plugin"); } diff --git a/src/input/input_v4l.c b/src/input/input_v4l.c index 1dfde167f..17c4223a2 100644 --- a/src/input/input_v4l.c +++ b/src/input/input_v4l.c @@ -1628,7 +1628,7 @@ static void v4l_plugin_dispose (input_plugin_t *this_gen) { * * Get the current MRL used by the plugin. */ -static char* v4l_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* v4l_plugin_get_mrl (input_plugin_t *this_gen) { v4l_input_plugin_t *this = (v4l_input_plugin_t *) this_gen; return this->mrl; @@ -1907,8 +1907,8 @@ static void *init_video_class (xine_t *xine, void *data) this->input_class.dispose = v4l_class_dispose; this->input_class.eject_media = NULL; - config->register_string (config, "media.video4linux.video_device", - VIDEO_DEV, + config->register_filename (config, "media.video4linux.video_device", + VIDEO_DEV, XINE_CONFIG_STRING_IS_DEVICE_NAME, _("v4l video device"), _("The path to your Video4Linux video device."), 10, NULL, NULL); @@ -1933,8 +1933,8 @@ static void *init_radio_class (xine_t *xine, void *data) this->input_class.dispose = v4l_class_dispose; this->input_class.eject_media = NULL; - config->register_string (config, "media.video4linux.radio_device", - RADIO_DEV, + config->register_filename (config, "media.video4linux.radio_device", + RADIO_DEV, XINE_CONFIG_STRING_IS_DEVICE_NAME, _("v4l radio device"), _("The path to your Video4Linux radio device."), 10, NULL, NULL); diff --git a/src/input/input_vcd.c b/src/input/input_vcd.c index 0103027bf..bcd50ecc1 100644 --- a/src/input/input_vcd.c +++ b/src/input/input_vcd.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: input_vcd.c,v 1.85 2006/07/10 22:08:16 dgp85 Exp $ + * $Id: input_vcd.c,v 1.89 2007/03/16 16:32:58 dgp85 Exp $ * */ @@ -25,7 +25,6 @@ #include "config.h" #endif -#include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> @@ -34,6 +33,7 @@ #include <fcntl.h> #include <sys/ioctl.h> #include <string.h> +#include <netinet/in.h> #ifdef HAVE_LINUX_CDROM_H # include <linux/cdrom.h> #endif @@ -813,7 +813,7 @@ static void vcd_plugin_dispose (input_plugin_t *this_gen ) { free (this); } -static char* vcd_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* vcd_plugin_get_mrl (input_plugin_t *this_gen) { vcd_input_plugin_t *this = (vcd_input_plugin_t *) this_gen; return this->mrl; @@ -919,7 +919,7 @@ static input_plugin_t *vcd_class_get_instance (input_class_t *cls_gen, xine_stre * vcd input plugin class stuff */ -static char *vcd_class_get_description (input_class_t *this_gen) { +static const char *vcd_class_get_description (input_class_t *this_gen) { return _("Video CD input plugin"); } @@ -1094,7 +1094,7 @@ static void *init_class (xine_t *xine, void *data) { this->input_class.dispose = vcd_class_dispose; this->input_class.eject_media = vcd_class_eject_media; - this->device = config->register_string (config, "media.vcd.device", CDROM, + this->device = config->register_filename (config, "media.vcd.device", CDROM, XINE_CONFIG_STRING_IS_DEVICE_NAME, _("device used for VCD playback"), _("The path to the device, usually a CD or DVD drive, " "you intend to play your VideoCDs with."), diff --git a/src/input/libreal/.cvsignore b/src/input/libdvdnav/.hgignore index 7d926a554..7d926a554 100644 --- a/src/input/libreal/.cvsignore +++ b/src/input/libdvdnav/.hgignore diff --git a/src/input/libdvdnav/Makefile.am b/src/input/libdvdnav/Makefile.am index 2aadb3588..412828261 100644 --- a/src/input/libdvdnav/Makefile.am +++ b/src/input/libdvdnav/Makefile.am @@ -22,7 +22,7 @@ libdvdnav_la_SOURCES = \ dvd_reader.c \ dvd_input.c \ dvd_udf.c -libdvdnav_la_LIBADD = $(THREAD_LIBS) +libdvdnav_la_LIBADD = $(PTHREAD_LIBS) libdvdnav_la_CFLAGS = $(VISIBILITY_FLAG) libdvdnav_la_LDFLAGS = -avoid-version -module diff --git a/src/input/libdvdnav/bswap.h b/src/input/libdvdnav/bswap.h index 7d7acd556..c1fc7a045 100644 --- a/src/input/libdvdnav/bswap.h +++ b/src/input/libdvdnav/bswap.h @@ -41,6 +41,12 @@ #define B2N_32(x) x = bswap_32(x) #define B2N_64(x) x = bswap_64(x) +#elif defined(__APPLE__) +#include <libkern/OSByteOrder.h> +#define B2N_16(x) x = OSSwapBigToHostInt16(x) +#define B2N_32(x) x = OSSwapBigToHostInt32(x) +#define B2N_64(x) x = OSSwapBigToHostInt64(x) + #elif defined(__NetBSD__) #include <sys/endian.h> #define B2N_16(x) BE16TOH(x) diff --git a/src/input/libdvdnav/diff_against_cvs.patch b/src/input/libdvdnav/diff_against_cvs.patch index 6afca3a98..202474fef 100644 --- a/src/input/libdvdnav/diff_against_cvs.patch +++ b/src/input/libdvdnav/diff_against_cvs.patch @@ -263,6 +263,19 @@ diff -u -p -u -r1.3 bswap.h #include <byteswap.h> #define B2N_16(x) x = bswap_16(x) #define B2N_32(x) x = bswap_32(x) +@@ -41,6 +41,12 @@ + #define B2N_32(x) x = bswap_32(x) + #define B2N_64(x) x = bswap_64(x) + ++#elif defined(__APPLE__) ++#include <libkern/OSByteOrder.h> ++#define B2N_16(x) x = OSSwapBigToHostInt16(x) ++#define B2N_32(x) x = OSSwapBigToHostInt32(x) ++#define B2N_64(x) x = OSSwapBigToHostInt64(x) ++ + #elif defined(__NetBSD__) + #include <sys/endian.h> + #define B2N_16(x) BE16TOH(x) Index: src/input/libdvdnav/dvd_reader.c =================================================================== RCS file: /cvsroot/xine/xine-lib/src/input/libdvdnav/dvd_reader.c,v diff --git a/src/input/libdvdnav/dvd_reader.c b/src/input/libdvdnav/dvd_reader.c index e71d6ca42..7ecd8f1ba 100644 --- a/src/input/libdvdnav/dvd_reader.c +++ b/src/input/libdvdnav/dvd_reader.c @@ -603,10 +603,12 @@ static int findDirFile( const char *path, const char *file, char *filename ) sprintf( filename, "%s%s%s", path, ( ( path[ strlen( path ) - 1 ] == '/' ) ? "" : "/" ), ent->d_name ); + closedir (dir); return 0; } } + closedir (dir); return -1; } diff --git a/src/input/libdvdnav/remap.c b/src/input/libdvdnav/remap.c index 86cf3a4ad..f2049ac06 100644 --- a/src/input/libdvdnav/remap.c +++ b/src/input/libdvdnav/remap.c @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: remap.c,v 1.5 2006/09/17 13:01:08 valtri Exp $ + * $Id: remap.c,v 1.6 2006/12/08 16:26:10 mshopf Exp $ */ #include <stdlib.h> @@ -193,10 +193,7 @@ remap_t* remap_loadmap( char *title) { /* Build the map filename */ home = getenv("HOME"); assert(home); - strncpy(fname, home, sizeof(fname)); - strncat(fname, "/.dvdnav/", sizeof(fname)); - strncat(fname, title, sizeof(fname)); - strncat(fname, ".map", sizeof(fname)); + snprintf (fname, sizeof(fname), "%s/.dvdnav/%s.map", home, title); /* Open the map file */ fp = fopen( fname, "r"); diff --git a/src/input/librtsp/.cvsignore b/src/input/libreal/.hgignore index 7d926a554..7d926a554 100644 --- a/src/input/librtsp/.cvsignore +++ b/src/input/libreal/.hgignore diff --git a/src/input/libreal/asmrp.c b/src/input/libreal/asmrp.c index 5fd5ae798..8afc19df6 100644 --- a/src/input/libreal/asmrp.c +++ b/src/input/libreal/asmrp.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: asmrp.c,v 1.9 2006/11/29 19:43:01 dgp85 Exp $ + * $Id: asmrp.c,v 1.10 2006/12/25 15:39:31 dgp85 Exp $ * * a parser for real's asm rules * @@ -417,7 +417,9 @@ static int asmrp_operand (asmrp_t *p) { i = asmrp_find_id (p, p->str); if (i<0) { - lprintf ("error: unknown identifier %s\n", p->str); + printf ("error: unknown identifier %s\n", p->str); + ret = 0; + break; } ret = p->sym_tab[i].v; diff --git a/src/input/libreal/real.c b/src/input/libreal/real.c index 270fd16e4..dc0c001bd 100644 --- a/src/input/libreal/real.c +++ b/src/input/libreal/real.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: real.c,v 1.24 2006/11/29 19:43:01 dgp85 Exp $ + * $Id: real.c,v 1.26 2007/01/19 01:19:06 dgp85 Exp $ * * special functions for real streams. * adopted from joschkas real tools. @@ -289,18 +289,15 @@ static void calc_response (char *result, char *field) { static void calc_response_string (char *result, char *challenge) { - char field[128]; + char field[128] = { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, + 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; char zres[20]; int i; - /* initialize our field */ - BE_32C (field, 0x01234567); - BE_32C ((field+4), 0x89ABCDEF); - BE_32C ((field+8), 0xFEDCBA98); - BE_32C ((field+12), 0x76543210); - BE_32C ((field+16), 0x00000000); - BE_32C ((field+20), 0x00000000); - /* calculate response */ call_hash(field, challenge, 64); calc_response(zres,field); @@ -715,10 +712,6 @@ rmff_header_t *real_setup_and_get_header(rtsp_t *rtsp_session, uint32_t bandwid rtsp_schedule_field(rtsp_session, subscribe); rtsp_request_setparameter(rtsp_session,NULL); - /* and finally send a play request */ - rtsp_schedule_field(rtsp_session, "Range: npt=0-"); - rtsp_request_play(rtsp_session,NULL); - xine_buffer_free(subscribe); xine_buffer_free(buf); return h; diff --git a/src/input/libreal/sdpplin.c b/src/input/libreal/sdpplin.c index e77781253..019237243 100644 --- a/src/input/libreal/sdpplin.c +++ b/src/input/libreal/sdpplin.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: sdpplin.c,v 1.6 2006/06/20 01:07:58 dgp85 Exp $ + * $Id: sdpplin.c,v 1.8 2006/12/25 16:21:56 dgp85 Exp $ * * sdp/sdpplin parser. * @@ -71,8 +71,9 @@ static char *b64_decode(const char *in, char *out, int *size) int c = in[i+j]; if (dtable[c] & 0x80) { - printf("Illegal character '%c' in input.\n", c); - exit(1); + fprintf(stderr, "Illegal character '%c' in input.\n", c); + *size = 0; + return NULL; } a[i] = (char) c; b[i] = (char) dtable[c]; @@ -200,11 +201,13 @@ static sdpplin_stream_t *sdpplin_parse_stream(char **data) { if(filter(*data,"a=OpaqueData:buffer;",&buf)) { decoded = b64_decode(buf, decoded, &(desc->mlti_data_size)); - desc->mlti_data = malloc(sizeof(char)*desc->mlti_data_size); - memcpy(desc->mlti_data, decoded, desc->mlti_data_size); - handled=1; - *data=nl(*data); - lprintf("mlti_data_size: %i\n", desc->mlti_data_size); + if ( decoded != NULL ) { + desc->mlti_data = malloc(sizeof(char)*desc->mlti_data_size); + memcpy(desc->mlti_data, decoded, desc->mlti_data_size); + handled=1; + *data=nl(*data); + lprintf("mlti_data_size: %i\n", desc->mlti_data_size); + } } if(filter(*data,"a=ASMRuleBook:string;",&buf)) { @@ -239,11 +242,17 @@ sdpplin_t *sdpplin_parse(char *data) { int handled; int len; + desc->stream = NULL; + while (data && *data) { handled=0; if (filter(data, "m=", &buf)) { + if ( ! desc->stream ) { + fprintf(stderr, "sdpplin.c: stream identifier found before stream count, skipping."); + continue; + } stream=sdpplin_parse_stream(&data); lprintf("got data for stream id %u\n", stream->stream_id); desc->stream[stream->stream_id]=stream; @@ -252,30 +261,38 @@ sdpplin_t *sdpplin_parse(char *data) { if(filter(data,"a=Title:buffer;",&buf)) { decoded=b64_decode(buf, decoded, &len); - desc->title=strdup(decoded); - handled=1; - data=nl(data); + if ( decoded != NULL ) { + desc->title=strdup(decoded); + handled=1; + data=nl(data); + } } if(filter(data,"a=Author:buffer;",&buf)) { decoded=b64_decode(buf, decoded, &len); - desc->author=strdup(decoded); - handled=1; - data=nl(data); + if ( decoded != NULL ) { + desc->author=strdup(decoded); + handled=1; + data=nl(data); + } } if(filter(data,"a=Copyright:buffer;",&buf)) { decoded=b64_decode(buf, decoded, &len); - desc->copyright=strdup(decoded); - handled=1; - data=nl(data); + if ( decoded != NULL ) { + desc->copyright=strdup(decoded); + handled=1; + data=nl(data); + } } if(filter(data,"a=Abstract:buffer;",&buf)) { decoded=b64_decode(buf, decoded, &len); - desc->abstract=strdup(decoded); - handled=1; - data=nl(data); + if ( decoded != NULL ) { + desc->abstract=strdup(decoded); + handled=1; + data=nl(data); + } } if(filter(data,"a=StreamCount:integer;",&buf)) { diff --git a/src/input/vcd/.cvsignore b/src/input/librtsp/.hgignore index 7d926a554..7d926a554 100644 --- a/src/input/vcd/.cvsignore +++ b/src/input/librtsp/.hgignore diff --git a/src/input/librtsp/rtsp_session.c b/src/input/librtsp/rtsp_session.c index 6f06693a9..66de10584 100644 --- a/src/input/librtsp/rtsp_session.c +++ b/src/input/librtsp/rtsp_session.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: rtsp_session.c,v 1.16 2004/04/24 16:55:42 miguelfreitas Exp $ + * $Id: rtsp_session.c,v 1.19 2006/12/22 18:08:10 klan Exp $ * * high level interface to rtsp servers. */ @@ -53,24 +53,49 @@ struct rtsp_session_s { rtsp_t *s; /* receive buffer */ - uint8_t *recv; + uint8_t *recv; int recv_size; int recv_read; /* header buffer */ uint8_t header[HEADER_SIZE]; int header_len; - int header_read; + int header_left; + int playing; + int start_time; }; +/* network bandwidth */ +const uint32_t rtsp_bandwidths[]={14400,19200,28800,33600,34430,57600, + 115200,262200,393216,524300,1544000,10485800}; + +const char *rtsp_bandwidth_strs[]={"14.4 Kbps (Modem)", "19.2 Kbps (Modem)", + "28.8 Kbps (Modem)", "33.6 Kbps (Modem)", + "34.4 Kbps (Modem)", "57.6 Kbps (Modem)", + "115.2 Kbps (ISDN)", "262.2 Kbps (Cable/DSL)", + "393.2 Kbps (Cable/DSL)","524.3 Kbps (Cable/DSL)", + "1.5 Mbps (T1)", "10.5 Mbps (LAN)", NULL}; + + rtsp_session_t *rtsp_session_start(xine_stream_t *stream, char *mrl) { - rtsp_session_t *rtsp_session = malloc(sizeof(rtsp_session_t)); + rtsp_session_t *rtsp_session = xine_xmalloc(sizeof(rtsp_session_t)); + xine_t *xine = stream->xine; char *server; char *mrl_line=strdup(mrl); rmff_header_t *h; - uint32_t bandwidth=10485800; + int bandwidth_id; + uint32_t bandwidth; + + bandwidth_id = xine->config->register_enum(xine->config, "media.network.bandwidth", 10, + (char **)rtsp_bandwidth_strs, + _("network bandwidth"), + _("Specify the bandwidth of your internet connection here. " + "This will be used when streaming servers offer different versions " + "with different bandwidth requirements of the same stream."), + 0, NULL, NULL); + bandwidth = rtsp_bandwidths[bandwidth_id]; rtsp_session->recv = xine_buffer_init(BUF_SIZE); @@ -123,7 +148,8 @@ connect: } } - rtsp_session->header_len=rmff_dump_header(h,rtsp_session->header,1024); + rtsp_session->header_left = + rtsp_session->header_len = rmff_dump_header(h,rtsp_session->header,HEADER_SIZE); xine_buffer_copyin(rtsp_session->recv, 0, rtsp_session->header, rtsp_session->header_len); rtsp_session->recv_size = rtsp_session->header_len; @@ -144,16 +170,48 @@ connect: return rtsp_session; } +void rtsp_session_set_start_time (rtsp_session_t *this, int start_time) { + + if (start_time >= 0) + this->start_time = start_time; +} + +static void rtsp_session_play (rtsp_session_t *this) { + + char buf[256]; + + snprintf (buf, sizeof(buf), "Range: npt=%d.%03d-", + this->start_time/1000, this->start_time%1000); + + rtsp_schedule_field (this->s, buf); + rtsp_request_play (this->s,NULL); +} + int rtsp_session_read (rtsp_session_t *this, char *data, int len) { - int to_copy=len; + int to_copy; char *dest=data; char *source=this->recv + this->recv_read; int fill=this->recv_size - this->recv_read; - if (len < 0) return 0; + if (len < 0) + return 0; + + if (this->header_left) { + if (len > this->header_left) + len = this->header_left; + + this->header_left -= len; + } + + to_copy = len; while (to_copy > fill) { + if (!this->playing) { + rtsp_session_play (this); + this->playing = 1; + } + memcpy(dest, source, fill); to_copy -= fill; dest += fill; diff --git a/src/input/librtsp/rtsp_session.h b/src/input/librtsp/rtsp_session.h index 140d09a0a..649842e7a 100644 --- a/src/input/librtsp/rtsp_session.h +++ b/src/input/librtsp/rtsp_session.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: rtsp_session.h,v 1.6 2003/12/09 00:02:31 f1rmb Exp $ + * $Id: rtsp_session.h,v 1.7 2006/12/18 21:31:47 klan Exp $ * * high level interface to rtsp servers. */ @@ -29,6 +29,8 @@ typedef struct rtsp_session_s rtsp_session_t; rtsp_session_t *rtsp_session_start(xine_stream_t *stream, char *mrl); +void rtsp_session_set_start_time(rtsp_session_t *this, int start_time); + int rtsp_session_read(rtsp_session_t *session, char *data, int len); int rtsp_session_peek_header(rtsp_session_t *this, char *buf, int maxsize); diff --git a/src/input/mms.c b/src/input/mms.c index 86317a1ee..74087f7c5 100644 --- a/src/input/mms.c +++ b/src/input/mms.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: mms.c,v 1.63 2006/09/16 08:13:51 tmattern Exp $ + * $Id: mms.c,v 1.65 2007/02/20 00:34:56 dgp85 Exp $ * * MMS over TCP protocol * based on work from major mms @@ -144,9 +144,19 @@ struct mms_s { int eos; uint8_t live_flag; + + uint8_t playing; + double start_time; }; +#define D2Q(d) ({\ + union { double db; long long qw; } _tmp;\ + _tmp.db = d;\ + _tmp.qw;\ +})\ + + static void mms_buffer_init (mms_buffer_t *mms_buffer, char *buffer) { mms_buffer->buffer = (uint8_t*)buffer; mms_buffer->pos = 0; @@ -179,6 +189,20 @@ static void mms_buffer_put_32 (mms_buffer_t *mms_buffer, uint32_t value) { mms_buffer->pos += 4; } +static void mms_buffer_put_64 (mms_buffer_t *mms_buffer, uint64_t value) { + + mms_buffer->buffer[mms_buffer->pos] = value & 0xff; + mms_buffer->buffer[mms_buffer->pos + 1] = (value >> 8) & 0xff; + mms_buffer->buffer[mms_buffer->pos + 2] = (value >> 16) & 0xff; + mms_buffer->buffer[mms_buffer->pos + 3] = (value >> 24) & 0xff; + mms_buffer->buffer[mms_buffer->pos + 4] = (value >> 32) & 0xff; + mms_buffer->buffer[mms_buffer->pos + 5] = (value >> 40) & 0xff; + mms_buffer->buffer[mms_buffer->pos + 6] = (value >> 48) & 0xff; + mms_buffer->buffer[mms_buffer->pos + 7] = (value >> 56) & 0xff; + + mms_buffer->pos += 8; +} + static void print_command (char *data, int len) { @@ -361,7 +385,7 @@ static int get_packet_header (mms_t *this, mms_packet_header_t *header) { return packet_type; error: - lprintf("read error, len=%d\n", len); + lprintf("read error, len=%zd\n", len); return MMS_PACKET_ERR; } @@ -839,11 +863,13 @@ mms_t *mms_connect (xine_stream_t *stream, const char *url, int bandwidth) { report_progress (stream, 80); /* command 0x07 */ + /* moved to mms_read() */ +#if 0 { mms_buffer_t command_buffer; mms_buffer_init(&command_buffer, this->scmd_body); mms_buffer_put_32 (&command_buffer, 0x00000000); /* 64 byte float timestamp */ - mms_buffer_put_32 (&command_buffer, 0x00000000); + mms_buffer_put_32 (&command_buffer, 0x00000000); mms_buffer_put_32 (&command_buffer, 0xFFFFFFFF); /* ?? */ mms_buffer_put_32 (&command_buffer, 0xFFFFFFFF); /* first packet sequence */ mms_buffer_put_8 (&command_buffer, 0xFF); /* max stream time limit (3 bytes) */ @@ -857,6 +883,7 @@ mms_t *mms_connect (xine_stream_t *stream, const char *url, int bandwidth) { goto fail; } } +#endif report_progress (stream, 100); @@ -1052,9 +1079,33 @@ int mms_read (mms_t *this, char *data, int len) { this->asf_header_read += n; total += n; this->current_pos += n; + + if (this->asf_header_read == this->asf_header_len) + break; } else { int n, bytes_left ; + + if (!this->playing) { + /* send command 0x07 with initial timestamp */ + mms_buffer_t command_buffer; + mms_buffer_init(&command_buffer, this->scmd_body); + mms_buffer_put_64 (&command_buffer, D2Q(this->start_time)); /* 64 byte float timestamp */ + mms_buffer_put_32 (&command_buffer, 0xFFFFFFFF); /* ?? */ + mms_buffer_put_32 (&command_buffer, 0xFFFFFFFF); /* first packet sequence */ + mms_buffer_put_8 (&command_buffer, 0xFF); /* max stream time limit (3 bytes) */ + mms_buffer_put_8 (&command_buffer, 0xFF); + mms_buffer_put_8 (&command_buffer, 0xFF); + mms_buffer_put_8 (&command_buffer, 0x00); /* stream time limit flag */ + mms_buffer_put_32 (&command_buffer, ASF_MEDIA_PACKET_ID_TYPE); /* asf media packet id type */ + if (!send_command (this, 0x07, 1, 0x0001FFFF, command_buffer.pos)) { + xprintf (this->stream->xine, XINE_VERBOSITY_LOG, + "libmms: failed to send command 0x07\n"); + this->eos = 1; + break; + } + this->playing = 1; + } bytes_left = this->buf_size - this->buf_read; if (bytes_left == 0) { @@ -1111,3 +1162,9 @@ uint32_t mms_get_length (mms_t *this) { off_t mms_get_current_pos (mms_t *this) { return this->current_pos; } + +void mms_set_start_time (mms_t *this, int time_offset) { + if (time_offset >= 0) + this->start_time = (double) time_offset / 1000.0; +} + diff --git a/src/input/mms.h b/src/input/mms.h index f4b2928cd..310a6d0cc 100644 --- a/src/input/mms.h +++ b/src/input/mms.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: mms.h,v 1.12 2006/06/20 01:46:41 dgp85 Exp $ + * $Id: mms.h,v 1.13 2007/01/03 15:09:42 klan Exp $ * * libmms public header */ @@ -41,5 +41,7 @@ size_t mms_peek_header (mms_t *this, char *data, size_t maxsize); off_t mms_get_current_pos (mms_t *this); +void mms_set_start_time (mms_t *this, int time_offset); + #endif diff --git a/src/input/mmsh.c b/src/input/mmsh.c index 889596cf7..30c16001d 100644 --- a/src/input/mmsh.c +++ b/src/input/mmsh.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: mmsh.c,v 1.40 2006/11/11 00:05:22 dgp85 Exp $ + * $Id: mmsh.c,v 1.42 2007/01/11 16:20:55 klan Exp $ * * MMS over HTTP protocol * written by Thibaut Mattern @@ -99,7 +99,7 @@ "Pragma: no-cache,rate=1.000000,stream-time=%u,stream-offset=%u:%u,request-context=%u,max-duration=%u\r\n" \ CLIENTGUID \ "Pragma: xPlayStrm=1\r\n" \ - "Pragma: stream-switch-coun t=%d\r\n" \ + "Pragma: stream-switch-count=%d\r\n" \ "Pragma: stream-switch-entry=%s\r\n" /* ffff:1:0 ffff:2:0 */ \ "Connection: Close\r\n\r\n" @@ -180,9 +180,15 @@ struct mmsh_s { uint32_t asf_header_len; uint32_t asf_header_read; int seq_num; + + int video_stream; + int audio_stream; off_t current_pos; - int user_bandwitdh; + int user_bandwidth; + + int playing; + unsigned int start_time; }; static int send_command (mmsh_t *this, char *cmd) { @@ -382,7 +388,6 @@ static int get_header (mmsh_t *this) { lprintf("get_header\n"); this->asf_header_len = 0; - this->asf_header_read = 0; /* read chunk */ while (1) { @@ -514,13 +519,10 @@ static int mmsh_tcp_connect(mmsh_t *this) { return 0; } - +/* + * firts http request + */ static int mmsh_connect_int(mmsh_t *this, int bandwidth) { - int i; - char stream_selection[10 * ASF_MAX_NUM_STREAMS]; /* 10 chars per stream */ - int offset; - int audio_stream, video_stream; - /* * let the negotiations begin... */ @@ -532,30 +534,45 @@ static int mmsh_connect_int(mmsh_t *this, int bandwidth) { this->host, this->port, 1); if (!send_command (this, this->str)) - goto fail; + return 0; if (!get_answer (this)) - goto fail; + return 0; - get_header(this); /* FIXME: it returns 0 */ + get_header (this); /* FIXME: it returns 0 */ - if (!interp_header(this)) - goto fail; + if (!interp_header (this)) + return 0; - close(this->s); + close (this->s); report_progress (this->stream, 20); - asf_header_choose_streams (this->asf_header, bandwidth, &video_stream, &audio_stream); + asf_header_choose_streams (this->asf_header, bandwidth, + &this->video_stream, &this->audio_stream); - lprintf("audio stream %d, video stream %d\n", audio_stream, video_stream); + lprintf("audio stream %d, video stream %d\n", + this->audio_stream, this->video_stream); + + asf_header_disable_streams (this->asf_header, + this->video_stream, this->audio_stream); + + if (mmsh_tcp_connect(this)) + return 0; + + return 1; +} + +/* + * second http request + */ +static int mmsh_connect_int2(mmsh_t *this, int bandwidth) { + int i; + char stream_selection[10 * ASF_MAX_NUM_STREAMS]; /* 10 chars per stream */ + int offset; /* second request */ lprintf("second http request\n"); - if (mmsh_tcp_connect(this)) { - goto fail; - } - /* stream selection string */ /* The same selection is done with mmst */ /* 0 means selected */ @@ -563,8 +580,8 @@ static int mmsh_connect_int(mmsh_t *this, int bandwidth) { offset = 0; for (i = 0; i < this->asf_header->stream_count; i++) { int size; - if ((i == audio_stream) || - (i == video_stream)) { + if ((i == this->audio_stream) || + (i == this->video_stream)) { size = snprintf(stream_selection + offset, sizeof(stream_selection) - offset, "ffff:%d:0 ", this->asf_header->streams[i]->stream_number); } else { @@ -573,14 +590,15 @@ static int mmsh_connect_int(mmsh_t *this, int bandwidth) { size = snprintf(stream_selection + offset, sizeof(stream_selection) - offset, "ffff:%d:2 ", this->asf_header->streams[i]->stream_number); } - if (size < 0) goto fail; + if (size < 0) + return 0; offset += size; } switch (this->stream_type) { case MMSH_SEEKABLE: snprintf (this->str, SCRATCH_SIZE, mmsh_SeekableRequest, this->uri, - this->host, this->port, 0, 0, 0, 2, 0, + this->host, this->port, this->start_time, 0, 0, 2, 0, this->asf_header->stream_count, stream_selection); break; case MMSH_LIVE: @@ -591,25 +609,25 @@ static int mmsh_connect_int(mmsh_t *this, int bandwidth) { } if (!send_command (this, this->str)) - goto fail; + return 0; lprintf("before read \n"); if (!get_answer (this)) - goto fail; - - if (!get_header(this)) - goto fail; - - if (!interp_header(this)) - goto fail; + return 0; - asf_header_disable_streams (this->asf_header, video_stream, audio_stream); + if (!get_header (this)) + return 0; + +#if 0 + if (!interp_header (this)) + return 0; + + asf_header_disable_streams (this->asf_header, + this->video_stream, this->audio_stream); +#endif return 1; - -fail: - return 0; } mmsh_t *mmsh_connect (xine_stream_t *stream, const char *url, int bandwidth) { @@ -630,7 +648,7 @@ mmsh_t *mmsh_connect (xine_stream_t *stream, const char *url, int bandwidth) { this->buf_size = 0; this->buf_read = 0; this->current_pos = 0; - this->user_bandwitdh = bandwidth; + this->user_bandwidth = bandwidth; report_progress (stream, 0); @@ -650,7 +668,7 @@ mmsh_t *mmsh_connect (xine_stream_t *stream, const char *url, int bandwidth) { report_progress (stream, 30); - if (!mmsh_connect_int(this, this->user_bandwitdh)) + if (!mmsh_connect_int(this, this->user_bandwidth)) goto fail; report_progress (stream, 100); @@ -709,8 +727,10 @@ static int get_media_packet (mmsh_t *this) { if (mmsh_tcp_connect(this)) return 0; - if (!mmsh_connect_int(this, this->user_bandwitdh)) + if (!mmsh_connect_int(this, this->user_bandwidth)) return 0; + + this->playing = 0; /* mmsh_connect_int reads the first data packet */ /* this->buf_size is set by mmsh_connect_int */ @@ -784,7 +804,7 @@ int mmsh_read (mmsh_t *this, char *data, int len) { if (this->asf_header_read < this->asf_header_len) { int n, bytes_left ; - bytes_left = this->asf_header_len - this->asf_header_read ; + bytes_left = this->asf_header_len - this->asf_header_read; if ((len-total) < bytes_left) n = len-total; @@ -796,9 +816,18 @@ int mmsh_read (mmsh_t *this, char *data, int len) { this->asf_header_read += n; total += n; this->current_pos += n; + + if (this->asf_header_read == this->asf_header_len) + break; } else { int n, bytes_left ; + + if (!this->playing) { + if (!mmsh_connect_int2 (this, this->user_bandwidth)) + break; + this->playing = 1; + } bytes_left = this->buf_size - this->buf_read; @@ -867,3 +896,8 @@ uint32_t mmsh_get_length (mmsh_t *this) { off_t mmsh_get_current_pos (mmsh_t *this) { return this->current_pos; } + +void mmsh_set_start_time (mmsh_t *this, int time_offset) { + if (time_offset >= 0) + this->start_time = time_offset; +} diff --git a/src/input/mmsh.h b/src/input/mmsh.h index 8aee808f0..1ded6295a 100644 --- a/src/input/mmsh.h +++ b/src/input/mmsh.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: mmsh.h,v 1.5 2006/06/20 01:46:41 dgp85 Exp $ + * $Id: mmsh.h,v 1.6 2007/01/09 20:51:00 klan Exp $ * * libmmsh public header */ @@ -31,7 +31,7 @@ typedef struct mmsh_s mmsh_t; char* mmsh_connect_common(int *s ,int *port, char *url, char **host, char **path, char **file); -mmsh_t* mmsh_connect (xine_stream_t *stream, const char *url_, int bandwidth); +mmsh_t* mmsh_connect (xine_stream_t *stream, const char *url_, int bandwidth); int mmsh_read (mmsh_t *this, char *data, int len); uint32_t mmsh_get_length (mmsh_t *this); @@ -41,4 +41,6 @@ size_t mmsh_peek_header (mmsh_t *this, char *data, size_t maxsize); off_t mmsh_get_current_pos (mmsh_t *this); +void mmsh_set_start_time (mmsh_t *this, int time_offset); + #endif diff --git a/src/input/net_buf_ctrl.c b/src/input/net_buf_ctrl.c index 75743a070..86514cdea 100644 --- a/src/input/net_buf_ctrl.c +++ b/src/input/net_buf_ctrl.c @@ -149,7 +149,7 @@ static void nbc_compute_fifo_length(nbc_t *this, fifo_buffer_t *fifo, buf_element_t *buf, int action) { - int fifo_free, fifo_fill; + int fifo_free, fifo_fill, fifo_div; int64_t video_br, audio_br, diff; int has_video, has_audio; @@ -160,10 +160,13 @@ static void nbc_compute_fifo_length(nbc_t *this, fifo_free = fifo->buffer_pool_num_free; fifo_fill = fifo->fifo_size; + fifo_div = fifo_fill + fifo_free - 1; + if (fifo_div == 0) + fifo_div = 1; /* avoid a possible divide-by-zero */ if (fifo == this->video_fifo) { this->video_fifo_free = fifo_free; - this->video_fifo_fill = (100 * fifo_fill) / (fifo_fill + fifo_free - 1); + this->video_fifo_fill = (100 * fifo_fill) / fifo_div; this->video_fifo_size = fifo->fifo_data_size; if (buf->pts && (this->video_in_disc == 0)) { @@ -196,7 +199,7 @@ static void nbc_compute_fifo_length(nbc_t *this, } else { this->audio_fifo_free = fifo_free; - this->audio_fifo_fill = (100 * fifo_fill) / (fifo_fill + fifo_free - 1); + this->audio_fifo_fill = (100 * fifo_fill) / fifo_div; this->audio_fifo_size = fifo->fifo_data_size; if (buf->pts && (this->audio_in_disc == 0)) { diff --git a/src/input/vcd/libcdio/.cvsignore b/src/input/vcd/.hgignore index 7d926a554..7d926a554 100644 --- a/src/input/vcd/libcdio/.cvsignore +++ b/src/input/vcd/.hgignore diff --git a/src/input/vcd/Makefile.am b/src/input/vcd/Makefile.am index deb30e78f..98903aac8 100644 --- a/src/input/vcd/Makefile.am +++ b/src/input/vcd/Makefile.am @@ -18,7 +18,7 @@ xineplug_inp_vcd_la_LDFLAGS = -avoid-version -module if HAVE_VCDNAV xineplug_inp_vcd_la_LIBADD = $(XINE_LIB) $(LIBVCDINFO_LIBS) else -xineplug_inp_vcd_la_LIBADD = $(XINE_LIB) $(LIBVCD_LIBS) $(LIBVCDINFO_LIBS) +xineplug_inp_vcd_la_LIBADD = $(XINE_LIB) $(LIBVCD_LIBS) $(LIBVCDINFO_LIBS) -lm endif endif diff --git a/src/input/vcd/libvcd/.cvsignore b/src/input/vcd/libcdio/.hgignore index 7d926a554..7d926a554 100644 --- a/src/input/vcd/libvcd/.cvsignore +++ b/src/input/vcd/libcdio/.hgignore diff --git a/src/input/vcd/libcdio/MSWindows/.cvsignore b/src/input/vcd/libcdio/MSWindows/.hgignore index 282522db0..282522db0 100644 --- a/src/input/vcd/libcdio/MSWindows/.cvsignore +++ b/src/input/vcd/libcdio/MSWindows/.hgignore diff --git a/src/input/vcd/libcdio/cdio/.cvsignore b/src/input/vcd/libcdio/cdio/.hgignore index 282522db0..282522db0 100644 --- a/src/input/vcd/libcdio/cdio/.cvsignore +++ b/src/input/vcd/libcdio/cdio/.hgignore diff --git a/src/input/vcd/libcdio/image/.cvsignore b/src/input/vcd/libcdio/image/.hgignore index 282522db0..282522db0 100644 --- a/src/input/vcd/libcdio/image/.cvsignore +++ b/src/input/vcd/libcdio/image/.hgignore diff --git a/src/input/vcd/libcdio/iso9660_fs.c b/src/input/vcd/libcdio/iso9660_fs.c index 0a2de8fa1..fff12cd7c 100644 --- a/src/input/vcd/libcdio/iso9660_fs.c +++ b/src/input/vcd/libcdio/iso9660_fs.c @@ -1,5 +1,5 @@ /* - $Id: iso9660_fs.c,v 1.6 2006/09/28 08:19:14 dgp85 Exp $ + $Id: iso9660_fs.c,v 1.7 2006/12/08 16:26:10 mshopf Exp $ Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com> @@ -51,7 +51,7 @@ #include <stdio.h> -static const char _rcsid[] = "$Id: iso9660_fs.c,v 1.6 2006/09/28 08:19:14 dgp85 Exp $"; +static const char _rcsid[] = "$Id: iso9660_fs.c,v 1.7 2006/12/08 16:26:10 mshopf Exp $"; /* Implementation of iso9660_t type */ struct _iso9660 { @@ -1200,9 +1200,7 @@ find_fs_lsn_recurse (CdIo *p_cdio, const char pathname[], lsn_t lsn) char _fullname[4096] = { 0, }; char *filename = (char *) statbuf->filename; - snprintf (_fullname, sizeof (_fullname), "%s%s", pathname, filename); - - strncat (_fullname, "/", sizeof (_fullname)); + snprintf (_fullname, sizeof (_fullname), "%s%s/", pathname, filename); if (statbuf->type == _STAT_DIR && strcmp ((char *) statbuf->filename, ".") diff --git a/src/liba52/.cvsignore b/src/input/vcd/libvcd/.hgignore index 7d926a554..7d926a554 100644 --- a/src/liba52/.cvsignore +++ b/src/input/vcd/libvcd/.hgignore diff --git a/src/input/vcd/libvcd/info.c b/src/input/vcd/libvcd/info.c index d178968a8..b01bd6eee 100644 --- a/src/input/vcd/libvcd/info.c +++ b/src/input/vcd/libvcd/info.c @@ -1,5 +1,5 @@ /* - $Id: info.c,v 1.7 2006/09/26 22:29:39 dgp85 Exp $ + $Id: info.c,v 1.8 2007/03/23 21:47:31 dsalt Exp $ Copyright (C) 2002, 2003, 2004 Rocky Bernstein <rocky@panix.com> @@ -59,7 +59,7 @@ #include <stddef.h> #include <errno.h> -static const char _rcsid[] = "$Id: info.c,v 1.7 2006/09/26 22:29:39 dgp85 Exp $"; +static const char _rcsid[] = "$Id: info.c,v 1.8 2007/03/23 21:47:31 dsalt Exp $"; #define BUF_COUNT 16 #define BUF_SIZE 80 @@ -1904,14 +1904,12 @@ vcdinfo_open(vcdinfo_obj_t **obj_p, char *source_name[], strlen (ISO_XA_MARKER_STRING)); } - if (!read_info(obj->img, &(obj->info), &(obj->vcd_type))) - return VCDINFO_OPEN_OTHER; - - if (vcdinfo_get_format_version (obj) == VCD_TYPE_INVALID) - return VCDINFO_OPEN_OTHER; - - if (!read_entries(obj->img, &(obj->entries))) + if (!read_info(obj->img, &(obj->info), &(obj->vcd_type)) || + vcdinfo_get_format_version (obj) == VCD_TYPE_INVALID || + !read_entries(obj->img, &(obj->entries))) { + free (obj); /* match 0.7.23's behaviour */ return VCDINFO_OPEN_OTHER; + } { size_t len = strlen(*source_name)+1; diff --git a/src/input/vcd/libvcd/libvcd/.cvsignore b/src/input/vcd/libvcd/libvcd/.hgignore index 282522db0..282522db0 100644 --- a/src/input/vcd/libvcd/libvcd/.cvsignore +++ b/src/input/vcd/libvcd/libvcd/.hgignore diff --git a/src/input/vcd/libvcd/vcd.c b/src/input/vcd/libvcd/vcd.c index e9618a7d7..0772149ec 100644 --- a/src/input/vcd/libvcd/vcd.c +++ b/src/input/vcd/libvcd/vcd.c @@ -1,5 +1,5 @@ /* - $Id: vcd.c,v 1.3 2005/01/01 02:43:59 rockyb Exp $ + $Id: vcd.c,v 1.4 2006/12/08 16:26:10 mshopf Exp $ Copyright (C) 2000, 2004 Herbert Valerio Riedel <hvr@gnu.org> @@ -49,7 +49,7 @@ #include "util.h" #include "vcd.h" -static const char _rcsid[] = "$Id: vcd.c,v 1.3 2005/01/01 02:43:59 rockyb Exp $"; +static const char _rcsid[] = "$Id: vcd.c,v 1.4 2006/12/08 16:26:10 mshopf Exp $"; static const char zero[CDIO_CD_FRAMESIZE_RAW] = { 0, }; @@ -1664,7 +1664,7 @@ _write_sequence (VcdObj *obj, int track_idx) track->info->ahdr[i].bitrate / 1024, _mode_str[track->info->ahdr[i].mode]); - strncat (buf2, buf, sizeof(buf)); + strncat (buf2, buf, sizeof(buf2) - strlen(buf2) - 1); } vcd_info ("writing track %d, %s, %s, %s...", track_idx + 2, diff --git a/src/input/vcd/vcdio.c b/src/input/vcd/vcdio.c index 7fee5a0db..387397cf4 100644 --- a/src/input/vcd/vcdio.c +++ b/src/input/vcd/vcdio.c @@ -1,5 +1,5 @@ /* - $Id: vcdio.c,v 1.7 2005/06/14 17:27:12 rockyb Exp $ + $Id: vcdio.c,v 1.9 2007/03/23 21:47:31 dsalt Exp $ Copyright (C) 2002, 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com> @@ -103,9 +103,20 @@ vcdio_open(vcdplayer_t *p_vcdplayer, char *intended_vcd_device) } } - if ( vcdinfo_open(&p_vcdplayer->vcd, &intended_vcd_device, DRIVER_UNKNOWN, - NULL) != VCDINFO_OPEN_VCD) { - return false; + switch ( vcdinfo_open(&p_vcdplayer->vcd, &intended_vcd_device, + DRIVER_UNKNOWN, NULL)) + { + case VCDINFO_OPEN_ERROR: + /* Failed to open the device => return failure */ + return false; + + case VCDINFO_OPEN_VCD: + /* Opened the device, and it's a VCD => proceed */ + break; + + default: + /* Opened the device, but it's not a VCD => is closed, return failure */ + return false; } p_vcdinfo = p_vcdplayer->vcd; diff --git a/src/input/vcd/vcdplayer.c b/src/input/vcd/vcdplayer.c index 27f726e3c..502d736cc 100644 --- a/src/input/vcd/vcdplayer.c +++ b/src/input/vcd/vcdplayer.c @@ -1,5 +1,5 @@ /* - $Id: vcdplayer.c,v 1.19 2005/06/20 02:17:41 rockyb Exp $ + $Id: vcdplayer.c,v 1.20 2007/02/21 23:17:14 dgp85 Exp $ Copyright (C) 2002, 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com> @@ -46,6 +46,12 @@ #include "vcdplayer.h" #include "vcdio.h" +/* This function is _not_ exported by libvcd, its usage should be avoided, most + * likely. + */ +void vcdinfo_get_seg_resolution(const vcdinfo_obj_t *p_vcdinfo, segnum_t i_seg, + /*out*/ uint16_t *max_x, /*out*/ uint16_t *max_y); + #define LOG_ERR(p_vcdplayer, s, args...) \ if (p_vcdplayer != NULL && p_vcdplayer->log_err != NULL) \ p_vcdplayer->log_err("%s: "s, __func__ , ##args) diff --git a/src/input/vcd/xineplug_inp_vcd.c b/src/input/vcd/xineplug_inp_vcd.c index baa6b0d9a..920b5c1d8 100644 --- a/src/input/vcd/xineplug_inp_vcd.c +++ b/src/input/vcd/xineplug_inp_vcd.c @@ -1,5 +1,5 @@ /* - $Id: xineplug_inp_vcd.c,v 1.50 2006/07/10 22:08:29 dgp85 Exp $ + $Id: xineplug_inp_vcd.c,v 1.53 2007/02/08 02:40:23 dsalt Exp $ Copyright (C) 2002, 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com> @@ -322,6 +322,7 @@ vcd_build_mrl_list(vcd_input_class_t *class, char *vcd_device) unsigned int n, i=0; unsigned int i_entries; vcdinfo_obj_t *p_vcdinfo; + int was_open; if (NULL == class) { LOG_MSG("%s", _("was passed a null class parameter")); @@ -331,7 +332,7 @@ vcd_build_mrl_list(vcd_input_class_t *class, char *vcd_device) vcdplayer = &(my_vcd.player); /* If VCD already open, we gotta close and stop it. */ - if (vcdplayer->b_opened) { + if ((was_open = vcdplayer->b_opened)) { vcd_close(class); } @@ -374,6 +375,8 @@ vcd_build_mrl_list(vcd_input_class_t *class, char *vcd_device) if (NULL == class->mrls) { LOG_ERR("Can't calloc %d MRL entries", class->num_mrls); class->num_mrls = 0; + if (!was_open) + vcdio_close(vcdplayer); return false; } @@ -445,6 +448,8 @@ vcd_build_mrl_list(vcd_input_class_t *class, char *vcd_device) class->mrl_track_offset, class->mrl_entry_offset, class->mrl_play_offset, class->mrl_segment_offset); + if (!was_open) + vcdio_close(vcdplayer); return true; } @@ -1290,7 +1295,7 @@ vcd_get_optional_data (input_plugin_t *this_gen, dbg_print(INPUT_DBG_EXT, "AUDIO CHANNEL = %d\n", channel); if (channel == (uint8_t)-1) { - sprintf(data, " %s", "auto"); + strcpy(data, "auto"); } else { const vcdinfo_obj_t *p_vcdinfo= my_vcd.player.vcd; unsigned int audio_type; @@ -1315,9 +1320,9 @@ vcd_get_optional_data (input_plugin_t *this_gen, channel = (int8_t) _x_get_spu_channel(my_vcd.stream); dbg_print(INPUT_DBG_EXT, "SPU CHANNEL = %d\n", channel); if (-1 == channel) { - sprintf(data, " %s", "auto"); + strcpy(data, "auto"); } else { - sprintf(data, " %1d", channel); + sprintf(data, "%1d", channel); } } @@ -1824,9 +1829,9 @@ _("The VCD play unit to use when none is specified in an MRL, e.g. " class->vcd_device = - strdup (config->register_string(config, + strdup (config->register_filename(config, "media.vcd.device", - "", + "", XINE_CONFIG_STRING_IS_DEVICE_NAME, _("CD-ROM drive used for VCD when none given"), _("What to use if no drive specified. If the setting is empty, xine will scan for CD drives."), 20, diff --git a/src/libdts/.cvsignore b/src/liba52/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libdts/.cvsignore +++ b/src/liba52/.hgignore diff --git a/src/liba52/Makefile.am b/src/liba52/Makefile.am index 40532479f..f296a0ef3 100644 --- a/src/liba52/Makefile.am +++ b/src/liba52/Makefile.am @@ -26,7 +26,7 @@ xineplug_decode_a52_la_SOURCES = \ if EXTERNAL_A52DEC xineplug_decode_a52_la_LIBADD = $(XINE_LIB) -la52 -lm else -xineplug_decode_a52_la_LIBADD = $(XINE_LIB) +xineplug_decode_a52_la_LIBADD = $(XINE_LIB) -lm endif xineplug_decode_a52_la_CFLAGS = $(VISIBILITY_FLAG) diff --git a/src/liba52/xine_decoder.c b/src/liba52/xine_decoder.c index 9c770fbbc..5435e9664 100644 --- a/src/liba52/xine_decoder.c +++ b/src/liba52/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.80 2006/07/10 22:08:29 dgp85 Exp $ + * $Id: xine_decoder.c,v 1.81 2007/02/20 00:34:57 dgp85 Exp $ * * stuff needed to turn liba52 into a xine decoder plugin */ @@ -425,7 +425,7 @@ static void a52dec_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) { uint16_t crc16; uint16_t crc16_result; - lprintf ("decode data %d bytes of type %08x, pts=%lld\n", + lprintf ("decode data %d bytes of type %08x, pts=%"PRId64"\n", buf->size, buf->type, buf->pts); lprintf ("decode data decoder_info=%d, %d\n",buf->decoder_info[1],buf->decoder_info[2]); diff --git a/src/libfaad/.cvsignore b/src/libdts/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libfaad/.cvsignore +++ b/src/libdts/.hgignore diff --git a/src/libdts/Makefile.am b/src/libdts/Makefile.am index c2d86e073..4cf54884f 100644 --- a/src/libdts/Makefile.am +++ b/src/libdts/Makefile.am @@ -21,9 +21,9 @@ xineplug_decode_dts_la_CFLAGS = $(LIBDTS_CFLAGS) $(VISIBILITY_FLAG) $(fnsa) xineplug_decode_dts_la_LDFLAGS = -avoid-version -module if EXTERNAL_LIBDTS -xineplug_decode_dts_la_LIBADD = $(XINE_LIB) $(LIBDTS_LIBS) +xineplug_decode_dts_la_LIBADD = $(XINE_LIB) $(LIBDTS_LIBS) -lm else -xineplug_decode_dts_la_LIBADD = $(XINE_LIB) +xineplug_decode_dts_la_LIBADD = $(XINE_LIB) -lm endif noinst_HEADERS = bitstream.h dts.h dts_internal.h tables.h tables_adpcm.h \ diff --git a/src/libdts/xine_decoder.c b/src/libdts/xine_decoder.c index a97ee1a9b..902d8c5b6 100644 --- a/src/libdts/xine_decoder.c +++ b/src/libdts/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.66 2006/07/10 22:08:29 dgp85 Exp $ + * $Id: xine_decoder.c,v 1.67 2007/02/20 00:34:57 dgp85 Exp $ * * 04-09-2001 DTS passtrough (C) Joachim Koenig * 09-12-2001 DTS passthrough inprovements (C) James Courtier-Dutton @@ -201,7 +201,7 @@ static void dts_decode_frame (dts_decoder_t *this, int64_t pts, int preview_mode } #endif - lprintf("length=%d pts=%lld\n",this->ac5_pcm_length,audio_buffer->vpts); + lprintf("length=%d pts=%"PRId64"\n",this->ac5_pcm_length,audio_buffer->vpts); audio_buffer->num_frames = this->ac5_pcm_length; diff --git a/src/libffmpeg/.cvsignore b/src/libfaad/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libffmpeg/.cvsignore +++ b/src/libfaad/.hgignore diff --git a/src/libfaad/Makefile.am b/src/libfaad/Makefile.am index cef72a4ce..dcc57792a 100644 --- a/src/libfaad/Makefile.am +++ b/src/libfaad/Makefile.am @@ -55,7 +55,7 @@ xineplug_decode_faad_la_SOURCES = \ xine_decoder.c xineplug_decode_faad_la_LDFLAGS = -avoid-version -module -xineplug_decode_faad_la_LIBADD = $(XINE_LIB) +xineplug_decode_faad_la_LIBADD = -lm $(XINE_LIB) noinst_HEADERS = \ analysis.h \ diff --git a/src/libfaad/codebook/.cvsignore b/src/libfaad/codebook/.hgignore index 282522db0..282522db0 100644 --- a/src/libfaad/codebook/.cvsignore +++ b/src/libfaad/codebook/.hgignore diff --git a/src/libfaad/xine_decoder.c b/src/libfaad/xine_decoder.c index bf6e9183c..aa528a34d 100644 --- a/src/libfaad/xine_decoder.c +++ b/src/libfaad/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.48 2006/07/10 22:08:29 dgp85 Exp $ + * $Id: xine_decoder.c,v 1.49 2007/02/20 00:34:57 dgp85 Exp $ * */ @@ -140,7 +140,7 @@ static int faad_open_dec( faad_decoder_t *this ) { _("libfaad: libfaad NeAACDecInit2 failed.\n")); this->faac_failed++; } else - lprintf( "NeAACDecInit2 returned rate=%ld channels=%d\n", + lprintf( "NeAACDecInit2 returned rate=%"PRId32" channels=%d\n", this->rate, this->num_channels ); } else { used = NeAACDecInit(this->faac_dec, this->buf, this->size, @@ -151,7 +151,7 @@ static int faad_open_dec( faad_decoder_t *this ) { _("libfaad: libfaad NeAACDecInit failed.\n")); this->faac_failed++; } else { - lprintf( "NeAACDecInit() returned rate=%ld channels=%d (used=%d)\n", + lprintf( "NeAACDecInit() returned rate=%"PRId32" channels=%d (used=%d)\n", this->rate, this->num_channels, used); this->size -= used; @@ -239,7 +239,7 @@ static void faad_decode_audio ( faad_decoder_t *this, int end_frame ) { this->num_channels = this->faac_finfo.channels; this->rate = this->faac_finfo.samplerate; - lprintf("faacDecDecode() returned rate=%ld channels=%d used=%d\n", + lprintf("faacDecDecode() returned rate=%"PRId32" channels=%d used=%d\n", this->rate, this->num_channels, used); this->stream->audio_out->close (this->stream->audio_out, this->stream); diff --git a/src/libflac/.cvsignore b/src/libffmpeg/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libflac/.cvsignore +++ b/src/libffmpeg/.hgignore diff --git a/src/libffmpeg/Makefile.am b/src/libffmpeg/Makefile.am index cf925bd3b..9ea37cd17 100644 --- a/src/libffmpeg/Makefile.am +++ b/src/libffmpeg/Makefile.am @@ -22,6 +22,9 @@ $(top_builddir)/contrib/ffmpeg/libpostproc/libpostproc.a: $(MAKE) -C $(top_builddir)/contrib/ffmpeg/ -f makefile.xine libpostproc/libpostproc.a endif +# ffmpeg_config.h is generated by configure +DISTCLEANFILES = ffmpeg_config.h + # this must always be included, even if the current machine has no DXR3... EXTRA_DIST = xine_encoder.c diff_to_ffmpeg_cvs.txt @@ -45,7 +48,7 @@ endif xineplug_decode_ff_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_decode_ff_la_LDFLAGS = -avoid-version -module @IMPURE_TEXT_LDFLAGS@ xineplug_decode_ff_la_LIBADD = $(MLIB_LIBS) $(XINE_LIB) -lm $(ZLIB_LIBS) \ - $(link_ffmpeg) $(THREAD_LIBS) + $(link_ffmpeg) $(PTHREAD_LIBS) xineplug_decode_dvaudio_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) xineplug_decode_dvaudio_la_LDFLAGS = -avoid-version -module diff --git a/src/libffmpeg/audio_decoder.c b/src/libffmpeg/audio_decoder.c index c0a4503e2..7ab1f56b4 100644 --- a/src/libffmpeg/audio_decoder.c +++ b/src/libffmpeg/audio_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_decoder.c,v 1.29 2006/10/13 21:41:30 dgp85 Exp $ + * $Id: audio_decoder.c,v 1.33 2007/01/28 18:38:33 miguelfreitas Exp $ * * xine audio decoder plugin using ffmpeg * @@ -25,6 +25,7 @@ #ifdef HAVE_CONFIG_H #include "config.h" +#include "ffmpeg_config.h" #endif #include <stdlib.h> @@ -107,6 +108,8 @@ static const ff_codec_t ff_audio_lookup[] = { {BUF_AUDIO_TRUESPEECH, CODEC_ID_TRUESPEECH, "TrueSpeech (ffmpeg)"}, {BUF_AUDIO_TTA, CODEC_ID_TTA, "True Audio Lossless (ffmpeg)"}, {BUF_AUDIO_SMACKER, CODEC_ID_SMACKAUDIO, "Smacker (ffmpeg)"}, + {BUF_AUDIO_FLVADPCM, CODEC_ID_ADPCM_SWF, "Flash ADPCM (ffmpeg)"}, + {BUF_AUDIO_WAVPACK, CODEC_ID_WAVPACK, "WavPack (ffmpeg)"}, }; @@ -288,7 +291,8 @@ static void ff_audio_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) offset = 0; while (this->size>0) { - bytes_consumed = avcodec_decode_audio (this->context, + decode_buffer_size = AVCODEC_MAX_AUDIO_FRAME_SIZE; + bytes_consumed = avcodec_decode_audio2 (this->context, (int16_t *)this->decode_buffer, &decode_buffer_size, &this->buf[offset], @@ -441,37 +445,106 @@ void *init_audio_plugin (xine_t *xine, void *data) { } static uint32_t supported_audio_types[] = { + #ifdef CONFIG_WMAV1_DECODER BUF_AUDIO_WMAV1, + #endif + #ifdef CONFIG_WMAV2_DECODER BUF_AUDIO_WMAV2, + #endif + #ifdef CONFIG_RA_144_DECODER BUF_AUDIO_14_4, + #endif + #ifdef CONFIG_RA_288_DECODER BUF_AUDIO_28_8, - BUF_AUDIO_MULAW, - BUF_AUDIO_ALAW, + #endif + #ifdef CONFIG_MP3_DECODER + BUF_AUDIO_MPEG, + #endif + #ifdef CONFIG_ADPCM_MS_DECODER BUF_AUDIO_MSADPCM, + #endif + #ifdef CONFIG_ADPCM_IMA_QT_DECODER BUF_AUDIO_QTIMAADPCM, + #endif + #ifdef CONFIG_ADPCM_IMA_WAV_DECODER BUF_AUDIO_MSIMAADPCM, + #endif + #ifdef CONFIG_ADPCM_IMA_DK3_DECODER BUF_AUDIO_DK3ADPCM, + #endif + #ifdef CONFIG_ADPCM_IMA_DK4_DECODER BUF_AUDIO_DK4ADPCM, + #endif + #ifdef CONFIG_ADPCM_IMA_WS_DECODER + BUF_AUDIO_VQA_IMA, + #endif + #ifdef CONFIG_ADPCM_IMA_SMJPEG_DECODER + BUF_AUDIO_SMJPEG_IMA, + #endif + #ifdef CONFIG_ADPCM_XA_DECODER BUF_AUDIO_XA_ADPCM, + #endif + #ifdef CONFIG_ADPCM_4XM_DECODER + BUF_AUDIO_4X_ADPCM, + #endif + #ifdef CONFIG_ADPCM_EA_DECODER + BUF_AUDIO_EA_ADPCM, + #endif + #ifdef CONFIG_PCM_MULAW_DECODER + BUF_AUDIO_MULAW, + #endif + #ifdef CONFIG_PCM_ALAW_DECODER + BUF_AUDIO_ALAW, + #endif + #ifdef CONFIG_ROQ_DPCM_DECODER BUF_AUDIO_ROQ, + #endif + #ifdef CONFIG_INTERPLAY_DPCM_DECODER BUF_AUDIO_INTERPLAY, - BUF_AUDIO_VQA_IMA, - BUF_AUDIO_4X_ADPCM, + #endif + #ifdef CONFIG_MACE3_DECODER BUF_AUDIO_MAC3, + #endif + #ifdef CONFIG_MACE6_DECODER BUF_AUDIO_MAC6, + #endif + #ifdef CONFIG_XAN_DPCM_DECODER BUF_AUDIO_XAN_DPCM, + #endif + #ifdef CONFIG_VMDAUDIO_DECODER BUF_AUDIO_VMD, - BUF_AUDIO_EA_ADPCM, - BUF_AUDIO_SMJPEG_IMA, + #endif + #ifdef CONFIG_FLAC_DECODER BUF_AUDIO_FLAC, - BUF_AUDIO_ALAC, + #endif + #ifdef CONFIG_SHORTEN_DECODER BUF_AUDIO_SHORTEN, - BUF_AUDIO_MPEG, + #endif + #ifdef CONFIG_ALAC_DECODER + BUF_AUDIO_ALAC, + #endif + #ifdef CONFIG_QDM2_DECODER BUF_AUDIO_QDESIGN2, + #endif + #ifdef CONFIG_COOK_DECODER BUF_AUDIO_COOK, + #endif + #ifdef CONFIG_TRUESPEECH_DECODER BUF_AUDIO_TRUESPEECH, + #endif + #ifdef CONFIG_TTA_DECODER BUF_AUDIO_TTA, + #endif + #ifdef CONFIG_SMACKAUDIO_DECODER BUF_AUDIO_SMACKER, + #endif + #ifdef CONFIG_ADPCM_SWF_DECODER + BUF_AUDIO_FLVADPCM, + #endif + #ifdef CONFIG_WAVPACK_DECODER + BUF_AUDIO_WAVPACK, + #endif + 0 }; diff --git a/src/libffmpeg/dvaudio_decoder.c b/src/libffmpeg/dvaudio_decoder.c index 71e58417b..ff9a8435c 100644 --- a/src/libffmpeg/dvaudio_decoder.c +++ b/src/libffmpeg/dvaudio_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: dvaudio_decoder.c,v 1.11.2.1 2006/12/02 01:20:07 dgp85 Exp $ + * $Id: dvaudio_decoder.c,v 1.11 2006/07/10 22:08:29 dgp85 Exp $ * * dv audio decoder based on patch by Dan Dennedy <dan@dennedy.org> * @@ -91,6 +91,22 @@ typedef struct dvaudio_decoder_s { } dvaudio_decoder_t; + +enum dv_pack_type { + dv_header525 = 0x3f, /* see dv_write_pack for important details on */ + dv_header625 = 0xbf, /* these two packs */ + dv_timecode = 0x13, + dv_audio_source = 0x50, + dv_audio_control = 0x51, + dv_audio_recdate = 0x52, + dv_audio_rectime = 0x53, + dv_video_source = 0x60, + dv_video_control = 0x61, + dv_viedo_recdate = 0x62, + dv_video_rectime = 0x63, + dv_unknown_pack = 0xff, +}; + /* * This is the dumbest implementation of all -- it simply looks at * a fixed offset and if pack isn't there -- fails. We might want diff --git a/src/liblpcm/.cvsignore b/src/libffmpeg/libavcodec/.hgignore index 7d926a554..7d926a554 100644 --- a/src/liblpcm/.cvsignore +++ b/src/libffmpeg/libavcodec/.hgignore diff --git a/src/libmad/.cvsignore b/src/libffmpeg/libavcodec/alpha/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libmad/.cvsignore +++ b/src/libffmpeg/libavcodec/alpha/.hgignore diff --git a/src/libmpeg2/.cvsignore b/src/libffmpeg/libavcodec/armv4l/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libmpeg2/.cvsignore +++ b/src/libffmpeg/libavcodec/armv4l/.hgignore diff --git a/src/libffmpeg/libavcodec/armv4l/dsputil_arm_s.S b/src/libffmpeg/libavcodec/armv4l/dsputil_arm_s.S new file mode 100644 index 000000000..2a3ee9c50 --- /dev/null +++ b/src/libffmpeg/libavcodec/armv4l/dsputil_arm_s.S @@ -0,0 +1,696 @@ +@ +@ ARMv4L optimized DSP utils +@ Copyright (c) 2004 AGAWA Koji <i (AT) atty (DOT) jp> +@ +@ This file is part of FFmpeg. +@ +@ FFmpeg is free software; you can redistribute it and/or +@ modify it under the terms of the GNU Lesser General Public +@ License as published by the Free Software Foundation; either +@ version 2.1 of the License, or (at your option) any later version. +@ +@ FFmpeg is distributed in the hope that it will be useful, +@ but WITHOUT ANY WARRANTY; without even the implied warranty of +@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +@ Lesser General Public License for more details. +@ +@ You should have received a copy of the GNU Lesser General Public +@ License along with FFmpeg; if not, write to the Free Software +@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +@ + +.macro ADJ_ALIGN_QUADWORD_D shift, Rd0, Rd1, Rd2, Rd3, Rn0, Rn1, Rn2, Rn3, Rn4 + mov \Rd0, \Rn0, lsr #(\shift * 8) + mov \Rd1, \Rn1, lsr #(\shift * 8) + mov \Rd2, \Rn2, lsr #(\shift * 8) + mov \Rd3, \Rn3, lsr #(\shift * 8) + orr \Rd0, \Rd0, \Rn1, lsl #(32 - \shift * 8) + orr \Rd1, \Rd1, \Rn2, lsl #(32 - \shift * 8) + orr \Rd2, \Rd2, \Rn3, lsl #(32 - \shift * 8) + orr \Rd3, \Rd3, \Rn4, lsl #(32 - \shift * 8) +.endm +.macro ADJ_ALIGN_DOUBLEWORD shift, R0, R1, R2 + mov \R0, \R0, lsr #(\shift * 8) + orr \R0, \R0, \R1, lsl #(32 - \shift * 8) + mov \R1, \R1, lsr #(\shift * 8) + orr \R1, \R1, \R2, lsl #(32 - \shift * 8) +.endm +.macro ADJ_ALIGN_DOUBLEWORD_D shift, Rdst0, Rdst1, Rsrc0, Rsrc1, Rsrc2 + mov \Rdst0, \Rsrc0, lsr #(\shift * 8) + mov \Rdst1, \Rsrc1, lsr #(\shift * 8) + orr \Rdst0, \Rdst0, \Rsrc1, lsl #(32 - (\shift * 8)) + orr \Rdst1, \Rdst1, \Rsrc2, lsl #(32 - (\shift * 8)) +.endm + +.macro RND_AVG32 Rd0, Rd1, Rn0, Rn1, Rm0, Rm1, Rmask + @ Rd = (Rn | Rm) - (((Rn ^ Rm) & ~0x01010101) >> 1) + @ Rmask = 0xFEFEFEFE + @ Rn = destroy + eor \Rd0, \Rn0, \Rm0 + eor \Rd1, \Rn1, \Rm1 + orr \Rn0, \Rn0, \Rm0 + orr \Rn1, \Rn1, \Rm1 + and \Rd0, \Rd0, \Rmask + and \Rd1, \Rd1, \Rmask + sub \Rd0, \Rn0, \Rd0, lsr #1 + sub \Rd1, \Rn1, \Rd1, lsr #1 +.endm + +.macro NO_RND_AVG32 Rd0, Rd1, Rn0, Rn1, Rm0, Rm1, Rmask + @ Rd = (Rn & Rm) - (((Rn ^ Rm) & ~0x01010101) >> 1) + @ Rmask = 0xFEFEFEFE + @ Rn = destroy + eor \Rd0, \Rn0, \Rm0 + eor \Rd1, \Rn1, \Rm1 + and \Rn0, \Rn0, \Rm0 + and \Rn1, \Rn1, \Rm1 + and \Rd0, \Rd0, \Rmask + and \Rd1, \Rd1, \Rmask + add \Rd0, \Rn0, \Rd0, lsr #1 + add \Rd1, \Rn1, \Rd1, lsr #1 +.endm + +@ ---------------------------------------------------------------- + .align 8 + .global put_pixels16_arm +put_pixels16_arm: + @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h) + @ block = word aligned, pixles = unaligned + pld [r1] + stmfd sp!, {r4-r11, lr} @ R14 is also called LR + adr r5, 5f + ands r4, r1, #3 + bic r1, r1, #3 + add r5, r5, r4, lsl #2 + ldrne pc, [r5] +1: + ldmia r1, {r4-r7} + add r1, r1, r2 + stmia r0, {r4-r7} + pld [r1] + subs r3, r3, #1 + add r0, r0, r2 + bne 1b + ldmfd sp!, {r4-r11, pc} + .align 8 +2: + ldmia r1, {r4-r8} + add r1, r1, r2 + ADJ_ALIGN_QUADWORD_D 1, r9, r10, r11, r12, r4, r5, r6, r7, r8 + pld [r1] + subs r3, r3, #1 + stmia r0, {r9-r12} + add r0, r0, r2 + bne 2b + ldmfd sp!, {r4-r11, pc} + .align 8 +3: + ldmia r1, {r4-r8} + add r1, r1, r2 + ADJ_ALIGN_QUADWORD_D 2, r9, r10, r11, r12, r4, r5, r6, r7, r8 + pld [r1] + subs r3, r3, #1 + stmia r0, {r9-r12} + add r0, r0, r2 + bne 3b + ldmfd sp!, {r4-r11, pc} + .align 8 +4: + ldmia r1, {r4-r8} + add r1, r1, r2 + ADJ_ALIGN_QUADWORD_D 3, r9, r10, r11, r12, r4, r5, r6, r7, r8 + pld [r1] + subs r3, r3, #1 + stmia r0, {r9-r12} + add r0, r0, r2 + bne 4b + ldmfd sp!, {r4-r11,pc} + .align 8 +5: + .word 1b + .word 2b + .word 3b + .word 4b + +@ ---------------------------------------------------------------- + .align 8 + .global put_pixels8_arm +put_pixels8_arm: + @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h) + @ block = word aligned, pixles = unaligned + pld [r1] + stmfd sp!, {r4-r5,lr} @ R14 is also called LR + adr r5, 5f + ands r4, r1, #3 + bic r1, r1, #3 + add r5, r5, r4, lsl #2 + ldrne pc, [r5] +1: + ldmia r1, {r4-r5} + add r1, r1, r2 + subs r3, r3, #1 + pld [r1] + stmia r0, {r4-r5} + add r0, r0, r2 + bne 1b + ldmfd sp!, {r4-r5,pc} + .align 8 +2: + ldmia r1, {r4-r5, r12} + add r1, r1, r2 + ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r12 + pld [r1] + subs r3, r3, #1 + stmia r0, {r4-r5} + add r0, r0, r2 + bne 2b + ldmfd sp!, {r4-r5,pc} + .align 8 +3: + ldmia r1, {r4-r5, r12} + add r1, r1, r2 + ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r12 + pld [r1] + subs r3, r3, #1 + stmia r0, {r4-r5} + add r0, r0, r2 + bne 3b + ldmfd sp!, {r4-r5,pc} + .align 8 +4: + ldmia r1, {r4-r5, r12} + add r1, r1, r2 + ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r12 + pld [r1] + subs r3, r3, #1 + stmia r0, {r4-r5} + add r0, r0, r2 + bne 4b + ldmfd sp!, {r4-r5,pc} + .align 8 +5: + .word 1b + .word 2b + .word 3b + .word 4b + +@ ---------------------------------------------------------------- + .align 8 + .global put_pixels8_x2_arm +put_pixels8_x2_arm: + @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h) + @ block = word aligned, pixles = unaligned + pld [r1] + stmfd sp!, {r4-r10,lr} @ R14 is also called LR + adr r5, 5f + ands r4, r1, #3 + ldr r12, [r5] + add r5, r5, r4, lsl #2 + bic r1, r1, #3 + ldrne pc, [r5] +1: + ldmia r1, {r4-r5, r10} + add r1, r1, r2 + ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10 + pld [r1] + RND_AVG32 r8, r9, r4, r5, r6, r7, r12 + subs r3, r3, #1 + stmia r0, {r8-r9} + add r0, r0, r2 + bne 1b + ldmfd sp!, {r4-r10,pc} + .align 8 +2: + ldmia r1, {r4-r5, r10} + add r1, r1, r2 + ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10 + ADJ_ALIGN_DOUBLEWORD_D 2, r8, r9, r4, r5, r10 + pld [r1] + RND_AVG32 r4, r5, r6, r7, r8, r9, r12 + subs r3, r3, #1 + stmia r0, {r4-r5} + add r0, r0, r2 + bne 2b + ldmfd sp!, {r4-r10,pc} + .align 8 +3: + ldmia r1, {r4-r5, r10} + add r1, r1, r2 + ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r4, r5, r10 + ADJ_ALIGN_DOUBLEWORD_D 3, r8, r9, r4, r5, r10 + pld [r1] + RND_AVG32 r4, r5, r6, r7, r8, r9, r12 + subs r3, r3, #1 + stmia r0, {r4-r5} + add r0, r0, r2 + bne 3b + ldmfd sp!, {r4-r10,pc} + .align 8 +4: + ldmia r1, {r4-r5, r10} + add r1, r1, r2 + ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r4, r5, r10 + pld [r1] + RND_AVG32 r8, r9, r6, r7, r5, r10, r12 + subs r3, r3, #1 + stmia r0, {r8-r9} + add r0, r0, r2 + bne 4b + ldmfd sp!, {r4-r10,pc} @@ update PC with LR content. + .align 8 +5: + .word 0xFEFEFEFE + .word 2b + .word 3b + .word 4b + + .align 8 + .global put_no_rnd_pixels8_x2_arm +put_no_rnd_pixels8_x2_arm: + @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h) + @ block = word aligned, pixles = unaligned + pld [r1] + stmfd sp!, {r4-r10,lr} @ R14 is also called LR + adr r5, 5f + ands r4, r1, #3 + ldr r12, [r5] + add r5, r5, r4, lsl #2 + bic r1, r1, #3 + ldrne pc, [r5] +1: + ldmia r1, {r4-r5, r10} + add r1, r1, r2 + ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10 + pld [r1] + NO_RND_AVG32 r8, r9, r4, r5, r6, r7, r12 + subs r3, r3, #1 + stmia r0, {r8-r9} + add r0, r0, r2 + bne 1b + ldmfd sp!, {r4-r10,pc} + .align 8 +2: + ldmia r1, {r4-r5, r10} + add r1, r1, r2 + ADJ_ALIGN_DOUBLEWORD_D 1, r6, r7, r4, r5, r10 + ADJ_ALIGN_DOUBLEWORD_D 2, r8, r9, r4, r5, r10 + pld [r1] + NO_RND_AVG32 r4, r5, r6, r7, r8, r9, r12 + subs r3, r3, #1 + stmia r0, {r4-r5} + add r0, r0, r2 + bne 2b + ldmfd sp!, {r4-r10,pc} + .align 8 +3: + ldmia r1, {r4-r5, r10} + add r1, r1, r2 + ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r4, r5, r10 + ADJ_ALIGN_DOUBLEWORD_D 3, r8, r9, r4, r5, r10 + pld [r1] + NO_RND_AVG32 r4, r5, r6, r7, r8, r9, r12 + subs r3, r3, #1 + stmia r0, {r4-r5} + add r0, r0, r2 + bne 3b + ldmfd sp!, {r4-r10,pc} + .align 8 +4: + ldmia r1, {r4-r5, r10} + add r1, r1, r2 + ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r4, r5, r10 + pld [r1] + NO_RND_AVG32 r8, r9, r6, r7, r5, r10, r12 + subs r3, r3, #1 + stmia r0, {r8-r9} + add r0, r0, r2 + bne 4b + ldmfd sp!, {r4-r10,pc} @@ update PC with LR content. + .align 8 +5: + .word 0xFEFEFEFE + .word 2b + .word 3b + .word 4b + + +@ ---------------------------------------------------------------- + .align 8 + .global put_pixels8_y2_arm +put_pixels8_y2_arm: + @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h) + @ block = word aligned, pixles = unaligned + pld [r1] + stmfd sp!, {r4-r11,lr} @ R14 is also called LR + adr r5, 5f + ands r4, r1, #3 + mov r3, r3, lsr #1 + ldr r12, [r5] + add r5, r5, r4, lsl #2 + bic r1, r1, #3 + ldrne pc, [r5] +1: + ldmia r1, {r4-r5} + add r1, r1, r2 +6: ldmia r1, {r6-r7} + add r1, r1, r2 + pld [r1] + RND_AVG32 r8, r9, r4, r5, r6, r7, r12 + ldmia r1, {r4-r5} + add r1, r1, r2 + stmia r0, {r8-r9} + add r0, r0, r2 + pld [r1] + RND_AVG32 r8, r9, r6, r7, r4, r5, r12 + subs r3, r3, #1 + stmia r0, {r8-r9} + add r0, r0, r2 + bne 6b + ldmfd sp!, {r4-r11,pc} + .align 8 +2: + ldmia r1, {r4-r6} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6 +6: ldmia r1, {r7-r9} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 1, r7, r8, r9 + RND_AVG32 r10, r11, r4, r5, r7, r8, r12 + stmia r0, {r10-r11} + add r0, r0, r2 + ldmia r1, {r4-r6} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6 + subs r3, r3, #1 + RND_AVG32 r10, r11, r7, r8, r4, r5, r12 + stmia r0, {r10-r11} + add r0, r0, r2 + bne 6b + ldmfd sp!, {r4-r11,pc} + .align 8 +3: + ldmia r1, {r4-r6} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6 +6: ldmia r1, {r7-r9} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 2, r7, r8, r9 + RND_AVG32 r10, r11, r4, r5, r7, r8, r12 + stmia r0, {r10-r11} + add r0, r0, r2 + ldmia r1, {r4-r6} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6 + subs r3, r3, #1 + RND_AVG32 r10, r11, r7, r8, r4, r5, r12 + stmia r0, {r10-r11} + add r0, r0, r2 + bne 6b + ldmfd sp!, {r4-r11,pc} + .align 8 +4: + ldmia r1, {r4-r6} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6 +6: ldmia r1, {r7-r9} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 3, r7, r8, r9 + RND_AVG32 r10, r11, r4, r5, r7, r8, r12 + stmia r0, {r10-r11} + add r0, r0, r2 + ldmia r1, {r4-r6} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6 + subs r3, r3, #1 + RND_AVG32 r10, r11, r7, r8, r4, r5, r12 + stmia r0, {r10-r11} + add r0, r0, r2 + bne 6b + ldmfd sp!, {r4-r11,pc} + + .align 8 +5: + .word 0xFEFEFEFE + .word 2b + .word 3b + .word 4b + + .align 8 + .global put_no_rnd_pixels8_y2_arm +put_no_rnd_pixels8_y2_arm: + @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h) + @ block = word aligned, pixles = unaligned + pld [r1] + stmfd sp!, {r4-r11,lr} @ R14 is also called LR + adr r5, 5f + ands r4, r1, #3 + mov r3, r3, lsr #1 + ldr r12, [r5] + add r5, r5, r4, lsl #2 + bic r1, r1, #3 + ldrne pc, [r5] +1: + ldmia r1, {r4-r5} + add r1, r1, r2 +6: ldmia r1, {r6-r7} + add r1, r1, r2 + pld [r1] + NO_RND_AVG32 r8, r9, r4, r5, r6, r7, r12 + ldmia r1, {r4-r5} + add r1, r1, r2 + stmia r0, {r8-r9} + add r0, r0, r2 + pld [r1] + NO_RND_AVG32 r8, r9, r6, r7, r4, r5, r12 + subs r3, r3, #1 + stmia r0, {r8-r9} + add r0, r0, r2 + bne 6b + ldmfd sp!, {r4-r11,pc} + .align 8 +2: + ldmia r1, {r4-r6} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6 +6: ldmia r1, {r7-r9} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 1, r7, r8, r9 + NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12 + stmia r0, {r10-r11} + add r0, r0, r2 + ldmia r1, {r4-r6} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 1, r4, r5, r6 + subs r3, r3, #1 + NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12 + stmia r0, {r10-r11} + add r0, r0, r2 + bne 6b + ldmfd sp!, {r4-r11,pc} + .align 8 +3: + ldmia r1, {r4-r6} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6 +6: ldmia r1, {r7-r9} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 2, r7, r8, r9 + NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12 + stmia r0, {r10-r11} + add r0, r0, r2 + ldmia r1, {r4-r6} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 2, r4, r5, r6 + subs r3, r3, #1 + NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12 + stmia r0, {r10-r11} + add r0, r0, r2 + bne 6b + ldmfd sp!, {r4-r11,pc} + .align 8 +4: + ldmia r1, {r4-r6} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6 +6: ldmia r1, {r7-r9} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 3, r7, r8, r9 + NO_RND_AVG32 r10, r11, r4, r5, r7, r8, r12 + stmia r0, {r10-r11} + add r0, r0, r2 + ldmia r1, {r4-r6} + add r1, r1, r2 + pld [r1] + ADJ_ALIGN_DOUBLEWORD 3, r4, r5, r6 + subs r3, r3, #1 + NO_RND_AVG32 r10, r11, r7, r8, r4, r5, r12 + stmia r0, {r10-r11} + add r0, r0, r2 + bne 6b + ldmfd sp!, {r4-r11,pc} + .align 8 +5: + .word 0xFEFEFEFE + .word 2b + .word 3b + .word 4b + +@ ---------------------------------------------------------------- +.macro RND_XY2_IT align, rnd + @ l1= (a & 0x03030303) + (b & 0x03030303) ?(+ 0x02020202) + @ h1= ((a & 0xFCFCFCFCUL) >> 2) + ((b & 0xFCFCFCFCUL) >> 2) +.if \align == 0 + ldmia r1, {r6-r8} +.elseif \align == 3 + ldmia r1, {r5-r7} +.else + ldmia r1, {r8-r10} +.endif + add r1, r1, r2 + pld [r1] +.if \align == 0 + ADJ_ALIGN_DOUBLEWORD_D 1, r4, r5, r6, r7, r8 +.elseif \align == 1 + ADJ_ALIGN_DOUBLEWORD_D 1, r4, r5, r8, r9, r10 + ADJ_ALIGN_DOUBLEWORD_D 2, r6, r7, r8, r9, r10 +.elseif \align == 2 + ADJ_ALIGN_DOUBLEWORD_D 2, r4, r5, r8, r9, r10 + ADJ_ALIGN_DOUBLEWORD_D 3, r6, r7, r8, r9, r10 +.elseif \align == 3 + ADJ_ALIGN_DOUBLEWORD_D 3, r4, r5, r5, r6, r7 +.endif + ldr r14, [r12, #0] @ 0x03030303 + tst r3, #1 + and r8, r4, r14 + and r9, r5, r14 + and r10, r6, r14 + and r11, r7, r14 +.if \rnd == 1 + ldreq r14, [r12, #16] @ 0x02020202 +.else + ldreq r14, [r12, #28] @ 0x01010101 +.endif + add r8, r8, r10 + add r9, r9, r11 + addeq r8, r8, r14 + addeq r9, r9, r14 + ldr r14, [r12, #20] @ 0xFCFCFCFC >> 2 + and r4, r14, r4, lsr #2 + and r5, r14, r5, lsr #2 + and r6, r14, r6, lsr #2 + and r7, r14, r7, lsr #2 + add r10, r4, r6 + add r11, r5, r7 +.endm + +.macro RND_XY2_EXPAND align, rnd + RND_XY2_IT \align, \rnd +6: stmfd sp!, {r8-r11} + RND_XY2_IT \align, \rnd + ldmfd sp!, {r4-r7} + add r4, r4, r8 + add r5, r5, r9 + add r6, r6, r10 + add r7, r7, r11 + ldr r14, [r12, #24] @ 0x0F0F0F0F + and r4, r14, r4, lsr #2 + and r5, r14, r5, lsr #2 + add r4, r4, r6 + add r5, r5, r7 + subs r3, r3, #1 + stmia r0, {r4-r5} + add r0, r0, r2 + bne 6b + ldmfd sp!, {r4-r11,pc} +.endm + + .align 8 + .global put_pixels8_xy2_arm +put_pixels8_xy2_arm: + @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h) + @ block = word aligned, pixles = unaligned + pld [r1] + stmfd sp!, {r4-r11,lr} @ R14 is also called LR + adrl r12, 5f + ands r4, r1, #3 + add r5, r12, r4, lsl #2 + bic r1, r1, #3 + ldrne pc, [r5] +1: + RND_XY2_EXPAND 0, 1 + + .align 8 +2: + RND_XY2_EXPAND 1, 1 + + .align 8 +3: + RND_XY2_EXPAND 2, 1 + + .align 8 +4: + RND_XY2_EXPAND 3, 1 + +5: + .word 0x03030303 + .word 2b + .word 3b + .word 4b + .word 0x02020202 + .word 0xFCFCFCFC >> 2 + .word 0x0F0F0F0F + .word 0x01010101 + + .align 8 + .global put_no_rnd_pixels8_xy2_arm +put_no_rnd_pixels8_xy2_arm: + @ void func(uint8_t *block, const uint8_t *pixels, int line_size, int h) + @ block = word aligned, pixles = unaligned + pld [r1] + stmfd sp!, {r4-r11,lr} @ R14 is also called LR + adrl r12, 5f + ands r4, r1, #3 + add r5, r12, r4, lsl #2 + bic r1, r1, #3 + ldrne pc, [r5] +1: + RND_XY2_EXPAND 0, 0 + + .align 8 +2: + RND_XY2_EXPAND 1, 0 + + .align 8 +3: + RND_XY2_EXPAND 2, 0 + + .align 8 +4: + RND_XY2_EXPAND 3, 0 + +5: + .word 0x03030303 + .word 2b + .word 3b + .word 4b + .word 0x02020202 + .word 0xFCFCFCFC >> 2 + .word 0x0F0F0F0F + .word 0x01010101 diff --git a/src/libffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c b/src/libffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c new file mode 100644 index 000000000..d7401e760 --- /dev/null +++ b/src/libffmpeg/libavcodec/armv4l/dsputil_iwmmxt.c @@ -0,0 +1,188 @@ +/* + * iWMMXt optimized DSP utils + * Copyright (c) 2004 AGAWA Koji + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "../dsputil.h" + +#define DEF(x, y) x ## _no_rnd_ ## y ##_iwmmxt +#define SET_RND(regd) __asm__ __volatile__ ("mov r12, #1 \n\t tbcsth " #regd ", r12":::"r12"); +#define WAVG2B "wavg2b" +#include "dsputil_iwmmxt_rnd.h" +#undef DEF +#undef SET_RND +#undef WAVG2B + +#define DEF(x, y) x ## _ ## y ##_iwmmxt +#define SET_RND(regd) __asm__ __volatile__ ("mov r12, #2 \n\t tbcsth " #regd ", r12":::"r12"); +#define WAVG2B "wavg2br" +#include "dsputil_iwmmxt_rnd.h" +#undef DEF +#undef SET_RND +#undef WAVG2BR + +// need scheduling +#define OP(AVG) \ + asm volatile ( \ + /* alignment */ \ + "and r12, %[pixels], #7 \n\t" \ + "bic %[pixels], %[pixels], #7 \n\t" \ + "tmcr wcgr1, r12 \n\t" \ + \ + "wldrd wr0, [%[pixels]] \n\t" \ + "wldrd wr1, [%[pixels], #8] \n\t" \ + "add %[pixels], %[pixels], %[line_size] \n\t" \ + "walignr1 wr4, wr0, wr1 \n\t" \ + \ + "1: \n\t" \ + \ + "wldrd wr2, [%[pixels]] \n\t" \ + "wldrd wr3, [%[pixels], #8] \n\t" \ + "add %[pixels], %[pixels], %[line_size] \n\t" \ + "pld [%[pixels]] \n\t" \ + "walignr1 wr5, wr2, wr3 \n\t" \ + AVG " wr6, wr4, wr5 \n\t" \ + "wstrd wr6, [%[block]] \n\t" \ + "add %[block], %[block], %[line_size] \n\t" \ + \ + "wldrd wr0, [%[pixels]] \n\t" \ + "wldrd wr1, [%[pixels], #8] \n\t" \ + "add %[pixels], %[pixels], %[line_size] \n\t" \ + "walignr1 wr4, wr0, wr1 \n\t" \ + "pld [%[pixels]] \n\t" \ + AVG " wr6, wr4, wr5 \n\t" \ + "wstrd wr6, [%[block]] \n\t" \ + "add %[block], %[block], %[line_size] \n\t" \ + \ + "subs %[h], %[h], #2 \n\t" \ + "bne 1b \n\t" \ + : [block]"+r"(block), [pixels]"+r"(pixels), [h]"+r"(h) \ + : [line_size]"r"(line_size) \ + : "memory", "r12"); +void put_pixels8_y2_iwmmxt(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + OP("wavg2br"); +} +void put_no_rnd_pixels8_y2_iwmmxt(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + OP("wavg2b"); +} +#undef OP + +void add_pixels_clamped_iwmmxt(const DCTELEM *block, uint8_t *pixels, int line_size) +{ + uint8_t *pixels2 = pixels + line_size; + + __asm__ __volatile__ ( + "mov r12, #4 \n\t" + "1: \n\t" + "pld [%[pixels], %[line_size2]] \n\t" + "pld [%[pixels2], %[line_size2]] \n\t" + "wldrd wr4, [%[pixels]] \n\t" + "wldrd wr5, [%[pixels2]] \n\t" + "pld [%[block], #32] \n\t" + "wunpckelub wr6, wr4 \n\t" + "wldrd wr0, [%[block]] \n\t" + "wunpckehub wr7, wr4 \n\t" + "wldrd wr1, [%[block], #8] \n\t" + "wunpckelub wr8, wr5 \n\t" + "wldrd wr2, [%[block], #16] \n\t" + "wunpckehub wr9, wr5 \n\t" + "wldrd wr3, [%[block], #24] \n\t" + "add %[block], %[block], #32 \n\t" + "waddhss wr10, wr0, wr6 \n\t" + "waddhss wr11, wr1, wr7 \n\t" + "waddhss wr12, wr2, wr8 \n\t" + "waddhss wr13, wr3, wr9 \n\t" + "wpackhus wr14, wr10, wr11 \n\t" + "wpackhus wr15, wr12, wr13 \n\t" + "wstrd wr14, [%[pixels]] \n\t" + "add %[pixels], %[pixels], %[line_size2] \n\t" + "subs r12, r12, #1 \n\t" + "wstrd wr15, [%[pixels2]] \n\t" + "add %[pixels2], %[pixels2], %[line_size2] \n\t" + "bne 1b \n\t" + : [block]"+r"(block), [pixels]"+r"(pixels), [pixels2]"+r"(pixels2) + : [line_size2]"r"(line_size << 1) + : "cc", "memory", "r12"); +} + +static void nop(uint8_t *block, const uint8_t *pixels, int line_size, int h) +{ + return; +} + +int mm_flags; /* multimedia extension flags */ + +int mm_support(void) +{ + return 0; /* TODO, implement proper detection */ +} + +void dsputil_init_iwmmxt(DSPContext* c, AVCodecContext *avctx) +{ + mm_flags = mm_support(); + + if (avctx->dsp_mask) { + if (avctx->dsp_mask & FF_MM_FORCE) + mm_flags |= (avctx->dsp_mask & 0xffff); + else + mm_flags &= ~(avctx->dsp_mask & 0xffff); + } + + if (!(mm_flags & MM_IWMMXT)) return; + + c->add_pixels_clamped = add_pixels_clamped_iwmmxt; + + c->put_pixels_tab[0][0] = put_pixels16_iwmmxt; + c->put_pixels_tab[0][1] = put_pixels16_x2_iwmmxt; + c->put_pixels_tab[0][2] = put_pixels16_y2_iwmmxt; + c->put_pixels_tab[0][3] = put_pixels16_xy2_iwmmxt; + c->put_no_rnd_pixels_tab[0][0] = put_pixels16_iwmmxt; + c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_iwmmxt; + c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_iwmmxt; + c->put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy2_iwmmxt; + + c->put_pixels_tab[1][0] = put_pixels8_iwmmxt; + c->put_pixels_tab[1][1] = put_pixels8_x2_iwmmxt; + c->put_pixels_tab[1][2] = put_pixels8_y2_iwmmxt; + c->put_pixels_tab[1][3] = put_pixels8_xy2_iwmmxt; + c->put_no_rnd_pixels_tab[1][0] = put_pixels8_iwmmxt; + c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_iwmmxt; + c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_iwmmxt; + c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_iwmmxt; + + c->avg_pixels_tab[0][0] = avg_pixels16_iwmmxt; + c->avg_pixels_tab[0][1] = avg_pixels16_x2_iwmmxt; + c->avg_pixels_tab[0][2] = avg_pixels16_y2_iwmmxt; + c->avg_pixels_tab[0][3] = avg_pixels16_xy2_iwmmxt; + c->avg_no_rnd_pixels_tab[0][0] = avg_pixels16_iwmmxt; + c->avg_no_rnd_pixels_tab[0][1] = avg_no_rnd_pixels16_x2_iwmmxt; + c->avg_no_rnd_pixels_tab[0][2] = avg_no_rnd_pixels16_y2_iwmmxt; + c->avg_no_rnd_pixels_tab[0][3] = avg_no_rnd_pixels16_xy2_iwmmxt; + + c->avg_pixels_tab[1][0] = avg_pixels8_iwmmxt; + c->avg_pixels_tab[1][1] = avg_pixels8_x2_iwmmxt; + c->avg_pixels_tab[1][2] = avg_pixels8_y2_iwmmxt; + c->avg_pixels_tab[1][3] = avg_pixels8_xy2_iwmmxt; + c->avg_no_rnd_pixels_tab[1][0] = avg_no_rnd_pixels8_iwmmxt; + c->avg_no_rnd_pixels_tab[1][1] = avg_no_rnd_pixels8_x2_iwmmxt; + c->avg_no_rnd_pixels_tab[1][2] = avg_no_rnd_pixels8_y2_iwmmxt; + c->avg_no_rnd_pixels_tab[1][3] = avg_no_rnd_pixels8_xy2_iwmmxt; +} diff --git a/src/libffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h b/src/libffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h new file mode 100644 index 000000000..51ba61c47 --- /dev/null +++ b/src/libffmpeg/libavcodec/armv4l/dsputil_iwmmxt_rnd.h @@ -0,0 +1,1114 @@ +/* + * iWMMXt optimized DSP utils + * copyright (c) 2004 AGAWA Koji + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +void DEF(put, pixels8)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + int stride = line_size; + __asm__ __volatile__ ( + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + "add r4, %[pixels], %[line_size] \n\t" + "add r5, %[block], %[line_size] \n\t" + "mov %[line_size], %[line_size], lsl #1 \n\t" + "1: \n\t" + "wldrd wr0, [%[pixels]] \n\t" + "subs %[h], %[h], #2 \n\t" + "wldrd wr1, [%[pixels], #8] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "wldrd wr3, [r4] \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "wldrd wr4, [r4, #8] \n\t" + "add r4, r4, %[line_size] \n\t" + "walignr1 wr8, wr0, wr1 \n\t" + "pld [r4] \n\t" + "pld [r4, #32] \n\t" + "walignr1 wr10, wr3, wr4 \n\t" + "wstrd wr8, [%[block]] \n\t" + "add %[block], %[block], %[line_size] \n\t" + "wstrd wr10, [r5] \n\t" + "add r5, r5, %[line_size] \n\t" + "bne 1b \n\t" + : [block]"+r"(block), [pixels]"+r"(pixels), [line_size]"+r"(stride), [h]"+r"(h) + : + : "memory", "r4", "r5", "r12"); +} + +void DEF(avg, pixels8)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + int stride = line_size; + __asm__ __volatile__ ( + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + "add r4, %[pixels], %[line_size] \n\t" + "add r5, %[block], %[line_size] \n\t" + "mov %[line_size], %[line_size], lsl #1 \n\t" + "1: \n\t" + "wldrd wr0, [%[pixels]] \n\t" + "subs %[h], %[h], #2 \n\t" + "wldrd wr1, [%[pixels], #8] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "wldrd wr3, [r4] \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "wldrd wr4, [r4, #8] \n\t" + "add r4, r4, %[line_size] \n\t" + "walignr1 wr8, wr0, wr1 \n\t" + "wldrd wr0, [%[block]] \n\t" + "wldrd wr2, [r5] \n\t" + "pld [r4] \n\t" + "pld [r4, #32] \n\t" + "walignr1 wr10, wr3, wr4 \n\t" + WAVG2B" wr8, wr8, wr0 \n\t" + WAVG2B" wr10, wr10, wr2 \n\t" + "wstrd wr8, [%[block]] \n\t" + "add %[block], %[block], %[line_size] \n\t" + "wstrd wr10, [r5] \n\t" + "pld [%[block]] \n\t" + "pld [%[block], #32] \n\t" + "add r5, r5, %[line_size] \n\t" + "pld [r5] \n\t" + "pld [r5, #32] \n\t" + "bne 1b \n\t" + : [block]"+r"(block), [pixels]"+r"(pixels), [line_size]"+r"(stride), [h]"+r"(h) + : + : "memory", "r4", "r5", "r12"); +} + +void DEF(put, pixels16)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + int stride = line_size; + __asm__ __volatile__ ( + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + "add r4, %[pixels], %[line_size] \n\t" + "add r5, %[block], %[line_size] \n\t" + "mov %[line_size], %[line_size], lsl #1 \n\t" + "1: \n\t" + "wldrd wr0, [%[pixels]] \n\t" + "wldrd wr1, [%[pixels], #8] \n\t" + "subs %[h], %[h], #2 \n\t" + "wldrd wr2, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "wldrd wr3, [r4] \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr8, wr0, wr1 \n\t" + "wldrd wr4, [r4, #8] \n\t" + "walignr1 wr9, wr1, wr2 \n\t" + "wldrd wr5, [r4, #16] \n\t" + "add r4, r4, %[line_size] \n\t" + "pld [r4] \n\t" + "pld [r4, #32] \n\t" + "walignr1 wr10, wr3, wr4 \n\t" + "wstrd wr8, [%[block]] \n\t" + "walignr1 wr11, wr4, wr5 \n\t" + "wstrd wr9, [%[block], #8] \n\t" + "add %[block], %[block], %[line_size] \n\t" + "wstrd wr10, [r5] \n\t" + "wstrd wr11, [r5, #8] \n\t" + "add r5, r5, %[line_size] \n\t" + "bne 1b \n\t" + : [block]"+r"(block), [pixels]"+r"(pixels), [line_size]"+r"(stride), [h]"+r"(h) + : + : "memory", "r4", "r5", "r12"); +} + +void DEF(avg, pixels16)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + int stride = line_size; + __asm__ __volatile__ ( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "pld [%[block]] \n\t" + "pld [%[block], #32] \n\t" + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + "add r4, %[pixels], %[line_size]\n\t" + "add r5, %[block], %[line_size] \n\t" + "mov %[line_size], %[line_size], lsl #1 \n\t" + "1: \n\t" + "wldrd wr0, [%[pixels]] \n\t" + "wldrd wr1, [%[pixels], #8] \n\t" + "subs %[h], %[h], #2 \n\t" + "wldrd wr2, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "wldrd wr3, [r4] \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr8, wr0, wr1 \n\t" + "wldrd wr4, [r4, #8] \n\t" + "walignr1 wr9, wr1, wr2 \n\t" + "wldrd wr5, [r4, #16] \n\t" + "add r4, r4, %[line_size] \n\t" + "wldrd wr0, [%[block]] \n\t" + "pld [r4] \n\t" + "wldrd wr1, [%[block], #8] \n\t" + "pld [r4, #32] \n\t" + "wldrd wr2, [r5] \n\t" + "walignr1 wr10, wr3, wr4 \n\t" + "wldrd wr3, [r5, #8] \n\t" + WAVG2B" wr8, wr8, wr0 \n\t" + WAVG2B" wr9, wr9, wr1 \n\t" + WAVG2B" wr10, wr10, wr2 \n\t" + "wstrd wr8, [%[block]] \n\t" + "walignr1 wr11, wr4, wr5 \n\t" + WAVG2B" wr11, wr11, wr3 \n\t" + "wstrd wr9, [%[block], #8] \n\t" + "add %[block], %[block], %[line_size] \n\t" + "wstrd wr10, [r5] \n\t" + "pld [%[block]] \n\t" + "pld [%[block], #32] \n\t" + "wstrd wr11, [r5, #8] \n\t" + "add r5, r5, %[line_size] \n\t" + "pld [r5] \n\t" + "pld [r5, #32] \n\t" + "bne 1b \n\t" + : [block]"+r"(block), [pixels]"+r"(pixels), [line_size]"+r"(stride), [h]"+r"(h) + : + : "memory", "r4", "r5", "r12"); +} + +void DEF(put, pixels8_x2)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + int stride = line_size; + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version + __asm__ __volatile__( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + "add r12, r12, #1 \n\t" + "add r4, %[pixels], %[line_size]\n\t" + "tmcr wcgr2, r12 \n\t" + "add r5, %[block], %[line_size] \n\t" + "mov %[line_size], %[line_size], lsl #1 \n\t" + + "1: \n\t" + "wldrd wr10, [%[pixels]] \n\t" + "cmp r12, #8 \n\t" + "wldrd wr11, [%[pixels], #8] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "wldrd wr13, [r4] \n\t" + "pld [%[pixels]] \n\t" + "wldrd wr14, [r4, #8] \n\t" + "pld [%[pixels], #32] \n\t" + "add r4, r4, %[line_size] \n\t" + "walignr1 wr0, wr10, wr11 \n\t" + "pld [r4] \n\t" + "pld [r4, #32] \n\t" + "walignr1 wr2, wr13, wr14 \n\t" + "wmoveq wr4, wr11 \n\t" + "wmoveq wr6, wr14 \n\t" + "walignr2ne wr4, wr10, wr11 \n\t" + "walignr2ne wr6, wr13, wr14 \n\t" + WAVG2B" wr0, wr0, wr4 \n\t" + WAVG2B" wr2, wr2, wr6 \n\t" + "wstrd wr0, [%[block]] \n\t" + "subs %[h], %[h], #2 \n\t" + "wstrd wr2, [r5] \n\t" + "add %[block], %[block], %[line_size] \n\t" + "add r5, r5, %[line_size] \n\t" + "bne 1b \n\t" + : [h]"+r"(h), [pixels]"+r"(pixels), [block]"+r"(block), [line_size]"+r"(stride) + : + : "r4", "r5", "r12", "memory"); +} + +void DEF(put, pixels16_x2)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + int stride = line_size; + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version + __asm__ __volatile__( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + "add r12, r12, #1 \n\t" + "add r4, %[pixels], %[line_size]\n\t" + "tmcr wcgr2, r12 \n\t" + "add r5, %[block], %[line_size] \n\t" + "mov %[line_size], %[line_size], lsl #1 \n\t" + + "1: \n\t" + "wldrd wr10, [%[pixels]] \n\t" + "cmp r12, #8 \n\t" + "wldrd wr11, [%[pixels], #8] \n\t" + "wldrd wr12, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "wldrd wr13, [r4] \n\t" + "pld [%[pixels]] \n\t" + "wldrd wr14, [r4, #8] \n\t" + "pld [%[pixels], #32] \n\t" + "wldrd wr15, [r4, #16] \n\t" + "add r4, r4, %[line_size] \n\t" + "walignr1 wr0, wr10, wr11 \n\t" + "pld [r4] \n\t" + "pld [r4, #32] \n\t" + "walignr1 wr1, wr11, wr12 \n\t" + "walignr1 wr2, wr13, wr14 \n\t" + "walignr1 wr3, wr14, wr15 \n\t" + "wmoveq wr4, wr11 \n\t" + "wmoveq wr5, wr12 \n\t" + "wmoveq wr6, wr14 \n\t" + "wmoveq wr7, wr15 \n\t" + "walignr2ne wr4, wr10, wr11 \n\t" + "walignr2ne wr5, wr11, wr12 \n\t" + "walignr2ne wr6, wr13, wr14 \n\t" + "walignr2ne wr7, wr14, wr15 \n\t" + WAVG2B" wr0, wr0, wr4 \n\t" + WAVG2B" wr1, wr1, wr5 \n\t" + "wstrd wr0, [%[block]] \n\t" + WAVG2B" wr2, wr2, wr6 \n\t" + "wstrd wr1, [%[block], #8] \n\t" + WAVG2B" wr3, wr3, wr7 \n\t" + "add %[block], %[block], %[line_size] \n\t" + "wstrd wr2, [r5] \n\t" + "subs %[h], %[h], #2 \n\t" + "wstrd wr3, [r5, #8] \n\t" + "add r5, r5, %[line_size] \n\t" + "bne 1b \n\t" + : [h]"+r"(h), [pixels]"+r"(pixels), [block]"+r"(block), [line_size]"+r"(stride) + : + : "r4", "r5", "r12", "memory"); +} + +void DEF(avg, pixels8_x2)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + int stride = line_size; + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version + __asm__ __volatile__( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "pld [%[block]] \n\t" + "pld [%[block], #32] \n\t" + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + "add r12, r12, #1 \n\t" + "add r4, %[pixels], %[line_size]\n\t" + "tmcr wcgr2, r12 \n\t" + "add r5, %[block], %[line_size] \n\t" + "mov %[line_size], %[line_size], lsl #1 \n\t" + "pld [r5] \n\t" + "pld [r5, #32] \n\t" + + "1: \n\t" + "wldrd wr10, [%[pixels]] \n\t" + "cmp r12, #8 \n\t" + "wldrd wr11, [%[pixels], #8] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "wldrd wr13, [r4] \n\t" + "pld [%[pixels]] \n\t" + "wldrd wr14, [r4, #8] \n\t" + "pld [%[pixels], #32] \n\t" + "add r4, r4, %[line_size] \n\t" + "walignr1 wr0, wr10, wr11 \n\t" + "pld [r4] \n\t" + "pld [r4, #32] \n\t" + "walignr1 wr2, wr13, wr14 \n\t" + "wmoveq wr4, wr11 \n\t" + "wmoveq wr6, wr14 \n\t" + "walignr2ne wr4, wr10, wr11 \n\t" + "wldrd wr10, [%[block]] \n\t" + "walignr2ne wr6, wr13, wr14 \n\t" + "wldrd wr12, [r5] \n\t" + WAVG2B" wr0, wr0, wr4 \n\t" + WAVG2B" wr2, wr2, wr6 \n\t" + WAVG2B" wr0, wr0, wr10 \n\t" + WAVG2B" wr2, wr2, wr12 \n\t" + "wstrd wr0, [%[block]] \n\t" + "subs %[h], %[h], #2 \n\t" + "wstrd wr2, [r5] \n\t" + "add %[block], %[block], %[line_size] \n\t" + "add r5, r5, %[line_size] \n\t" + "pld [%[block]] \n\t" + "pld [%[block], #32] \n\t" + "pld [r5] \n\t" + "pld [r5, #32] \n\t" + "bne 1b \n\t" + : [h]"+r"(h), [pixels]"+r"(pixels), [block]"+r"(block), [line_size]"+r"(stride) + : + : "r4", "r5", "r12", "memory"); +} + +void DEF(avg, pixels16_x2)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + int stride = line_size; + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version + __asm__ __volatile__( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "pld [%[block]] \n\t" + "pld [%[block], #32] \n\t" + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + "add r12, r12, #1 \n\t" + "add r4, %[pixels], %[line_size]\n\t" + "tmcr wcgr2, r12 \n\t" + "add r5, %[block], %[line_size] \n\t" + "mov %[line_size], %[line_size], lsl #1 \n\t" + "pld [r5] \n\t" + "pld [r5, #32] \n\t" + + "1: \n\t" + "wldrd wr10, [%[pixels]] \n\t" + "cmp r12, #8 \n\t" + "wldrd wr11, [%[pixels], #8] \n\t" + "wldrd wr12, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "wldrd wr13, [r4] \n\t" + "pld [%[pixels]] \n\t" + "wldrd wr14, [r4, #8] \n\t" + "pld [%[pixels], #32] \n\t" + "wldrd wr15, [r4, #16] \n\t" + "add r4, r4, %[line_size] \n\t" + "walignr1 wr0, wr10, wr11 \n\t" + "pld [r4] \n\t" + "pld [r4, #32] \n\t" + "walignr1 wr1, wr11, wr12 \n\t" + "walignr1 wr2, wr13, wr14 \n\t" + "walignr1 wr3, wr14, wr15 \n\t" + "wmoveq wr4, wr11 \n\t" + "wmoveq wr5, wr12 \n\t" + "wmoveq wr6, wr14 \n\t" + "wmoveq wr7, wr15 \n\t" + "walignr2ne wr4, wr10, wr11 \n\t" + "walignr2ne wr5, wr11, wr12 \n\t" + "walignr2ne wr6, wr13, wr14 \n\t" + "walignr2ne wr7, wr14, wr15 \n\t" + "wldrd wr10, [%[block]] \n\t" + WAVG2B" wr0, wr0, wr4 \n\t" + "wldrd wr11, [%[block], #8] \n\t" + WAVG2B" wr1, wr1, wr5 \n\t" + "wldrd wr12, [r5] \n\t" + WAVG2B" wr2, wr2, wr6 \n\t" + "wldrd wr13, [r5, #8] \n\t" + WAVG2B" wr3, wr3, wr7 \n\t" + WAVG2B" wr0, wr0, wr10 \n\t" + WAVG2B" wr1, wr1, wr11 \n\t" + WAVG2B" wr2, wr2, wr12 \n\t" + WAVG2B" wr3, wr3, wr13 \n\t" + "wstrd wr0, [%[block]] \n\t" + "subs %[h], %[h], #2 \n\t" + "wstrd wr1, [%[block], #8] \n\t" + "add %[block], %[block], %[line_size] \n\t" + "wstrd wr2, [r5] \n\t" + "pld [%[block]] \n\t" + "wstrd wr3, [r5, #8] \n\t" + "add r5, r5, %[line_size] \n\t" + "pld [%[block], #32] \n\t" + "pld [r5] \n\t" + "pld [r5, #32] \n\t" + "bne 1b \n\t" + : [h]"+r"(h), [pixels]"+r"(pixels), [block]"+r"(block), [line_size]"+r"(stride) + : + :"r4", "r5", "r12", "memory"); +} + +void DEF(avg, pixels8_y2)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + int stride = line_size; + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + __asm__ __volatile__( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "and r12, %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + + "wldrd wr10, [%[pixels]] \n\t" + "wldrd wr11, [%[pixels], #8] \n\t" + "pld [%[block]] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "walignr1 wr0, wr10, wr11 \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + + "1: \n\t" + "wldrd wr10, [%[pixels]] \n\t" + "wldrd wr11, [%[pixels], #8] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr4, wr10, wr11 \n\t" + "wldrd wr10, [%[block]] \n\t" + WAVG2B" wr8, wr0, wr4 \n\t" + WAVG2B" wr8, wr8, wr10 \n\t" + "wstrd wr8, [%[block]] \n\t" + "add %[block], %[block], %[line_size] \n\t" + + "wldrd wr10, [%[pixels]] \n\t" + "wldrd wr11, [%[pixels], #8] \n\t" + "pld [%[block]] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr0, wr10, wr11 \n\t" + "wldrd wr10, [%[block]] \n\t" + WAVG2B" wr8, wr0, wr4 \n\t" + WAVG2B" wr8, wr8, wr10 \n\t" + "wstrd wr8, [%[block]] \n\t" + "add %[block], %[block], %[line_size] \n\t" + + "subs %[h], %[h], #2 \n\t" + "pld [%[block]] \n\t" + "bne 1b \n\t" + : [h]"+r"(h), [pixels]"+r"(pixels), [block]"+r"(block), [line_size]"+r"(stride) + : + : "cc", "memory", "r12"); +} + +void DEF(put, pixels16_y2)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + int stride = line_size; + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + __asm__ __volatile__( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "and r12, %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + + "wldrd wr10, [%[pixels]] \n\t" + "wldrd wr11, [%[pixels], #8] \n\t" + "wldrd wr12, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr0, wr10, wr11 \n\t" + "walignr1 wr1, wr11, wr12 \n\t" + + "1: \n\t" + "wldrd wr10, [%[pixels]] \n\t" + "wldrd wr11, [%[pixels], #8] \n\t" + "wldrd wr12, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr4, wr10, wr11 \n\t" + "walignr1 wr5, wr11, wr12 \n\t" + WAVG2B" wr8, wr0, wr4 \n\t" + WAVG2B" wr9, wr1, wr5 \n\t" + "wstrd wr8, [%[block]] \n\t" + "wstrd wr9, [%[block], #8] \n\t" + "add %[block], %[block], %[line_size] \n\t" + + "wldrd wr10, [%[pixels]] \n\t" + "wldrd wr11, [%[pixels], #8] \n\t" + "wldrd wr12, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr0, wr10, wr11 \n\t" + "walignr1 wr1, wr11, wr12 \n\t" + WAVG2B" wr8, wr0, wr4 \n\t" + WAVG2B" wr9, wr1, wr5 \n\t" + "wstrd wr8, [%[block]] \n\t" + "wstrd wr9, [%[block], #8] \n\t" + "add %[block], %[block], %[line_size] \n\t" + + "subs %[h], %[h], #2 \n\t" + "bne 1b \n\t" + : [h]"+r"(h), [pixels]"+r"(pixels), [block]"+r"(block), [line_size]"+r"(stride) + : + : "r4", "r5", "r12", "memory"); +} + +void DEF(avg, pixels16_y2)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + int stride = line_size; + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + __asm__ __volatile__( + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "and r12, %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + + "wldrd wr10, [%[pixels]] \n\t" + "wldrd wr11, [%[pixels], #8] \n\t" + "pld [%[block]] \n\t" + "wldrd wr12, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr0, wr10, wr11 \n\t" + "walignr1 wr1, wr11, wr12 \n\t" + + "1: \n\t" + "wldrd wr10, [%[pixels]] \n\t" + "wldrd wr11, [%[pixels], #8] \n\t" + "wldrd wr12, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr4, wr10, wr11 \n\t" + "walignr1 wr5, wr11, wr12 \n\t" + "wldrd wr10, [%[block]] \n\t" + "wldrd wr11, [%[block], #8] \n\t" + WAVG2B" wr8, wr0, wr4 \n\t" + WAVG2B" wr9, wr1, wr5 \n\t" + WAVG2B" wr8, wr8, wr10 \n\t" + WAVG2B" wr9, wr9, wr11 \n\t" + "wstrd wr8, [%[block]] \n\t" + "wstrd wr9, [%[block], #8] \n\t" + "add %[block], %[block], %[line_size] \n\t" + + "wldrd wr10, [%[pixels]] \n\t" + "wldrd wr11, [%[pixels], #8] \n\t" + "pld [%[block]] \n\t" + "wldrd wr12, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr0, wr10, wr11 \n\t" + "walignr1 wr1, wr11, wr12 \n\t" + "wldrd wr10, [%[block]] \n\t" + "wldrd wr11, [%[block], #8] \n\t" + WAVG2B" wr8, wr0, wr4 \n\t" + WAVG2B" wr9, wr1, wr5 \n\t" + WAVG2B" wr8, wr8, wr10 \n\t" + WAVG2B" wr9, wr9, wr11 \n\t" + "wstrd wr8, [%[block]] \n\t" + "wstrd wr9, [%[block], #8] \n\t" + "add %[block], %[block], %[line_size] \n\t" + + "subs %[h], %[h], #2 \n\t" + "pld [%[block]] \n\t" + "bne 1b \n\t" + : [h]"+r"(h), [pixels]"+r"(pixels), [block]"+r"(block), [line_size]"+r"(stride) + : + : "r4", "r5", "r12", "memory"); +} + +void DEF(put, pixels8_xy2)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version + __asm__ __volatile__( + "pld [%[pixels]] \n\t" + "mov r12, #2 \n\t" + "pld [%[pixels], #32] \n\t" + "tmcr wcgr0, r12 \n\t" /* for shift value */ + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + + // [wr0 wr1 wr2 wr3] <= * + // [wr4 wr5 wr6 wr7] + "wldrd wr12, [%[pixels]] \n\t" + "add r12, r12, #1 \n\t" + "wldrd wr13, [%[pixels], #8] \n\t" + "tmcr wcgr2, r12 \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "cmp r12, #8 \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr2, wr12, wr13 \n\t" + "wmoveq wr10, wr13 \n\t" + "walignr2ne wr10, wr12, wr13 \n\t" + "wunpckelub wr0, wr2 \n\t" + "wunpckehub wr1, wr2 \n\t" + "wunpckelub wr8, wr10 \n\t" + "wunpckehub wr9, wr10 \n\t" + "waddhus wr0, wr0, wr8 \n\t" + "waddhus wr1, wr1, wr9 \n\t" + + "1: \n\t" + // [wr0 wr1 wr2 wr3] + // [wr4 wr5 wr6 wr7] <= * + "wldrd wr12, [%[pixels]] \n\t" + "cmp r12, #8 \n\t" + "wldrd wr13, [%[pixels], #8] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "walignr1 wr6, wr12, wr13 \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "wmoveq wr10, wr13 \n\t" + "walignr2ne wr10, wr12, wr13 \n\t" + "wunpckelub wr4, wr6 \n\t" + "wunpckehub wr5, wr6 \n\t" + "wunpckelub wr8, wr10 \n\t" + "wunpckehub wr9, wr10 \n\t" + "waddhus wr4, wr4, wr8 \n\t" + "waddhus wr5, wr5, wr9 \n\t" + "waddhus wr8, wr0, wr4 \n\t" + "waddhus wr9, wr1, wr5 \n\t" + "waddhus wr8, wr8, wr15 \n\t" + "waddhus wr9, wr9, wr15 \n\t" + "wsrlhg wr8, wr8, wcgr0 \n\t" + "wsrlhg wr9, wr9, wcgr0 \n\t" + "wpackhus wr8, wr8, wr9 \n\t" + "wstrd wr8, [%[block]] \n\t" + "add %[block], %[block], %[line_size] \n\t" + + // [wr0 wr1 wr2 wr3] <= * + // [wr4 wr5 wr6 wr7] + "wldrd wr12, [%[pixels]] \n\t" + "wldrd wr13, [%[pixels], #8] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "walignr1 wr2, wr12, wr13 \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "wmoveq wr10, wr13 \n\t" + "walignr2ne wr10, wr12, wr13 \n\t" + "wunpckelub wr0, wr2 \n\t" + "wunpckehub wr1, wr2 \n\t" + "wunpckelub wr8, wr10 \n\t" + "wunpckehub wr9, wr10 \n\t" + "waddhus wr0, wr0, wr8 \n\t" + "waddhus wr1, wr1, wr9 \n\t" + "waddhus wr8, wr0, wr4 \n\t" + "waddhus wr9, wr1, wr5 \n\t" + "waddhus wr8, wr8, wr15 \n\t" + "waddhus wr9, wr9, wr15 \n\t" + "wsrlhg wr8, wr8, wcgr0 \n\t" + "wsrlhg wr9, wr9, wcgr0 \n\t" + "wpackhus wr8, wr8, wr9 \n\t" + "subs %[h], %[h], #2 \n\t" + "wstrd wr8, [%[block]] \n\t" + "add %[block], %[block], %[line_size] \n\t" + "bne 1b \n\t" + : [h]"+r"(h), [pixels]"+r"(pixels), [block]"+r"(block) + : [line_size]"r"(line_size) + : "r12", "memory"); +} + +void DEF(put, pixels16_xy2)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version + __asm__ __volatile__( + "pld [%[pixels]] \n\t" + "mov r12, #2 \n\t" + "pld [%[pixels], #32] \n\t" + "tmcr wcgr0, r12 \n\t" /* for shift value */ + /* alignment */ + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + "add r12, r12, #1 \n\t" + "tmcr wcgr2, r12 \n\t" + + // [wr0 wr1 wr2 wr3] <= * + // [wr4 wr5 wr6 wr7] + "wldrd wr12, [%[pixels]] \n\t" + "cmp r12, #8 \n\t" + "wldrd wr13, [%[pixels], #8] \n\t" + "wldrd wr14, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "pld [%[pixels]] \n\t" + "walignr1 wr2, wr12, wr13 \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr3, wr13, wr14 \n\t" + "wmoveq wr10, wr13 \n\t" + "wmoveq wr11, wr14 \n\t" + "walignr2ne wr10, wr12, wr13 \n\t" + "walignr2ne wr11, wr13, wr14 \n\t" + "wunpckelub wr0, wr2 \n\t" + "wunpckehub wr1, wr2 \n\t" + "wunpckelub wr2, wr3 \n\t" + "wunpckehub wr3, wr3 \n\t" + "wunpckelub wr8, wr10 \n\t" + "wunpckehub wr9, wr10 \n\t" + "wunpckelub wr10, wr11 \n\t" + "wunpckehub wr11, wr11 \n\t" + "waddhus wr0, wr0, wr8 \n\t" + "waddhus wr1, wr1, wr9 \n\t" + "waddhus wr2, wr2, wr10 \n\t" + "waddhus wr3, wr3, wr11 \n\t" + + "1: \n\t" + // [wr0 wr1 wr2 wr3] + // [wr4 wr5 wr6 wr7] <= * + "wldrd wr12, [%[pixels]] \n\t" + "cmp r12, #8 \n\t" + "wldrd wr13, [%[pixels], #8] \n\t" + "wldrd wr14, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "walignr1 wr6, wr12, wr13 \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr7, wr13, wr14 \n\t" + "wmoveq wr10, wr13 \n\t" + "wmoveq wr11, wr14 \n\t" + "walignr2ne wr10, wr12, wr13 \n\t" + "walignr2ne wr11, wr13, wr14 \n\t" + "wunpckelub wr4, wr6 \n\t" + "wunpckehub wr5, wr6 \n\t" + "wunpckelub wr6, wr7 \n\t" + "wunpckehub wr7, wr7 \n\t" + "wunpckelub wr8, wr10 \n\t" + "wunpckehub wr9, wr10 \n\t" + "wunpckelub wr10, wr11 \n\t" + "wunpckehub wr11, wr11 \n\t" + "waddhus wr4, wr4, wr8 \n\t" + "waddhus wr5, wr5, wr9 \n\t" + "waddhus wr6, wr6, wr10 \n\t" + "waddhus wr7, wr7, wr11 \n\t" + "waddhus wr8, wr0, wr4 \n\t" + "waddhus wr9, wr1, wr5 \n\t" + "waddhus wr10, wr2, wr6 \n\t" + "waddhus wr11, wr3, wr7 \n\t" + "waddhus wr8, wr8, wr15 \n\t" + "waddhus wr9, wr9, wr15 \n\t" + "waddhus wr10, wr10, wr15 \n\t" + "waddhus wr11, wr11, wr15 \n\t" + "wsrlhg wr8, wr8, wcgr0 \n\t" + "wsrlhg wr9, wr9, wcgr0 \n\t" + "wsrlhg wr10, wr10, wcgr0 \n\t" + "wsrlhg wr11, wr11, wcgr0 \n\t" + "wpackhus wr8, wr8, wr9 \n\t" + "wpackhus wr9, wr10, wr11 \n\t" + "wstrd wr8, [%[block]] \n\t" + "wstrd wr9, [%[block], #8] \n\t" + "add %[block], %[block], %[line_size] \n\t" + + // [wr0 wr1 wr2 wr3] <= * + // [wr4 wr5 wr6 wr7] + "wldrd wr12, [%[pixels]] \n\t" + "wldrd wr13, [%[pixels], #8] \n\t" + "wldrd wr14, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "walignr1 wr2, wr12, wr13 \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr3, wr13, wr14 \n\t" + "wmoveq wr10, wr13 \n\t" + "wmoveq wr11, wr14 \n\t" + "walignr2ne wr10, wr12, wr13 \n\t" + "walignr2ne wr11, wr13, wr14 \n\t" + "wunpckelub wr0, wr2 \n\t" + "wunpckehub wr1, wr2 \n\t" + "wunpckelub wr2, wr3 \n\t" + "wunpckehub wr3, wr3 \n\t" + "wunpckelub wr8, wr10 \n\t" + "wunpckehub wr9, wr10 \n\t" + "wunpckelub wr10, wr11 \n\t" + "wunpckehub wr11, wr11 \n\t" + "waddhus wr0, wr0, wr8 \n\t" + "waddhus wr1, wr1, wr9 \n\t" + "waddhus wr2, wr2, wr10 \n\t" + "waddhus wr3, wr3, wr11 \n\t" + "waddhus wr8, wr0, wr4 \n\t" + "waddhus wr9, wr1, wr5 \n\t" + "waddhus wr10, wr2, wr6 \n\t" + "waddhus wr11, wr3, wr7 \n\t" + "waddhus wr8, wr8, wr15 \n\t" + "waddhus wr9, wr9, wr15 \n\t" + "waddhus wr10, wr10, wr15 \n\t" + "waddhus wr11, wr11, wr15 \n\t" + "wsrlhg wr8, wr8, wcgr0 \n\t" + "wsrlhg wr9, wr9, wcgr0 \n\t" + "wsrlhg wr10, wr10, wcgr0 \n\t" + "wsrlhg wr11, wr11, wcgr0 \n\t" + "wpackhus wr8, wr8, wr9 \n\t" + "wpackhus wr9, wr10, wr11 \n\t" + "wstrd wr8, [%[block]] \n\t" + "wstrd wr9, [%[block], #8] \n\t" + "add %[block], %[block], %[line_size] \n\t" + + "subs %[h], %[h], #2 \n\t" + "bne 1b \n\t" + : [h]"+r"(h), [pixels]"+r"(pixels), [block]"+r"(block) + : [line_size]"r"(line_size) + : "r12", "memory"); +} + +void DEF(avg, pixels8_xy2)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version + __asm__ __volatile__( + "pld [%[block]] \n\t" + "pld [%[block], #32] \n\t" + "pld [%[pixels]] \n\t" + "mov r12, #2 \n\t" + "pld [%[pixels], #32] \n\t" + "tmcr wcgr0, r12 \n\t" /* for shift value */ + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + + // [wr0 wr1 wr2 wr3] <= * + // [wr4 wr5 wr6 wr7] + "wldrd wr12, [%[pixels]] \n\t" + "add r12, r12, #1 \n\t" + "wldrd wr13, [%[pixels], #8] \n\t" + "tmcr wcgr2, r12 \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "cmp r12, #8 \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr2, wr12, wr13 \n\t" + "wmoveq wr10, wr13 \n\t" + "walignr2ne wr10, wr12, wr13 \n\t" + "wunpckelub wr0, wr2 \n\t" + "wunpckehub wr1, wr2 \n\t" + "wunpckelub wr8, wr10 \n\t" + "wunpckehub wr9, wr10 \n\t" + "waddhus wr0, wr0, wr8 \n\t" + "waddhus wr1, wr1, wr9 \n\t" + + "1: \n\t" + // [wr0 wr1 wr2 wr3] + // [wr4 wr5 wr6 wr7] <= * + "wldrd wr12, [%[pixels]] \n\t" + "cmp r12, #8 \n\t" + "wldrd wr13, [%[pixels], #8] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "walignr1 wr6, wr12, wr13 \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "wmoveq wr10, wr13 \n\t" + "walignr2ne wr10, wr12, wr13 \n\t" + "wunpckelub wr4, wr6 \n\t" + "wunpckehub wr5, wr6 \n\t" + "wunpckelub wr8, wr10 \n\t" + "wunpckehub wr9, wr10 \n\t" + "waddhus wr4, wr4, wr8 \n\t" + "waddhus wr5, wr5, wr9 \n\t" + "waddhus wr8, wr0, wr4 \n\t" + "waddhus wr9, wr1, wr5 \n\t" + "waddhus wr8, wr8, wr15 \n\t" + "waddhus wr9, wr9, wr15 \n\t" + "wldrd wr12, [%[block]] \n\t" + "wsrlhg wr8, wr8, wcgr0 \n\t" + "wsrlhg wr9, wr9, wcgr0 \n\t" + "wpackhus wr8, wr8, wr9 \n\t" + WAVG2B" wr8, wr8, wr12 \n\t" + "wstrd wr8, [%[block]] \n\t" + "add %[block], %[block], %[line_size] \n\t" + "wldrd wr12, [%[pixels]] \n\t" + "pld [%[block]] \n\t" + "pld [%[block], #32] \n\t" + + // [wr0 wr1 wr2 wr3] <= * + // [wr4 wr5 wr6 wr7] + "wldrd wr13, [%[pixels], #8] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "walignr1 wr2, wr12, wr13 \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "wmoveq wr10, wr13 \n\t" + "walignr2ne wr10, wr12, wr13 \n\t" + "wunpckelub wr0, wr2 \n\t" + "wunpckehub wr1, wr2 \n\t" + "wunpckelub wr8, wr10 \n\t" + "wunpckehub wr9, wr10 \n\t" + "waddhus wr0, wr0, wr8 \n\t" + "waddhus wr1, wr1, wr9 \n\t" + "waddhus wr8, wr0, wr4 \n\t" + "waddhus wr9, wr1, wr5 \n\t" + "waddhus wr8, wr8, wr15 \n\t" + "waddhus wr9, wr9, wr15 \n\t" + "wldrd wr12, [%[block]] \n\t" + "wsrlhg wr8, wr8, wcgr0 \n\t" + "wsrlhg wr9, wr9, wcgr0 \n\t" + "wpackhus wr8, wr8, wr9 \n\t" + "subs %[h], %[h], #2 \n\t" + WAVG2B" wr8, wr8, wr12 \n\t" + "wstrd wr8, [%[block]] \n\t" + "add %[block], %[block], %[line_size] \n\t" + "pld [%[block]] \n\t" + "pld [%[block], #32] \n\t" + "bne 1b \n\t" + : [h]"+r"(h), [pixels]"+r"(pixels), [block]"+r"(block) + : [line_size]"r"(line_size) + : "r12", "memory"); +} + +void DEF(avg, pixels16_xy2)(uint8_t *block, const uint8_t *pixels, const int line_size, int h) +{ + // [wr0 wr1 wr2 wr3] for previous line + // [wr4 wr5 wr6 wr7] for current line + SET_RND(wr15); // =2 for rnd and =1 for no_rnd version + __asm__ __volatile__( + "pld [%[block]] \n\t" + "pld [%[block], #32] \n\t" + "pld [%[pixels]] \n\t" + "mov r12, #2 \n\t" + "pld [%[pixels], #32] \n\t" + "tmcr wcgr0, r12 \n\t" /* for shift value */ + /* alignment */ + "and r12, %[pixels], #7 \n\t" + "bic %[pixels], %[pixels], #7 \n\t" + "tmcr wcgr1, r12 \n\t" + "add r12, r12, #1 \n\t" + "tmcr wcgr2, r12 \n\t" + + // [wr0 wr1 wr2 wr3] <= * + // [wr4 wr5 wr6 wr7] + "wldrd wr12, [%[pixels]] \n\t" + "cmp r12, #8 \n\t" + "wldrd wr13, [%[pixels], #8] \n\t" + "wldrd wr14, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "pld [%[pixels]] \n\t" + "walignr1 wr2, wr12, wr13 \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr3, wr13, wr14 \n\t" + "wmoveq wr10, wr13 \n\t" + "wmoveq wr11, wr14 \n\t" + "walignr2ne wr10, wr12, wr13 \n\t" + "walignr2ne wr11, wr13, wr14 \n\t" + "wunpckelub wr0, wr2 \n\t" + "wunpckehub wr1, wr2 \n\t" + "wunpckelub wr2, wr3 \n\t" + "wunpckehub wr3, wr3 \n\t" + "wunpckelub wr8, wr10 \n\t" + "wunpckehub wr9, wr10 \n\t" + "wunpckelub wr10, wr11 \n\t" + "wunpckehub wr11, wr11 \n\t" + "waddhus wr0, wr0, wr8 \n\t" + "waddhus wr1, wr1, wr9 \n\t" + "waddhus wr2, wr2, wr10 \n\t" + "waddhus wr3, wr3, wr11 \n\t" + + "1: \n\t" + // [wr0 wr1 wr2 wr3] + // [wr4 wr5 wr6 wr7] <= * + "wldrd wr12, [%[pixels]] \n\t" + "cmp r12, #8 \n\t" + "wldrd wr13, [%[pixels], #8] \n\t" + "wldrd wr14, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "walignr1 wr6, wr12, wr13 \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr7, wr13, wr14 \n\t" + "wmoveq wr10, wr13 \n\t" + "wmoveq wr11, wr14 \n\t" + "walignr2ne wr10, wr12, wr13 \n\t" + "walignr2ne wr11, wr13, wr14 \n\t" + "wunpckelub wr4, wr6 \n\t" + "wunpckehub wr5, wr6 \n\t" + "wunpckelub wr6, wr7 \n\t" + "wunpckehub wr7, wr7 \n\t" + "wunpckelub wr8, wr10 \n\t" + "wunpckehub wr9, wr10 \n\t" + "wunpckelub wr10, wr11 \n\t" + "wunpckehub wr11, wr11 \n\t" + "waddhus wr4, wr4, wr8 \n\t" + "waddhus wr5, wr5, wr9 \n\t" + "waddhus wr6, wr6, wr10 \n\t" + "waddhus wr7, wr7, wr11 \n\t" + "waddhus wr8, wr0, wr4 \n\t" + "waddhus wr9, wr1, wr5 \n\t" + "waddhus wr10, wr2, wr6 \n\t" + "waddhus wr11, wr3, wr7 \n\t" + "waddhus wr8, wr8, wr15 \n\t" + "waddhus wr9, wr9, wr15 \n\t" + "waddhus wr10, wr10, wr15 \n\t" + "waddhus wr11, wr11, wr15 \n\t" + "wsrlhg wr8, wr8, wcgr0 \n\t" + "wsrlhg wr9, wr9, wcgr0 \n\t" + "wldrd wr12, [%[block]] \n\t" + "wldrd wr13, [%[block], #8] \n\t" + "wsrlhg wr10, wr10, wcgr0 \n\t" + "wsrlhg wr11, wr11, wcgr0 \n\t" + "wpackhus wr8, wr8, wr9 \n\t" + "wpackhus wr9, wr10, wr11 \n\t" + WAVG2B" wr8, wr8, wr12 \n\t" + WAVG2B" wr9, wr9, wr13 \n\t" + "wstrd wr8, [%[block]] \n\t" + "wstrd wr9, [%[block], #8] \n\t" + "add %[block], %[block], %[line_size] \n\t" + + // [wr0 wr1 wr2 wr3] <= * + // [wr4 wr5 wr6 wr7] + "wldrd wr12, [%[pixels]] \n\t" + "pld [%[block]] \n\t" + "wldrd wr13, [%[pixels], #8] \n\t" + "pld [%[block], #32] \n\t" + "wldrd wr14, [%[pixels], #16] \n\t" + "add %[pixels], %[pixels], %[line_size] \n\t" + "walignr1 wr2, wr12, wr13 \n\t" + "pld [%[pixels]] \n\t" + "pld [%[pixels], #32] \n\t" + "walignr1 wr3, wr13, wr14 \n\t" + "wmoveq wr10, wr13 \n\t" + "wmoveq wr11, wr14 \n\t" + "walignr2ne wr10, wr12, wr13 \n\t" + "walignr2ne wr11, wr13, wr14 \n\t" + "wunpckelub wr0, wr2 \n\t" + "wunpckehub wr1, wr2 \n\t" + "wunpckelub wr2, wr3 \n\t" + "wunpckehub wr3, wr3 \n\t" + "wunpckelub wr8, wr10 \n\t" + "wunpckehub wr9, wr10 \n\t" + "wunpckelub wr10, wr11 \n\t" + "wunpckehub wr11, wr11 \n\t" + "waddhus wr0, wr0, wr8 \n\t" + "waddhus wr1, wr1, wr9 \n\t" + "waddhus wr2, wr2, wr10 \n\t" + "waddhus wr3, wr3, wr11 \n\t" + "waddhus wr8, wr0, wr4 \n\t" + "waddhus wr9, wr1, wr5 \n\t" + "waddhus wr10, wr2, wr6 \n\t" + "waddhus wr11, wr3, wr7 \n\t" + "waddhus wr8, wr8, wr15 \n\t" + "waddhus wr9, wr9, wr15 \n\t" + "waddhus wr10, wr10, wr15 \n\t" + "waddhus wr11, wr11, wr15 \n\t" + "wsrlhg wr8, wr8, wcgr0 \n\t" + "wsrlhg wr9, wr9, wcgr0 \n\t" + "wldrd wr12, [%[block]] \n\t" + "wldrd wr13, [%[block], #8] \n\t" + "wsrlhg wr10, wr10, wcgr0 \n\t" + "wsrlhg wr11, wr11, wcgr0 \n\t" + "wpackhus wr8, wr8, wr9 \n\t" + "wpackhus wr9, wr10, wr11 \n\t" + WAVG2B" wr8, wr8, wr12 \n\t" + WAVG2B" wr9, wr9, wr13 \n\t" + "wstrd wr8, [%[block]] \n\t" + "wstrd wr9, [%[block], #8] \n\t" + "add %[block], %[block], %[line_size] \n\t" + "subs %[h], %[h], #2 \n\t" + "pld [%[block]] \n\t" + "pld [%[block], #32] \n\t" + "bne 1b \n\t" + : [h]"+r"(h), [pixels]"+r"(pixels), [block]"+r"(block) + : [line_size]"r"(line_size) + : "r12", "memory"); +} diff --git a/src/libffmpeg/libavcodec/armv4l/mathops.h b/src/libffmpeg/libavcodec/armv4l/mathops.h new file mode 100644 index 000000000..7ddd0ec6e --- /dev/null +++ b/src/libffmpeg/libavcodec/armv4l/mathops.h @@ -0,0 +1,49 @@ +/* + * simple math operations + * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> et al + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifdef FRAC_BITS +# define MULL(a, b) \ + ({ int lo, hi;\ + asm("smull %0, %1, %2, %3 \n\t"\ + "mov %0, %0, lsr %4\n\t"\ + "add %1, %0, %1, lsl %5\n\t"\ + : "=&r"(lo), "=&r"(hi)\ + : "r"(b), "r"(a), "i"(FRAC_BITS), "i"(32-FRAC_BITS));\ + hi; }) +#endif + +#define MULH(a, b) \ + ({ int lo, hi;\ + asm ("smull %0, %1, %2, %3" : "=&r"(lo), "=&r"(hi) : "r"(b), "r"(a));\ + hi; }) + +#if defined(HAVE_ARMV5TE) + +/* signed 16x16 -> 32 multiply add accumulate */ +# define MAC16(rt, ra, rb) \ + asm ("smlabb %0, %2, %3, %0" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb)); +/* signed 16x16 -> 32 multiply */ +# define MUL16(ra, rb) \ + ({ int __rt; \ + asm ("smulbb %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb)); \ + __rt; }) + +#endif diff --git a/src/libffmpeg/libavcodec/armv4l/mpegvideo_armv5te.c b/src/libffmpeg/libavcodec/armv4l/mpegvideo_armv5te.c new file mode 100644 index 000000000..a8d09b8ce --- /dev/null +++ b/src/libffmpeg/libavcodec/armv4l/mpegvideo_armv5te.c @@ -0,0 +1,213 @@ +/* + * Optimization of some functions from mpegvideo.c for armv5te + * Copyright (c) 2007 Siarhei Siamashka <ssvb@users.sourceforge.net> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * Some useful links for those who may be interested in optimizing code for ARM. + * ARM Architecture Reference Manual: http://www.arm.com/community/academy/resources.html + * Instructions timings and optimization guide for ARM9E: http://www.arm.com/pdfs/DDI0222B_9EJS_r1p2.pdf + */ + +#include "../dsputil.h" +#include "../mpegvideo.h" +#include "../avcodec.h" + + +#ifdef ENABLE_ARM_TESTS +/** + * h263 dequantizer supplementary function, it is performance critical and needs to + * have optimized implementations for each architecture. Is also used as a reference + * implementation in regression tests + */ +static inline void dct_unquantize_h263_helper_c(DCTELEM *block, int qmul, int qadd, int count) +{ + int i, level; + for (i = 0; i < count; i++) { + level = block[i]; + if (level) { + if (level < 0) { + level = level * qmul - qadd; + } else { + level = level * qmul + qadd; + } + block[i] = level; + } + } +} +#endif + +/* GCC 3.1 or higher is required to support symbolic names in assembly code */ +#if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)) + +/** + * Special optimized version of dct_unquantize_h263_helper_c, it requires the block + * to be at least 8 bytes aligned, and may process more elements than requested. + * But it is guaranteed to never process more than 64 elements provided that + * xxcount argument is <= 64, so it is safe. This macro is optimized for a common + * distribution of values for nCoeffs (they are mostly multiple of 8 plus one or + * two extra elements). So this macro processes data as 8 elements per loop iteration + * and contains optional 2 elements processing in the end. + * + * Inner loop should take 6 cycles per element on arm926ej-s (Nokia 770) + */ +#define dct_unquantize_h263_special_helper_armv5te(xxblock, xxqmul, xxqadd, xxcount) \ +({ DCTELEM *xblock = xxblock; \ + int xqmul = xxqmul, xqadd = xxqadd, xcount = xxcount, xtmp; \ + int xdata1, xdata2; \ +__asm__ __volatile__( \ + "subs %[count], #2 \n\t" \ + "ble 2f \n\t" \ + "ldrd r4, [%[block], #0] \n\t" \ + "1: \n\t" \ + "ldrd r6, [%[block], #8] \n\t" \ +\ + "rsbs %[data1], %[zero], r4, asr #16 \n\t" \ + "addgt %[data1], %[qadd], #0 \n\t" \ + "rsblt %[data1], %[qadd], #0 \n\t" \ + "smlatbne %[data1], r4, %[qmul], %[data1] \n\t" \ +\ + "rsbs %[data2], %[zero], r5, asr #16 \n\t" \ + "addgt %[data2], %[qadd], #0 \n\t" \ + "rsblt %[data2], %[qadd], #0 \n\t" \ + "smlatbne %[data2], r5, %[qmul], %[data2] \n\t" \ +\ + "rsbs %[tmp], %[zero], r4, asl #16 \n\t" \ + "addgt %[tmp], %[qadd], #0 \n\t" \ + "rsblt %[tmp], %[qadd], #0 \n\t" \ + "smlabbne r4, r4, %[qmul], %[tmp] \n\t" \ +\ + "rsbs %[tmp], %[zero], r5, asl #16 \n\t" \ + "addgt %[tmp], %[qadd], #0 \n\t" \ + "rsblt %[tmp], %[qadd], #0 \n\t" \ + "smlabbne r5, r5, %[qmul], %[tmp] \n\t" \ +\ + "strh r4, [%[block]], #2 \n\t" \ + "strh %[data1], [%[block]], #2 \n\t" \ + "strh r5, [%[block]], #2 \n\t" \ + "strh %[data2], [%[block]], #2 \n\t" \ +\ + "rsbs %[data1], %[zero], r6, asr #16 \n\t" \ + "addgt %[data1], %[qadd], #0 \n\t" \ + "rsblt %[data1], %[qadd], #0 \n\t" \ + "smlatbne %[data1], r6, %[qmul], %[data1] \n\t" \ +\ + "rsbs %[data2], %[zero], r7, asr #16 \n\t" \ + "addgt %[data2], %[qadd], #0 \n\t" \ + "rsblt %[data2], %[qadd], #0 \n\t" \ + "smlatbne %[data2], r7, %[qmul], %[data2] \n\t" \ +\ + "rsbs %[tmp], %[zero], r6, asl #16 \n\t" \ + "addgt %[tmp], %[qadd], #0 \n\t" \ + "rsblt %[tmp], %[qadd], #0 \n\t" \ + "smlabbne r6, r6, %[qmul], %[tmp] \n\t" \ +\ + "rsbs %[tmp], %[zero], r7, asl #16 \n\t" \ + "addgt %[tmp], %[qadd], #0 \n\t" \ + "rsblt %[tmp], %[qadd], #0 \n\t" \ + "smlabbne r7, r7, %[qmul], %[tmp] \n\t" \ +\ + "strh r6, [%[block]], #2 \n\t" \ + "strh %[data1], [%[block]], #2 \n\t" \ + "strh r7, [%[block]], #2 \n\t" \ + "strh %[data2], [%[block]], #2 \n\t" \ +\ + "subs %[count], #8 \n\t" \ + "ldrgtd r4, [%[block], #0] \n\t" /* load data early to avoid load/use pipeline stall */ \ + "bgt 1b \n\t" \ +\ + "adds %[count], #2 \n\t" \ + "ble 3f \n\t" \ + "2: \n\t" \ + "ldrsh %[data1], [%[block], #0] \n\t" \ + "ldrsh %[data2], [%[block], #2] \n\t" \ + "mov %[tmp], %[qadd] \n\t" \ + "cmp %[data1], #0 \n\t" \ + "rsblt %[tmp], %[qadd], #0 \n\t" \ + "smlabbne %[data1], %[data1], %[qmul], %[tmp] \n\t" \ + "mov %[tmp], %[qadd] \n\t" \ + "cmp %[data2], #0 \n\t" \ + "rsblt %[tmp], %[qadd], #0 \n\t" \ + "smlabbne %[data2], %[data2], %[qmul], %[tmp] \n\t" \ + "strh %[data1], [%[block]], #2 \n\t" \ + "strh %[data2], [%[block]], #2 \n\t" \ + "3: \n\t" \ + : [block] "+&r" (xblock), [count] "+&r" (xcount), [tmp] "=&r" (xtmp), \ + [data1] "=&r" (xdata1), [data2] "=&r" (xdata2) \ + : [qmul] "r" (xqmul), [qadd] "r" (xqadd), [zero] "r" (0) \ + : "r4", "r5", "r6", "r7", "cc", "memory" \ +); \ +}) + +static void dct_unquantize_h263_intra_armv5te(MpegEncContext *s, + DCTELEM *block, int n, int qscale) +{ + int i, level, qmul, qadd; + int nCoeffs; + + assert(s->block_last_index[n]>=0); + + qmul = qscale << 1; + + if (!s->h263_aic) { + if (n < 4) + level = block[0] * s->y_dc_scale; + else + level = block[0] * s->c_dc_scale; + qadd = (qscale - 1) | 1; + }else{ + qadd = 0; + level = block[0]; + } + if(s->ac_pred) + nCoeffs=63; + else + nCoeffs= s->inter_scantable.raster_end[ s->block_last_index[n] ]; + + dct_unquantize_h263_special_helper_armv5te(block, qmul, qadd, nCoeffs + 1); + block[0] = level; +} + +static void dct_unquantize_h263_inter_armv5te(MpegEncContext *s, + DCTELEM *block, int n, int qscale) +{ + int i, level, qmul, qadd; + int nCoeffs; + + assert(s->block_last_index[n]>=0); + + qadd = (qscale - 1) | 1; + qmul = qscale << 1; + + nCoeffs= s->inter_scantable.raster_end[ s->block_last_index[n] ]; + + dct_unquantize_h263_special_helper_armv5te(block, qmul, qadd, nCoeffs + 1); +} + +#define HAVE_DCT_UNQUANTIZE_H263_ARMV5TE_OPTIMIZED + +#endif + +void MPV_common_init_armv5te(MpegEncContext *s) +{ +#ifdef HAVE_DCT_UNQUANTIZE_H263_ARMV5TE_OPTIMIZED + s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_armv5te; + s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_armv5te; +#endif +} diff --git a/src/libffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c b/src/libffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c new file mode 100644 index 000000000..1336ac5f8 --- /dev/null +++ b/src/libffmpeg/libavcodec/armv4l/mpegvideo_iwmmxt.c @@ -0,0 +1,119 @@ +/* + * copyright (c) 2004 AGAWA Koji + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "../dsputil.h" +#include "../mpegvideo.h" +#include "../avcodec.h" + +static void dct_unquantize_h263_intra_iwmmxt(MpegEncContext *s, + DCTELEM *block, int n, int qscale) +{ + int level, qmul, qadd; + int nCoeffs; + DCTELEM *block_orig = block; + + assert(s->block_last_index[n]>=0); + + qmul = qscale << 1; + + if (!s->h263_aic) { + if (n < 4) + level = block[0] * s->y_dc_scale; + else + level = block[0] * s->c_dc_scale; + qadd = (qscale - 1) | 1; + }else{ + qadd = 0; + level = block[0]; + } + if(s->ac_pred) + nCoeffs=63; + else + nCoeffs= s->inter_scantable.raster_end[ s->block_last_index[n] ]; + + __asm__ __volatile__ ( +/* "movd %1, %%mm6 \n\t" //qmul */ +/* "packssdw %%mm6, %%mm6 \n\t" */ +/* "packssdw %%mm6, %%mm6 \n\t" */ + "tbcsth wr6, %[qmul] \n\t" +/* "movd %2, %%mm5 \n\t" //qadd */ +/* "packssdw %%mm5, %%mm5 \n\t" */ +/* "packssdw %%mm5, %%mm5 \n\t" */ + "tbcsth wr5, %[qadd] \n\t" + "wzero wr7 \n\t" /* "pxor %%mm7, %%mm7 \n\t" */ + "wzero wr4 \n\t" /* "pxor %%mm4, %%mm4 \n\t" */ + "wsubh wr7, wr5, wr7 \n\t" /* "psubw %%mm5, %%mm7 \n\t" */ + "1: \n\t" + "wldrd wr2, [%[block]] \n\t" /* "movq (%0, %3), %%mm0 \n\t" */ + "wldrd wr3, [%[block], #8] \n\t" /* "movq 8(%0, %3), %%mm1 \n\t" */ + "wmulsl wr0, wr6, wr2 \n\t" /* "pmullw %%mm6, %%mm0 \n\t" */ + "wmulsl wr1, wr6, wr3 \n\t" /* "pmullw %%mm6, %%mm1 \n\t" */ +/* "movq (%0, %3), %%mm2 \n\t" */ +/* "movq 8(%0, %3), %%mm3 \n\t" */ + "wcmpgtsh wr2, wr4, wr2 \n\t" /* "pcmpgtw %%mm4, %%mm2 \n\t" // block[i] < 0 ? -1 : 0 */ + "wcmpgtsh wr3, wr4, wr2 \n\t" /* "pcmpgtw %%mm4, %%mm3 \n\t" // block[i] < 0 ? -1 : 0 */ + "wxor wr0, wr2, wr0 \n\t" /* "pxor %%mm2, %%mm0 \n\t" */ + "wxor wr1, wr3, wr1 \n\t" /* "pxor %%mm3, %%mm1 \n\t" */ + "waddh wr0, wr7, wr0 \n\t" /* "paddw %%mm7, %%mm0 \n\t" */ + "waddh wr1, wr7, wr1 \n\t" /* "paddw %%mm7, %%mm1 \n\t" */ + "wxor wr2, wr0, wr2 \n\t" /* "pxor %%mm0, %%mm2 \n\t" */ + "wxor wr3, wr1, wr3 \n\t" /* "pxor %%mm1, %%mm3 \n\t" */ + "wcmpeqh wr0, wr7, wr0 \n\t" /* "pcmpeqw %%mm7, %%mm0 \n\t" // block[i] == 0 ? -1 : 0 */ + "wcmpeqh wr1, wr7, wr1 \n\t" /* "pcmpeqw %%mm7, %%mm1 \n\t" // block[i] == 0 ? -1 : 0 */ + "wandn wr0, wr2, wr0 \n\t" /* "pandn %%mm2, %%mm0 \n\t" */ + "wandn wr1, wr3, wr1 \n\t" /* "pandn %%mm3, %%mm1 \n\t" */ + "wstrd wr0, [%[block]] \n\t" /* "movq %%mm0, (%0, %3) \n\t" */ + "wstrd wr1, [%[block], #8] \n\t" /* "movq %%mm1, 8(%0, %3) \n\t" */ + "add %[block], %[block], #16 \n\t" /* "addl $16, %3 \n\t" */ + "subs %[i], %[i], #1 \n\t" + "bne 1b \n\t" /* "jng 1b \n\t" */ + :[block]"+r"(block) + :[i]"r"((nCoeffs + 8) / 8), [qmul]"r"(qmul), [qadd]"r"(qadd) + :"memory"); + + block_orig[0] = level; +} + +#if 0 +static void dct_unquantize_h263_inter_iwmmxt(MpegEncContext *s, + DCTELEM *block, int n, int qscale) +{ + int nCoeffs; + + assert(s->block_last_index[n]>=0); + + if(s->ac_pred) + nCoeffs=63; + else + nCoeffs= s->inter_scantable.raster_end[ s->block_last_index[n] ]; + + ippiQuantInvInter_Compact_H263_16s_I(block, nCoeffs+1, qscale); +} +#endif + +void MPV_common_init_iwmmxt(MpegEncContext *s) +{ + if (!(mm_flags & MM_IWMMXT)) return; + + s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_iwmmxt; +#if 0 + s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_iwmmxt; +#endif +} diff --git a/src/libffmpeg/libavcodec/armv4l/simple_idct_armv5te.S b/src/libffmpeg/libavcodec/armv4l/simple_idct_armv5te.S new file mode 100644 index 000000000..28bee0643 --- /dev/null +++ b/src/libffmpeg/libavcodec/armv4l/simple_idct_armv5te.S @@ -0,0 +1,718 @@ +/* + * Simple IDCT + * + * Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at> + * Copyright (c) 2006 Mans Rullgard <mru@inprovide.com> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#define W1 22725 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ +#define W2 21407 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ +#define W3 19266 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ +#define W4 16383 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ +#define W5 12873 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ +#define W6 8867 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ +#define W7 4520 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ +#define ROW_SHIFT 11 +#define COL_SHIFT 20 + +#define W13 (W1 | (W3 << 16)) +#define W26 (W2 | (W6 << 16)) +#define W57 (W5 | (W7 << 16)) + + .text + .align +w13: .long W13 +w26: .long W26 +w57: .long W57 + + .align + .func idct_row_armv5te +idct_row_armv5te: + str lr, [sp, #-4]! + + ldrd v1, [a1, #8] + ldrd a3, [a1] /* a3 = row[1:0], a4 = row[3:2] */ + orrs v1, v1, v2 + cmpeq v1, a4 + cmpeq v1, a3, lsr #16 + beq row_dc_only + + mov v1, #(1<<(ROW_SHIFT-1)) + mov ip, #16384 + sub ip, ip, #1 /* ip = W4 */ + smlabb v1, ip, a3, v1 /* v1 = W4*row[0]+(1<<(RS-1)) */ + ldr ip, [pc, #(w26-.-8)] /* ip = W2 | (W6 << 16) */ + smultb a2, ip, a4 + smulbb lr, ip, a4 + add v2, v1, a2 + sub v3, v1, a2 + sub v4, v1, lr + add v1, v1, lr + + ldr ip, [pc, #(w13-.-8)] /* ip = W1 | (W3 << 16) */ + ldr lr, [pc, #(w57-.-8)] /* lr = W5 | (W7 << 16) */ + smulbt v5, ip, a3 + smultt v6, lr, a4 + smlatt v5, ip, a4, v5 + smultt a2, ip, a3 + smulbt v7, lr, a3 + sub v6, v6, a2 + smulbt a2, ip, a4 + smultt fp, lr, a3 + sub v7, v7, a2 + smulbt a2, lr, a4 + ldrd a3, [a1, #8] /* a3=row[5:4] a4=row[7:6] */ + sub fp, fp, a2 + + orrs a2, a3, a4 + beq 1f + + smlabt v5, lr, a3, v5 + smlabt v6, ip, a3, v6 + smlatt v5, lr, a4, v5 + smlabt v6, lr, a4, v6 + smlatt v7, lr, a3, v7 + smlatt fp, ip, a3, fp + smulbt a2, ip, a4 + smlatt v7, ip, a4, v7 + sub fp, fp, a2 + + ldr ip, [pc, #(w26-.-8)] /* ip = W2 | (W6 << 16) */ + mov a2, #16384 + sub a2, a2, #1 /* a2 = W4 */ + smulbb a2, a2, a3 /* a2 = W4*row[4] */ + smultb lr, ip, a4 /* lr = W6*row[6] */ + add v1, v1, a2 /* v1 += W4*row[4] */ + add v1, v1, lr /* v1 += W6*row[6] */ + add v4, v4, a2 /* v4 += W4*row[4] */ + sub v4, v4, lr /* v4 -= W6*row[6] */ + smulbb lr, ip, a4 /* lr = W2*row[6] */ + sub v2, v2, a2 /* v2 -= W4*row[4] */ + sub v2, v2, lr /* v2 -= W2*row[6] */ + sub v3, v3, a2 /* v3 -= W4*row[4] */ + add v3, v3, lr /* v3 += W2*row[6] */ + +1: add a2, v1, v5 + mov a3, a2, lsr #11 + bic a3, a3, #0x1f0000 + sub a2, v2, v6 + mov a2, a2, lsr #11 + add a3, a3, a2, lsl #16 + add a2, v3, v7 + mov a4, a2, lsr #11 + bic a4, a4, #0x1f0000 + add a2, v4, fp + mov a2, a2, lsr #11 + add a4, a4, a2, lsl #16 + strd a3, [a1] + + sub a2, v4, fp + mov a3, a2, lsr #11 + bic a3, a3, #0x1f0000 + sub a2, v3, v7 + mov a2, a2, lsr #11 + add a3, a3, a2, lsl #16 + add a2, v2, v6 + mov a4, a2, lsr #11 + bic a4, a4, #0x1f0000 + sub a2, v1, v5 + mov a2, a2, lsr #11 + add a4, a4, a2, lsl #16 + strd a3, [a1, #8] + + ldr pc, [sp], #4 + +row_dc_only: + orr a3, a3, a3, lsl #16 + bic a3, a3, #0xe000 + mov a3, a3, lsl #3 + mov a4, a3 + strd a3, [a1] + strd a3, [a1, #8] + + ldr pc, [sp], #4 + .endfunc + + .macro idct_col + ldr a4, [a1] /* a4 = col[1:0] */ + mov ip, #16384 + sub ip, ip, #1 /* ip = W4 */ +#if 0 + mov v1, #(1<<(COL_SHIFT-1)) + smlabt v2, ip, a4, v1 /* v2 = W4*col[1] + (1<<(COL_SHIFT-1)) */ + smlabb v1, ip, a4, v1 /* v1 = W4*col[0] + (1<<(COL_SHIFT-1)) */ + ldr a4, [a1, #(16*4)] +#else + mov v1, #((1<<(COL_SHIFT-1))/W4) /* this matches the C version */ + add v2, v1, a4, asr #16 + rsb v2, v2, v2, lsl #14 + mov a4, a4, lsl #16 + add v1, v1, a4, asr #16 + ldr a4, [a1, #(16*4)] + rsb v1, v1, v1, lsl #14 +#endif + + smulbb lr, ip, a4 + smulbt a3, ip, a4 + sub v3, v1, lr + sub v5, v1, lr + add v7, v1, lr + add v1, v1, lr + sub v4, v2, a3 + sub v6, v2, a3 + add fp, v2, a3 + ldr ip, [pc, #(w26-.-8)] + ldr a4, [a1, #(16*2)] + add v2, v2, a3 + + smulbb lr, ip, a4 + smultb a3, ip, a4 + add v1, v1, lr + sub v7, v7, lr + add v3, v3, a3 + sub v5, v5, a3 + smulbt lr, ip, a4 + smultt a3, ip, a4 + add v2, v2, lr + sub fp, fp, lr + add v4, v4, a3 + ldr a4, [a1, #(16*6)] + sub v6, v6, a3 + + smultb lr, ip, a4 + smulbb a3, ip, a4 + add v1, v1, lr + sub v7, v7, lr + sub v3, v3, a3 + add v5, v5, a3 + smultt lr, ip, a4 + smulbt a3, ip, a4 + add v2, v2, lr + sub fp, fp, lr + sub v4, v4, a3 + add v6, v6, a3 + + stmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp} + + ldr ip, [pc, #(w13-.-8)] + ldr a4, [a1, #(16*1)] + ldr lr, [pc, #(w57-.-8)] + smulbb v1, ip, a4 + smultb v3, ip, a4 + smulbb v5, lr, a4 + smultb v7, lr, a4 + smulbt v2, ip, a4 + smultt v4, ip, a4 + smulbt v6, lr, a4 + smultt fp, lr, a4 + rsb v4, v4, #0 + ldr a4, [a1, #(16*3)] + rsb v3, v3, #0 + + smlatb v1, ip, a4, v1 + smlatb v3, lr, a4, v3 + smulbb a3, ip, a4 + smulbb a2, lr, a4 + sub v5, v5, a3 + sub v7, v7, a2 + smlatt v2, ip, a4, v2 + smlatt v4, lr, a4, v4 + smulbt a3, ip, a4 + smulbt a2, lr, a4 + sub v6, v6, a3 + ldr a4, [a1, #(16*5)] + sub fp, fp, a2 + + smlabb v1, lr, a4, v1 + smlabb v3, ip, a4, v3 + smlatb v5, lr, a4, v5 + smlatb v7, ip, a4, v7 + smlabt v2, lr, a4, v2 + smlabt v4, ip, a4, v4 + smlatt v6, lr, a4, v6 + ldr a3, [a1, #(16*7)] + smlatt fp, ip, a4, fp + + smlatb v1, lr, a3, v1 + smlabb v3, lr, a3, v3 + smlatb v5, ip, a3, v5 + smulbb a4, ip, a3 + smlatt v2, lr, a3, v2 + sub v7, v7, a4 + smlabt v4, lr, a3, v4 + smulbt a4, ip, a3 + smlatt v6, ip, a3, v6 + sub fp, fp, a4 + .endm + + .align + .func idct_col_armv5te +idct_col_armv5te: + str lr, [sp, #-4]! + + idct_col + + ldmfd sp!, {a3, a4} + adds a2, a3, v1 + mov a2, a2, lsr #20 + orrmi a2, a2, #0xf000 + add ip, a4, v2 + mov ip, ip, asr #20 + orr a2, a2, ip, lsl #16 + str a2, [a1] + subs a3, a3, v1 + mov a2, a3, lsr #20 + orrmi a2, a2, #0xf000 + sub a4, a4, v2 + mov a4, a4, asr #20 + orr a2, a2, a4, lsl #16 + ldmfd sp!, {a3, a4} + str a2, [a1, #(16*7)] + + subs a2, a3, v3 + mov a2, a2, lsr #20 + orrmi a2, a2, #0xf000 + sub ip, a4, v4 + mov ip, ip, asr #20 + orr a2, a2, ip, lsl #16 + str a2, [a1, #(16*1)] + adds a3, a3, v3 + mov a2, a3, lsr #20 + orrmi a2, a2, #0xf000 + add a4, a4, v4 + mov a4, a4, asr #20 + orr a2, a2, a4, lsl #16 + ldmfd sp!, {a3, a4} + str a2, [a1, #(16*6)] + + adds a2, a3, v5 + mov a2, a2, lsr #20 + orrmi a2, a2, #0xf000 + add ip, a4, v6 + mov ip, ip, asr #20 + orr a2, a2, ip, lsl #16 + str a2, [a1, #(16*2)] + subs a3, a3, v5 + mov a2, a3, lsr #20 + orrmi a2, a2, #0xf000 + sub a4, a4, v6 + mov a4, a4, asr #20 + orr a2, a2, a4, lsl #16 + ldmfd sp!, {a3, a4} + str a2, [a1, #(16*5)] + + adds a2, a3, v7 + mov a2, a2, lsr #20 + orrmi a2, a2, #0xf000 + add ip, a4, fp + mov ip, ip, asr #20 + orr a2, a2, ip, lsl #16 + str a2, [a1, #(16*3)] + subs a3, a3, v7 + mov a2, a3, lsr #20 + orrmi a2, a2, #0xf000 + sub a4, a4, fp + mov a4, a4, asr #20 + orr a2, a2, a4, lsl #16 + str a2, [a1, #(16*4)] + + ldr pc, [sp], #4 + .endfunc + + .align + .func idct_col_put_armv5te +idct_col_put_armv5te: + str lr, [sp, #-4]! + + idct_col + + ldmfd sp!, {a3, a4} + ldr lr, [sp, #32] + add a2, a3, v1 + movs a2, a2, asr #20 + movmi a2, #0 + cmp a2, #255 + movgt a2, #255 + add ip, a4, v2 + movs ip, ip, asr #20 + movmi ip, #0 + cmp ip, #255 + movgt ip, #255 + orr a2, a2, ip, lsl #8 + sub a3, a3, v1 + movs a3, a3, asr #20 + movmi a3, #0 + cmp a3, #255 + movgt a3, #255 + sub a4, a4, v2 + movs a4, a4, asr #20 + movmi a4, #0 + cmp a4, #255 + ldr v1, [sp, #28] + movgt a4, #255 + strh a2, [v1] + add a2, v1, #2 + str a2, [sp, #28] + orr a2, a3, a4, lsl #8 + rsb v2, lr, lr, lsl #3 + ldmfd sp!, {a3, a4} + strh a2, [v2, v1]! + + sub a2, a3, v3 + movs a2, a2, asr #20 + movmi a2, #0 + cmp a2, #255 + movgt a2, #255 + sub ip, a4, v4 + movs ip, ip, asr #20 + movmi ip, #0 + cmp ip, #255 + movgt ip, #255 + orr a2, a2, ip, lsl #8 + strh a2, [v1, lr]! + add a3, a3, v3 + movs a2, a3, asr #20 + movmi a2, #0 + cmp a2, #255 + movgt a2, #255 + add a4, a4, v4 + movs a4, a4, asr #20 + movmi a4, #0 + cmp a4, #255 + movgt a4, #255 + orr a2, a2, a4, lsl #8 + ldmfd sp!, {a3, a4} + strh a2, [v2, -lr]! + + add a2, a3, v5 + movs a2, a2, asr #20 + movmi a2, #0 + cmp a2, #255 + movgt a2, #255 + add ip, a4, v6 + movs ip, ip, asr #20 + movmi ip, #0 + cmp ip, #255 + movgt ip, #255 + orr a2, a2, ip, lsl #8 + strh a2, [v1, lr]! + sub a3, a3, v5 + movs a2, a3, asr #20 + movmi a2, #0 + cmp a2, #255 + movgt a2, #255 + sub a4, a4, v6 + movs a4, a4, asr #20 + movmi a4, #0 + cmp a4, #255 + movgt a4, #255 + orr a2, a2, a4, lsl #8 + ldmfd sp!, {a3, a4} + strh a2, [v2, -lr]! + + add a2, a3, v7 + movs a2, a2, asr #20 + movmi a2, #0 + cmp a2, #255 + movgt a2, #255 + add ip, a4, fp + movs ip, ip, asr #20 + movmi ip, #0 + cmp ip, #255 + movgt ip, #255 + orr a2, a2, ip, lsl #8 + strh a2, [v1, lr] + sub a3, a3, v7 + movs a2, a3, asr #20 + movmi a2, #0 + cmp a2, #255 + movgt a2, #255 + sub a4, a4, fp + movs a4, a4, asr #20 + movmi a4, #0 + cmp a4, #255 + movgt a4, #255 + orr a2, a2, a4, lsl #8 + strh a2, [v2, -lr] + + ldr pc, [sp], #4 + .endfunc + + .align + .func idct_col_add_armv5te +idct_col_add_armv5te: + str lr, [sp, #-4]! + + idct_col + + ldr lr, [sp, #36] + + ldmfd sp!, {a3, a4} + ldrh ip, [lr] + add a2, a3, v1 + mov a2, a2, asr #20 + sub a3, a3, v1 + and v1, ip, #255 + adds a2, a2, v1 + movmi a2, #0 + cmp a2, #255 + movgt a2, #255 + add v1, a4, v2 + mov v1, v1, asr #20 + adds v1, v1, ip, lsr #8 + movmi v1, #0 + cmp v1, #255 + movgt v1, #255 + orr a2, a2, v1, lsl #8 + ldr v1, [sp, #32] + sub a4, a4, v2 + rsb v2, v1, v1, lsl #3 + ldrh ip, [v2, lr]! + strh a2, [lr] + mov a3, a3, asr #20 + and a2, ip, #255 + adds a3, a3, a2 + movmi a3, #0 + cmp a3, #255 + movgt a3, #255 + mov a4, a4, asr #20 + adds a4, a4, ip, lsr #8 + movmi a4, #0 + cmp a4, #255 + movgt a4, #255 + add a2, lr, #2 + str a2, [sp, #28] + orr a2, a3, a4, lsl #8 + strh a2, [v2] + + ldmfd sp!, {a3, a4} + ldrh ip, [lr, v1]! + sub a2, a3, v3 + mov a2, a2, asr #20 + add a3, a3, v3 + and v3, ip, #255 + adds a2, a2, v3 + movmi a2, #0 + cmp a2, #255 + movgt a2, #255 + sub v3, a4, v4 + mov v3, v3, asr #20 + adds v3, v3, ip, lsr #8 + movmi v3, #0 + cmp v3, #255 + movgt v3, #255 + orr a2, a2, v3, lsl #8 + add a4, a4, v4 + ldrh ip, [v2, -v1]! + strh a2, [lr] + mov a3, a3, asr #20 + and a2, ip, #255 + adds a3, a3, a2 + movmi a3, #0 + cmp a3, #255 + movgt a3, #255 + mov a4, a4, asr #20 + adds a4, a4, ip, lsr #8 + movmi a4, #0 + cmp a4, #255 + movgt a4, #255 + orr a2, a3, a4, lsl #8 + strh a2, [v2] + + ldmfd sp!, {a3, a4} + ldrh ip, [lr, v1]! + add a2, a3, v5 + mov a2, a2, asr #20 + sub a3, a3, v5 + and v3, ip, #255 + adds a2, a2, v3 + movmi a2, #0 + cmp a2, #255 + movgt a2, #255 + add v3, a4, v6 + mov v3, v3, asr #20 + adds v3, v3, ip, lsr #8 + movmi v3, #0 + cmp v3, #255 + movgt v3, #255 + orr a2, a2, v3, lsl #8 + sub a4, a4, v6 + ldrh ip, [v2, -v1]! + strh a2, [lr] + mov a3, a3, asr #20 + and a2, ip, #255 + adds a3, a3, a2 + movmi a3, #0 + cmp a3, #255 + movgt a3, #255 + mov a4, a4, asr #20 + adds a4, a4, ip, lsr #8 + movmi a4, #0 + cmp a4, #255 + movgt a4, #255 + orr a2, a3, a4, lsl #8 + strh a2, [v2] + + ldmfd sp!, {a3, a4} + ldrh ip, [lr, v1]! + add a2, a3, v7 + mov a2, a2, asr #20 + sub a3, a3, v7 + and v3, ip, #255 + adds a2, a2, v3 + movmi a2, #0 + cmp a2, #255 + movgt a2, #255 + add v3, a4, fp + mov v3, v3, asr #20 + adds v3, v3, ip, lsr #8 + movmi v3, #0 + cmp v3, #255 + movgt v3, #255 + orr a2, a2, v3, lsl #8 + sub a4, a4, fp + ldrh ip, [v2, -v1]! + strh a2, [lr] + mov a3, a3, asr #20 + and a2, ip, #255 + adds a3, a3, a2 + movmi a3, #0 + cmp a3, #255 + movgt a3, #255 + mov a4, a4, asr #20 + adds a4, a4, ip, lsr #8 + movmi a4, #0 + cmp a4, #255 + movgt a4, #255 + orr a2, a3, a4, lsl #8 + strh a2, [v2] + + ldr pc, [sp], #4 + .endfunc + + .align + .global simple_idct_armv5te + .func simple_idct_armv5te +simple_idct_armv5te: + stmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, lr} + + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + + sub a1, a1, #(16*7) + + bl idct_col_armv5te + add a1, a1, #4 + bl idct_col_armv5te + add a1, a1, #4 + bl idct_col_armv5te + add a1, a1, #4 + bl idct_col_armv5te + + ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc} + .endfunc + + .align + .global simple_idct_add_armv5te + .func simple_idct_add_armv5te +simple_idct_add_armv5te: + stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr} + + mov a1, a3 + + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + + sub a1, a1, #(16*7) + + bl idct_col_add_armv5te + add a1, a1, #4 + bl idct_col_add_armv5te + add a1, a1, #4 + bl idct_col_add_armv5te + add a1, a1, #4 + bl idct_col_add_armv5te + + add sp, sp, #8 + ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc} + .endfunc + + .align + .global simple_idct_put_armv5te + .func simple_idct_put_armv5te +simple_idct_put_armv5te: + stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr} + + mov a1, a3 + + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + add a1, a1, #16 + bl idct_row_armv5te + + sub a1, a1, #(16*7) + + bl idct_col_put_armv5te + add a1, a1, #4 + bl idct_col_put_armv5te + add a1, a1, #4 + bl idct_col_put_armv5te + add a1, a1, #4 + bl idct_col_put_armv5te + + add sp, sp, #8 + ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc} + .endfunc diff --git a/src/libffmpeg/libavcodec/bytestream.h b/src/libffmpeg/libavcodec/bytestream.h new file mode 100644 index 000000000..ae5438b49 --- /dev/null +++ b/src/libffmpeg/libavcodec/bytestream.h @@ -0,0 +1,89 @@ +/* + * Bytestream functions + * copyright (c) 2006 Baptiste Coudurier <baptiste.coudurier@free.fr> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef FFMPEG_BYTESTREAM_H +#define FFMPEG_BYTESTREAM_H + +static av_always_inline unsigned int bytestream_get_le32(uint8_t **b) +{ + (*b) += 4; + return AV_RL32(*b - 4); +} + +static av_always_inline unsigned int bytestream_get_le16(uint8_t **b) +{ + (*b) += 2; + return AV_RL16(*b - 2); +} + +static av_always_inline unsigned int bytestream_get_byte(uint8_t **b) +{ + (*b)++; + return (*b)[-1]; +} + +static av_always_inline unsigned int bytestream_get_buffer(uint8_t **b, uint8_t *dst, unsigned int size) +{ + memcpy(dst, *b, size); + (*b) += size; + return size; +} + +static av_always_inline void bytestream_put_be32(uint8_t **b, const unsigned int value) +{ + *(*b)++ = value >> 24; + *(*b)++ = value >> 16; + *(*b)++ = value >> 8; + *(*b)++ = value; +}; + +static av_always_inline void bytestream_put_be16(uint8_t **b, const unsigned int value) +{ + *(*b)++ = value >> 8; + *(*b)++ = value; +} + +static av_always_inline void bytestream_put_le32(uint8_t **b, const unsigned int value) +{ + *(*b)++ = value; + *(*b)++ = value >> 8; + *(*b)++ = value >> 16; + *(*b)++ = value >> 24; +} + +static av_always_inline void bytestream_put_le16(uint8_t **b, const unsigned int value) +{ + *(*b)++ = value; + *(*b)++ = value >> 8; +} + +static av_always_inline void bytestream_put_byte(uint8_t **b, const unsigned int value) +{ + *(*b)++ = value; +} + +static av_always_inline void bytestream_put_buffer(uint8_t **b, const uint8_t *src, unsigned int size) +{ + memcpy(*b, src, size); + (*b) += size; +} + +#endif /* FFMPEG_BYTESTREAM_H */ diff --git a/src/libffmpeg/libavcodec/eval.h b/src/libffmpeg/libavcodec/eval.h new file mode 100644 index 000000000..b52199cf4 --- /dev/null +++ b/src/libffmpeg/libavcodec/eval.h @@ -0,0 +1,84 @@ +/* + * simple arithmetic expression evaluator + * + * Copyright (c) 2002 Michael Niedermayer <michaelni@gmx.at> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file eval.h + * eval header. + */ + +#ifndef AVCODEC_EVAL_H +#define AVCODEC_EVAL_H + +#if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) +double ff_eval(char *s, double *const_value, const char **const_name, + double (**func1)(void *, double), const char **func1_name, + double (**func2)(void *, double, double), char **func2_name, + void *opaque); +#endif + +/** + * Parses and evaluates an expression. + * Note, this is significantly slower than ff_parse_eval() + * @param s expression as a zero terminated string for example "1+2^3+5*5+sin(2/3)" + * @param func1 NULL terminated array of function pointers for functions which take 1 argument + * @param func2 NULL terminated array of function pointers for functions which take 2 arguments + * @param const_name NULL terminated array of zero terminated strings of constant identifers for example {"PI", "E", 0} + * @param func1_name NULL terminated array of zero terminated strings of func1 identifers + * @param func2_name NULL terminated array of zero terminated strings of func2 identifers + * @param error pointer to a char* which is set to an error message if something goes wrong + * @param const_value a zero terminated array of values for the identifers from const_name + * @param opaque a pointer which will be passed to all functions from func1 and func2 + * @return the value of the expression + */ +double ff_eval2(char *s, double *const_value, const char **const_name, + double (**func1)(void *, double), const char **func1_name, + double (**func2)(void *, double, double), char **func2_name, + void *opaque, char **error); + +typedef struct ff_expr_s AVEvalExpr; + +/** + * Parses a expression. + * @param s expression as a zero terminated string for example "1+2^3+5*5+sin(2/3)" + * @param func1 NULL terminated array of function pointers for functions which take 1 argument + * @param func2 NULL terminated array of function pointers for functions which take 2 arguments + * @param const_name NULL terminated array of zero terminated strings of constant identifers for example {"PI", "E", 0} + * @param func1_name NULL terminated array of zero terminated strings of func1 identifers + * @param func2_name NULL terminated array of zero terminated strings of func2 identifers + * @param error pointer to a char* which is set to an error message if something goes wrong + * @return AVEvalExpr which must be freed with ff_eval_free by the user when its not needed anymore + * NULL if anything went wrong + */ +AVEvalExpr * ff_parse(char *s, const char **const_name, + double (**func1)(void *, double), const char **func1_name, + double (**func2)(void *, double, double), char **func2_name, + char **error); +/** + * Evaluates a previously parsed expression. + * @param const_value a zero terminated array of values for the identifers from ff_parse const_name + * @param opaque a pointer which will be passed to all functions from func1 and func2 + * @return the value of the expression + */ +double ff_parse_eval(AVEvalExpr * e, double *const_value, void *opaque); +void ff_eval_free(AVEvalExpr * e); + +#endif /* AVCODEC_EVAL_H */ diff --git a/src/libmpeg2new/.cvsignore b/src/libffmpeg/libavcodec/i386/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libmpeg2new/.cvsignore +++ b/src/libffmpeg/libavcodec/i386/.hgignore diff --git a/src/libffmpeg/libavcodec/i386/fft_3dn.c b/src/libffmpeg/libavcodec/i386/fft_3dn.c new file mode 100644 index 000000000..8087f1932 --- /dev/null +++ b/src/libffmpeg/libavcodec/i386/fft_3dn.c @@ -0,0 +1,125 @@ +/* + * FFT/MDCT transform with 3DNow! optimizations + * Copyright (c) 2006 Zuxy MENG Jie, Loren Merritt + * Based on fft_sse.c copyright (c) 2002 Fabrice Bellard. + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +#include "../dsputil.h" + +static const int p1m1[2] __attribute__((aligned(8))) = + { 0, 1 << 31 }; + +static const int m1p1[2] __attribute__((aligned(8))) = + { 1 << 31, 0 }; + +void ff_fft_calc_3dn(FFTContext *s, FFTComplex *z) +{ + int ln = s->nbits; + long i, j; + long nblocks, nloops; + FFTComplex *p, *cptr; + + asm volatile( + /* FEMMS is not a must here but recommended by AMD */ + "femms \n\t" + "movq %0, %%mm7 \n\t" + ::"m"(*(s->inverse ? m1p1 : p1m1)) + ); + + i = 8 << ln; + asm volatile( + "1: \n\t" + "sub $32, %0 \n\t" + "movq (%0,%1), %%mm0 \n\t" + "movq 16(%0,%1), %%mm1 \n\t" + "movq 8(%0,%1), %%mm2 \n\t" + "movq 24(%0,%1), %%mm3 \n\t" + "movq %%mm0, %%mm4 \n\t" + "movq %%mm1, %%mm5 \n\t" + "pfadd %%mm2, %%mm0 \n\t" + "pfadd %%mm3, %%mm1 \n\t" + "pfsub %%mm2, %%mm4 \n\t" + "pfsub %%mm3, %%mm5 \n\t" + "movq %%mm0, %%mm2 \n\t" + "punpckldq %%mm5, %%mm6 \n\t" + "punpckhdq %%mm6, %%mm5 \n\t" + "movq %%mm4, %%mm3 \n\t" + "pxor %%mm7, %%mm5 \n\t" + "pfadd %%mm1, %%mm0 \n\t" + "pfadd %%mm5, %%mm4 \n\t" + "pfsub %%mm1, %%mm2 \n\t" + "pfsub %%mm5, %%mm3 \n\t" + "movq %%mm0, (%0,%1) \n\t" + "movq %%mm4, 8(%0,%1) \n\t" + "movq %%mm2, 16(%0,%1) \n\t" + "movq %%mm3, 24(%0,%1) \n\t" + "jg 1b \n\t" + :"+r"(i) + :"r"(z) + ); + /* pass 2 .. ln-1 */ + + nblocks = 1 << (ln-3); + nloops = 1 << 2; + cptr = s->exptab1; + do { + p = z; + j = nblocks; + do { + i = nloops*8; + asm volatile( + "1: \n\t" + "sub $16, %0 \n\t" + "movq (%1,%0), %%mm0 \n\t" + "movq 8(%1,%0), %%mm1 \n\t" + "movq (%2,%0), %%mm2 \n\t" + "movq 8(%2,%0), %%mm3 \n\t" + "movq %%mm2, %%mm4 \n\t" + "movq %%mm3, %%mm5 \n\t" + "punpckldq %%mm2, %%mm2 \n\t" + "punpckldq %%mm3, %%mm3 \n\t" + "punpckhdq %%mm4, %%mm4 \n\t" + "punpckhdq %%mm5, %%mm5 \n\t" + "pfmul (%3,%0,2), %%mm2 \n\t" // cre*re cim*re + "pfmul 8(%3,%0,2), %%mm3 \n\t" + "pfmul 16(%3,%0,2), %%mm4 \n\t" // -cim*im cre*im + "pfmul 24(%3,%0,2), %%mm5 \n\t" + "pfadd %%mm2, %%mm4 \n\t" // cre*re-cim*im cim*re+cre*im + "pfadd %%mm3, %%mm5 \n\t" + "movq %%mm0, %%mm2 \n\t" + "movq %%mm1, %%mm3 \n\t" + "pfadd %%mm4, %%mm0 \n\t" + "pfadd %%mm5, %%mm1 \n\t" + "pfsub %%mm4, %%mm2 \n\t" + "pfsub %%mm5, %%mm3 \n\t" + "movq %%mm0, (%1,%0) \n\t" + "movq %%mm1, 8(%1,%0) \n\t" + "movq %%mm2, (%2,%0) \n\t" + "movq %%mm3, 8(%2,%0) \n\t" + "jg 1b \n\t" + :"+r"(i) + :"r"(p), "r"(p + nloops), "r"(cptr) + ); + p += nloops*2; + } while (--j); + cptr += nloops*2; + nblocks >>= 1; + nloops <<= 1; + } while (nblocks != 0); + asm volatile("femms"); +} diff --git a/src/libffmpeg/libavcodec/i386/fft_3dn2.c b/src/libffmpeg/libavcodec/i386/fft_3dn2.c new file mode 100644 index 000000000..a4fe5f0b6 --- /dev/null +++ b/src/libffmpeg/libavcodec/i386/fft_3dn2.c @@ -0,0 +1,210 @@ +/* + * FFT/MDCT transform with Extended 3DNow! optimizations + * Copyright (c) 2006 Zuxy MENG Jie, Loren Merritt + * Based on fft_sse.c copyright (c) 2002 Fabrice Bellard. + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +#include "../dsputil.h" + +static const int p1m1[2] __attribute__((aligned(8))) = + { 0, 1 << 31 }; + +static const int m1p1[2] __attribute__((aligned(8))) = + { 1 << 31, 0 }; + +void ff_fft_calc_3dn2(FFTContext *s, FFTComplex *z) +{ + int ln = s->nbits; + long i, j; + long nblocks, nloops; + FFTComplex *p, *cptr; + + asm volatile( + /* FEMMS is not a must here but recommended by AMD */ + "femms \n\t" + "movq %0, %%mm7 \n\t" + ::"m"(*(s->inverse ? m1p1 : p1m1)) + ); + + i = 8 << ln; + asm volatile( + "1: \n\t" + "sub $32, %0 \n\t" + "movq (%0,%1), %%mm0 \n\t" + "movq 16(%0,%1), %%mm1 \n\t" + "movq 8(%0,%1), %%mm2 \n\t" + "movq 24(%0,%1), %%mm3 \n\t" + "movq %%mm0, %%mm4 \n\t" + "movq %%mm1, %%mm5 \n\t" + "pfadd %%mm2, %%mm0 \n\t" + "pfadd %%mm3, %%mm1 \n\t" + "pfsub %%mm2, %%mm4 \n\t" + "pfsub %%mm3, %%mm5 \n\t" + "movq %%mm0, %%mm2 \n\t" + "pswapd %%mm5, %%mm5 \n\t" + "movq %%mm4, %%mm3 \n\t" + "pxor %%mm7, %%mm5 \n\t" + "pfadd %%mm1, %%mm0 \n\t" + "pfadd %%mm5, %%mm4 \n\t" + "pfsub %%mm1, %%mm2 \n\t" + "pfsub %%mm5, %%mm3 \n\t" + "movq %%mm0, (%0,%1) \n\t" + "movq %%mm4, 8(%0,%1) \n\t" + "movq %%mm2, 16(%0,%1) \n\t" + "movq %%mm3, 24(%0,%1) \n\t" + "jg 1b \n\t" + :"+r"(i) + :"r"(z) + ); + /* pass 2 .. ln-1 */ + + nblocks = 1 << (ln-3); + nloops = 1 << 2; + cptr = s->exptab1; + do { + p = z; + j = nblocks; + do { + i = nloops*8; + asm volatile( + "1: \n\t" + "sub $16, %0 \n\t" + "movq (%1,%0), %%mm0 \n\t" + "movq 8(%1,%0), %%mm1 \n\t" + "movq (%2,%0), %%mm2 \n\t" + "movq 8(%2,%0), %%mm3 \n\t" + "movq (%3,%0,2), %%mm4 \n\t" + "movq 8(%3,%0,2), %%mm5 \n\t" + "pswapd %%mm4, %%mm6 \n\t" // no need for cptr[2] & cptr[3] + "pswapd %%mm5, %%mm7 \n\t" + "pfmul %%mm2, %%mm4 \n\t" // cre*re cim*im + "pfmul %%mm3, %%mm5 \n\t" + "pfmul %%mm2, %%mm6 \n\t" // cim*re cre*im + "pfmul %%mm3, %%mm7 \n\t" + "pfpnacc %%mm6, %%mm4 \n\t" // cre*re-cim*im cim*re+cre*im + "pfpnacc %%mm7, %%mm5 \n\t" + "movq %%mm0, %%mm2 \n\t" + "movq %%mm1, %%mm3 \n\t" + "pfadd %%mm4, %%mm0 \n\t" + "pfadd %%mm5, %%mm1 \n\t" + "pfsub %%mm4, %%mm2 \n\t" + "pfsub %%mm5, %%mm3 \n\t" + "movq %%mm0, (%1,%0) \n\t" + "movq %%mm1, 8(%1,%0) \n\t" + "movq %%mm2, (%2,%0) \n\t" + "movq %%mm3, 8(%2,%0) \n\t" + "jg 1b \n\t" + :"+r"(i) + :"r"(p), "r"(p + nloops), "r"(cptr) + ); + p += nloops*2; + } while (--j); + cptr += nloops*2; + nblocks >>= 1; + nloops <<= 1; + } while (nblocks != 0); + asm volatile("femms"); +} + +void ff_imdct_calc_3dn2(MDCTContext *s, FFTSample *output, + const FFTSample *input, FFTSample *tmp) +{ + long k, n8, n4, n2, n; + const uint16_t *revtab = s->fft.revtab; + const FFTSample *tcos = s->tcos; + const FFTSample *tsin = s->tsin; + const FFTSample *in1, *in2; + FFTComplex *z = (FFTComplex *)tmp; + + n = 1 << s->nbits; + n2 = n >> 1; + n4 = n >> 2; + n8 = n >> 3; + + /* pre rotation */ + in1 = input; + in2 = input + n2 - 1; + for(k = 0; k < n4; k++) { + // FIXME a single block is faster, but gcc 2.95 and 3.4.x on 32bit can't compile it + asm volatile( + "movd %0, %%mm0 \n\t" + "movd %2, %%mm1 \n\t" + "punpckldq %1, %%mm0 \n\t" + "punpckldq %3, %%mm1 \n\t" + "movq %%mm0, %%mm2 \n\t" + "pfmul %%mm1, %%mm0 \n\t" + "pswapd %%mm1, %%mm1 \n\t" + "pfmul %%mm1, %%mm2 \n\t" + "pfpnacc %%mm2, %%mm0 \n\t" + ::"m"(in2[-2*k]), "m"(in1[2*k]), + "m"(tcos[k]), "m"(tsin[k]) + ); + asm volatile( + "movq %%mm0, %0 \n\t" + :"=m"(z[revtab[k]]) + ); + } + + ff_fft_calc(&s->fft, z); + + /* post rotation + reordering */ + for(k = 0; k < n4; k++) { + asm volatile( + "movq %0, %%mm0 \n\t" + "movd %1, %%mm1 \n\t" + "punpckldq %2, %%mm1 \n\t" + "movq %%mm0, %%mm2 \n\t" + "pfmul %%mm1, %%mm0 \n\t" + "pswapd %%mm1, %%mm1 \n\t" + "pfmul %%mm1, %%mm2 \n\t" + "pfpnacc %%mm2, %%mm0 \n\t" + "movq %%mm0, %0 \n\t" + :"+m"(z[k]) + :"m"(tcos[k]), "m"(tsin[k]) + ); + } + + k = n-8; + asm volatile("movd %0, %%mm7" ::"r"(1<<31)); + asm volatile( + "1: \n\t" + "movq (%4,%0), %%mm0 \n\t" // z[n8+k] + "neg %0 \n\t" + "pswapd -8(%4,%0), %%mm1 \n\t" // z[n8-1-k] + "movq %%mm0, %%mm2 \n\t" + "pxor %%mm7, %%mm2 \n\t" + "punpckldq %%mm1, %%mm2 \n\t" + "pswapd %%mm2, %%mm3 \n\t" + "punpckhdq %%mm1, %%mm0 \n\t" + "pswapd %%mm0, %%mm4 \n\t" + "pxor %%mm7, %%mm0 \n\t" + "pxor %%mm7, %%mm4 \n\t" + "movq %%mm3, -8(%3,%0) \n\t" // output[n-2-2*k] = { z[n8-1-k].im, -z[n8+k].re } + "movq %%mm4, -8(%2,%0) \n\t" // output[n2-2-2*k]= { -z[n8-1-k].re, z[n8+k].im } + "neg %0 \n\t" + "movq %%mm0, (%1,%0) \n\t" // output[2*k] = { -z[n8+k].im, z[n8-1-k].re } + "movq %%mm2, (%2,%0) \n\t" // output[n2+2*k] = { -z[n8+k].re, z[n8-1-k].im } + "sub $8, %0 \n\t" + "jge 1b \n\t" + :"+r"(k) + :"r"(output), "r"(output+n2), "r"(output+n), "r"(z+n8) + :"memory" + ); + asm volatile("femms"); +} + diff --git a/src/libffmpeg/libavcodec/i386/mathops.h b/src/libffmpeg/libavcodec/i386/mathops.h new file mode 100644 index 000000000..3553a4025 --- /dev/null +++ b/src/libffmpeg/libavcodec/i386/mathops.h @@ -0,0 +1,41 @@ +/* + * simple math operations + * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> et al + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifdef FRAC_BITS +# define MULL(ra, rb) \ + ({ int rt, dummy; asm (\ + "imull %3 \n\t"\ + "shrdl %4, %%edx, %%eax \n\t"\ + : "=a"(rt), "=d"(dummy)\ + : "a" (ra), "rm" (rb), "i"(FRAC_BITS));\ + rt; }) +#endif + +#define MULH(ra, rb) \ + ({ int rt, dummy;\ + asm ("imull %3\n\t" : "=d"(rt), "=a"(dummy): "a" (ra), "rm" (rb));\ + rt; }) + +#define MUL64(ra, rb) \ + ({ int64_t rt;\ + asm ("imull %2\n\t" : "=A"(rt) : "a" (ra), "g" (rb));\ + rt; }) + diff --git a/src/libmpeg2new/libmpeg2/.cvsignore b/src/libffmpeg/libavcodec/libpostproc/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libmpeg2new/libmpeg2/.cvsignore +++ b/src/libffmpeg/libavcodec/libpostproc/.hgignore diff --git a/src/libffmpeg/libavcodec/mathops.h b/src/libffmpeg/libavcodec/mathops.h new file mode 100644 index 000000000..c6ec70597 --- /dev/null +++ b/src/libffmpeg/libavcodec/mathops.h @@ -0,0 +1,69 @@ +/* + * simple math operations + * Copyright (c) 2001, 2002 Fabrice Bellard. + * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> et al + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +#ifndef MATHOPS_H +#define MATHOPS_H + +#ifdef ARCH_X86_32 + +#include "i386/mathops.h" + +#elif defined(ARCH_ARMV4L) + +#include "armv4l/mathops.h" + +#elif defined(ARCH_PPC) + +#include "ppc/mathops.h" + +#endif + +/* generic implementation */ + +#ifndef MULL +# define MULL(a,b) (((int64_t)(a) * (int64_t)(b)) >> FRAC_BITS) +#endif + +#ifndef MULH +//gcc 3.4 creates an incredibly bloated mess out of this +//# define MULH(a,b) (((int64_t)(a) * (int64_t)(b))>>32) + +static av_always_inline int MULH(int a, int b){ + return ((int64_t)(a) * (int64_t)(b))>>32; +} +#endif + +#ifndef MUL64 +# define MUL64(a,b) ((int64_t)(a) * (int64_t)(b)) +#endif + +/* signed 16x16 -> 32 multiply add accumulate */ +#ifndef MAC16 +# define MAC16(rt, ra, rb) rt += (ra) * (rb) +#endif + +/* signed 16x16 -> 32 multiply */ +#ifndef MUL16 +# define MUL16(ra, rb) ((ra) * (rb)) +#endif + +#endif //MATHOPS_H + diff --git a/src/libmusepack/.cvsignore b/src/libffmpeg/libavcodec/mlib/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libmusepack/.cvsignore +++ b/src/libffmpeg/libavcodec/mlib/.hgignore diff --git a/src/libffmpeg/libavcodec/opt.c b/src/libffmpeg/libavcodec/opt.c new file mode 100644 index 000000000..70babd587 --- /dev/null +++ b/src/libffmpeg/libavcodec/opt.c @@ -0,0 +1,381 @@ +/* + * AVOptions + * Copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/** + * @file opt.c + * AVOptions + * @author Michael Niedermayer <michaelni@gmx.at> + */ + +#include "avcodec.h" +#include "opt.h" +#include "eval.h" + +//FIXME order them and do a bin search +static const AVOption *find_opt(void *v, const char *name, const char *unit){ + AVClass *c= *(AVClass**)v; //FIXME silly way of storing AVClass + const AVOption *o= c->option; + + for(;o && o->name; o++){ + if(!strcmp(o->name, name) && (!unit || !strcmp(o->unit, unit)) ) + return o; + } + return NULL; +} + +const AVOption *av_next_option(void *obj, const AVOption *last){ + if(last && last[1].name) return ++last; + else if(last) return NULL; + else return (*(AVClass**)obj)->option; +} + +static const AVOption *av_set_number(void *obj, const char *name, double num, int den, int64_t intnum){ + const AVOption *o= find_opt(obj, name, NULL); + void *dst; + if(!o || o->offset<=0) + return NULL; + + if(o->max*den < num*intnum || o->min*den > num*intnum) { + av_log(NULL, AV_LOG_ERROR, "Value %lf for parameter '%s' out of range.\n", num, name); + return NULL; + } + + dst= ((uint8_t*)obj) + o->offset; + + switch(o->type){ + case FF_OPT_TYPE_FLAGS: + case FF_OPT_TYPE_INT: *(int *)dst= lrintf(num/den)*intnum; break; + case FF_OPT_TYPE_INT64: *(int64_t *)dst= lrintf(num/den)*intnum; break; + case FF_OPT_TYPE_FLOAT: *(float *)dst= num*intnum/den; break; + case FF_OPT_TYPE_DOUBLE:*(double *)dst= num*intnum/den; break; + case FF_OPT_TYPE_RATIONAL: + if((int)num == num) *(AVRational*)dst= (AVRational){num*intnum, den}; + else *(AVRational*)dst= av_d2q(num*intnum/den, 1<<24); + default: + return NULL; + } + return o; +} + +static const AVOption *set_all_opt(void *v, const char *unit, double d){ + AVClass *c= *(AVClass**)v; //FIXME silly way of storing AVClass + const AVOption *o= c->option; + const AVOption *ret=NULL; + + for(;o && o->name; o++){ + if(o->type != FF_OPT_TYPE_CONST && o->unit && !strcmp(o->unit, unit)){ + double tmp= d; + if(o->type == FF_OPT_TYPE_FLAGS) + tmp= av_get_int(v, o->name, NULL) | (int64_t)d; + + av_set_number(v, o->name, tmp, 1, 1); + ret= o; + } + } + return ret; +} + +static double const_values[]={ + M_PI, + M_E, + FF_QP2LAMBDA, + 0 +}; + +static const char *const_names[]={ + "PI", + "E", + "QP2LAMBDA", + 0 +}; + +const AVOption *av_set_string(void *obj, const char *name, const char *val){ + const AVOption *o= find_opt(obj, name, NULL); + if(o && o->offset==0 && o->type == FF_OPT_TYPE_CONST && o->unit){ + return set_all_opt(obj, o->unit, o->default_val); + } + if(!o || !val || o->offset<=0) + return NULL; + if(o->type != FF_OPT_TYPE_STRING){ + for(;;){ + int i; + char buf[256]; + int cmd=0; + double d; + char *error = NULL; + + if(*val == '+' || *val == '-') + cmd= *(val++); + + for(i=0; i<sizeof(buf)-1 && val[i] && val[i]!='+' && val[i]!='-'; i++) + buf[i]= val[i]; + buf[i]=0; + val+= i; + + d = ff_eval2(buf, const_values, const_names, NULL, NULL, NULL, NULL, NULL, &error); + if(isnan(d)) { + const AVOption *o_named= find_opt(obj, buf, o->unit); + if(o_named && o_named->type == FF_OPT_TYPE_CONST) + d= o_named->default_val; + else if(!strcmp(buf, "default")) d= o->default_val; + else if(!strcmp(buf, "max" )) d= o->max; + else if(!strcmp(buf, "min" )) d= o->min; + else { + if (!error) + av_log(NULL, AV_LOG_ERROR, "Unable to parse option value \"%s\": %s\n", val, error); + return NULL; + } + } + if(o->type == FF_OPT_TYPE_FLAGS){ + if (cmd=='+') d= av_get_int(obj, name, NULL) | (int64_t)d; + else if(cmd=='-') d= av_get_int(obj, name, NULL) &~(int64_t)d; + }else if(cmd=='-') + d= -d; + + av_set_number(obj, name, d, 1, 1); + if(!*val) + return o; + } + return NULL; + } + + memcpy(((uint8_t*)obj) + o->offset, val, sizeof(val)); + return o; +} + +const AVOption *av_set_double(void *obj, const char *name, double n){ + return av_set_number(obj, name, n, 1, 1); +} + +const AVOption *av_set_q(void *obj, const char *name, AVRational n){ + return av_set_number(obj, name, n.num, n.den, 1); +} + +const AVOption *av_set_int(void *obj, const char *name, int64_t n){ + return av_set_number(obj, name, 1, 1, n); +} + +/** + * + * @param buf a buffer which is used for returning non string values as strings, can be NULL + * @param buf_len allocated length in bytes of buf + */ +const char *av_get_string(void *obj, const char *name, const AVOption **o_out, char *buf, int buf_len){ + const AVOption *o= find_opt(obj, name, NULL); + void *dst; + if(!o || o->offset<=0) + return NULL; + if(o->type != FF_OPT_TYPE_STRING && (!buf || !buf_len)) + return NULL; + + dst= ((uint8_t*)obj) + o->offset; + if(o_out) *o_out= o; + + if(o->type == FF_OPT_TYPE_STRING) + return dst; + + switch(o->type){ + case FF_OPT_TYPE_FLAGS: snprintf(buf, buf_len, "0x%08X",*(int *)dst);break; + case FF_OPT_TYPE_INT: snprintf(buf, buf_len, "%d" , *(int *)dst);break; + case FF_OPT_TYPE_INT64: snprintf(buf, buf_len, "%"PRId64, *(int64_t*)dst);break; + case FF_OPT_TYPE_FLOAT: snprintf(buf, buf_len, "%f" , *(float *)dst);break; + case FF_OPT_TYPE_DOUBLE: snprintf(buf, buf_len, "%f" , *(double *)dst);break; + case FF_OPT_TYPE_RATIONAL: snprintf(buf, buf_len, "%d/%d", ((AVRational*)dst)->num, ((AVRational*)dst)->den);break; + default: return NULL; + } + return buf; +} + +static int av_get_number(void *obj, const char *name, const AVOption **o_out, double *num, int *den, int64_t *intnum){ + const AVOption *o= find_opt(obj, name, NULL); + void *dst; + if(!o || o->offset<=0) + goto error; + + dst= ((uint8_t*)obj) + o->offset; + + if(o_out) *o_out= o; + + switch(o->type){ + case FF_OPT_TYPE_FLAGS: + case FF_OPT_TYPE_INT: *intnum= *(int *)dst;return 0; + case FF_OPT_TYPE_INT64: *intnum= *(int64_t*)dst;return 0; + case FF_OPT_TYPE_FLOAT: *num= *(float *)dst;return 0; + case FF_OPT_TYPE_DOUBLE: *num= *(double *)dst;return 0; + case FF_OPT_TYPE_RATIONAL: *intnum= ((AVRational*)dst)->num; + *den = ((AVRational*)dst)->den; + return 0; + } +error: + *den=*intnum=0; + return -1; +} + +double av_get_double(void *obj, const char *name, const AVOption **o_out){ + int64_t intnum=1; + double num=1; + int den=1; + + av_get_number(obj, name, o_out, &num, &den, &intnum); + return num*intnum/den; +} + +AVRational av_get_q(void *obj, const char *name, const AVOption **o_out){ + int64_t intnum=1; + double num=1; + int den=1; + + av_get_number(obj, name, o_out, &num, &den, &intnum); + if(num == 1.0 && (int)intnum == intnum) + return (AVRational){intnum, den}; + else + return av_d2q(num*intnum/den, 1<<24); +} + +int64_t av_get_int(void *obj, const char *name, const AVOption **o_out){ + int64_t intnum=1; + double num=1; + int den=1; + + av_get_number(obj, name, o_out, &num, &den, &intnum); + return num*intnum/den; +} + +static void opt_list(void *obj, void *av_log_obj, const char *unit) +{ + const AVOption *opt=NULL; + + while((opt= av_next_option(obj, opt))){ + if(!(opt->flags & (AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM))) + continue; + + /* Don't print CONST's on level one. + * Don't print anything but CONST's on level two. + * Only print items from the requested unit. + */ + if (!unit && opt->type==FF_OPT_TYPE_CONST) + continue; + else if (unit && opt->type!=FF_OPT_TYPE_CONST) + continue; + else if (unit && opt->type==FF_OPT_TYPE_CONST && strcmp(unit, opt->unit)) + continue; + else if (unit && opt->type == FF_OPT_TYPE_CONST) + av_log(av_log_obj, AV_LOG_INFO, " %-15s ", opt->name); + else + av_log(av_log_obj, AV_LOG_INFO, "-%-17s ", opt->name); + + switch( opt->type ) + { + case FF_OPT_TYPE_FLAGS: + av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<flags>" ); + break; + case FF_OPT_TYPE_INT: + av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<int>" ); + break; + case FF_OPT_TYPE_INT64: + av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<int64>" ); + break; + case FF_OPT_TYPE_DOUBLE: + av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<double>" ); + break; + case FF_OPT_TYPE_FLOAT: + av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<float>" ); + break; + case FF_OPT_TYPE_STRING: + av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<string>" ); + break; + case FF_OPT_TYPE_RATIONAL: + av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<rational>" ); + break; + case FF_OPT_TYPE_CONST: + default: + av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "" ); + break; + } + av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.'); + av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.'); + av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_VIDEO_PARAM ) ? 'V' : '.'); + av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_AUDIO_PARAM ) ? 'A' : '.'); + av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.'); + + if(opt->help) + av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help); + av_log(av_log_obj, AV_LOG_INFO, "\n"); + if (opt->unit && opt->type != FF_OPT_TYPE_CONST) { + opt_list(obj, av_log_obj, opt->unit); + } + } +} + +int av_opt_show(void *obj, void *av_log_obj){ + if(!obj) + return -1; + + av_log(av_log_obj, AV_LOG_INFO, "%s AVOptions:\n", (*(AVClass**)obj)->class_name); + + opt_list(obj, av_log_obj, NULL); + + return 0; +} + +/** Set the values of the AVCodecContext or AVFormatContext structure. + * They are set to the defaults specified in the according AVOption options + * array default_val field. + * + * @param s AVCodecContext or AVFormatContext for which the defaults will be set + */ +void av_opt_set_defaults(void *s) +{ + const AVOption *opt = NULL; + while ((opt = av_next_option(s, opt)) != NULL) { + switch(opt->type) { + case FF_OPT_TYPE_CONST: + /* Nothing to be done here */ + break; + case FF_OPT_TYPE_FLAGS: + case FF_OPT_TYPE_INT: { + int val; + val = opt->default_val; + av_set_int(s, opt->name, val); + } + break; + case FF_OPT_TYPE_FLOAT: { + double val; + val = opt->default_val; + av_set_double(s, opt->name, val); + } + break; + case FF_OPT_TYPE_RATIONAL: { + AVRational val; + val = av_d2q(opt->default_val, INT_MAX); + av_set_q(s, opt->name, val); + } + break; + case FF_OPT_TYPE_STRING: + /* Cannot set default for string as default_val is of type * double */ + break; + default: + av_log(s, AV_LOG_DEBUG, "AVOption type %d of option %s not implemented yet\n", opt->type, opt->name); + } + } +} + diff --git a/src/libffmpeg/libavcodec/parser.h b/src/libffmpeg/libavcodec/parser.h new file mode 100644 index 000000000..3496b341f --- /dev/null +++ b/src/libffmpeg/libavcodec/parser.h @@ -0,0 +1,63 @@ +/* + * AVCodecParser prototypes and definitions + * Copyright (c) 2003 Fabrice Bellard. + * Copyright (c) 2003 Michael Niedermayer. + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef FFMPEG_PARSER_H +#define FFMPEG_PARSER_H + +typedef struct ParseContext{ + uint8_t *buffer; + int index; + int last_index; + unsigned int buffer_size; + uint32_t state; ///< contains the last few bytes in MSB order + int frame_start_found; + int overread; ///< the number of bytes which where irreversibly read from the next frame + int overread_index; ///< the index into ParseContext.buffer of the overreaded bytes +} ParseContext; + +struct MpegEncContext; + +typedef struct ParseContext1{ + ParseContext pc; +/* XXX/FIXME PC1 vs. PC */ + /* MPEG2 specific */ + AVRational frame_rate; + int progressive_sequence; + int width, height; + + /* XXX: suppress that, needed by MPEG4 */ + struct MpegEncContext *enc; + int first_picture; +} ParseContext1; + +#define END_NOT_FOUND (-100) + +int ff_combine_frame(ParseContext *pc, int next, uint8_t **buf, int *buf_size); +int ff_mpeg4video_split(AVCodecContext *avctx, const uint8_t *buf, + int buf_size); +void ff_parse_close(AVCodecParserContext *s); +void ff_parse1_close(AVCodecParserContext *s); + +/* h263dec.c */ +int ff_mpeg4_find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size); + +#endif /* !FFMPEG_PARSER_H */ diff --git a/src/libreal/.cvsignore b/src/libffmpeg/libavcodec/ppc/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libreal/.cvsignore +++ b/src/libffmpeg/libavcodec/ppc/.hgignore diff --git a/src/libffmpeg/libavcodec/ppc/float_altivec.c b/src/libffmpeg/libavcodec/ppc/float_altivec.c new file mode 100644 index 000000000..22c2de61a --- /dev/null +++ b/src/libffmpeg/libavcodec/ppc/float_altivec.c @@ -0,0 +1,193 @@ +/* + * Copyright (c) 2006 Luca Barbato <lu_zero@gentoo.org> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "../dsputil.h" + +#include "gcc_fixes.h" + +#include "dsputil_altivec.h" + +static void vector_fmul_altivec(float *dst, const float *src, int len) +{ + int i; + vector float d0, d1, s, zero = (vector float)vec_splat_u32(0); + for(i=0; i<len-7; i+=8) { + d0 = vec_ld(0, dst+i); + s = vec_ld(0, src+i); + d1 = vec_ld(16, dst+i); + d0 = vec_madd(d0, s, zero); + d1 = vec_madd(d1, vec_ld(16,src+i), zero); + vec_st(d0, 0, dst+i); + vec_st(d1, 16, dst+i); + } +} + +static void vector_fmul_reverse_altivec(float *dst, const float *src0, + const float *src1, int len) +{ + int i; + vector float d, s0, s1, h0, l0, + s2, s3, zero = (vector float)vec_splat_u32(0); + src1 += len-4; + for(i=0; i<len-7; i+=8) { + s1 = vec_ld(0, src1-i); // [a,b,c,d] + s0 = vec_ld(0, src0+i); + l0 = vec_mergel(s1, s1); // [c,c,d,d] + s3 = vec_ld(-16, src1-i); + h0 = vec_mergeh(s1, s1); // [a,a,b,b] + s2 = vec_ld(16, src0+i); + s1 = vec_mergeh(vec_mergel(l0,h0), // [d,b,d,b] + vec_mergeh(l0,h0)); // [c,a,c,a] + // [d,c,b,a] + l0 = vec_mergel(s3, s3); + d = vec_madd(s0, s1, zero); + h0 = vec_mergeh(s3, s3); + vec_st(d, 0, dst+i); + s3 = vec_mergeh(vec_mergel(l0,h0), + vec_mergeh(l0,h0)); + d = vec_madd(s2, s3, zero); + vec_st(d, 16, dst+i); + } +} + +static void vector_fmul_add_add_altivec(float *dst, const float *src0, + const float *src1, const float *src2, + int src3, int len, int step) +{ + int i; + vector float d, s0, s1, s2, t0, t1, edges; + vector unsigned char align = vec_lvsr(0,dst), + mask = vec_lvsl(0, dst); + +#if 0 //FIXME: there is still something wrong + if (step == 2) { + int y; + vector float d0, d1, s3, t2; + vector unsigned int sel = + vec_mergeh(vec_splat_u32(-1), vec_splat_u32(0)); + t1 = vec_ld(16, dst); + for (i=0,y=0; i<len-3; i+=4,y+=8) { + + s0 = vec_ld(0,src0+i); + s1 = vec_ld(0,src1+i); + s2 = vec_ld(0,src2+i); + +// t0 = vec_ld(0, dst+y); //[x x x|a] +// t1 = vec_ld(16, dst+y); //[b c d|e] + t2 = vec_ld(31, dst+y); //[f g h|x] + + d = vec_madd(s0,s1,s2); // [A B C D] + + // [A A B B] + + // [C C D D] + + d0 = vec_perm(t0, t1, mask); // [a b c d] + + d0 = vec_sel(vec_mergeh(d, d), d0, sel); // [A b B d] + + edges = vec_perm(t1, t0, mask); + + t0 = vec_perm(edges, d0, align); // [x x x|A] + + t1 = vec_perm(d0, edges, align); // [b B d|e] + + vec_stl(t0, 0, dst+y); + + d1 = vec_perm(t1, t2, mask); // [e f g h] + + d1 = vec_sel(vec_mergel(d, d), d1, sel); // [C f D h] + + edges = vec_perm(t2, t1, mask); + + t1 = vec_perm(edges, d1, align); // [b B d|C] + + t2 = vec_perm(d1, edges, align); // [f D h|x] + + vec_stl(t1, 16, dst+y); + + t0 = t1; + + vec_stl(t2, 31, dst+y); + + t1 = t2; + } + } else + #endif + if (step == 1 && src3 == 0) + for (i=0; i<len-3; i+=4) { + t0 = vec_ld(0, dst+i); + t1 = vec_ld(15, dst+i); + s0 = vec_ld(0, src0+i); + s1 = vec_ld(0, src1+i); + s2 = vec_ld(0, src2+i); + edges = vec_perm(t1 ,t0, mask); + d = vec_madd(s0,s1,s2); + t1 = vec_perm(d, edges, align); + t0 = vec_perm(edges, d, align); + vec_st(t1, 15, dst+i); + vec_st(t0, 0, dst+i); + } + else + ff_vector_fmul_add_add_c(dst, src0, src1, src2, src3, len, step); +} + +void float_to_int16_altivec(int16_t *dst, const float *src, int len) +{ + int i; + vector float s0, s1; + vector signed int t0, t1; + vector signed short d0, d1, d; + vector unsigned char align; + if(((long)dst)&15) //FIXME + for(i=0; i<len-7; i+=8) { + s0 = vec_ld(0, src+i); + s1 = vec_ld(16, src+i); + t0 = vec_cts(s0, 0); + d0 = vec_ld(0, dst+i); + t1 = vec_cts(s1, 0); + d1 = vec_ld(15, dst+i); + d = vec_packs(t0,t1); + d1 = vec_perm(d1, d0, vec_lvsl(0,dst+i)); + align = vec_lvsr(0, dst+i); + d0 = vec_perm(d1, d, align); + d1 = vec_perm(d, d1, align); + vec_st(d0, 0, dst+i); + vec_st(d1,15, dst+i); + } + else + for(i=0; i<len-7; i+=8) { + s0 = vec_ld(0, src+i); + s1 = vec_ld(16, src+i); + t0 = vec_cts(s0, 0); + t1 = vec_cts(s1, 0); + d = vec_packs(t0,t1); + vec_st(d, 0, dst+i); + } +} + +void float_init_altivec(DSPContext* c, AVCodecContext *avctx) +{ + c->vector_fmul = vector_fmul_altivec; + c->vector_fmul_reverse = vector_fmul_reverse_altivec; + c->vector_fmul_add_add = vector_fmul_add_add_altivec; + if(!(avctx->flags & CODEC_FLAG_BITEXACT)) + c->float_to_int16 = float_to_int16_altivec; +} diff --git a/src/libffmpeg/libavcodec/ppc/h264_altivec.c b/src/libffmpeg/libavcodec/ppc/h264_altivec.c new file mode 100644 index 000000000..bac620e82 --- /dev/null +++ b/src/libffmpeg/libavcodec/ppc/h264_altivec.c @@ -0,0 +1,565 @@ +/* + * Copyright (c) 2004 Romain Dolbeau <romain@dolbeau.org> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "../dsputil.h" + +#include "gcc_fixes.h" + +#include "dsputil_altivec.h" +#include "types_altivec.h" + +#define PUT_OP_U8_ALTIVEC(d, s, dst) d = s +#define AVG_OP_U8_ALTIVEC(d, s, dst) d = vec_avg(dst, s) + +#define OP_U8_ALTIVEC PUT_OP_U8_ALTIVEC +#define PREFIX_h264_chroma_mc8_altivec put_h264_chroma_mc8_altivec +#define PREFIX_h264_chroma_mc8_num altivec_put_h264_chroma_mc8_num +#define PREFIX_h264_qpel16_h_lowpass_altivec put_h264_qpel16_h_lowpass_altivec +#define PREFIX_h264_qpel16_h_lowpass_num altivec_put_h264_qpel16_h_lowpass_num +#define PREFIX_h264_qpel16_v_lowpass_altivec put_h264_qpel16_v_lowpass_altivec +#define PREFIX_h264_qpel16_v_lowpass_num altivec_put_h264_qpel16_v_lowpass_num +#define PREFIX_h264_qpel16_hv_lowpass_altivec put_h264_qpel16_hv_lowpass_altivec +#define PREFIX_h264_qpel16_hv_lowpass_num altivec_put_h264_qpel16_hv_lowpass_num +#include "h264_template_altivec.c" +#undef OP_U8_ALTIVEC +#undef PREFIX_h264_chroma_mc8_altivec +#undef PREFIX_h264_chroma_mc8_num +#undef PREFIX_h264_qpel16_h_lowpass_altivec +#undef PREFIX_h264_qpel16_h_lowpass_num +#undef PREFIX_h264_qpel16_v_lowpass_altivec +#undef PREFIX_h264_qpel16_v_lowpass_num +#undef PREFIX_h264_qpel16_hv_lowpass_altivec +#undef PREFIX_h264_qpel16_hv_lowpass_num + +#define OP_U8_ALTIVEC AVG_OP_U8_ALTIVEC +#define PREFIX_h264_chroma_mc8_altivec avg_h264_chroma_mc8_altivec +#define PREFIX_h264_chroma_mc8_num altivec_avg_h264_chroma_mc8_num +#define PREFIX_h264_qpel16_h_lowpass_altivec avg_h264_qpel16_h_lowpass_altivec +#define PREFIX_h264_qpel16_h_lowpass_num altivec_avg_h264_qpel16_h_lowpass_num +#define PREFIX_h264_qpel16_v_lowpass_altivec avg_h264_qpel16_v_lowpass_altivec +#define PREFIX_h264_qpel16_v_lowpass_num altivec_avg_h264_qpel16_v_lowpass_num +#define PREFIX_h264_qpel16_hv_lowpass_altivec avg_h264_qpel16_hv_lowpass_altivec +#define PREFIX_h264_qpel16_hv_lowpass_num altivec_avg_h264_qpel16_hv_lowpass_num +#include "h264_template_altivec.c" +#undef OP_U8_ALTIVEC +#undef PREFIX_h264_chroma_mc8_altivec +#undef PREFIX_h264_chroma_mc8_num +#undef PREFIX_h264_qpel16_h_lowpass_altivec +#undef PREFIX_h264_qpel16_h_lowpass_num +#undef PREFIX_h264_qpel16_v_lowpass_altivec +#undef PREFIX_h264_qpel16_v_lowpass_num +#undef PREFIX_h264_qpel16_hv_lowpass_altivec +#undef PREFIX_h264_qpel16_hv_lowpass_num + +#define H264_MC(OPNAME, SIZE, CODETYPE) \ +static void OPNAME ## h264_qpel ## SIZE ## _mc00_ ## CODETYPE (uint8_t *dst, uint8_t *src, int stride){\ + OPNAME ## pixels ## SIZE ## _ ## CODETYPE(dst, src, stride, SIZE);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc10_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){ \ + DECLARE_ALIGNED_16(uint8_t, half[SIZE*SIZE]);\ + put_h264_qpel ## SIZE ## _h_lowpass_ ## CODETYPE(half, src, SIZE, stride);\ + OPNAME ## pixels ## SIZE ## _l2_ ## CODETYPE(dst, src, half, stride, stride, SIZE);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc20_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + OPNAME ## h264_qpel ## SIZE ## _h_lowpass_ ## CODETYPE(dst, src, stride, stride);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc30_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + DECLARE_ALIGNED_16(uint8_t, half[SIZE*SIZE]);\ + put_h264_qpel ## SIZE ## _h_lowpass_ ## CODETYPE(half, src, SIZE, stride);\ + OPNAME ## pixels ## SIZE ## _l2_ ## CODETYPE(dst, src+1, half, stride, stride, SIZE);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc01_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + DECLARE_ALIGNED_16(uint8_t, half[SIZE*SIZE]);\ + put_h264_qpel ## SIZE ## _v_lowpass_ ## CODETYPE(half, src, SIZE, stride);\ + OPNAME ## pixels ## SIZE ## _l2_ ## CODETYPE(dst, src, half, stride, stride, SIZE);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc02_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + OPNAME ## h264_qpel ## SIZE ## _v_lowpass_ ## CODETYPE(dst, src, stride, stride);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc03_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + DECLARE_ALIGNED_16(uint8_t, half[SIZE*SIZE]);\ + put_h264_qpel ## SIZE ## _v_lowpass_ ## CODETYPE(half, src, SIZE, stride);\ + OPNAME ## pixels ## SIZE ## _l2_ ## CODETYPE(dst, src+stride, half, stride, stride, SIZE);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc11_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + DECLARE_ALIGNED_16(uint8_t, halfH[SIZE*SIZE]);\ + DECLARE_ALIGNED_16(uint8_t, halfV[SIZE*SIZE]);\ + put_h264_qpel ## SIZE ## _h_lowpass_ ## CODETYPE(halfH, src, SIZE, stride);\ + put_h264_qpel ## SIZE ## _v_lowpass_ ## CODETYPE(halfV, src, SIZE, stride);\ + OPNAME ## pixels ## SIZE ## _l2_ ## CODETYPE(dst, halfH, halfV, stride, SIZE, SIZE);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc31_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + DECLARE_ALIGNED_16(uint8_t, halfH[SIZE*SIZE]);\ + DECLARE_ALIGNED_16(uint8_t, halfV[SIZE*SIZE]);\ + put_h264_qpel ## SIZE ## _h_lowpass_ ## CODETYPE(halfH, src, SIZE, stride);\ + put_h264_qpel ## SIZE ## _v_lowpass_ ## CODETYPE(halfV, src+1, SIZE, stride);\ + OPNAME ## pixels ## SIZE ## _l2_ ## CODETYPE(dst, halfH, halfV, stride, SIZE, SIZE);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc13_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + DECLARE_ALIGNED_16(uint8_t, halfH[SIZE*SIZE]);\ + DECLARE_ALIGNED_16(uint8_t, halfV[SIZE*SIZE]);\ + put_h264_qpel ## SIZE ## _h_lowpass_ ## CODETYPE(halfH, src + stride, SIZE, stride);\ + put_h264_qpel ## SIZE ## _v_lowpass_ ## CODETYPE(halfV, src, SIZE, stride);\ + OPNAME ## pixels ## SIZE ## _l2_ ## CODETYPE(dst, halfH, halfV, stride, SIZE, SIZE);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc33_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + DECLARE_ALIGNED_16(uint8_t, halfH[SIZE*SIZE]);\ + DECLARE_ALIGNED_16(uint8_t, halfV[SIZE*SIZE]);\ + put_h264_qpel ## SIZE ## _h_lowpass_ ## CODETYPE(halfH, src + stride, SIZE, stride);\ + put_h264_qpel ## SIZE ## _v_lowpass_ ## CODETYPE(halfV, src+1, SIZE, stride);\ + OPNAME ## pixels ## SIZE ## _l2_ ## CODETYPE(dst, halfH, halfV, stride, SIZE, SIZE);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc22_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + DECLARE_ALIGNED_16(int16_t, tmp[SIZE*(SIZE+8)]);\ + OPNAME ## h264_qpel ## SIZE ## _hv_lowpass_ ## CODETYPE(dst, tmp, src, stride, SIZE, stride);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc21_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + DECLARE_ALIGNED_16(uint8_t, halfH[SIZE*SIZE]);\ + DECLARE_ALIGNED_16(uint8_t, halfHV[SIZE*SIZE]);\ + DECLARE_ALIGNED_16(int16_t, tmp[SIZE*(SIZE+8)]);\ + put_h264_qpel ## SIZE ## _h_lowpass_ ## CODETYPE(halfH, src, SIZE, stride);\ + put_h264_qpel ## SIZE ## _hv_lowpass_ ## CODETYPE(halfHV, tmp, src, SIZE, SIZE, stride);\ + OPNAME ## pixels ## SIZE ## _l2_ ## CODETYPE(dst, halfH, halfHV, stride, SIZE, SIZE);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc23_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + DECLARE_ALIGNED_16(uint8_t, halfH[SIZE*SIZE]);\ + DECLARE_ALIGNED_16(uint8_t, halfHV[SIZE*SIZE]);\ + DECLARE_ALIGNED_16(int16_t, tmp[SIZE*(SIZE+8)]);\ + put_h264_qpel ## SIZE ## _h_lowpass_ ## CODETYPE(halfH, src + stride, SIZE, stride);\ + put_h264_qpel ## SIZE ## _hv_lowpass_ ## CODETYPE(halfHV, tmp, src, SIZE, SIZE, stride);\ + OPNAME ## pixels ## SIZE ## _l2_ ## CODETYPE(dst, halfH, halfHV, stride, SIZE, SIZE);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc12_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + DECLARE_ALIGNED_16(uint8_t, halfV[SIZE*SIZE]);\ + DECLARE_ALIGNED_16(uint8_t, halfHV[SIZE*SIZE]);\ + DECLARE_ALIGNED_16(int16_t, tmp[SIZE*(SIZE+8)]);\ + put_h264_qpel ## SIZE ## _v_lowpass_ ## CODETYPE(halfV, src, SIZE, stride);\ + put_h264_qpel ## SIZE ## _hv_lowpass_ ## CODETYPE(halfHV, tmp, src, SIZE, SIZE, stride);\ + OPNAME ## pixels ## SIZE ## _l2_ ## CODETYPE(dst, halfV, halfHV, stride, SIZE, SIZE);\ +}\ +\ +static void OPNAME ## h264_qpel ## SIZE ## _mc32_ ## CODETYPE(uint8_t *dst, uint8_t *src, int stride){\ + DECLARE_ALIGNED_16(uint8_t, halfV[SIZE*SIZE]);\ + DECLARE_ALIGNED_16(uint8_t, halfHV[SIZE*SIZE]);\ + DECLARE_ALIGNED_16(int16_t, tmp[SIZE*(SIZE+8)]);\ + put_h264_qpel ## SIZE ## _v_lowpass_ ## CODETYPE(halfV, src+1, SIZE, stride);\ + put_h264_qpel ## SIZE ## _hv_lowpass_ ## CODETYPE(halfHV, tmp, src, SIZE, SIZE, stride);\ + OPNAME ## pixels ## SIZE ## _l2_ ## CODETYPE(dst, halfV, halfHV, stride, SIZE, SIZE);\ +}\ + +/* this code assume that stride % 16 == 0 */ +void put_no_rnd_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride, int h, int x, int y) { + signed int ABCD[4] __attribute__((aligned(16))) = + {((8 - x) * (8 - y)), + ((x) * (8 - y)), + ((8 - x) * (y)), + ((x) * (y))}; + register int i; + vector unsigned char fperm; + const vector signed int vABCD = vec_ld(0, ABCD); + const vector signed short vA = vec_splat((vector signed short)vABCD, 1); + const vector signed short vB = vec_splat((vector signed short)vABCD, 3); + const vector signed short vC = vec_splat((vector signed short)vABCD, 5); + const vector signed short vD = vec_splat((vector signed short)vABCD, 7); + const vector signed int vzero = vec_splat_s32(0); + const vector signed short v28ss = vec_sub(vec_sl(vec_splat_s16(1),vec_splat_u16(5)),vec_splat_s16(4)); + const vector unsigned short v6us = vec_splat_u16(6); + register int loadSecond = (((unsigned long)src) % 16) <= 7 ? 0 : 1; + register int reallyBadAlign = (((unsigned long)src) % 16) == 15 ? 1 : 0; + + vector unsigned char vsrcAuc, vsrcBuc, vsrcperm0, vsrcperm1; + vector unsigned char vsrc0uc, vsrc1uc; + vector signed short vsrc0ssH, vsrc1ssH; + vector unsigned char vsrcCuc, vsrc2uc, vsrc3uc; + vector signed short vsrc2ssH, vsrc3ssH, psum; + vector unsigned char vdst, ppsum, fsum; + + if (((unsigned long)dst) % 16 == 0) { + fperm = (vector unsigned char)AVV(0x10, 0x11, 0x12, 0x13, + 0x14, 0x15, 0x16, 0x17, + 0x08, 0x09, 0x0A, 0x0B, + 0x0C, 0x0D, 0x0E, 0x0F); + } else { + fperm = (vector unsigned char)AVV(0x00, 0x01, 0x02, 0x03, + 0x04, 0x05, 0x06, 0x07, + 0x18, 0x19, 0x1A, 0x1B, + 0x1C, 0x1D, 0x1E, 0x1F); + } + + vsrcAuc = vec_ld(0, src); + + if (loadSecond) + vsrcBuc = vec_ld(16, src); + vsrcperm0 = vec_lvsl(0, src); + vsrcperm1 = vec_lvsl(1, src); + + vsrc0uc = vec_perm(vsrcAuc, vsrcBuc, vsrcperm0); + if (reallyBadAlign) + vsrc1uc = vsrcBuc; + else + vsrc1uc = vec_perm(vsrcAuc, vsrcBuc, vsrcperm1); + + vsrc0ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, + (vector unsigned char)vsrc0uc); + vsrc1ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, + (vector unsigned char)vsrc1uc); + + if (!loadSecond) {// -> !reallyBadAlign + for (i = 0 ; i < h ; i++) { + + + vsrcCuc = vec_ld(stride + 0, src); + + vsrc2uc = vec_perm(vsrcCuc, vsrcCuc, vsrcperm0); + vsrc3uc = vec_perm(vsrcCuc, vsrcCuc, vsrcperm1); + + vsrc2ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, + (vector unsigned char)vsrc2uc); + vsrc3ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, + (vector unsigned char)vsrc3uc); + + psum = vec_mladd(vA, vsrc0ssH, vec_splat_s16(0)); + psum = vec_mladd(vB, vsrc1ssH, psum); + psum = vec_mladd(vC, vsrc2ssH, psum); + psum = vec_mladd(vD, vsrc3ssH, psum); + psum = vec_add(v28ss, psum); + psum = vec_sra(psum, v6us); + + vdst = vec_ld(0, dst); + ppsum = (vector unsigned char)vec_packsu(psum, psum); + fsum = vec_perm(vdst, ppsum, fperm); + + vec_st(fsum, 0, dst); + + vsrc0ssH = vsrc2ssH; + vsrc1ssH = vsrc3ssH; + + dst += stride; + src += stride; + } + } else { + vector unsigned char vsrcDuc; + for (i = 0 ; i < h ; i++) { + vsrcCuc = vec_ld(stride + 0, src); + vsrcDuc = vec_ld(stride + 16, src); + + vsrc2uc = vec_perm(vsrcCuc, vsrcDuc, vsrcperm0); + if (reallyBadAlign) + vsrc3uc = vsrcDuc; + else + vsrc3uc = vec_perm(vsrcCuc, vsrcDuc, vsrcperm1); + + vsrc2ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, + (vector unsigned char)vsrc2uc); + vsrc3ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, + (vector unsigned char)vsrc3uc); + + psum = vec_mladd(vA, vsrc0ssH, vec_splat_s16(0)); + psum = vec_mladd(vB, vsrc1ssH, psum); + psum = vec_mladd(vC, vsrc2ssH, psum); + psum = vec_mladd(vD, vsrc3ssH, psum); + psum = vec_add(v28ss, psum); + psum = vec_sr(psum, v6us); + + vdst = vec_ld(0, dst); + ppsum = (vector unsigned char)vec_pack(psum, psum); + fsum = vec_perm(vdst, ppsum, fperm); + + vec_st(fsum, 0, dst); + + vsrc0ssH = vsrc2ssH; + vsrc1ssH = vsrc3ssH; + + dst += stride; + src += stride; + } + } +} + +static inline void put_pixels16_l2_altivec( uint8_t * dst, const uint8_t * src1, + const uint8_t * src2, int dst_stride, + int src_stride1, int h) +{ + int i; + vector unsigned char a, b, d, tmp1, tmp2, mask, mask_, edges, align; + + mask_ = vec_lvsl(0, src2); + + for (i = 0; i < h; i++) { + + tmp1 = vec_ld(i * src_stride1, src1); + mask = vec_lvsl(i * src_stride1, src1); + tmp2 = vec_ld(i * src_stride1 + 15, src1); + + a = vec_perm(tmp1, tmp2, mask); + + tmp1 = vec_ld(i * 16, src2); + tmp2 = vec_ld(i * 16 + 15, src2); + + b = vec_perm(tmp1, tmp2, mask_); + + tmp1 = vec_ld(0, dst); + mask = vec_lvsl(0, dst); + tmp2 = vec_ld(15, dst); + + d = vec_avg(a, b); + + edges = vec_perm(tmp2, tmp1, mask); + + align = vec_lvsr(0, dst); + + tmp2 = vec_perm(d, edges, align); + tmp1 = vec_perm(edges, d, align); + + vec_st(tmp2, 15, dst); + vec_st(tmp1, 0 , dst); + + dst += dst_stride; + } +} + +static inline void avg_pixels16_l2_altivec( uint8_t * dst, const uint8_t * src1, + const uint8_t * src2, int dst_stride, + int src_stride1, int h) +{ + int i; + vector unsigned char a, b, d, tmp1, tmp2, mask, mask_, edges, align; + + mask_ = vec_lvsl(0, src2); + + for (i = 0; i < h; i++) { + + tmp1 = vec_ld(i * src_stride1, src1); + mask = vec_lvsl(i * src_stride1, src1); + tmp2 = vec_ld(i * src_stride1 + 15, src1); + + a = vec_perm(tmp1, tmp2, mask); + + tmp1 = vec_ld(i * 16, src2); + tmp2 = vec_ld(i * 16 + 15, src2); + + b = vec_perm(tmp1, tmp2, mask_); + + tmp1 = vec_ld(0, dst); + mask = vec_lvsl(0, dst); + tmp2 = vec_ld(15, dst); + + d = vec_avg(vec_perm(tmp1, tmp2, mask), vec_avg(a, b)); + + edges = vec_perm(tmp2, tmp1, mask); + + align = vec_lvsr(0, dst); + + tmp2 = vec_perm(d, edges, align); + tmp1 = vec_perm(edges, d, align); + + vec_st(tmp2, 15, dst); + vec_st(tmp1, 0 , dst); + + dst += dst_stride; + } +} + +/* Implemented but could be faster +#define put_pixels16_l2_altivec(d,s1,s2,ds,s1s,h) put_pixels16_l2(d,s1,s2,ds,s1s,16,h) +#define avg_pixels16_l2_altivec(d,s1,s2,ds,s1s,h) avg_pixels16_l2(d,s1,s2,ds,s1s,16,h) + */ + + H264_MC(put_, 16, altivec) + H264_MC(avg_, 16, altivec) + + +/**************************************************************************** + * IDCT transform: + ****************************************************************************/ + +#define IDCT8_1D_ALTIVEC(s0, s1, s2, s3, s4, s5, s6, s7, d0, d1, d2, d3, d4, d5, d6, d7) {\ + /* a0 = SRC(0) + SRC(4); */ \ + vec_s16_t a0v = vec_add(s0, s4); \ + /* a2 = SRC(0) - SRC(4); */ \ + vec_s16_t a2v = vec_sub(s0, s4); \ + /* a4 = (SRC(2)>>1) - SRC(6); */ \ + vec_s16_t a4v = vec_sub(vec_sra(s2, onev), s6); \ + /* a6 = (SRC(6)>>1) + SRC(2); */ \ + vec_s16_t a6v = vec_add(vec_sra(s6, onev), s2); \ + /* b0 = a0 + a6; */ \ + vec_s16_t b0v = vec_add(a0v, a6v); \ + /* b2 = a2 + a4; */ \ + vec_s16_t b2v = vec_add(a2v, a4v); \ + /* b4 = a2 - a4; */ \ + vec_s16_t b4v = vec_sub(a2v, a4v); \ + /* b6 = a0 - a6; */ \ + vec_s16_t b6v = vec_sub(a0v, a6v); \ + /* a1 = SRC(5) - SRC(3) - SRC(7) - (SRC(7)>>1); */ \ + /* a1 = (SRC(5)-SRC(3)) - (SRC(7) + (SRC(7)>>1)); */ \ + vec_s16_t a1v = vec_sub( vec_sub(s5, s3), vec_add(s7, vec_sra(s7, onev)) ); \ + /* a3 = SRC(7) + SRC(1) - SRC(3) - (SRC(3)>>1); */ \ + /* a3 = (SRC(7)+SRC(1)) - (SRC(3) + (SRC(3)>>1)); */ \ + vec_s16_t a3v = vec_sub( vec_add(s7, s1), vec_add(s3, vec_sra(s3, onev)) );\ + /* a5 = SRC(7) - SRC(1) + SRC(5) + (SRC(5)>>1); */ \ + /* a5 = (SRC(7)-SRC(1)) + SRC(5) + (SRC(5)>>1); */ \ + vec_s16_t a5v = vec_add( vec_sub(s7, s1), vec_add(s5, vec_sra(s5, onev)) );\ + /* a7 = SRC(5)+SRC(3) + SRC(1) + (SRC(1)>>1); */ \ + vec_s16_t a7v = vec_add( vec_add(s5, s3), vec_add(s1, vec_sra(s1, onev)) );\ + /* b1 = (a7>>2) + a1; */ \ + vec_s16_t b1v = vec_add( vec_sra(a7v, twov), a1v); \ + /* b3 = a3 + (a5>>2); */ \ + vec_s16_t b3v = vec_add(a3v, vec_sra(a5v, twov)); \ + /* b5 = (a3>>2) - a5; */ \ + vec_s16_t b5v = vec_sub( vec_sra(a3v, twov), a5v); \ + /* b7 = a7 - (a1>>2); */ \ + vec_s16_t b7v = vec_sub( a7v, vec_sra(a1v, twov)); \ + /* DST(0, b0 + b7); */ \ + d0 = vec_add(b0v, b7v); \ + /* DST(1, b2 + b5); */ \ + d1 = vec_add(b2v, b5v); \ + /* DST(2, b4 + b3); */ \ + d2 = vec_add(b4v, b3v); \ + /* DST(3, b6 + b1); */ \ + d3 = vec_add(b6v, b1v); \ + /* DST(4, b6 - b1); */ \ + d4 = vec_sub(b6v, b1v); \ + /* DST(5, b4 - b3); */ \ + d5 = vec_sub(b4v, b3v); \ + /* DST(6, b2 - b5); */ \ + d6 = vec_sub(b2v, b5v); \ + /* DST(7, b0 - b7); */ \ + d7 = vec_sub(b0v, b7v); \ +} + +#define ALTIVEC_STORE_SUM_CLIP(dest, idctv, perm_ldv, perm_stv, sel) { \ + /* unaligned load */ \ + vec_u8_t hv = vec_ld( 0, dest ); \ + vec_u8_t lv = vec_ld( 7, dest ); \ + vec_u8_t dstv = vec_perm( hv, lv, (vec_u8_t)perm_ldv ); \ + vec_s16_t idct_sh6 = vec_sra(idctv, sixv); \ + vec_u16_t dst16 = (vec_u16_t)vec_mergeh(zero_u8v, dstv); \ + vec_s16_t idstsum = vec_adds(idct_sh6, (vec_s16_t)dst16); \ + vec_u8_t idstsum8 = vec_packsu(zero_s16v, idstsum); \ + vec_u8_t edgehv; \ + /* unaligned store */ \ + vec_u8_t bodyv = vec_perm( idstsum8, idstsum8, perm_stv );\ + vec_u8_t edgelv = vec_perm( sel, zero_u8v, perm_stv ); \ + lv = vec_sel( lv, bodyv, edgelv ); \ + vec_st( lv, 7, dest ); \ + hv = vec_ld( 0, dest ); \ + edgehv = vec_perm( zero_u8v, sel, perm_stv ); \ + hv = vec_sel( hv, bodyv, edgehv ); \ + vec_st( hv, 0, dest ); \ + } + +void ff_h264_idct8_add_altivec( uint8_t *dst, DCTELEM *dct, int stride ) { + vec_s16_t s0, s1, s2, s3, s4, s5, s6, s7; + vec_s16_t d0, d1, d2, d3, d4, d5, d6, d7; + vec_s16_t idct0, idct1, idct2, idct3, idct4, idct5, idct6, idct7; + + vec_u8_t perm_ldv = vec_lvsl(0, dst); + vec_u8_t perm_stv = vec_lvsr(8, dst); + + const vec_u16_t onev = vec_splat_u16(1); + const vec_u16_t twov = vec_splat_u16(2); + const vec_u16_t sixv = vec_splat_u16(6); + + const vec_u8_t sel = (vec_u8_t) AVV(0,0,0,0,0,0,0,0, + -1,-1,-1,-1,-1,-1,-1,-1); + LOAD_ZERO; + + dct[0] += 32; // rounding for the >>6 at the end + + s0 = vec_ld(0x00, (int16_t*)dct); + s1 = vec_ld(0x10, (int16_t*)dct); + s2 = vec_ld(0x20, (int16_t*)dct); + s3 = vec_ld(0x30, (int16_t*)dct); + s4 = vec_ld(0x40, (int16_t*)dct); + s5 = vec_ld(0x50, (int16_t*)dct); + s6 = vec_ld(0x60, (int16_t*)dct); + s7 = vec_ld(0x70, (int16_t*)dct); + + IDCT8_1D_ALTIVEC(s0, s1, s2, s3, s4, s5, s6, s7, + d0, d1, d2, d3, d4, d5, d6, d7); + + TRANSPOSE8( d0, d1, d2, d3, d4, d5, d6, d7 ); + + IDCT8_1D_ALTIVEC(d0, d1, d2, d3, d4, d5, d6, d7, + idct0, idct1, idct2, idct3, idct4, idct5, idct6, idct7); + + ALTIVEC_STORE_SUM_CLIP(&dst[0*stride], idct0, perm_ldv, perm_stv, sel); + ALTIVEC_STORE_SUM_CLIP(&dst[1*stride], idct1, perm_ldv, perm_stv, sel); + ALTIVEC_STORE_SUM_CLIP(&dst[2*stride], idct2, perm_ldv, perm_stv, sel); + ALTIVEC_STORE_SUM_CLIP(&dst[3*stride], idct3, perm_ldv, perm_stv, sel); + ALTIVEC_STORE_SUM_CLIP(&dst[4*stride], idct4, perm_ldv, perm_stv, sel); + ALTIVEC_STORE_SUM_CLIP(&dst[5*stride], idct5, perm_ldv, perm_stv, sel); + ALTIVEC_STORE_SUM_CLIP(&dst[6*stride], idct6, perm_ldv, perm_stv, sel); + ALTIVEC_STORE_SUM_CLIP(&dst[7*stride], idct7, perm_ldv, perm_stv, sel); +} + +void dsputil_h264_init_ppc(DSPContext* c, AVCodecContext *avctx) { + +#ifdef HAVE_ALTIVEC + if (has_altivec()) { + c->put_h264_chroma_pixels_tab[0] = put_h264_chroma_mc8_altivec; + c->put_no_rnd_h264_chroma_pixels_tab[0] = put_no_rnd_h264_chroma_mc8_altivec; + c->avg_h264_chroma_pixels_tab[0] = avg_h264_chroma_mc8_altivec; + c->h264_idct8_add = ff_h264_idct8_add_altivec; + +#define dspfunc(PFX, IDX, NUM) \ + c->PFX ## _pixels_tab[IDX][ 0] = PFX ## NUM ## _mc00_altivec; \ + c->PFX ## _pixels_tab[IDX][ 1] = PFX ## NUM ## _mc10_altivec; \ + c->PFX ## _pixels_tab[IDX][ 2] = PFX ## NUM ## _mc20_altivec; \ + c->PFX ## _pixels_tab[IDX][ 3] = PFX ## NUM ## _mc30_altivec; \ + c->PFX ## _pixels_tab[IDX][ 4] = PFX ## NUM ## _mc01_altivec; \ + c->PFX ## _pixels_tab[IDX][ 5] = PFX ## NUM ## _mc11_altivec; \ + c->PFX ## _pixels_tab[IDX][ 6] = PFX ## NUM ## _mc21_altivec; \ + c->PFX ## _pixels_tab[IDX][ 7] = PFX ## NUM ## _mc31_altivec; \ + c->PFX ## _pixels_tab[IDX][ 8] = PFX ## NUM ## _mc02_altivec; \ + c->PFX ## _pixels_tab[IDX][ 9] = PFX ## NUM ## _mc12_altivec; \ + c->PFX ## _pixels_tab[IDX][10] = PFX ## NUM ## _mc22_altivec; \ + c->PFX ## _pixels_tab[IDX][11] = PFX ## NUM ## _mc32_altivec; \ + c->PFX ## _pixels_tab[IDX][12] = PFX ## NUM ## _mc03_altivec; \ + c->PFX ## _pixels_tab[IDX][13] = PFX ## NUM ## _mc13_altivec; \ + c->PFX ## _pixels_tab[IDX][14] = PFX ## NUM ## _mc23_altivec; \ + c->PFX ## _pixels_tab[IDX][15] = PFX ## NUM ## _mc33_altivec + + dspfunc(put_h264_qpel, 0, 16); + dspfunc(avg_h264_qpel, 0, 16); +#undef dspfunc + + } else +#endif /* HAVE_ALTIVEC */ + { + // Non-AltiVec PPC optimisations + + // ... pending ... + } +} diff --git a/src/libffmpeg/libavcodec/ppc/h264_template_altivec.c b/src/libffmpeg/libavcodec/ppc/h264_template_altivec.c new file mode 100644 index 000000000..e8ad67f2f --- /dev/null +++ b/src/libffmpeg/libavcodec/ppc/h264_template_altivec.c @@ -0,0 +1,719 @@ +/* + * Copyright (c) 2004 Romain Dolbeau <romain@dolbeau.org> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* this code assume that stride % 16 == 0 */ +void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride, int h, int x, int y) { + POWERPC_PERF_DECLARE(PREFIX_h264_chroma_mc8_num, 1); + signed int ABCD[4] __attribute__((aligned(16))) = + {((8 - x) * (8 - y)), + ((x) * (8 - y)), + ((8 - x) * (y)), + ((x) * (y))}; + register int i; + vector unsigned char fperm; + const vector signed int vABCD = vec_ld(0, ABCD); + const vector signed short vA = vec_splat((vector signed short)vABCD, 1); + const vector signed short vB = vec_splat((vector signed short)vABCD, 3); + const vector signed short vC = vec_splat((vector signed short)vABCD, 5); + const vector signed short vD = vec_splat((vector signed short)vABCD, 7); + const vector signed int vzero = vec_splat_s32(0); + const vector signed short v32ss = vec_sl(vec_splat_s16(1),vec_splat_u16(5)); + const vector unsigned short v6us = vec_splat_u16(6); + register int loadSecond = (((unsigned long)src) % 16) <= 7 ? 0 : 1; + register int reallyBadAlign = (((unsigned long)src) % 16) == 15 ? 1 : 0; + + vector unsigned char vsrcAuc, vsrcBuc, vsrcperm0, vsrcperm1; + vector unsigned char vsrc0uc, vsrc1uc; + vector signed short vsrc0ssH, vsrc1ssH; + vector unsigned char vsrcCuc, vsrc2uc, vsrc3uc; + vector signed short vsrc2ssH, vsrc3ssH, psum; + vector unsigned char vdst, ppsum, vfdst, fsum; + + POWERPC_PERF_START_COUNT(PREFIX_h264_chroma_mc8_num, 1); + + if (((unsigned long)dst) % 16 == 0) { + fperm = (vector unsigned char)AVV(0x10, 0x11, 0x12, 0x13, + 0x14, 0x15, 0x16, 0x17, + 0x08, 0x09, 0x0A, 0x0B, + 0x0C, 0x0D, 0x0E, 0x0F); + } else { + fperm = (vector unsigned char)AVV(0x00, 0x01, 0x02, 0x03, + 0x04, 0x05, 0x06, 0x07, + 0x18, 0x19, 0x1A, 0x1B, + 0x1C, 0x1D, 0x1E, 0x1F); + } + + vsrcAuc = vec_ld(0, src); + + if (loadSecond) + vsrcBuc = vec_ld(16, src); + vsrcperm0 = vec_lvsl(0, src); + vsrcperm1 = vec_lvsl(1, src); + + vsrc0uc = vec_perm(vsrcAuc, vsrcBuc, vsrcperm0); + if (reallyBadAlign) + vsrc1uc = vsrcBuc; + else + vsrc1uc = vec_perm(vsrcAuc, vsrcBuc, vsrcperm1); + + vsrc0ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, + (vector unsigned char)vsrc0uc); + vsrc1ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, + (vector unsigned char)vsrc1uc); + + if (!loadSecond) {// -> !reallyBadAlign + for (i = 0 ; i < h ; i++) { + + + vsrcCuc = vec_ld(stride + 0, src); + + vsrc2uc = vec_perm(vsrcCuc, vsrcCuc, vsrcperm0); + vsrc3uc = vec_perm(vsrcCuc, vsrcCuc, vsrcperm1); + + vsrc2ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, + (vector unsigned char)vsrc2uc); + vsrc3ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, + (vector unsigned char)vsrc3uc); + + psum = vec_mladd(vA, vsrc0ssH, vec_splat_s16(0)); + psum = vec_mladd(vB, vsrc1ssH, psum); + psum = vec_mladd(vC, vsrc2ssH, psum); + psum = vec_mladd(vD, vsrc3ssH, psum); + psum = vec_add(v32ss, psum); + psum = vec_sra(psum, v6us); + + vdst = vec_ld(0, dst); + ppsum = (vector unsigned char)vec_packsu(psum, psum); + vfdst = vec_perm(vdst, ppsum, fperm); + + OP_U8_ALTIVEC(fsum, vfdst, vdst); + + vec_st(fsum, 0, dst); + + vsrc0ssH = vsrc2ssH; + vsrc1ssH = vsrc3ssH; + + dst += stride; + src += stride; + } + } else { + vector unsigned char vsrcDuc; + for (i = 0 ; i < h ; i++) { + vsrcCuc = vec_ld(stride + 0, src); + vsrcDuc = vec_ld(stride + 16, src); + + vsrc2uc = vec_perm(vsrcCuc, vsrcDuc, vsrcperm0); + if (reallyBadAlign) + vsrc3uc = vsrcDuc; + else + vsrc3uc = vec_perm(vsrcCuc, vsrcDuc, vsrcperm1); + + vsrc2ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, + (vector unsigned char)vsrc2uc); + vsrc3ssH = (vector signed short)vec_mergeh((vector unsigned char)vzero, + (vector unsigned char)vsrc3uc); + + psum = vec_mladd(vA, vsrc0ssH, vec_splat_s16(0)); + psum = vec_mladd(vB, vsrc1ssH, psum); + psum = vec_mladd(vC, vsrc2ssH, psum); + psum = vec_mladd(vD, vsrc3ssH, psum); + psum = vec_add(v32ss, psum); + psum = vec_sr(psum, v6us); + + vdst = vec_ld(0, dst); + ppsum = (vector unsigned char)vec_pack(psum, psum); + vfdst = vec_perm(vdst, ppsum, fperm); + + OP_U8_ALTIVEC(fsum, vfdst, vdst); + + vec_st(fsum, 0, dst); + + vsrc0ssH = vsrc2ssH; + vsrc1ssH = vsrc3ssH; + + dst += stride; + src += stride; + } + } + POWERPC_PERF_STOP_COUNT(PREFIX_h264_chroma_mc8_num, 1); +} + +/* this code assume stride % 16 == 0 */ +static void PREFIX_h264_qpel16_h_lowpass_altivec(uint8_t * dst, uint8_t * src, int dstStride, int srcStride) { + POWERPC_PERF_DECLARE(PREFIX_h264_qpel16_h_lowpass_num, 1); + register int i; + + const vector signed int vzero = vec_splat_s32(0); + const vector unsigned char permM2 = vec_lvsl(-2, src); + const vector unsigned char permM1 = vec_lvsl(-1, src); + const vector unsigned char permP0 = vec_lvsl(+0, src); + const vector unsigned char permP1 = vec_lvsl(+1, src); + const vector unsigned char permP2 = vec_lvsl(+2, src); + const vector unsigned char permP3 = vec_lvsl(+3, src); + const vector signed short v5ss = vec_splat_s16(5); + const vector unsigned short v5us = vec_splat_u16(5); + const vector signed short v20ss = vec_sl(vec_splat_s16(5),vec_splat_u16(2)); + const vector signed short v16ss = vec_sl(vec_splat_s16(1),vec_splat_u16(4)); + const vector unsigned char dstperm = vec_lvsr(0, dst); + const vector unsigned char neg1 = + (const vector unsigned char) vec_splat_s8(-1); + + const vector unsigned char dstmask = + vec_perm((const vector unsigned char)vzero, + neg1, dstperm); + + vector unsigned char srcM2, srcM1, srcP0, srcP1, srcP2, srcP3; + + register int align = ((((unsigned long)src) - 2) % 16); + + vector signed short srcP0A, srcP0B, srcP1A, srcP1B, + srcP2A, srcP2B, srcP3A, srcP3B, + srcM1A, srcM1B, srcM2A, srcM2B, + sum1A, sum1B, sum2A, sum2B, sum3A, sum3B, + pp1A, pp1B, pp2A, pp2B, pp3A, pp3B, + psumA, psumB, sumA, sumB; + + vector unsigned char sum, dst1, dst2, vdst, fsum, + rsum, fdst1, fdst2; + + POWERPC_PERF_START_COUNT(PREFIX_h264_qpel16_h_lowpass_num, 1); + + for (i = 0 ; i < 16 ; i ++) { + vector unsigned char srcR1 = vec_ld(-2, src); + vector unsigned char srcR2 = vec_ld(14, src); + + switch (align) { + default: { + srcM2 = vec_perm(srcR1, srcR2, permM2); + srcM1 = vec_perm(srcR1, srcR2, permM1); + srcP0 = vec_perm(srcR1, srcR2, permP0); + srcP1 = vec_perm(srcR1, srcR2, permP1); + srcP2 = vec_perm(srcR1, srcR2, permP2); + srcP3 = vec_perm(srcR1, srcR2, permP3); + } break; + case 11: { + srcM2 = vec_perm(srcR1, srcR2, permM2); + srcM1 = vec_perm(srcR1, srcR2, permM1); + srcP0 = vec_perm(srcR1, srcR2, permP0); + srcP1 = vec_perm(srcR1, srcR2, permP1); + srcP2 = vec_perm(srcR1, srcR2, permP2); + srcP3 = srcR2; + } break; + case 12: { + vector unsigned char srcR3 = vec_ld(30, src); + srcM2 = vec_perm(srcR1, srcR2, permM2); + srcM1 = vec_perm(srcR1, srcR2, permM1); + srcP0 = vec_perm(srcR1, srcR2, permP0); + srcP1 = vec_perm(srcR1, srcR2, permP1); + srcP2 = srcR2; + srcP3 = vec_perm(srcR2, srcR3, permP3); + } break; + case 13: { + vector unsigned char srcR3 = vec_ld(30, src); + srcM2 = vec_perm(srcR1, srcR2, permM2); + srcM1 = vec_perm(srcR1, srcR2, permM1); + srcP0 = vec_perm(srcR1, srcR2, permP0); + srcP1 = srcR2; + srcP2 = vec_perm(srcR2, srcR3, permP2); + srcP3 = vec_perm(srcR2, srcR3, permP3); + } break; + case 14: { + vector unsigned char srcR3 = vec_ld(30, src); + srcM2 = vec_perm(srcR1, srcR2, permM2); + srcM1 = vec_perm(srcR1, srcR2, permM1); + srcP0 = srcR2; + srcP1 = vec_perm(srcR2, srcR3, permP1); + srcP2 = vec_perm(srcR2, srcR3, permP2); + srcP3 = vec_perm(srcR2, srcR3, permP3); + } break; + case 15: { + vector unsigned char srcR3 = vec_ld(30, src); + srcM2 = vec_perm(srcR1, srcR2, permM2); + srcM1 = srcR2; + srcP0 = vec_perm(srcR2, srcR3, permP0); + srcP1 = vec_perm(srcR2, srcR3, permP1); + srcP2 = vec_perm(srcR2, srcR3, permP2); + srcP3 = vec_perm(srcR2, srcR3, permP3); + } break; + } + + srcP0A = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcP0); + srcP0B = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcP0); + srcP1A = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcP1); + srcP1B = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcP1); + + srcP2A = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcP2); + srcP2B = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcP2); + srcP3A = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcP3); + srcP3B = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcP3); + + srcM1A = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcM1); + srcM1B = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcM1); + srcM2A = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcM2); + srcM2B = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcM2); + + sum1A = vec_adds(srcP0A, srcP1A); + sum1B = vec_adds(srcP0B, srcP1B); + sum2A = vec_adds(srcM1A, srcP2A); + sum2B = vec_adds(srcM1B, srcP2B); + sum3A = vec_adds(srcM2A, srcP3A); + sum3B = vec_adds(srcM2B, srcP3B); + + pp1A = vec_mladd(sum1A, v20ss, v16ss); + pp1B = vec_mladd(sum1B, v20ss, v16ss); + + pp2A = vec_mladd(sum2A, v5ss, (vector signed short)vzero); + pp2B = vec_mladd(sum2B, v5ss, (vector signed short)vzero); + + pp3A = vec_add(sum3A, pp1A); + pp3B = vec_add(sum3B, pp1B); + + psumA = vec_sub(pp3A, pp2A); + psumB = vec_sub(pp3B, pp2B); + + sumA = vec_sra(psumA, v5us); + sumB = vec_sra(psumB, v5us); + + sum = vec_packsu(sumA, sumB); + + dst1 = vec_ld(0, dst); + dst2 = vec_ld(16, dst); + vdst = vec_perm(dst1, dst2, vec_lvsl(0, dst)); + + OP_U8_ALTIVEC(fsum, sum, vdst); + + rsum = vec_perm(fsum, fsum, dstperm); + fdst1 = vec_sel(dst1, rsum, dstmask); + fdst2 = vec_sel(rsum, dst2, dstmask); + + vec_st(fdst1, 0, dst); + vec_st(fdst2, 16, dst); + + src += srcStride; + dst += dstStride; + } +POWERPC_PERF_STOP_COUNT(PREFIX_h264_qpel16_h_lowpass_num, 1); +} + +/* this code assume stride % 16 == 0 */ +static void PREFIX_h264_qpel16_v_lowpass_altivec(uint8_t * dst, uint8_t * src, int dstStride, int srcStride) { + POWERPC_PERF_DECLARE(PREFIX_h264_qpel16_v_lowpass_num, 1); + + register int i; + + const vector signed int vzero = vec_splat_s32(0); + const vector unsigned char perm = vec_lvsl(0, src); + const vector signed short v20ss = vec_sl(vec_splat_s16(5),vec_splat_u16(2)); + const vector unsigned short v5us = vec_splat_u16(5); + const vector signed short v5ss = vec_splat_s16(5); + const vector signed short v16ss = vec_sl(vec_splat_s16(1),vec_splat_u16(4)); + const vector unsigned char dstperm = vec_lvsr(0, dst); + const vector unsigned char neg1 = (const vector unsigned char)vec_splat_s8(-1); + const vector unsigned char dstmask = vec_perm((const vector unsigned char)vzero, neg1, dstperm); + + uint8_t *srcbis = src - (srcStride * 2); + + const vector unsigned char srcM2a = vec_ld(0, srcbis); + const vector unsigned char srcM2b = vec_ld(16, srcbis); + const vector unsigned char srcM2 = vec_perm(srcM2a, srcM2b, perm); +// srcbis += srcStride; + const vector unsigned char srcM1a = vec_ld(0, srcbis += srcStride); + const vector unsigned char srcM1b = vec_ld(16, srcbis); + const vector unsigned char srcM1 = vec_perm(srcM1a, srcM1b, perm); +// srcbis += srcStride; + const vector unsigned char srcP0a = vec_ld(0, srcbis += srcStride); + const vector unsigned char srcP0b = vec_ld(16, srcbis); + const vector unsigned char srcP0 = vec_perm(srcP0a, srcP0b, perm); +// srcbis += srcStride; + const vector unsigned char srcP1a = vec_ld(0, srcbis += srcStride); + const vector unsigned char srcP1b = vec_ld(16, srcbis); + const vector unsigned char srcP1 = vec_perm(srcP1a, srcP1b, perm); +// srcbis += srcStride; + const vector unsigned char srcP2a = vec_ld(0, srcbis += srcStride); + const vector unsigned char srcP2b = vec_ld(16, srcbis); + const vector unsigned char srcP2 = vec_perm(srcP2a, srcP2b, perm); +// srcbis += srcStride; + + vector signed short srcM2ssA = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcM2); + vector signed short srcM2ssB = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcM2); + vector signed short srcM1ssA = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcM1); + vector signed short srcM1ssB = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcM1); + vector signed short srcP0ssA = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcP0); + vector signed short srcP0ssB = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcP0); + vector signed short srcP1ssA = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcP1); + vector signed short srcP1ssB = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcP1); + vector signed short srcP2ssA = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcP2); + vector signed short srcP2ssB = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcP2); + + vector signed short pp1A, pp1B, pp2A, pp2B, pp3A, pp3B, + psumA, psumB, sumA, sumB, + srcP3ssA, srcP3ssB, + sum1A, sum1B, sum2A, sum2B, sum3A, sum3B; + + vector unsigned char sum, dst1, dst2, vdst, fsum, rsum, fdst1, fdst2, + srcP3a, srcP3b, srcP3; + + POWERPC_PERF_START_COUNT(PREFIX_h264_qpel16_v_lowpass_num, 1); + + for (i = 0 ; i < 16 ; i++) { + srcP3a = vec_ld(0, srcbis += srcStride); + srcP3b = vec_ld(16, srcbis); + srcP3 = vec_perm(srcP3a, srcP3b, perm); + srcP3ssA = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcP3); + srcP3ssB = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcP3); +// srcbis += srcStride; + + sum1A = vec_adds(srcP0ssA, srcP1ssA); + sum1B = vec_adds(srcP0ssB, srcP1ssB); + sum2A = vec_adds(srcM1ssA, srcP2ssA); + sum2B = vec_adds(srcM1ssB, srcP2ssB); + sum3A = vec_adds(srcM2ssA, srcP3ssA); + sum3B = vec_adds(srcM2ssB, srcP3ssB); + + srcM2ssA = srcM1ssA; + srcM2ssB = srcM1ssB; + srcM1ssA = srcP0ssA; + srcM1ssB = srcP0ssB; + srcP0ssA = srcP1ssA; + srcP0ssB = srcP1ssB; + srcP1ssA = srcP2ssA; + srcP1ssB = srcP2ssB; + srcP2ssA = srcP3ssA; + srcP2ssB = srcP3ssB; + + pp1A = vec_mladd(sum1A, v20ss, v16ss); + pp1B = vec_mladd(sum1B, v20ss, v16ss); + + pp2A = vec_mladd(sum2A, v5ss, (vector signed short)vzero); + pp2B = vec_mladd(sum2B, v5ss, (vector signed short)vzero); + + pp3A = vec_add(sum3A, pp1A); + pp3B = vec_add(sum3B, pp1B); + + psumA = vec_sub(pp3A, pp2A); + psumB = vec_sub(pp3B, pp2B); + + sumA = vec_sra(psumA, v5us); + sumB = vec_sra(psumB, v5us); + + sum = vec_packsu(sumA, sumB); + + dst1 = vec_ld(0, dst); + dst2 = vec_ld(16, dst); + vdst = vec_perm(dst1, dst2, vec_lvsl(0, dst)); + + OP_U8_ALTIVEC(fsum, sum, vdst); + + rsum = vec_perm(fsum, fsum, dstperm); + fdst1 = vec_sel(dst1, rsum, dstmask); + fdst2 = vec_sel(rsum, dst2, dstmask); + + vec_st(fdst1, 0, dst); + vec_st(fdst2, 16, dst); + + dst += dstStride; + } + POWERPC_PERF_STOP_COUNT(PREFIX_h264_qpel16_v_lowpass_num, 1); +} + +/* this code assume stride % 16 == 0 *and* tmp is properly aligned */ +static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp, uint8_t * src, int dstStride, int tmpStride, int srcStride) { + POWERPC_PERF_DECLARE(PREFIX_h264_qpel16_hv_lowpass_num, 1); + register int i; + const vector signed int vzero = vec_splat_s32(0); + const vector unsigned char permM2 = vec_lvsl(-2, src); + const vector unsigned char permM1 = vec_lvsl(-1, src); + const vector unsigned char permP0 = vec_lvsl(+0, src); + const vector unsigned char permP1 = vec_lvsl(+1, src); + const vector unsigned char permP2 = vec_lvsl(+2, src); + const vector unsigned char permP3 = vec_lvsl(+3, src); + const vector signed short v20ss = vec_sl(vec_splat_s16(5),vec_splat_u16(2)); + const vector unsigned int v10ui = vec_splat_u32(10); + const vector signed short v5ss = vec_splat_s16(5); + const vector signed short v1ss = vec_splat_s16(1); + const vector signed int v512si = vec_sl(vec_splat_s32(1),vec_splat_u32(9)); + const vector unsigned int v16ui = vec_sl(vec_splat_u32(1),vec_splat_u32(4)); + + register int align = ((((unsigned long)src) - 2) % 16); + + const vector unsigned char neg1 = (const vector unsigned char) + vec_splat_s8(-1); + + vector signed short srcP0A, srcP0B, srcP1A, srcP1B, + srcP2A, srcP2B, srcP3A, srcP3B, + srcM1A, srcM1B, srcM2A, srcM2B, + sum1A, sum1B, sum2A, sum2B, sum3A, sum3B, + pp1A, pp1B, pp2A, pp2B, psumA, psumB; + + const vector unsigned char dstperm = vec_lvsr(0, dst); + + const vector unsigned char dstmask = vec_perm((const vector unsigned char)vzero, neg1, dstperm); + + const vector unsigned char mperm = (const vector unsigned char) + AVV(0x00, 0x08, 0x01, 0x09, 0x02, 0x0A, 0x03, 0x0B, + 0x04, 0x0C, 0x05, 0x0D, 0x06, 0x0E, 0x07, 0x0F); + int16_t *tmpbis = tmp; + + vector signed short tmpM1ssA, tmpM1ssB, tmpM2ssA, tmpM2ssB, + tmpP0ssA, tmpP0ssB, tmpP1ssA, tmpP1ssB, + tmpP2ssA, tmpP2ssB; + + vector signed int pp1Ae, pp1Ao, pp1Be, pp1Bo, pp2Ae, pp2Ao, pp2Be, pp2Bo, + pp3Ae, pp3Ao, pp3Be, pp3Bo, pp1cAe, pp1cAo, pp1cBe, pp1cBo, + pp32Ae, pp32Ao, pp32Be, pp32Bo, sumAe, sumAo, sumBe, sumBo, + ssumAe, ssumAo, ssumBe, ssumBo; + vector unsigned char fsum, sumv, sum, dst1, dst2, vdst, + rsum, fdst1, fdst2; + vector signed short ssume, ssumo; + + POWERPC_PERF_START_COUNT(PREFIX_h264_qpel16_hv_lowpass_num, 1); + src -= (2 * srcStride); + for (i = 0 ; i < 21 ; i ++) { + vector unsigned char srcM2, srcM1, srcP0, srcP1, srcP2, srcP3; + vector unsigned char srcR1 = vec_ld(-2, src); + vector unsigned char srcR2 = vec_ld(14, src); + + switch (align) { + default: { + srcM2 = vec_perm(srcR1, srcR2, permM2); + srcM1 = vec_perm(srcR1, srcR2, permM1); + srcP0 = vec_perm(srcR1, srcR2, permP0); + srcP1 = vec_perm(srcR1, srcR2, permP1); + srcP2 = vec_perm(srcR1, srcR2, permP2); + srcP3 = vec_perm(srcR1, srcR2, permP3); + } break; + case 11: { + srcM2 = vec_perm(srcR1, srcR2, permM2); + srcM1 = vec_perm(srcR1, srcR2, permM1); + srcP0 = vec_perm(srcR1, srcR2, permP0); + srcP1 = vec_perm(srcR1, srcR2, permP1); + srcP2 = vec_perm(srcR1, srcR2, permP2); + srcP3 = srcR2; + } break; + case 12: { + vector unsigned char srcR3 = vec_ld(30, src); + srcM2 = vec_perm(srcR1, srcR2, permM2); + srcM1 = vec_perm(srcR1, srcR2, permM1); + srcP0 = vec_perm(srcR1, srcR2, permP0); + srcP1 = vec_perm(srcR1, srcR2, permP1); + srcP2 = srcR2; + srcP3 = vec_perm(srcR2, srcR3, permP3); + } break; + case 13: { + vector unsigned char srcR3 = vec_ld(30, src); + srcM2 = vec_perm(srcR1, srcR2, permM2); + srcM1 = vec_perm(srcR1, srcR2, permM1); + srcP0 = vec_perm(srcR1, srcR2, permP0); + srcP1 = srcR2; + srcP2 = vec_perm(srcR2, srcR3, permP2); + srcP3 = vec_perm(srcR2, srcR3, permP3); + } break; + case 14: { + vector unsigned char srcR3 = vec_ld(30, src); + srcM2 = vec_perm(srcR1, srcR2, permM2); + srcM1 = vec_perm(srcR1, srcR2, permM1); + srcP0 = srcR2; + srcP1 = vec_perm(srcR2, srcR3, permP1); + srcP2 = vec_perm(srcR2, srcR3, permP2); + srcP3 = vec_perm(srcR2, srcR3, permP3); + } break; + case 15: { + vector unsigned char srcR3 = vec_ld(30, src); + srcM2 = vec_perm(srcR1, srcR2, permM2); + srcM1 = srcR2; + srcP0 = vec_perm(srcR2, srcR3, permP0); + srcP1 = vec_perm(srcR2, srcR3, permP1); + srcP2 = vec_perm(srcR2, srcR3, permP2); + srcP3 = vec_perm(srcR2, srcR3, permP3); + } break; + } + + srcP0A = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcP0); + srcP0B = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcP0); + srcP1A = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcP1); + srcP1B = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcP1); + + srcP2A = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcP2); + srcP2B = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcP2); + srcP3A = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcP3); + srcP3B = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcP3); + + srcM1A = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcM1); + srcM1B = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcM1); + srcM2A = (vector signed short) + vec_mergeh((vector unsigned char)vzero, srcM2); + srcM2B = (vector signed short) + vec_mergel((vector unsigned char)vzero, srcM2); + + sum1A = vec_adds(srcP0A, srcP1A); + sum1B = vec_adds(srcP0B, srcP1B); + sum2A = vec_adds(srcM1A, srcP2A); + sum2B = vec_adds(srcM1B, srcP2B); + sum3A = vec_adds(srcM2A, srcP3A); + sum3B = vec_adds(srcM2B, srcP3B); + + pp1A = vec_mladd(sum1A, v20ss, sum3A); + pp1B = vec_mladd(sum1B, v20ss, sum3B); + + pp2A = vec_mladd(sum2A, v5ss, (vector signed short)vzero); + pp2B = vec_mladd(sum2B, v5ss, (vector signed short)vzero); + + psumA = vec_sub(pp1A, pp2A); + psumB = vec_sub(pp1B, pp2B); + + vec_st(psumA, 0, tmp); + vec_st(psumB, 16, tmp); + + src += srcStride; + tmp += tmpStride; /* int16_t*, and stride is 16, so it's OK here */ + } + + tmpM2ssA = vec_ld(0, tmpbis); + tmpM2ssB = vec_ld(16, tmpbis); + tmpbis += tmpStride; + tmpM1ssA = vec_ld(0, tmpbis); + tmpM1ssB = vec_ld(16, tmpbis); + tmpbis += tmpStride; + tmpP0ssA = vec_ld(0, tmpbis); + tmpP0ssB = vec_ld(16, tmpbis); + tmpbis += tmpStride; + tmpP1ssA = vec_ld(0, tmpbis); + tmpP1ssB = vec_ld(16, tmpbis); + tmpbis += tmpStride; + tmpP2ssA = vec_ld(0, tmpbis); + tmpP2ssB = vec_ld(16, tmpbis); + tmpbis += tmpStride; + + for (i = 0 ; i < 16 ; i++) { + const vector signed short tmpP3ssA = vec_ld(0, tmpbis); + const vector signed short tmpP3ssB = vec_ld(16, tmpbis); + + const vector signed short sum1A = vec_adds(tmpP0ssA, tmpP1ssA); + const vector signed short sum1B = vec_adds(tmpP0ssB, tmpP1ssB); + const vector signed short sum2A = vec_adds(tmpM1ssA, tmpP2ssA); + const vector signed short sum2B = vec_adds(tmpM1ssB, tmpP2ssB); + const vector signed short sum3A = vec_adds(tmpM2ssA, tmpP3ssA); + const vector signed short sum3B = vec_adds(tmpM2ssB, tmpP3ssB); + + tmpbis += tmpStride; + + tmpM2ssA = tmpM1ssA; + tmpM2ssB = tmpM1ssB; + tmpM1ssA = tmpP0ssA; + tmpM1ssB = tmpP0ssB; + tmpP0ssA = tmpP1ssA; + tmpP0ssB = tmpP1ssB; + tmpP1ssA = tmpP2ssA; + tmpP1ssB = tmpP2ssB; + tmpP2ssA = tmpP3ssA; + tmpP2ssB = tmpP3ssB; + + pp1Ae = vec_mule(sum1A, v20ss); + pp1Ao = vec_mulo(sum1A, v20ss); + pp1Be = vec_mule(sum1B, v20ss); + pp1Bo = vec_mulo(sum1B, v20ss); + + pp2Ae = vec_mule(sum2A, v5ss); + pp2Ao = vec_mulo(sum2A, v5ss); + pp2Be = vec_mule(sum2B, v5ss); + pp2Bo = vec_mulo(sum2B, v5ss); + + pp3Ae = vec_sra((vector signed int)sum3A, v16ui); + pp3Ao = vec_mulo(sum3A, v1ss); + pp3Be = vec_sra((vector signed int)sum3B, v16ui); + pp3Bo = vec_mulo(sum3B, v1ss); + + pp1cAe = vec_add(pp1Ae, v512si); + pp1cAo = vec_add(pp1Ao, v512si); + pp1cBe = vec_add(pp1Be, v512si); + pp1cBo = vec_add(pp1Bo, v512si); + + pp32Ae = vec_sub(pp3Ae, pp2Ae); + pp32Ao = vec_sub(pp3Ao, pp2Ao); + pp32Be = vec_sub(pp3Be, pp2Be); + pp32Bo = vec_sub(pp3Bo, pp2Bo); + + sumAe = vec_add(pp1cAe, pp32Ae); + sumAo = vec_add(pp1cAo, pp32Ao); + sumBe = vec_add(pp1cBe, pp32Be); + sumBo = vec_add(pp1cBo, pp32Bo); + + ssumAe = vec_sra(sumAe, v10ui); + ssumAo = vec_sra(sumAo, v10ui); + ssumBe = vec_sra(sumBe, v10ui); + ssumBo = vec_sra(sumBo, v10ui); + + ssume = vec_packs(ssumAe, ssumBe); + ssumo = vec_packs(ssumAo, ssumBo); + + sumv = vec_packsu(ssume, ssumo); + sum = vec_perm(sumv, sumv, mperm); + + dst1 = vec_ld(0, dst); + dst2 = vec_ld(16, dst); + vdst = vec_perm(dst1, dst2, vec_lvsl(0, dst)); + + OP_U8_ALTIVEC(fsum, sum, vdst); + + rsum = vec_perm(fsum, fsum, dstperm); + fdst1 = vec_sel(dst1, rsum, dstmask); + fdst2 = vec_sel(rsum, dst2, dstmask); + + vec_st(fdst1, 0, dst); + vec_st(fdst2, 16, dst); + + dst += dstStride; + } + POWERPC_PERF_STOP_COUNT(PREFIX_h264_qpel16_hv_lowpass_num, 1); +} diff --git a/src/libffmpeg/libavcodec/ppc/mathops.h b/src/libffmpeg/libavcodec/ppc/mathops.h new file mode 100644 index 000000000..6af23f246 --- /dev/null +++ b/src/libffmpeg/libavcodec/ppc/mathops.h @@ -0,0 +1,33 @@ +/* + * simple math operations + * Copyright (c) 2001, 2002 Fabrice Bellard. + * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> et al + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#if defined(ARCH_POWERPC_405) +/* signed 16x16 -> 32 multiply add accumulate */ +# define MAC16(rt, ra, rb) \ + asm ("maclhw %0, %2, %3" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb)); + +/* signed 16x16 -> 32 multiply */ +# define MUL16(ra, rb) \ + ({ int __rt; + asm ("mullhw %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb)); + __rt; }) +#endif diff --git a/src/libffmpeg/libavcodec/ppc/snow_altivec.c b/src/libffmpeg/libavcodec/ppc/snow_altivec.c new file mode 100644 index 000000000..b15672ffe --- /dev/null +++ b/src/libffmpeg/libavcodec/ppc/snow_altivec.c @@ -0,0 +1,788 @@ +/* + * Altivec optimized snow DSP utils + * Copyright (c) 2006 Luca Barbato <lu_zero@gentoo.org> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * + */ + +#include "../dsputil.h" + +#include "gcc_fixes.h" +#include "dsputil_altivec.h" +#include "../snow.h" + +#undef NDEBUG +#include <assert.h> + + + +//FIXME remove this replication +#define slice_buffer_get_line(slice_buf, line_num) ((slice_buf)->line[line_num] ? (slice_buf)->line[line_num] : slice_buffer_load_line((slice_buf), (line_num))) + +static DWTELEM * slice_buffer_load_line(slice_buffer * buf, int line) +{ + int offset; + DWTELEM * buffer; + +// av_log(NULL, AV_LOG_DEBUG, "Cache hit: %d\n", line); + + assert(buf->data_stack_top >= 0); +// assert(!buf->line[line]); + if (buf->line[line]) + return buf->line[line]; + + offset = buf->line_width * line; + buffer = buf->data_stack[buf->data_stack_top]; + buf->data_stack_top--; + buf->line[line] = buffer; + +// av_log(NULL, AV_LOG_DEBUG, "slice_buffer_load_line: line: %d remaining: %d\n", line, buf->data_stack_top + 1); + + return buffer; +} + + +//altivec code + +void ff_snow_horizontal_compose97i_altivec(DWTELEM *b, int width) +{ + const int w2= (width+1)>>1; + DECLARE_ALIGNED_16(DWTELEM, temp[(width>>1)]); + const int w_l= (width>>1); + const int w_r= w2 - 1; + int i; + vector signed int t1, t2, x, y, tmp1, tmp2; + vector signed int *vbuf, *vtmp; + vector unsigned char align; + + + + { // Lift 0 + DWTELEM * const ref = b + w2 - 1; + DWTELEM b_0 = b[0]; + vbuf = (vector signed int *)b; + + tmp1 = vec_ld (0, ref); + align = vec_lvsl (0, ref); + tmp2 = vec_ld (15, ref); + t1= vec_perm(tmp1, tmp2, align); + + i = 0; + + for (i=0; i<w_l-15; i+=16) { +#if 0 + b[i+0] = b[i+0] - ((3 * (ref[i+0] + ref[i+1]) + 4) >> 3); + b[i+1] = b[i+1] - ((3 * (ref[i+1] + ref[i+2]) + 4) >> 3); + b[i+2] = b[i+2] - ((3 * (ref[i+2] + ref[i+3]) + 4) >> 3); + b[i+3] = b[i+3] - ((3 * (ref[i+3] + ref[i+4]) + 4) >> 3); +#else + + tmp1 = vec_ld (0, ref+4+i); + tmp2 = vec_ld (15, ref+4+i); + + t2 = vec_perm(tmp1, tmp2, align); + + y = vec_add(t1,vec_sld(t1,t2,4)); + y = vec_add(vec_add(y,y),y); + + tmp1 = vec_ld (0, ref+8+i); + + y = vec_add(y, vec_splat_s32(4)); + y = vec_sra(y, vec_splat_u32(3)); + + tmp2 = vec_ld (15, ref+8+i); + + *vbuf = vec_sub(*vbuf, y); + + t1=t2; + + vbuf++; + + t2 = vec_perm(tmp1, tmp2, align); + + y = vec_add(t1,vec_sld(t1,t2,4)); + y = vec_add(vec_add(y,y),y); + + tmp1 = vec_ld (0, ref+12+i); + + y = vec_add(y, vec_splat_s32(4)); + y = vec_sra(y, vec_splat_u32(3)); + + tmp2 = vec_ld (15, ref+12+i); + + *vbuf = vec_sub(*vbuf, y); + + t1=t2; + + vbuf++; + + t2 = vec_perm(tmp1, tmp2, align); + + y = vec_add(t1,vec_sld(t1,t2,4)); + y = vec_add(vec_add(y,y),y); + + tmp1 = vec_ld (0, ref+16+i); + + y = vec_add(y, vec_splat_s32(4)); + y = vec_sra(y, vec_splat_u32(3)); + + tmp2 = vec_ld (15, ref+16+i); + + *vbuf = vec_sub(*vbuf, y); + + t1=t2; + + t2 = vec_perm(tmp1, tmp2, align); + + y = vec_add(t1,vec_sld(t1,t2,4)); + y = vec_add(vec_add(y,y),y); + + vbuf++; + + y = vec_add(y, vec_splat_s32(4)); + y = vec_sra(y, vec_splat_u32(3)); + *vbuf = vec_sub(*vbuf, y); + + t1=t2; + + vbuf++; + +#endif + } + + snow_horizontal_compose_lift_lead_out(i, b, b, ref, width, w_l, 0, W_DM, W_DO, W_DS); + b[0] = b_0 - ((W_DM * 2 * ref[1]+W_DO)>>W_DS); + } + + { // Lift 1 + DWTELEM * const dst = b+w2; + + i = 0; + for(; (((long)&dst[i]) & 0xF) && i<w_r; i++){ + dst[i] = dst[i] - (b[i] + b[i + 1]); + } + + align = vec_lvsl(0, b+i); + tmp1 = vec_ld(0, b+i); + vbuf = (vector signed int*) (dst + i); + tmp2 = vec_ld(15, b+i); + + t1 = vec_perm(tmp1, tmp2, align); + + for (; i<w_r-3; i+=4) { + +#if 0 + dst[i] = dst[i] - (b[i] + b[i + 1]); + dst[i+1] = dst[i+1] - (b[i+1] + b[i + 2]); + dst[i+2] = dst[i+2] - (b[i+2] + b[i + 3]); + dst[i+3] = dst[i+3] - (b[i+3] + b[i + 4]); +#else + + tmp1 = vec_ld(0, b+4+i); + tmp2 = vec_ld(15, b+4+i); + + t2 = vec_perm(tmp1, tmp2, align); + + y = vec_add(t1, vec_sld(t1,t2,4)); + *vbuf = vec_sub (*vbuf, y); + + vbuf++; + + t1 = t2; + +#endif + + } + + snow_horizontal_compose_lift_lead_out(i, dst, dst, b, width, w_r, 1, W_CM, W_CO, W_CS); + } + + { // Lift 2 + DWTELEM * const ref = b+w2 - 1; + DWTELEM b_0 = b[0]; + vbuf= (vector signed int *) b; + + tmp1 = vec_ld (0, ref); + align = vec_lvsl (0, ref); + tmp2 = vec_ld (15, ref); + t1= vec_perm(tmp1, tmp2, align); + + i = 0; + for (; i<w_l-15; i+=16) { +#if 0 + b[i] = b[i] - (((8 -(ref[i] + ref[i+1])) - (b[i] <<2)) >> 4); + b[i+1] = b[i+1] - (((8 -(ref[i+1] + ref[i+2])) - (b[i+1]<<2)) >> 4); + b[i+2] = b[i+2] - (((8 -(ref[i+2] + ref[i+3])) - (b[i+2]<<2)) >> 4); + b[i+3] = b[i+3] - (((8 -(ref[i+3] + ref[i+4])) - (b[i+3]<<2)) >> 4); +#else + tmp1 = vec_ld (0, ref+4+i); + tmp2 = vec_ld (15, ref+4+i); + + t2 = vec_perm(tmp1, tmp2, align); + + y = vec_add(t1,vec_sld(t1,t2,4)); + y = vec_sub(vec_splat_s32(8),y); + + tmp1 = vec_ld (0, ref+8+i); + + x = vec_sl(*vbuf,vec_splat_u32(2)); + y = vec_sra(vec_sub(y,x),vec_splat_u32(4)); + + tmp2 = vec_ld (15, ref+8+i); + + *vbuf = vec_sub( *vbuf, y); + + t1 = t2; + + vbuf++; + + t2 = vec_perm(tmp1, tmp2, align); + + y = vec_add(t1,vec_sld(t1,t2,4)); + y = vec_sub(vec_splat_s32(8),y); + + tmp1 = vec_ld (0, ref+12+i); + + x = vec_sl(*vbuf,vec_splat_u32(2)); + y = vec_sra(vec_sub(y,x),vec_splat_u32(4)); + + tmp2 = vec_ld (15, ref+12+i); + + *vbuf = vec_sub( *vbuf, y); + + t1 = t2; + + vbuf++; + + t2 = vec_perm(tmp1, tmp2, align); + + y = vec_add(t1,vec_sld(t1,t2,4)); + y = vec_sub(vec_splat_s32(8),y); + + tmp1 = vec_ld (0, ref+16+i); + + x = vec_sl(*vbuf,vec_splat_u32(2)); + y = vec_sra(vec_sub(y,x),vec_splat_u32(4)); + + tmp2 = vec_ld (15, ref+16+i); + + *vbuf = vec_sub( *vbuf, y); + + t1 = t2; + + vbuf++; + + t2 = vec_perm(tmp1, tmp2, align); + + y = vec_add(t1,vec_sld(t1,t2,4)); + y = vec_sub(vec_splat_s32(8),y); + + t1 = t2; + + x = vec_sl(*vbuf,vec_splat_u32(2)); + y = vec_sra(vec_sub(y,x),vec_splat_u32(4)); + *vbuf = vec_sub( *vbuf, y); + + vbuf++; + +#endif + } + + snow_horizontal_compose_liftS_lead_out(i, b, b, ref, width, w_l); + b[0] = b_0 - (((-2 * ref[1] + W_BO) - 4 * b_0) >> W_BS); + } + + { // Lift 3 + DWTELEM * const src = b+w2; + + vbuf = (vector signed int *)b; + vtmp = (vector signed int *)temp; + + i = 0; + align = vec_lvsl(0, src); + + for (; i<w_r-3; i+=4) { +#if 0 + temp[i] = src[i] - ((-3*(b[i] + b[i+1]))>>1); + temp[i+1] = src[i+1] - ((-3*(b[i+1] + b[i+2]))>>1); + temp[i+2] = src[i+2] - ((-3*(b[i+2] + b[i+3]))>>1); + temp[i+3] = src[i+3] - ((-3*(b[i+3] + b[i+4]))>>1); +#else + tmp1 = vec_ld(0,src+i); + t1 = vec_add(vbuf[0],vec_sld(vbuf[0],vbuf[1],4)); + tmp2 = vec_ld(15,src+i); + t1 = vec_sub(vec_splat_s32(0),t1); //bad! + t1 = vec_add(t1,vec_add(t1,t1)); + t2 = vec_perm(tmp1 ,tmp2 ,align); + t1 = vec_sra(t1,vec_splat_u32(1)); + vbuf++; + *vtmp = vec_sub(t2,t1); + vtmp++; + +#endif + + } + + snow_horizontal_compose_lift_lead_out(i, temp, src, b, width, w_r, 1, -3, 0, 1); + } + + { + //Interleave + int a; + vector signed int *t = (vector signed int *)temp, + *v = (vector signed int *)b; + + snow_interleave_line_header(&i, width, b, temp); + + for (; (i & 0xE) != 0xE; i-=2){ + b[i+1] = temp[i>>1]; + b[i] = b[i>>1]; + } + for (i-=14; i>=0; i-=16){ + a=i/4; + + v[a+3]=vec_mergel(v[(a>>1)+1],t[(a>>1)+1]); + v[a+2]=vec_mergeh(v[(a>>1)+1],t[(a>>1)+1]); + v[a+1]=vec_mergel(v[a>>1],t[a>>1]); + v[a]=vec_mergeh(v[a>>1],t[a>>1]); + + } + + } +} + +void ff_snow_vertical_compose97i_altivec(DWTELEM *b0, DWTELEM *b1, DWTELEM *b2, DWTELEM *b3, DWTELEM *b4, DWTELEM *b5, int width) +{ + int i, w4 = width/4; + vector signed int *v0, *v1,*v2,*v3,*v4,*v5; + vector signed int t1, t2; + + v0=(vector signed int *)b0; + v1=(vector signed int *)b1; + v2=(vector signed int *)b2; + v3=(vector signed int *)b3; + v4=(vector signed int *)b4; + v5=(vector signed int *)b5; + + for (i=0; i< w4;i++) + { + + #if 0 + b4[i] -= (3*(b3[i] + b5[i])+4)>>3; + b3[i] -= ((b2[i] + b4[i])); + b2[i] += ((b1[i] + b3[i])+4*b2[i]+8)>>4; + b1[i] += (3*(b0[i] + b2[i]))>>1; + #else + t1 = vec_add(v3[i], v5[i]); + t2 = vec_add(t1, vec_add(t1,t1)); + t1 = vec_add(t2, vec_splat_s32(4)); + v4[i] = vec_sub(v4[i], vec_sra(t1,vec_splat_u32(3))); + + v3[i] = vec_sub(v3[i], vec_add(v2[i], v4[i])); + + t1 = vec_add(vec_splat_s32(8), vec_add(v1[i], v3[i])); + t2 = vec_sl(v2[i], vec_splat_u32(2)); + v2[i] = vec_add(v2[i], vec_sra(vec_add(t1,t2),vec_splat_u32(4))); + t1 = vec_add(v0[i], v2[i]); + t2 = vec_add(t1, vec_add(t1,t1)); + v1[i] = vec_add(v1[i], vec_sra(t2,vec_splat_u32(1))); + + #endif + } + + for(i*=4; i < width; i++) + { + b4[i] -= (W_DM*(b3[i] + b5[i])+W_DO)>>W_DS; + b3[i] -= (W_CM*(b2[i] + b4[i])+W_CO)>>W_CS; + b2[i] += (W_BM*(b1[i] + b3[i])+4*b2[i]+W_BO)>>W_BS; + b1[i] += (W_AM*(b0[i] + b2[i])+W_AO)>>W_AS; + } +} + +#define LOAD_BLOCKS \ + tmp1 = vec_ld(0, &block[3][y*src_stride]);\ + align = vec_lvsl(0, &block[3][y*src_stride]);\ + tmp2 = vec_ld(15, &block[3][y*src_stride]);\ +\ + b3 = vec_perm(tmp1,tmp2,align);\ +\ + tmp1 = vec_ld(0, &block[2][y*src_stride]);\ + align = vec_lvsl(0, &block[2][y*src_stride]);\ + tmp2 = vec_ld(15, &block[2][y*src_stride]);\ +\ + b2 = vec_perm(tmp1,tmp2,align);\ +\ + tmp1 = vec_ld(0, &block[1][y*src_stride]);\ + align = vec_lvsl(0, &block[1][y*src_stride]);\ + tmp2 = vec_ld(15, &block[1][y*src_stride]);\ +\ + b1 = vec_perm(tmp1,tmp2,align);\ +\ + tmp1 = vec_ld(0, &block[0][y*src_stride]);\ + align = vec_lvsl(0, &block[0][y*src_stride]);\ + tmp2 = vec_ld(15, &block[0][y*src_stride]);\ +\ + b0 = vec_perm(tmp1,tmp2,align); + +#define LOAD_OBMCS \ + tmp1 = vec_ld(0, obmc1);\ + align = vec_lvsl(0, obmc1);\ + tmp2 = vec_ld(15, obmc1);\ +\ + ob1 = vec_perm(tmp1,tmp2,align);\ +\ + tmp1 = vec_ld(0, obmc2);\ + align = vec_lvsl(0, obmc2);\ + tmp2 = vec_ld(15, obmc2);\ +\ + ob2 = vec_perm(tmp1,tmp2,align);\ +\ + tmp1 = vec_ld(0, obmc3);\ + align = vec_lvsl(0, obmc3);\ + tmp2 = vec_ld(15, obmc3);\ +\ + ob3 = vec_perm(tmp1,tmp2,align);\ +\ + tmp1 = vec_ld(0, obmc4);\ + align = vec_lvsl(0, obmc4);\ + tmp2 = vec_ld(15, obmc4);\ +\ + ob4 = vec_perm(tmp1,tmp2,align); + +/* interleave logic + * h1 <- [ a,b,a,b, a,b,a,b, a,b,a,b, a,b,a,b ] + * h2 <- [ c,d,c,d, c,d,c,d, c,d,c,d, c,d,c,d ] + * h <- [ a,b,c,d, a,b,c,d, a,b,c,d, a,b,c,d ] + */ + +#define STEPS_0_1\ + h1 = (vector unsigned short)\ + vec_mergeh(ob1, ob2);\ +\ + h2 = (vector unsigned short)\ + vec_mergeh(ob3, ob4);\ +\ + ih = (vector unsigned char)\ + vec_mergeh(h1,h2);\ +\ + l1 = (vector unsigned short) vec_mergeh(b3, b2);\ +\ + ih1 = (vector unsigned char) vec_mergel(h1, h2);\ +\ + l2 = (vector unsigned short) vec_mergeh(b1, b0);\ +\ + il = (vector unsigned char) vec_mergeh(l1, l2);\ +\ + v[0] = (vector signed int) vec_msum(ih, il, vec_splat_u32(0));\ +\ + il1 = (vector unsigned char) vec_mergel(l1, l2);\ +\ + v[1] = (vector signed int) vec_msum(ih1, il1, vec_splat_u32(0)); + +#define FINAL_STEP_SCALAR\ + for(x=0; x<b_w; x++)\ + if(add){\ + vbuf[x] += dst[x + src_x];\ + vbuf[x] = (vbuf[x] + (1<<(FRAC_BITS-1))) >> FRAC_BITS;\ + if(vbuf[x]&(~255)) vbuf[x]= ~(vbuf[x]>>31);\ + dst8[x + y*src_stride] = vbuf[x];\ + }else{\ + dst[x + src_x] -= vbuf[x];\ + } + +static void inner_add_yblock_bw_8_obmc_16_altivec(uint8_t *obmc, + const int obmc_stride, + uint8_t * * block, int b_w, + int b_h, int src_x, int src_y, + int src_stride, slice_buffer * sb, + int add, uint8_t * dst8) +{ + int y, x; + DWTELEM * dst; + vector unsigned short h1, h2, l1, l2; + vector unsigned char ih, il, ih1, il1, tmp1, tmp2, align; + vector unsigned char b0,b1,b2,b3; + vector unsigned char ob1,ob2,ob3,ob4; + + DECLARE_ALIGNED_16(int, vbuf[16]); + vector signed int *v = (vector signed int *)vbuf, *d; + + for(y=0; y<b_h; y++){ + //FIXME ugly missue of obmc_stride + + uint8_t *obmc1= obmc + y*obmc_stride; + uint8_t *obmc2= obmc1+ (obmc_stride>>1); + uint8_t *obmc3= obmc1+ obmc_stride*(obmc_stride>>1); + uint8_t *obmc4= obmc3+ (obmc_stride>>1); + + dst = slice_buffer_get_line(sb, src_y + y); + d = (vector signed int *)(dst + src_x); + +//FIXME i could avoid some loads! + + // load blocks + LOAD_BLOCKS + + // load obmcs + LOAD_OBMCS + + // steps 0 1 + STEPS_0_1 + + FINAL_STEP_SCALAR + + } + +} + +#define STEPS_2_3\ + h1 = (vector unsigned short) vec_mergel(ob1, ob2);\ +\ + h2 = (vector unsigned short) vec_mergel(ob3, ob4);\ +\ + ih = (vector unsigned char) vec_mergeh(h1,h2);\ +\ + l1 = (vector unsigned short) vec_mergel(b3, b2);\ +\ + l2 = (vector unsigned short) vec_mergel(b1, b0);\ +\ + ih1 = (vector unsigned char) vec_mergel(h1,h2);\ +\ + il = (vector unsigned char) vec_mergeh(l1,l2);\ +\ + v[2] = (vector signed int) vec_msum(ih, il, vec_splat_u32(0));\ +\ + il1 = (vector unsigned char) vec_mergel(l1,l2);\ +\ + v[3] = (vector signed int) vec_msum(ih1, il1, vec_splat_u32(0)); + + +static void inner_add_yblock_bw_16_obmc_32_altivec(uint8_t *obmc, + const int obmc_stride, + uint8_t * * block, int b_w, + int b_h, int src_x, int src_y, + int src_stride, slice_buffer * sb, + int add, uint8_t * dst8) +{ + int y, x; + DWTELEM * dst; + vector unsigned short h1, h2, l1, l2; + vector unsigned char ih, il, ih1, il1, tmp1, tmp2, align; + vector unsigned char b0,b1,b2,b3; + vector unsigned char ob1,ob2,ob3,ob4; + DECLARE_ALIGNED_16(int, vbuf[b_w]); + vector signed int *v = (vector signed int *)vbuf, *d; + + for(y=0; y<b_h; y++){ + //FIXME ugly missue of obmc_stride + + uint8_t *obmc1= obmc + y*obmc_stride; + uint8_t *obmc2= obmc1+ (obmc_stride>>1); + uint8_t *obmc3= obmc1+ obmc_stride*(obmc_stride>>1); + uint8_t *obmc4= obmc3+ (obmc_stride>>1); + + dst = slice_buffer_get_line(sb, src_y + y); + d = (vector signed int *)(dst + src_x); + + // load blocks + LOAD_BLOCKS + + // load obmcs + LOAD_OBMCS + + // steps 0 1 2 3 + STEPS_0_1 + + STEPS_2_3 + + FINAL_STEP_SCALAR + + } +} + +#define FINAL_STEP_VEC \ +\ + if(add)\ + {\ + for(x=0; x<b_w/4; x++)\ + {\ + v[x] = vec_add(v[x], d[x]);\ + v[x] = vec_sra(vec_add(v[x],\ + vec_sl( vec_splat_s32(1),\ + vec_splat_u32(7))),\ + vec_splat_u32(8));\ +\ + mask = (vector bool int) vec_sl((vector signed int)\ + vec_cmpeq(v[x],v[x]),vec_splat_u32(8));\ + mask = (vector bool int) vec_and(v[x],vec_nor(mask,mask));\ +\ + mask = (vector bool int)\ + vec_cmpeq((vector signed int)mask,\ + (vector signed int)vec_splat_u32(0));\ +\ + vs = vec_sra(v[x],vec_splat_u32(8));\ + vs = vec_sra(v[x],vec_splat_u32(8));\ + vs = vec_sra(v[x],vec_splat_u32(15));\ +\ + vs = vec_nor(vs,vs);\ +\ + v[x]= vec_sel(v[x],vs,mask);\ + }\ +\ + for(x=0; x<b_w; x++)\ + dst8[x + y*src_stride] = vbuf[x];\ +\ + }\ + else\ + for(x=0; x<b_w/4; x++)\ + d[x] = vec_sub(d[x], v[x]); + +static void inner_add_yblock_a_bw_8_obmc_16_altivec(uint8_t *obmc, + const int obmc_stride, + uint8_t * * block, int b_w, + int b_h, int src_x, int src_y, + int src_stride, slice_buffer * sb, + int add, uint8_t * dst8) +{ + int y, x; + DWTELEM * dst; + vector bool int mask; + vector signed int vs; + vector unsigned short h1, h2, l1, l2; + vector unsigned char ih, il, ih1, il1, tmp1, tmp2, align; + vector unsigned char b0,b1,b2,b3; + vector unsigned char ob1,ob2,ob3,ob4; + + DECLARE_ALIGNED_16(int, vbuf[16]); + vector signed int *v = (vector signed int *)vbuf, *d; + + for(y=0; y<b_h; y++){ + //FIXME ugly missue of obmc_stride + + uint8_t *obmc1= obmc + y*obmc_stride; + uint8_t *obmc2= obmc1+ (obmc_stride>>1); + uint8_t *obmc3= obmc1+ obmc_stride*(obmc_stride>>1); + uint8_t *obmc4= obmc3+ (obmc_stride>>1); + + dst = slice_buffer_get_line(sb, src_y + y); + d = (vector signed int *)(dst + src_x); + +//FIXME i could avoid some loads! + + // load blocks + LOAD_BLOCKS + + // load obmcs + LOAD_OBMCS + + // steps 0 1 + STEPS_0_1 + + FINAL_STEP_VEC + + } + +} + +static void inner_add_yblock_a_bw_16_obmc_32_altivec(uint8_t *obmc, + const int obmc_stride, + uint8_t * * block, int b_w, + int b_h, int src_x, int src_y, + int src_stride, slice_buffer * sb, + int add, uint8_t * dst8) +{ + int y, x; + DWTELEM * dst; + vector bool int mask; + vector signed int vs; + vector unsigned short h1, h2, l1, l2; + vector unsigned char ih, il, ih1, il1, tmp1, tmp2, align; + vector unsigned char b0,b1,b2,b3; + vector unsigned char ob1,ob2,ob3,ob4; + DECLARE_ALIGNED_16(int, vbuf[b_w]); + vector signed int *v = (vector signed int *)vbuf, *d; + + for(y=0; y<b_h; y++){ + //FIXME ugly missue of obmc_stride + + uint8_t *obmc1= obmc + y*obmc_stride; + uint8_t *obmc2= obmc1+ (obmc_stride>>1); + uint8_t *obmc3= obmc1+ obmc_stride*(obmc_stride>>1); + uint8_t *obmc4= obmc3+ (obmc_stride>>1); + + dst = slice_buffer_get_line(sb, src_y + y); + d = (vector signed int *)(dst + src_x); + + // load blocks + LOAD_BLOCKS + + // load obmcs + LOAD_OBMCS + + // steps 0 1 2 3 + STEPS_0_1 + + STEPS_2_3 + + FINAL_STEP_VEC + + } +} + + +void ff_snow_inner_add_yblock_altivec(uint8_t *obmc, const int obmc_stride, + uint8_t * * block, int b_w, int b_h, + int src_x, int src_y, int src_stride, + slice_buffer * sb, int add, + uint8_t * dst8) +{ + if (src_x&15) { + if (b_w == 16) + inner_add_yblock_bw_16_obmc_32_altivec(obmc, obmc_stride, block, + b_w, b_h, src_x, src_y, + src_stride, sb, add, dst8); + else if (b_w == 8) + inner_add_yblock_bw_8_obmc_16_altivec(obmc, obmc_stride, block, + b_w, b_h, src_x, src_y, + src_stride, sb, add, dst8); + else + ff_snow_inner_add_yblock(obmc, obmc_stride, block, b_w, b_h, src_x, + src_y, src_stride, sb, add, dst8); + } else { + if (b_w == 16) + inner_add_yblock_a_bw_16_obmc_32_altivec(obmc, obmc_stride, block, + b_w, b_h, src_x, src_y, + src_stride, sb, add, dst8); + else if (b_w == 8) + inner_add_yblock_a_bw_8_obmc_16_altivec(obmc, obmc_stride, block, + b_w, b_h, src_x, src_y, + src_stride, sb, add, dst8); + else + ff_snow_inner_add_yblock(obmc, obmc_stride, block, b_w, b_h, src_x, + src_y, src_stride, sb, add, dst8); + } +} + + +void snow_init_altivec(DSPContext* c, AVCodecContext *avctx) +{ + c->horizontal_compose97i = ff_snow_horizontal_compose97i_altivec; + c->vertical_compose97i = ff_snow_vertical_compose97i_altivec; + c->inner_add_yblock = ff_snow_inner_add_yblock_altivec; +} diff --git a/src/libffmpeg/libavcodec/ppc/types_altivec.h b/src/libffmpeg/libavcodec/ppc/types_altivec.h new file mode 100644 index 000000000..f29026e04 --- /dev/null +++ b/src/libffmpeg/libavcodec/ppc/types_altivec.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2006 Guillaume Poirier <gpoirier@mplayerhq.hu> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/*********************************************************************** + * Vector types + **********************************************************************/ +#define vec_u8_t vector unsigned char +#define vec_s8_t vector signed char +#define vec_u16_t vector unsigned short +#define vec_s16_t vector signed short +#define vec_u32_t vector unsigned int +#define vec_s32_t vector signed int + +/*********************************************************************** + * Null vector + **********************************************************************/ +#define LOAD_ZERO const vec_u8_t zerov = vec_splat_u8( 0 ) + +#define zero_u8v (vec_u8_t) zerov +#define zero_s8v (vec_s8_t) zerov +#define zero_u16v (vec_u16_t) zerov +#define zero_s16v (vec_s16_t) zerov +#define zero_u32v (vec_u32_t) zerov +#define zero_s32v (vec_s32_t) zerov diff --git a/src/libffmpeg/libavcodec/ppc/vc1dsp_altivec.c b/src/libffmpeg/libavcodec/ppc/vc1dsp_altivec.c new file mode 100644 index 000000000..114c9d41f --- /dev/null +++ b/src/libffmpeg/libavcodec/ppc/vc1dsp_altivec.c @@ -0,0 +1,338 @@ +/* + * VC-1 and WMV3 decoder - DSP functions AltiVec-optimized + * Copyright (c) 2006 Konstantin Shishkov + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "../dsputil.h" + +#include "gcc_fixes.h" + +#include "dsputil_altivec.h" + +// main steps of 8x8 transform +#define STEP8(s0, s1, s2, s3, s4, s5, s6, s7, vec_rnd) \ +do { \ + t0 = vec_sl(vec_add(s0, s4), vec_2); \ + t0 = vec_add(vec_sl(t0, vec_1), t0); \ + t0 = vec_add(t0, vec_rnd); \ + t1 = vec_sl(vec_sub(s0, s4), vec_2); \ + t1 = vec_add(vec_sl(t1, vec_1), t1); \ + t1 = vec_add(t1, vec_rnd); \ + t2 = vec_add(vec_sl(s6, vec_2), vec_sl(s6, vec_1)); \ + t2 = vec_add(t2, vec_sl(s2, vec_4)); \ + t3 = vec_add(vec_sl(s2, vec_2), vec_sl(s2, vec_1)); \ + t3 = vec_sub(t3, vec_sl(s6, vec_4)); \ + t4 = vec_add(t0, t2); \ + t5 = vec_add(t1, t3); \ + t6 = vec_sub(t1, t3); \ + t7 = vec_sub(t0, t2); \ +\ + t0 = vec_sl(vec_add(s1, s3), vec_4); \ + t0 = vec_add(t0, vec_sl(s5, vec_3)); \ + t0 = vec_add(t0, vec_sl(s7, vec_2)); \ + t0 = vec_add(t0, vec_sub(s5, s3)); \ +\ + t1 = vec_sl(vec_sub(s1, s5), vec_4); \ + t1 = vec_sub(t1, vec_sl(s7, vec_3)); \ + t1 = vec_sub(t1, vec_sl(s3, vec_2)); \ + t1 = vec_sub(t1, vec_add(s1, s7)); \ +\ + t2 = vec_sl(vec_sub(s7, s3), vec_4); \ + t2 = vec_add(t2, vec_sl(s1, vec_3)); \ + t2 = vec_add(t2, vec_sl(s5, vec_2)); \ + t2 = vec_add(t2, vec_sub(s1, s7)); \ +\ + t3 = vec_sl(vec_sub(s5, s7), vec_4); \ + t3 = vec_sub(t3, vec_sl(s3, vec_3)); \ + t3 = vec_add(t3, vec_sl(s1, vec_2)); \ + t3 = vec_sub(t3, vec_add(s3, s5)); \ +\ + s0 = vec_add(t4, t0); \ + s1 = vec_add(t5, t1); \ + s2 = vec_add(t6, t2); \ + s3 = vec_add(t7, t3); \ + s4 = vec_sub(t7, t3); \ + s5 = vec_sub(t6, t2); \ + s6 = vec_sub(t5, t1); \ + s7 = vec_sub(t4, t0); \ +}while(0) + +#define SHIFT_HOR8(s0, s1, s2, s3, s4, s5, s6, s7) \ +do { \ + s0 = vec_sra(s0, vec_3); \ + s1 = vec_sra(s1, vec_3); \ + s2 = vec_sra(s2, vec_3); \ + s3 = vec_sra(s3, vec_3); \ + s4 = vec_sra(s4, vec_3); \ + s5 = vec_sra(s5, vec_3); \ + s6 = vec_sra(s6, vec_3); \ + s7 = vec_sra(s7, vec_3); \ +}while(0) + +#define SHIFT_VERT8(s0, s1, s2, s3, s4, s5, s6, s7) \ +do { \ + s0 = vec_sra(s0, vec_7); \ + s1 = vec_sra(s1, vec_7); \ + s2 = vec_sra(s2, vec_7); \ + s3 = vec_sra(s3, vec_7); \ + s4 = vec_sra(vec_add(s4, vec_1s), vec_7); \ + s5 = vec_sra(vec_add(s5, vec_1s), vec_7); \ + s6 = vec_sra(vec_add(s6, vec_1s), vec_7); \ + s7 = vec_sra(vec_add(s7, vec_1s), vec_7); \ +}while(0) + +/* main steps of 4x4 transform */ +#define STEP4(s0, s1, s2, s3, vec_rnd) \ +do { \ + t1 = vec_add(vec_sl(s0, vec_4), s0); \ + t1 = vec_add(t1, vec_rnd); \ + t2 = vec_add(vec_sl(s2, vec_4), s2); \ + t0 = vec_add(t1, t2); \ + t1 = vec_sub(t1, t2); \ + t3 = vec_sl(vec_sub(s3, s1), vec_1); \ + t3 = vec_add(t3, vec_sl(t3, vec_2)); \ + t2 = vec_add(t3, vec_sl(s1, vec_5)); \ + t3 = vec_add(t3, vec_sl(s3, vec_3)); \ + t3 = vec_add(t3, vec_sl(s3, vec_2)); \ + s0 = vec_add(t0, t2); \ + s1 = vec_sub(t1, t3); \ + s2 = vec_add(t1, t3); \ + s3 = vec_sub(t0, t2); \ +}while (0) + +#define SHIFT_HOR4(s0, s1, s2, s3) \ + s0 = vec_sra(s0, vec_3); \ + s1 = vec_sra(s1, vec_3); \ + s2 = vec_sra(s2, vec_3); \ + s3 = vec_sra(s3, vec_3); + +#define SHIFT_VERT4(s0, s1, s2, s3) \ + s0 = vec_sra(s0, vec_7); \ + s1 = vec_sra(s1, vec_7); \ + s2 = vec_sra(s2, vec_7); \ + s3 = vec_sra(s3, vec_7); + +/** Do inverse transform on 8x8 block +*/ +static void vc1_inv_trans_8x8_altivec(DCTELEM block[64]) +{ + vector signed short src0, src1, src2, src3, src4, src5, src6, src7; + vector signed int s0, s1, s2, s3, s4, s5, s6, s7; + vector signed int s8, s9, sA, sB, sC, sD, sE, sF; + vector signed int t0, t1, t2, t3, t4, t5, t6, t7; + const vector signed int vec_64 = vec_sl(vec_splat_s32(4), vec_splat_u32(4)); + const vector unsigned int vec_7 = vec_splat_u32(7); + const vector unsigned int vec_5 = vec_splat_u32(5); + const vector unsigned int vec_4 = vec_splat_u32(4); + const vector signed int vec_4s = vec_splat_s32(4); + const vector unsigned int vec_3 = vec_splat_u32(3); + const vector unsigned int vec_2 = vec_splat_u32(2); + const vector signed int vec_1s = vec_splat_s32(1); + const vector unsigned int vec_1 = vec_splat_u32(1); + + + src0 = vec_ld( 0, block); + src1 = vec_ld( 16, block); + src2 = vec_ld( 32, block); + src3 = vec_ld( 48, block); + src4 = vec_ld( 64, block); + src5 = vec_ld( 80, block); + src6 = vec_ld( 96, block); + src7 = vec_ld(112, block); + + TRANSPOSE8(src0, src1, src2, src3, src4, src5, src6, src7); + s0 = vec_unpackl(src0); + s1 = vec_unpackl(src1); + s2 = vec_unpackl(src2); + s3 = vec_unpackl(src3); + s4 = vec_unpackl(src4); + s5 = vec_unpackl(src5); + s6 = vec_unpackl(src6); + s7 = vec_unpackl(src7); + s8 = vec_unpackh(src0); + s9 = vec_unpackh(src1); + sA = vec_unpackh(src2); + sB = vec_unpackh(src3); + sC = vec_unpackh(src4); + sD = vec_unpackh(src5); + sE = vec_unpackh(src6); + sF = vec_unpackh(src7); + STEP8(s0, s1, s2, s3, s4, s5, s6, s7, vec_4s); + SHIFT_HOR8(s0, s1, s2, s3, s4, s5, s6, s7); + STEP8(s8, s9, sA, sB, sC, sD, sE, sF, vec_4s); + SHIFT_HOR8(s8, s9, sA, sB, sC, sD, sE, sF); + src0 = vec_pack(s8, s0); + src1 = vec_pack(s9, s1); + src2 = vec_pack(sA, s2); + src3 = vec_pack(sB, s3); + src4 = vec_pack(sC, s4); + src5 = vec_pack(sD, s5); + src6 = vec_pack(sE, s6); + src7 = vec_pack(sF, s7); + TRANSPOSE8(src0, src1, src2, src3, src4, src5, src6, src7); + + s0 = vec_unpackl(src0); + s1 = vec_unpackl(src1); + s2 = vec_unpackl(src2); + s3 = vec_unpackl(src3); + s4 = vec_unpackl(src4); + s5 = vec_unpackl(src5); + s6 = vec_unpackl(src6); + s7 = vec_unpackl(src7); + s8 = vec_unpackh(src0); + s9 = vec_unpackh(src1); + sA = vec_unpackh(src2); + sB = vec_unpackh(src3); + sC = vec_unpackh(src4); + sD = vec_unpackh(src5); + sE = vec_unpackh(src6); + sF = vec_unpackh(src7); + STEP8(s0, s1, s2, s3, s4, s5, s6, s7, vec_64); + SHIFT_VERT8(s0, s1, s2, s3, s4, s5, s6, s7); + STEP8(s8, s9, sA, sB, sC, sD, sE, sF, vec_64); + SHIFT_VERT8(s8, s9, sA, sB, sC, sD, sE, sF); + src0 = vec_pack(s8, s0); + src1 = vec_pack(s9, s1); + src2 = vec_pack(sA, s2); + src3 = vec_pack(sB, s3); + src4 = vec_pack(sC, s4); + src5 = vec_pack(sD, s5); + src6 = vec_pack(sE, s6); + src7 = vec_pack(sF, s7); + + vec_st(src0, 0, block); + vec_st(src1, 16, block); + vec_st(src2, 32, block); + vec_st(src3, 48, block); + vec_st(src4, 64, block); + vec_st(src5, 80, block); + vec_st(src6, 96, block); + vec_st(src7,112, block); +} + +/** Do inverse transform on 8x4 part of block +*/ +static void vc1_inv_trans_8x4_altivec(DCTELEM block[64], int n) +{ + vector signed short src0, src1, src2, src3, src4, src5, src6, src7; + vector signed int s0, s1, s2, s3, s4, s5, s6, s7; + vector signed int s8, s9, sA, sB, sC, sD, sE, sF; + vector signed int t0, t1, t2, t3, t4, t5, t6, t7; + const vector signed int vec_64 = vec_sl(vec_splat_s32(4), vec_splat_u32(4)); + const vector unsigned int vec_7 = vec_splat_u32(7); + const vector unsigned int vec_5 = vec_splat_u32(5); + const vector unsigned int vec_4 = vec_splat_u32(4); + const vector signed int vec_4s = vec_splat_s32(4); + const vector unsigned int vec_3 = vec_splat_u32(3); + const vector unsigned int vec_2 = vec_splat_u32(2); + const vector unsigned int vec_1 = vec_splat_u32(1); + + src0 = vec_ld( 0, block); + src1 = vec_ld( 16, block); + src2 = vec_ld( 32, block); + src3 = vec_ld( 48, block); + src4 = vec_ld( 64, block); + src5 = vec_ld( 80, block); + src6 = vec_ld( 96, block); + src7 = vec_ld(112, block); + + TRANSPOSE8(src0, src1, src2, src3, src4, src5, src6, src7); + s0 = vec_unpackl(src0); + s1 = vec_unpackl(src1); + s2 = vec_unpackl(src2); + s3 = vec_unpackl(src3); + s4 = vec_unpackl(src4); + s5 = vec_unpackl(src5); + s6 = vec_unpackl(src6); + s7 = vec_unpackl(src7); + s8 = vec_unpackh(src0); + s9 = vec_unpackh(src1); + sA = vec_unpackh(src2); + sB = vec_unpackh(src3); + sC = vec_unpackh(src4); + sD = vec_unpackh(src5); + sE = vec_unpackh(src6); + sF = vec_unpackh(src7); + STEP8(s0, s1, s2, s3, s4, s5, s6, s7, vec_4s); + SHIFT_HOR8(s0, s1, s2, s3, s4, s5, s6, s7); + STEP8(s8, s9, sA, sB, sC, sD, sE, sF, vec_4s); + SHIFT_HOR8(s8, s9, sA, sB, sC, sD, sE, sF); + src0 = vec_pack(s8, s0); + src1 = vec_pack(s9, s1); + src2 = vec_pack(sA, s2); + src3 = vec_pack(sB, s3); + src4 = vec_pack(sC, s4); + src5 = vec_pack(sD, s5); + src6 = vec_pack(sE, s6); + src7 = vec_pack(sF, s7); + TRANSPOSE8(src0, src1, src2, src3, src4, src5, src6, src7); + + if(!n){ // upper half of block + s0 = vec_unpackh(src0); + s1 = vec_unpackh(src1); + s2 = vec_unpackh(src2); + s3 = vec_unpackh(src3); + s8 = vec_unpackl(src0); + s9 = vec_unpackl(src1); + sA = vec_unpackl(src2); + sB = vec_unpackl(src3); + STEP4(s0, s1, s2, s3, vec_64); + SHIFT_VERT4(s0, s1, s2, s3); + STEP4(s8, s9, sA, sB, vec_64); + SHIFT_VERT4(s8, s9, sA, sB); + src0 = vec_pack(s0, s8); + src1 = vec_pack(s1, s9); + src2 = vec_pack(s2, sA); + src3 = vec_pack(s3, sB); + + vec_st(src0, 0, block); + vec_st(src1, 16, block); + vec_st(src2, 32, block); + vec_st(src3, 48, block); + } else { //lower half of block + s0 = vec_unpackh(src4); + s1 = vec_unpackh(src5); + s2 = vec_unpackh(src6); + s3 = vec_unpackh(src7); + s8 = vec_unpackl(src4); + s9 = vec_unpackl(src5); + sA = vec_unpackl(src6); + sB = vec_unpackl(src7); + STEP4(s0, s1, s2, s3, vec_64); + SHIFT_VERT4(s0, s1, s2, s3); + STEP4(s8, s9, sA, sB, vec_64); + SHIFT_VERT4(s8, s9, sA, sB); + src4 = vec_pack(s0, s8); + src5 = vec_pack(s1, s9); + src6 = vec_pack(s2, sA); + src7 = vec_pack(s3, sB); + + vec_st(src4, 64, block); + vec_st(src5, 80, block); + vec_st(src6, 96, block); + vec_st(src7,112, block); + } +} + + +void vc1dsp_init_altivec(DSPContext* dsp, AVCodecContext *avctx) { + dsp->vc1_inv_trans_8x8 = vc1_inv_trans_8x8_altivec; + dsp->vc1_inv_trans_8x4 = vc1_inv_trans_8x4_altivec; +} diff --git a/src/libffmpeg/libavcodec/ratecontrol.h b/src/libffmpeg/libavcodec/ratecontrol.h new file mode 100644 index 000000000..c428923a5 --- /dev/null +++ b/src/libffmpeg/libavcodec/ratecontrol.h @@ -0,0 +1,103 @@ +/* + * Ratecontrol + * Copyright (c) 2000, 2001, 2002 Fabrice Bellard. + * Copyright (c) 2002-2004 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVCODEC_RATECONTROL_H +#define AVCODEC_RATECONTROL_H + +/** + * @file ratecontrol.h + * ratecontrol header. + */ + +#include "eval.h" + +typedef struct Predictor{ + double coeff; + double count; + double decay; +} Predictor; + +typedef struct RateControlEntry{ + int pict_type; + float qscale; + int mv_bits; + int i_tex_bits; + int p_tex_bits; + int misc_bits; + int header_bits; + uint64_t expected_bits; + int new_pict_type; + float new_qscale; + int mc_mb_var_sum; + int mb_var_sum; + int i_count; + int skip_count; + int f_code; + int b_code; +}RateControlEntry; + +/** + * rate control context. + */ +typedef struct RateControlContext{ + FILE *stats_file; + int num_entries; ///< number of RateControlEntries + RateControlEntry *entry; + double buffer_index; ///< amount of bits in the video/audio buffer + Predictor pred[5]; + double short_term_qsum; ///< sum of recent qscales + double short_term_qcount; ///< count of recent qscales + double pass1_rc_eq_output_sum;///< sum of the output of the rc equation, this is used for normalization + double pass1_wanted_bits; ///< bits which should have been outputed by the pass1 code (including complexity init) + double last_qscale; + double last_qscale_for[5]; ///< last qscale for a specific pict type, used for max_diff & ipb factor stuff + int last_mc_mb_var_sum; + int last_mb_var_sum; + uint64_t i_cplx_sum[5]; + uint64_t p_cplx_sum[5]; + uint64_t mv_bits_sum[5]; + uint64_t qscale_sum[5]; + int frame_count[5]; + int last_non_b_pict_type; + + void *non_lavc_opaque; ///< context for non lavc rc code (for example xvid) + float dry_run_qscale; ///< for xvid rc + int last_picture_number; ///< for xvid rc + AVEvalExpr * rc_eq_eval; +}RateControlContext; + +struct MpegEncContext; + +/* rate control */ +int ff_rate_control_init(struct MpegEncContext *s); +float ff_rate_estimate_qscale(struct MpegEncContext *s, int dry_run); +void ff_write_pass1_stats(struct MpegEncContext *s); +void ff_rate_control_uninit(struct MpegEncContext *s); +int ff_vbv_update(struct MpegEncContext *s, int frame_size); +void ff_get_2pass_fcode(struct MpegEncContext *s); + +int ff_xvid_rate_control_init(struct MpegEncContext *s); +void ff_xvid_rate_control_uninit(struct MpegEncContext *s); +float ff_xvid_rate_estimate_qscale(struct MpegEncContext *s, int dry_run); + +#endif /* AVCODEC_RATECONTROL_H */ + diff --git a/src/libspeex/.cvsignore b/src/libffmpeg/libavcodec/sparc/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libspeex/.cvsignore +++ b/src/libffmpeg/libavcodec/sparc/.hgignore diff --git a/src/libffmpeg/libavcodec/vorbis_data.c b/src/libffmpeg/libavcodec/vorbis_data.c new file mode 100644 index 000000000..5dc9c5f00 --- /dev/null +++ b/src/libffmpeg/libavcodec/vorbis_data.c @@ -0,0 +1,2155 @@ +/* + * copyright (c) 2005 Denes Balatoni ( dbalatoni programozo hu ) + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "vorbis.h" + +static const float vwin64[32] = { + 0.0009460463F, 0.0085006468F, 0.0235352254F, 0.0458950567F, + 0.0753351908F, 0.1115073077F, 0.1539457973F, 0.2020557475F, + 0.2551056759F, 0.3122276645F, 0.3724270287F, 0.4346027792F, + 0.4975789974F, 0.5601459521F, 0.6211085051F, 0.6793382689F, + 0.7338252629F, 0.7837245849F, 0.8283939355F, 0.8674186656F, + 0.9006222429F, 0.9280614787F, 0.9500073081F, 0.9669131782F, + 0.9793740220F, 0.9880792941F, 0.9937636139F, 0.9971582668F, + 0.9989462667F, 0.9997230082F, 0.9999638688F, 0.9999995525F, +}; + +static const float vwin128[64] = { + 0.0002365472F, 0.0021280687F, 0.0059065254F, 0.0115626550F, + 0.0190823442F, 0.0284463735F, 0.0396300935F, 0.0526030430F, + 0.0673285281F, 0.0837631763F, 0.1018564887F, 0.1215504095F, + 0.1427789367F, 0.1654677960F, 0.1895342001F, 0.2148867160F, + 0.2414252576F, 0.2690412240F, 0.2976177952F, 0.3270303960F, + 0.3571473350F, 0.3878306189F, 0.4189369387F, 0.4503188188F, + 0.4818259135F, 0.5133064334F, 0.5446086751F, 0.5755826278F, + 0.6060816248F, 0.6359640047F, 0.6650947483F, 0.6933470543F, + 0.7206038179F, 0.7467589810F, 0.7717187213F, 0.7954024542F, + 0.8177436264F, 0.8386902831F, 0.8582053981F, 0.8762669622F, + 0.8928678298F, 0.9080153310F, 0.9217306608F, 0.9340480615F, + 0.9450138200F, 0.9546851041F, 0.9631286621F, 0.9704194171F, + 0.9766389810F, 0.9818741197F, 0.9862151938F, 0.9897546035F, + 0.9925852598F, 0.9947991032F, 0.9964856900F, 0.9977308602F, + 0.9986155015F, 0.9992144193F, 0.9995953200F, 0.9998179155F, + 0.9999331503F, 0.9999825563F, 0.9999977357F, 0.9999999720F, +}; + +static const float vwin256[128] = { + 0.0000591390F, 0.0005321979F, 0.0014780301F, 0.0028960636F, + 0.0047854363F, 0.0071449926F, 0.0099732775F, 0.0132685298F, + 0.0170286741F, 0.0212513119F, 0.0259337111F, 0.0310727950F, + 0.0366651302F, 0.0427069140F, 0.0491939614F, 0.0561216907F, + 0.0634851102F, 0.0712788035F, 0.0794969160F, 0.0881331402F, + 0.0971807028F, 0.1066323515F, 0.1164803426F, 0.1267164297F, + 0.1373318534F, 0.1483173323F, 0.1596630553F, 0.1713586755F, + 0.1833933062F, 0.1957555184F, 0.2084333404F, 0.2214142599F, + 0.2346852280F, 0.2482326664F, 0.2620424757F, 0.2761000481F, + 0.2903902813F, 0.3048975959F, 0.3196059553F, 0.3344988887F, + 0.3495595160F, 0.3647705766F, 0.3801144597F, 0.3955732382F, + 0.4111287047F, 0.4267624093F, 0.4424557009F, 0.4581897696F, + 0.4739456913F, 0.4897044744F, 0.5054471075F, 0.5211546088F, + 0.5368080763F, 0.5523887395F, 0.5678780103F, 0.5832575361F, + 0.5985092508F, 0.6136154277F, 0.6285587300F, 0.6433222619F, + 0.6578896175F, 0.6722449294F, 0.6863729144F, 0.7002589187F, + 0.7138889597F, 0.7272497662F, 0.7403288154F, 0.7531143679F, + 0.7655954985F, 0.7777621249F, 0.7896050322F, 0.8011158947F, + 0.8122872932F, 0.8231127294F, 0.8335866365F, 0.8437043850F, + 0.8534622861F, 0.8628575905F, 0.8718884835F, 0.8805540765F, + 0.8888543947F, 0.8967903616F, 0.9043637797F, 0.9115773078F, + 0.9184344360F, 0.9249394562F, 0.9310974312F, 0.9369141608F, + 0.9423961446F, 0.9475505439F, 0.9523851406F, 0.9569082947F, + 0.9611289005F, 0.9650563408F, 0.9687004405F, 0.9720714191F, + 0.9751798427F, 0.9780365753F, 0.9806527301F, 0.9830396204F, + 0.9852087111F, 0.9871715701F, 0.9889398207F, 0.9905250941F, + 0.9919389832F, 0.9931929973F, 0.9942985174F, 0.9952667537F, + 0.9961087037F, 0.9968351119F, 0.9974564312F, 0.9979827858F, + 0.9984239359F, 0.9987892441F, 0.9990876435F, 0.9993276081F, + 0.9995171241F, 0.9996636648F, 0.9997741654F, 0.9998550016F, + 0.9999119692F, 0.9999502656F, 0.9999744742F, 0.9999885497F, + 0.9999958064F, 0.9999989077F, 0.9999998584F, 0.9999999983F, +}; + +static const float vwin512[256] = { + 0.0000147849F, 0.0001330607F, 0.0003695946F, 0.0007243509F, + 0.0011972759F, 0.0017882983F, 0.0024973285F, 0.0033242588F, + 0.0042689632F, 0.0053312973F, 0.0065110982F, 0.0078081841F, + 0.0092223540F, 0.0107533880F, 0.0124010466F, 0.0141650703F, + 0.0160451800F, 0.0180410758F, 0.0201524373F, 0.0223789233F, + 0.0247201710F, 0.0271757958F, 0.0297453914F, 0.0324285286F, + 0.0352247556F, 0.0381335972F, 0.0411545545F, 0.0442871045F, + 0.0475306997F, 0.0508847676F, 0.0543487103F, 0.0579219038F, + 0.0616036982F, 0.0653934164F, 0.0692903546F, 0.0732937809F, + 0.0774029356F, 0.0816170305F, 0.0859352485F, 0.0903567428F, + 0.0948806375F, 0.0995060259F, 0.1042319712F, 0.1090575056F, + 0.1139816300F, 0.1190033137F, 0.1241214941F, 0.1293350764F, + 0.1346429333F, 0.1400439046F, 0.1455367974F, 0.1511203852F, + 0.1567934083F, 0.1625545735F, 0.1684025537F, 0.1743359881F, + 0.1803534820F, 0.1864536069F, 0.1926349000F, 0.1988958650F, + 0.2052349715F, 0.2116506555F, 0.2181413191F, 0.2247053313F, + 0.2313410275F, 0.2380467105F, 0.2448206500F, 0.2516610835F, + 0.2585662164F, 0.2655342226F, 0.2725632448F, 0.2796513950F, + 0.2867967551F, 0.2939973773F, 0.3012512852F, 0.3085564739F, + 0.3159109111F, 0.3233125375F, 0.3307592680F, 0.3382489922F, + 0.3457795756F, 0.3533488602F, 0.3609546657F, 0.3685947904F, + 0.3762670121F, 0.3839690896F, 0.3916987634F, 0.3994537572F, + 0.4072317788F, 0.4150305215F, 0.4228476653F, 0.4306808783F, + 0.4385278181F, 0.4463861329F, 0.4542534630F, 0.4621274424F, + 0.4700057001F, 0.4778858615F, 0.4857655502F, 0.4936423891F, + 0.5015140023F, 0.5093780165F, 0.5172320626F, 0.5250737772F, + 0.5329008043F, 0.5407107971F, 0.5485014192F, 0.5562703465F, + 0.5640152688F, 0.5717338914F, 0.5794239366F, 0.5870831457F, + 0.5947092801F, 0.6023001235F, 0.6098534829F, 0.6173671907F, + 0.6248391059F, 0.6322671161F, 0.6396491384F, 0.6469831217F, + 0.6542670475F, 0.6614989319F, 0.6686768267F, 0.6757988210F, + 0.6828630426F, 0.6898676592F, 0.6968108799F, 0.7036909564F, + 0.7105061843F, 0.7172549043F, 0.7239355032F, 0.7305464154F, + 0.7370861235F, 0.7435531598F, 0.7499461068F, 0.7562635986F, + 0.7625043214F, 0.7686670148F, 0.7747504721F, 0.7807535410F, + 0.7866751247F, 0.7925141825F, 0.7982697296F, 0.8039408387F, + 0.8095266395F, 0.8150263196F, 0.8204391248F, 0.8257643590F, + 0.8310013848F, 0.8361496236F, 0.8412085555F, 0.8461777194F, + 0.8510567129F, 0.8558451924F, 0.8605428730F, 0.8651495278F, + 0.8696649882F, 0.8740891432F, 0.8784219392F, 0.8826633797F, + 0.8868135244F, 0.8908724888F, 0.8948404441F, 0.8987176157F, + 0.9025042831F, 0.9062007791F, 0.9098074886F, 0.9133248482F, + 0.9167533451F, 0.9200935163F, 0.9233459472F, 0.9265112712F, + 0.9295901680F, 0.9325833632F, 0.9354916263F, 0.9383157705F, + 0.9410566504F, 0.9437151618F, 0.9462922398F, 0.9487888576F, + 0.9512060252F, 0.9535447882F, 0.9558062262F, 0.9579914516F, + 0.9601016078F, 0.9621378683F, 0.9641014348F, 0.9659935361F, + 0.9678154261F, 0.9695683830F, 0.9712537071F, 0.9728727198F, + 0.9744267618F, 0.9759171916F, 0.9773453842F, 0.9787127293F, + 0.9800206298F, 0.9812705006F, 0.9824637665F, 0.9836018613F, + 0.9846862258F, 0.9857183066F, 0.9866995544F, 0.9876314227F, + 0.9885153662F, 0.9893528393F, 0.9901452948F, 0.9908941823F, + 0.9916009470F, 0.9922670279F, 0.9928938570F, 0.9934828574F, + 0.9940354423F, 0.9945530133F, 0.9950369595F, 0.9954886562F, + 0.9959094633F, 0.9963007242F, 0.9966637649F, 0.9969998925F, + 0.9973103939F, 0.9975965351F, 0.9978595598F, 0.9981006885F, + 0.9983211172F, 0.9985220166F, 0.9987045311F, 0.9988697776F, + 0.9990188449F, 0.9991527924F, 0.9992726499F, 0.9993794157F, + 0.9994740570F, 0.9995575079F, 0.9996306699F, 0.9996944099F, + 0.9997495605F, 0.9997969190F, 0.9998372465F, 0.9998712678F, + 0.9998996704F, 0.9999231041F, 0.9999421807F, 0.9999574732F, + 0.9999695157F, 0.9999788026F, 0.9999857885F, 0.9999908879F, + 0.9999944746F, 0.9999968817F, 0.9999984010F, 0.9999992833F, + 0.9999997377F, 0.9999999317F, 0.9999999911F, 0.9999999999F, +}; + +static const float vwin1024[512] = { + 0.0000036962F, 0.0000332659F, 0.0000924041F, 0.0001811086F, + 0.0002993761F, 0.0004472021F, 0.0006245811F, 0.0008315063F, + 0.0010679699F, 0.0013339631F, 0.0016294757F, 0.0019544965F, + 0.0023090133F, 0.0026930125F, 0.0031064797F, 0.0035493989F, + 0.0040217533F, 0.0045235250F, 0.0050546946F, 0.0056152418F, + 0.0062051451F, 0.0068243817F, 0.0074729278F, 0.0081507582F, + 0.0088578466F, 0.0095941655F, 0.0103596863F, 0.0111543789F, + 0.0119782122F, 0.0128311538F, 0.0137131701F, 0.0146242260F, + 0.0155642855F, 0.0165333111F, 0.0175312640F, 0.0185581042F, + 0.0196137903F, 0.0206982797F, 0.0218115284F, 0.0229534910F, + 0.0241241208F, 0.0253233698F, 0.0265511886F, 0.0278075263F, + 0.0290923308F, 0.0304055484F, 0.0317471241F, 0.0331170013F, + 0.0345151222F, 0.0359414274F, 0.0373958560F, 0.0388783456F, + 0.0403888325F, 0.0419272511F, 0.0434935347F, 0.0450876148F, + 0.0467094213F, 0.0483588828F, 0.0500359261F, 0.0517404765F, + 0.0534724575F, 0.0552317913F, 0.0570183983F, 0.0588321971F, + 0.0606731048F, 0.0625410369F, 0.0644359070F, 0.0663576272F, + 0.0683061077F, 0.0702812571F, 0.0722829821F, 0.0743111878F, + 0.0763657775F, 0.0784466526F, 0.0805537129F, 0.0826868561F, + 0.0848459782F, 0.0870309736F, 0.0892417345F, 0.0914781514F, + 0.0937401128F, 0.0960275056F, 0.0983402145F, 0.1006781223F, + 0.1030411101F, 0.1054290568F, 0.1078418397F, 0.1102793336F, + 0.1127414119F, 0.1152279457F, 0.1177388042F, 0.1202738544F, + 0.1228329618F, 0.1254159892F, 0.1280227980F, 0.1306532471F, + 0.1333071937F, 0.1359844927F, 0.1386849970F, 0.1414085575F, + 0.1441550230F, 0.1469242403F, 0.1497160539F, 0.1525303063F, + 0.1553668381F, 0.1582254875F, 0.1611060909F, 0.1640084822F, + 0.1669324936F, 0.1698779549F, 0.1728446939F, 0.1758325362F, + 0.1788413055F, 0.1818708232F, 0.1849209084F, 0.1879913785F, + 0.1910820485F, 0.1941927312F, 0.1973232376F, 0.2004733764F, + 0.2036429541F, 0.2068317752F, 0.2100396421F, 0.2132663552F, + 0.2165117125F, 0.2197755102F, 0.2230575422F, 0.2263576007F, + 0.2296754753F, 0.2330109540F, 0.2363638225F, 0.2397338646F, + 0.2431208619F, 0.2465245941F, 0.2499448389F, 0.2533813719F, + 0.2568339669F, 0.2603023956F, 0.2637864277F, 0.2672858312F, + 0.2708003718F, 0.2743298135F, 0.2778739186F, 0.2814324472F, + 0.2850051576F, 0.2885918065F, 0.2921921485F, 0.2958059366F, + 0.2994329219F, 0.3030728538F, 0.3067254799F, 0.3103905462F, + 0.3140677969F, 0.3177569747F, 0.3214578205F, 0.3251700736F, + 0.3288934718F, 0.3326277513F, 0.3363726468F, 0.3401278914F, + 0.3438932168F, 0.3476683533F, 0.3514530297F, 0.3552469734F, + 0.3590499106F, 0.3628615659F, 0.3666816630F, 0.3705099239F, + 0.3743460698F, 0.3781898204F, 0.3820408945F, 0.3858990095F, + 0.3897638820F, 0.3936352274F, 0.3975127601F, 0.4013961936F, + 0.4052852405F, 0.4091796123F, 0.4130790198F, 0.4169831732F, + 0.4208917815F, 0.4248045534F, 0.4287211965F, 0.4326414181F, + 0.4365649248F, 0.4404914225F, 0.4444206167F, 0.4483522125F, + 0.4522859146F, 0.4562214270F, 0.4601584538F, 0.4640966984F, + 0.4680358644F, 0.4719756548F, 0.4759157726F, 0.4798559209F, + 0.4837958024F, 0.4877351199F, 0.4916735765F, 0.4956108751F, + 0.4995467188F, 0.5034808109F, 0.5074128550F, 0.5113425550F, + 0.5152696149F, 0.5191937395F, 0.5231146336F, 0.5270320028F, + 0.5309455530F, 0.5348549910F, 0.5387600239F, 0.5426603597F, + 0.5465557070F, 0.5504457754F, 0.5543302752F, 0.5582089175F, + 0.5620814145F, 0.5659474793F, 0.5698068262F, 0.5736591704F, + 0.5775042283F, 0.5813417176F, 0.5851713571F, 0.5889928670F, + 0.5928059689F, 0.5966103856F, 0.6004058415F, 0.6041920626F, + 0.6079687761F, 0.6117357113F, 0.6154925986F, 0.6192391705F, + 0.6229751612F, 0.6267003064F, 0.6304143441F, 0.6341170137F, + 0.6378080569F, 0.6414872173F, 0.6451542405F, 0.6488088741F, + 0.6524508681F, 0.6560799742F, 0.6596959469F, 0.6632985424F, + 0.6668875197F, 0.6704626398F, 0.6740236662F, 0.6775703649F, + 0.6811025043F, 0.6846198554F, 0.6881221916F, 0.6916092892F, + 0.6950809269F, 0.6985368861F, 0.7019769510F, 0.7054009085F, + 0.7088085484F, 0.7121996632F, 0.7155740484F, 0.7189315023F, + 0.7222718263F, 0.7255948245F, 0.7289003043F, 0.7321880760F, + 0.7354579530F, 0.7387097518F, 0.7419432921F, 0.7451583966F, + 0.7483548915F, 0.7515326059F, 0.7546913723F, 0.7578310265F, + 0.7609514077F, 0.7640523581F, 0.7671337237F, 0.7701953535F, + 0.7732371001F, 0.7762588195F, 0.7792603711F, 0.7822416178F, + 0.7852024259F, 0.7881426654F, 0.7910622097F, 0.7939609356F, + 0.7968387237F, 0.7996954579F, 0.8025310261F, 0.8053453193F, + 0.8081382324F, 0.8109096638F, 0.8136595156F, 0.8163876936F, + 0.8190941071F, 0.8217786690F, 0.8244412960F, 0.8270819086F, + 0.8297004305F, 0.8322967896F, 0.8348709171F, 0.8374227481F, + 0.8399522213F, 0.8424592789F, 0.8449438672F, 0.8474059356F, + 0.8498454378F, 0.8522623306F, 0.8546565748F, 0.8570281348F, + 0.8593769787F, 0.8617030779F, 0.8640064080F, 0.8662869477F, + 0.8685446796F, 0.8707795899F, 0.8729916682F, 0.8751809079F, + 0.8773473059F, 0.8794908626F, 0.8816115819F, 0.8837094713F, + 0.8857845418F, 0.8878368079F, 0.8898662874F, 0.8918730019F, + 0.8938569760F, 0.8958182380F, 0.8977568194F, 0.8996727552F, + 0.9015660837F, 0.9034368465F, 0.9052850885F, 0.9071108577F, + 0.9089142057F, 0.9106951869F, 0.9124538591F, 0.9141902832F, + 0.9159045233F, 0.9175966464F, 0.9192667228F, 0.9209148257F, + 0.9225410313F, 0.9241454187F, 0.9257280701F, 0.9272890704F, + 0.9288285075F, 0.9303464720F, 0.9318430576F, 0.9333183603F, + 0.9347724792F, 0.9362055158F, 0.9376175745F, 0.9390087622F, + 0.9403791881F, 0.9417289644F, 0.9430582055F, 0.9443670283F, + 0.9456555521F, 0.9469238986F, 0.9481721917F, 0.9494005577F, + 0.9506091252F, 0.9517980248F, 0.9529673894F, 0.9541173540F, + 0.9552480557F, 0.9563596334F, 0.9574522282F, 0.9585259830F, + 0.9595810428F, 0.9606175542F, 0.9616356656F, 0.9626355274F, + 0.9636172915F, 0.9645811114F, 0.9655271425F, 0.9664555414F, + 0.9673664664F, 0.9682600774F, 0.9691365355F, 0.9699960034F, + 0.9708386448F, 0.9716646250F, 0.9724741103F, 0.9732672685F, + 0.9740442683F, 0.9748052795F, 0.9755504729F, 0.9762800205F, + 0.9769940950F, 0.9776928703F, 0.9783765210F, 0.9790452223F, + 0.9796991504F, 0.9803384823F, 0.9809633954F, 0.9815740679F, + 0.9821706784F, 0.9827534063F, 0.9833224312F, 0.9838779332F, + 0.9844200928F, 0.9849490910F, 0.9854651087F, 0.9859683274F, + 0.9864589286F, 0.9869370940F, 0.9874030054F, 0.9878568447F, + 0.9882987937F, 0.9887290343F, 0.9891477481F, 0.9895551169F, + 0.9899513220F, 0.9903365446F, 0.9907109658F, 0.9910747662F, + 0.9914281260F, 0.9917712252F, 0.9921042433F, 0.9924273593F, + 0.9927407516F, 0.9930445982F, 0.9933390763F, 0.9936243626F, + 0.9939006331F, 0.9941680631F, 0.9944268269F, 0.9946770982F, + 0.9949190498F, 0.9951528537F, 0.9953786808F, 0.9955967011F, + 0.9958070836F, 0.9960099963F, 0.9962056061F, 0.9963940787F, + 0.9965755786F, 0.9967502693F, 0.9969183129F, 0.9970798704F, + 0.9972351013F, 0.9973841640F, 0.9975272151F, 0.9976644103F, + 0.9977959036F, 0.9979218476F, 0.9980423932F, 0.9981576901F, + 0.9982678862F, 0.9983731278F, 0.9984735596F, 0.9985693247F, + 0.9986605645F, 0.9987474186F, 0.9988300248F, 0.9989085193F, + 0.9989830364F, 0.9990537085F, 0.9991206662F, 0.9991840382F, + 0.9992439513F, 0.9993005303F, 0.9993538982F, 0.9994041757F, + 0.9994514817F, 0.9994959330F, 0.9995376444F, 0.9995767286F, + 0.9996132960F, 0.9996474550F, 0.9996793121F, 0.9997089710F, + 0.9997365339F, 0.9997621003F, 0.9997857677F, 0.9998076311F, + 0.9998277836F, 0.9998463156F, 0.9998633155F, 0.9998788692F, + 0.9998930603F, 0.9999059701F, 0.9999176774F, 0.9999282586F, + 0.9999377880F, 0.9999463370F, 0.9999539749F, 0.9999607685F, + 0.9999667820F, 0.9999720773F, 0.9999767136F, 0.9999807479F, + 0.9999842344F, 0.9999872249F, 0.9999897688F, 0.9999919127F, + 0.9999937009F, 0.9999951749F, 0.9999963738F, 0.9999973342F, + 0.9999980900F, 0.9999986724F, 0.9999991103F, 0.9999994297F, + 0.9999996543F, 0.9999998049F, 0.9999999000F, 0.9999999552F, + 0.9999999836F, 0.9999999957F, 0.9999999994F, 1.0000000000F, +}; + +static const float vwin2048[1024] = { + 0.0000009241F, 0.0000083165F, 0.0000231014F, 0.0000452785F, + 0.0000748476F, 0.0001118085F, 0.0001561608F, 0.0002079041F, + 0.0002670379F, 0.0003335617F, 0.0004074748F, 0.0004887765F, + 0.0005774661F, 0.0006735427F, 0.0007770054F, 0.0008878533F, + 0.0010060853F, 0.0011317002F, 0.0012646969F, 0.0014050742F, + 0.0015528307F, 0.0017079650F, 0.0018704756F, 0.0020403610F, + 0.0022176196F, 0.0024022497F, 0.0025942495F, 0.0027936173F, + 0.0030003511F, 0.0032144490F, 0.0034359088F, 0.0036647286F, + 0.0039009061F, 0.0041444391F, 0.0043953253F, 0.0046535621F, + 0.0049191472F, 0.0051920781F, 0.0054723520F, 0.0057599664F, + 0.0060549184F, 0.0063572052F, 0.0066668239F, 0.0069837715F, + 0.0073080449F, 0.0076396410F, 0.0079785566F, 0.0083247884F, + 0.0086783330F, 0.0090391871F, 0.0094073470F, 0.0097828092F, + 0.0101655700F, 0.0105556258F, 0.0109529726F, 0.0113576065F, + 0.0117695237F, 0.0121887200F, 0.0126151913F, 0.0130489335F, + 0.0134899422F, 0.0139382130F, 0.0143937415F, 0.0148565233F, + 0.0153265536F, 0.0158038279F, 0.0162883413F, 0.0167800889F, + 0.0172790660F, 0.0177852675F, 0.0182986882F, 0.0188193231F, + 0.0193471668F, 0.0198822141F, 0.0204244594F, 0.0209738974F, + 0.0215305225F, 0.0220943289F, 0.0226653109F, 0.0232434627F, + 0.0238287784F, 0.0244212519F, 0.0250208772F, 0.0256276481F, + 0.0262415582F, 0.0268626014F, 0.0274907711F, 0.0281260608F, + 0.0287684638F, 0.0294179736F, 0.0300745833F, 0.0307382859F, + 0.0314090747F, 0.0320869424F, 0.0327718819F, 0.0334638860F, + 0.0341629474F, 0.0348690586F, 0.0355822122F, 0.0363024004F, + 0.0370296157F, 0.0377638502F, 0.0385050960F, 0.0392533451F, + 0.0400085896F, 0.0407708211F, 0.0415400315F, 0.0423162123F, + 0.0430993552F, 0.0438894515F, 0.0446864926F, 0.0454904698F, + 0.0463013742F, 0.0471191969F, 0.0479439288F, 0.0487755607F, + 0.0496140836F, 0.0504594879F, 0.0513117642F, 0.0521709031F, + 0.0530368949F, 0.0539097297F, 0.0547893979F, 0.0556758894F, + 0.0565691941F, 0.0574693019F, 0.0583762026F, 0.0592898858F, + 0.0602103410F, 0.0611375576F, 0.0620715250F, 0.0630122324F, + 0.0639596688F, 0.0649138234F, 0.0658746848F, 0.0668422421F, + 0.0678164838F, 0.0687973985F, 0.0697849746F, 0.0707792005F, + 0.0717800645F, 0.0727875547F, 0.0738016591F, 0.0748223656F, + 0.0758496620F, 0.0768835359F, 0.0779239751F, 0.0789709668F, + 0.0800244985F, 0.0810845574F, 0.0821511306F, 0.0832242052F, + 0.0843037679F, 0.0853898056F, 0.0864823050F, 0.0875812525F, + 0.0886866347F, 0.0897984378F, 0.0909166480F, 0.0920412513F, + 0.0931722338F, 0.0943095813F, 0.0954532795F, 0.0966033140F, + 0.0977596702F, 0.0989223336F, 0.1000912894F, 0.1012665227F, + 0.1024480185F, 0.1036357616F, 0.1048297369F, 0.1060299290F, + 0.1072363224F, 0.1084489014F, 0.1096676504F, 0.1108925534F, + 0.1121235946F, 0.1133607577F, 0.1146040267F, 0.1158533850F, + 0.1171088163F, 0.1183703040F, 0.1196378312F, 0.1209113812F, + 0.1221909370F, 0.1234764815F, 0.1247679974F, 0.1260654674F, + 0.1273688740F, 0.1286781995F, 0.1299934263F, 0.1313145365F, + 0.1326415121F, 0.1339743349F, 0.1353129866F, 0.1366574490F, + 0.1380077035F, 0.1393637315F, 0.1407255141F, 0.1420930325F, + 0.1434662677F, 0.1448452004F, 0.1462298115F, 0.1476200814F, + 0.1490159906F, 0.1504175195F, 0.1518246482F, 0.1532373569F, + 0.1546556253F, 0.1560794333F, 0.1575087606F, 0.1589435866F, + 0.1603838909F, 0.1618296526F, 0.1632808509F, 0.1647374648F, + 0.1661994731F, 0.1676668546F, 0.1691395880F, 0.1706176516F, + 0.1721010238F, 0.1735896829F, 0.1750836068F, 0.1765827736F, + 0.1780871610F, 0.1795967468F, 0.1811115084F, 0.1826314234F, + 0.1841564689F, 0.1856866221F, 0.1872218600F, 0.1887621595F, + 0.1903074974F, 0.1918578503F, 0.1934131947F, 0.1949735068F, + 0.1965387630F, 0.1981089393F, 0.1996840117F, 0.2012639560F, + 0.2028487479F, 0.2044383630F, 0.2060327766F, 0.2076319642F, + 0.2092359007F, 0.2108445614F, 0.2124579211F, 0.2140759545F, + 0.2156986364F, 0.2173259411F, 0.2189578432F, 0.2205943168F, + 0.2222353361F, 0.2238808751F, 0.2255309076F, 0.2271854073F, + 0.2288443480F, 0.2305077030F, 0.2321754457F, 0.2338475493F, + 0.2355239869F, 0.2372047315F, 0.2388897560F, 0.2405790329F, + 0.2422725350F, 0.2439702347F, 0.2456721043F, 0.2473781159F, + 0.2490882418F, 0.2508024539F, 0.2525207240F, 0.2542430237F, + 0.2559693248F, 0.2576995986F, 0.2594338166F, 0.2611719498F, + 0.2629139695F, 0.2646598466F, 0.2664095520F, 0.2681630564F, + 0.2699203304F, 0.2716813445F, 0.2734460691F, 0.2752144744F, + 0.2769865307F, 0.2787622079F, 0.2805414760F, 0.2823243047F, + 0.2841106637F, 0.2859005227F, 0.2876938509F, 0.2894906179F, + 0.2912907928F, 0.2930943447F, 0.2949012426F, 0.2967114554F, + 0.2985249520F, 0.3003417009F, 0.3021616708F, 0.3039848301F, + 0.3058111471F, 0.3076405901F, 0.3094731273F, 0.3113087266F, + 0.3131473560F, 0.3149889833F, 0.3168335762F, 0.3186811024F, + 0.3205315294F, 0.3223848245F, 0.3242409552F, 0.3260998886F, + 0.3279615918F, 0.3298260319F, 0.3316931758F, 0.3335629903F, + 0.3354354423F, 0.3373104982F, 0.3391881247F, 0.3410682882F, + 0.3429509551F, 0.3448360917F, 0.3467236642F, 0.3486136387F, + 0.3505059811F, 0.3524006575F, 0.3542976336F, 0.3561968753F, + 0.3580983482F, 0.3600020179F, 0.3619078499F, 0.3638158096F, + 0.3657258625F, 0.3676379737F, 0.3695521086F, 0.3714682321F, + 0.3733863094F, 0.3753063055F, 0.3772281852F, 0.3791519134F, + 0.3810774548F, 0.3830047742F, 0.3849338362F, 0.3868646053F, + 0.3887970459F, 0.3907311227F, 0.3926667998F, 0.3946040417F, + 0.3965428125F, 0.3984830765F, 0.4004247978F, 0.4023679403F, + 0.4043124683F, 0.4062583455F, 0.4082055359F, 0.4101540034F, + 0.4121037117F, 0.4140546246F, 0.4160067058F, 0.4179599190F, + 0.4199142277F, 0.4218695956F, 0.4238259861F, 0.4257833627F, + 0.4277416888F, 0.4297009279F, 0.4316610433F, 0.4336219983F, + 0.4355837562F, 0.4375462803F, 0.4395095337F, 0.4414734797F, + 0.4434380815F, 0.4454033021F, 0.4473691046F, 0.4493354521F, + 0.4513023078F, 0.4532696345F, 0.4552373954F, 0.4572055533F, + 0.4591740713F, 0.4611429123F, 0.4631120393F, 0.4650814151F, + 0.4670510028F, 0.4690207650F, 0.4709906649F, 0.4729606651F, + 0.4749307287F, 0.4769008185F, 0.4788708972F, 0.4808409279F, + 0.4828108732F, 0.4847806962F, 0.4867503597F, 0.4887198264F, + 0.4906890593F, 0.4926580213F, 0.4946266753F, 0.4965949840F, + 0.4985629105F, 0.5005304176F, 0.5024974683F, 0.5044640255F, + 0.5064300522F, 0.5083955114F, 0.5103603659F, 0.5123245790F, + 0.5142881136F, 0.5162509328F, 0.5182129997F, 0.5201742774F, + 0.5221347290F, 0.5240943178F, 0.5260530070F, 0.5280107598F, + 0.5299675395F, 0.5319233095F, 0.5338780330F, 0.5358316736F, + 0.5377841946F, 0.5397355596F, 0.5416857320F, 0.5436346755F, + 0.5455823538F, 0.5475287304F, 0.5494737691F, 0.5514174337F, + 0.5533596881F, 0.5553004962F, 0.5572398218F, 0.5591776291F, + 0.5611138821F, 0.5630485449F, 0.5649815818F, 0.5669129570F, + 0.5688426349F, 0.5707705799F, 0.5726967564F, 0.5746211290F, + 0.5765436624F, 0.5784643212F, 0.5803830702F, 0.5822998743F, + 0.5842146984F, 0.5861275076F, 0.5880382669F, 0.5899469416F, + 0.5918534968F, 0.5937578981F, 0.5956601107F, 0.5975601004F, + 0.5994578326F, 0.6013532732F, 0.6032463880F, 0.6051371429F, + 0.6070255039F, 0.6089114372F, 0.6107949090F, 0.6126758856F, + 0.6145543334F, 0.6164302191F, 0.6183035092F, 0.6201741706F, + 0.6220421700F, 0.6239074745F, 0.6257700513F, 0.6276298674F, + 0.6294868903F, 0.6313410873F, 0.6331924262F, 0.6350408745F, + 0.6368864001F, 0.6387289710F, 0.6405685552F, 0.6424051209F, + 0.6442386364F, 0.6460690702F, 0.6478963910F, 0.6497205673F, + 0.6515415682F, 0.6533593625F, 0.6551739194F, 0.6569852082F, + 0.6587931984F, 0.6605978593F, 0.6623991609F, 0.6641970728F, + 0.6659915652F, 0.6677826081F, 0.6695701718F, 0.6713542268F, + 0.6731347437F, 0.6749116932F, 0.6766850461F, 0.6784547736F, + 0.6802208469F, 0.6819832374F, 0.6837419164F, 0.6854968559F, + 0.6872480275F, 0.6889954034F, 0.6907389556F, 0.6924786566F, + 0.6942144788F, 0.6959463950F, 0.6976743780F, 0.6993984008F, + 0.7011184365F, 0.7028344587F, 0.7045464407F, 0.7062543564F, + 0.7079581796F, 0.7096578844F, 0.7113534450F, 0.7130448359F, + 0.7147320316F, 0.7164150070F, 0.7180937371F, 0.7197681970F, + 0.7214383620F, 0.7231042077F, 0.7247657098F, 0.7264228443F, + 0.7280755871F, 0.7297239147F, 0.7313678035F, 0.7330072301F, + 0.7346421715F, 0.7362726046F, 0.7378985069F, 0.7395198556F, + 0.7411366285F, 0.7427488034F, 0.7443563584F, 0.7459592717F, + 0.7475575218F, 0.7491510873F, 0.7507399471F, 0.7523240803F, + 0.7539034661F, 0.7554780839F, 0.7570479136F, 0.7586129349F, + 0.7601731279F, 0.7617284730F, 0.7632789506F, 0.7648245416F, + 0.7663652267F, 0.7679009872F, 0.7694318044F, 0.7709576599F, + 0.7724785354F, 0.7739944130F, 0.7755052749F, 0.7770111035F, + 0.7785118815F, 0.7800075916F, 0.7814982170F, 0.7829837410F, + 0.7844641472F, 0.7859394191F, 0.7874095408F, 0.7888744965F, + 0.7903342706F, 0.7917888476F, 0.7932382124F, 0.7946823501F, + 0.7961212460F, 0.7975548855F, 0.7989832544F, 0.8004063386F, + 0.8018241244F, 0.8032365981F, 0.8046437463F, 0.8060455560F, + 0.8074420141F, 0.8088331080F, 0.8102188253F, 0.8115991536F, + 0.8129740810F, 0.8143435957F, 0.8157076861F, 0.8170663409F, + 0.8184195489F, 0.8197672994F, 0.8211095817F, 0.8224463853F, + 0.8237777001F, 0.8251035161F, 0.8264238235F, 0.8277386129F, + 0.8290478750F, 0.8303516008F, 0.8316497814F, 0.8329424083F, + 0.8342294731F, 0.8355109677F, 0.8367868841F, 0.8380572148F, + 0.8393219523F, 0.8405810893F, 0.8418346190F, 0.8430825345F, + 0.8443248294F, 0.8455614974F, 0.8467925323F, 0.8480179285F, + 0.8492376802F, 0.8504517822F, 0.8516602292F, 0.8528630164F, + 0.8540601391F, 0.8552515928F, 0.8564373733F, 0.8576174766F, + 0.8587918990F, 0.8599606368F, 0.8611236868F, 0.8622810460F, + 0.8634327113F, 0.8645786802F, 0.8657189504F, 0.8668535195F, + 0.8679823857F, 0.8691055472F, 0.8702230025F, 0.8713347503F, + 0.8724407896F, 0.8735411194F, 0.8746357394F, 0.8757246489F, + 0.8768078479F, 0.8778853364F, 0.8789571146F, 0.8800231832F, + 0.8810835427F, 0.8821381942F, 0.8831871387F, 0.8842303777F, + 0.8852679127F, 0.8862997456F, 0.8873258784F, 0.8883463132F, + 0.8893610527F, 0.8903700994F, 0.8913734562F, 0.8923711263F, + 0.8933631129F, 0.8943494196F, 0.8953300500F, 0.8963050083F, + 0.8972742985F, 0.8982379249F, 0.8991958922F, 0.9001482052F, + 0.9010948688F, 0.9020358883F, 0.9029712690F, 0.9039010165F, + 0.9048251367F, 0.9057436357F, 0.9066565195F, 0.9075637946F, + 0.9084654678F, 0.9093615456F, 0.9102520353F, 0.9111369440F, + 0.9120162792F, 0.9128900484F, 0.9137582595F, 0.9146209204F, + 0.9154780394F, 0.9163296248F, 0.9171756853F, 0.9180162296F, + 0.9188512667F, 0.9196808057F, 0.9205048559F, 0.9213234270F, + 0.9221365285F, 0.9229441704F, 0.9237463629F, 0.9245431160F, + 0.9253344404F, 0.9261203465F, 0.9269008453F, 0.9276759477F, + 0.9284456648F, 0.9292100080F, 0.9299689889F, 0.9307226190F, + 0.9314709103F, 0.9322138747F, 0.9329515245F, 0.9336838721F, + 0.9344109300F, 0.9351327108F, 0.9358492275F, 0.9365604931F, + 0.9372665208F, 0.9379673239F, 0.9386629160F, 0.9393533107F, + 0.9400385220F, 0.9407185637F, 0.9413934501F, 0.9420631954F, + 0.9427278141F, 0.9433873208F, 0.9440417304F, 0.9446910576F, + 0.9453353176F, 0.9459745255F, 0.9466086968F, 0.9472378469F, + 0.9478619915F, 0.9484811463F, 0.9490953274F, 0.9497045506F, + 0.9503088323F, 0.9509081888F, 0.9515026365F, 0.9520921921F, + 0.9526768723F, 0.9532566940F, 0.9538316742F, 0.9544018300F, + 0.9549671786F, 0.9555277375F, 0.9560835241F, 0.9566345562F, + 0.9571808513F, 0.9577224275F, 0.9582593027F, 0.9587914949F, + 0.9593190225F, 0.9598419038F, 0.9603601571F, 0.9608738012F, + 0.9613828546F, 0.9618873361F, 0.9623872646F, 0.9628826591F, + 0.9633735388F, 0.9638599227F, 0.9643418303F, 0.9648192808F, + 0.9652922939F, 0.9657608890F, 0.9662250860F, 0.9666849046F, + 0.9671403646F, 0.9675914861F, 0.9680382891F, 0.9684807937F, + 0.9689190202F, 0.9693529890F, 0.9697827203F, 0.9702082347F, + 0.9706295529F, 0.9710466953F, 0.9714596828F, 0.9718685362F, + 0.9722732762F, 0.9726739240F, 0.9730705005F, 0.9734630267F, + 0.9738515239F, 0.9742360134F, 0.9746165163F, 0.9749930540F, + 0.9753656481F, 0.9757343198F, 0.9760990909F, 0.9764599829F, + 0.9768170175F, 0.9771702164F, 0.9775196013F, 0.9778651941F, + 0.9782070167F, 0.9785450909F, 0.9788794388F, 0.9792100824F, + 0.9795370437F, 0.9798603449F, 0.9801800080F, 0.9804960554F, + 0.9808085092F, 0.9811173916F, 0.9814227251F, 0.9817245318F, + 0.9820228343F, 0.9823176549F, 0.9826090160F, 0.9828969402F, + 0.9831814498F, 0.9834625674F, 0.9837403156F, 0.9840147169F, + 0.9842857939F, 0.9845535692F, 0.9848180654F, 0.9850793052F, + 0.9853373113F, 0.9855921062F, 0.9858437127F, 0.9860921535F, + 0.9863374512F, 0.9865796287F, 0.9868187085F, 0.9870547136F, + 0.9872876664F, 0.9875175899F, 0.9877445067F, 0.9879684396F, + 0.9881894112F, 0.9884074444F, 0.9886225619F, 0.9888347863F, + 0.9890441404F, 0.9892506468F, 0.9894543284F, 0.9896552077F, + 0.9898533074F, 0.9900486502F, 0.9902412587F, 0.9904311555F, + 0.9906183633F, 0.9908029045F, 0.9909848019F, 0.9911640779F, + 0.9913407550F, 0.9915148557F, 0.9916864025F, 0.9918554179F, + 0.9920219241F, 0.9921859437F, 0.9923474989F, 0.9925066120F, + 0.9926633054F, 0.9928176012F, 0.9929695218F, 0.9931190891F, + 0.9932663254F, 0.9934112527F, 0.9935538932F, 0.9936942686F, + 0.9938324012F, 0.9939683126F, 0.9941020248F, 0.9942335597F, + 0.9943629388F, 0.9944901841F, 0.9946153170F, 0.9947383593F, + 0.9948593325F, 0.9949782579F, 0.9950951572F, 0.9952100516F, + 0.9953229625F, 0.9954339111F, 0.9955429186F, 0.9956500062F, + 0.9957551948F, 0.9958585056F, 0.9959599593F, 0.9960595769F, + 0.9961573792F, 0.9962533869F, 0.9963476206F, 0.9964401009F, + 0.9965308483F, 0.9966198833F, 0.9967072261F, 0.9967928971F, + 0.9968769164F, 0.9969593041F, 0.9970400804F, 0.9971192651F, + 0.9971968781F, 0.9972729391F, 0.9973474680F, 0.9974204842F, + 0.9974920074F, 0.9975620569F, 0.9976306521F, 0.9976978122F, + 0.9977635565F, 0.9978279039F, 0.9978908736F, 0.9979524842F, + 0.9980127547F, 0.9980717037F, 0.9981293499F, 0.9981857116F, + 0.9982408073F, 0.9982946554F, 0.9983472739F, 0.9983986810F, + 0.9984488947F, 0.9984979328F, 0.9985458132F, 0.9985925534F, + 0.9986381711F, 0.9986826838F, 0.9987261086F, 0.9987684630F, + 0.9988097640F, 0.9988500286F, 0.9988892738F, 0.9989275163F, + 0.9989647727F, 0.9990010597F, 0.9990363938F, 0.9990707911F, + 0.9991042679F, 0.9991368404F, 0.9991685244F, 0.9991993358F, + 0.9992292905F, 0.9992584038F, 0.9992866914F, 0.9993141686F, + 0.9993408506F, 0.9993667526F, 0.9993918895F, 0.9994162761F, + 0.9994399273F, 0.9994628576F, 0.9994850815F, 0.9995066133F, + 0.9995274672F, 0.9995476574F, 0.9995671978F, 0.9995861021F, + 0.9996043841F, 0.9996220573F, 0.9996391352F, 0.9996556310F, + 0.9996715579F, 0.9996869288F, 0.9997017568F, 0.9997160543F, + 0.9997298342F, 0.9997431088F, 0.9997558905F, 0.9997681914F, + 0.9997800236F, 0.9997913990F, 0.9998023292F, 0.9998128261F, + 0.9998229009F, 0.9998325650F, 0.9998418296F, 0.9998507058F, + 0.9998592044F, 0.9998673362F, 0.9998751117F, 0.9998825415F, + 0.9998896358F, 0.9998964047F, 0.9999028584F, 0.9999090066F, + 0.9999148590F, 0.9999204253F, 0.9999257148F, 0.9999307368F, + 0.9999355003F, 0.9999400144F, 0.9999442878F, 0.9999483293F, + 0.9999521472F, 0.9999557499F, 0.9999591457F, 0.9999623426F, + 0.9999653483F, 0.9999681708F, 0.9999708175F, 0.9999732959F, + 0.9999756132F, 0.9999777765F, 0.9999797928F, 0.9999816688F, + 0.9999834113F, 0.9999850266F, 0.9999865211F, 0.9999879009F, + 0.9999891721F, 0.9999903405F, 0.9999914118F, 0.9999923914F, + 0.9999932849F, 0.9999940972F, 0.9999948336F, 0.9999954989F, + 0.9999960978F, 0.9999966349F, 0.9999971146F, 0.9999975411F, + 0.9999979185F, 0.9999982507F, 0.9999985414F, 0.9999987944F, + 0.9999990129F, 0.9999992003F, 0.9999993596F, 0.9999994939F, + 0.9999996059F, 0.9999996981F, 0.9999997732F, 0.9999998333F, + 0.9999998805F, 0.9999999170F, 0.9999999444F, 0.9999999643F, + 0.9999999784F, 0.9999999878F, 0.9999999937F, 0.9999999972F, + 0.9999999990F, 0.9999999997F, 1.0000000000F, 1.0000000000F, +}; + +static const float vwin4096[2048] = { + 0.0000002310F, 0.0000020791F, 0.0000057754F, 0.0000113197F, + 0.0000187121F, 0.0000279526F, 0.0000390412F, 0.0000519777F, + 0.0000667623F, 0.0000833949F, 0.0001018753F, 0.0001222036F, + 0.0001443798F, 0.0001684037F, 0.0001942754F, 0.0002219947F, + 0.0002515616F, 0.0002829761F, 0.0003162380F, 0.0003513472F, + 0.0003883038F, 0.0004271076F, 0.0004677584F, 0.0005102563F, + 0.0005546011F, 0.0006007928F, 0.0006488311F, 0.0006987160F, + 0.0007504474F, 0.0008040251F, 0.0008594490F, 0.0009167191F, + 0.0009758351F, 0.0010367969F, 0.0010996044F, 0.0011642574F, + 0.0012307558F, 0.0012990994F, 0.0013692880F, 0.0014413216F, + 0.0015151998F, 0.0015909226F, 0.0016684898F, 0.0017479011F, + 0.0018291565F, 0.0019122556F, 0.0019971983F, 0.0020839845F, + 0.0021726138F, 0.0022630861F, 0.0023554012F, 0.0024495588F, + 0.0025455588F, 0.0026434008F, 0.0027430847F, 0.0028446103F, + 0.0029479772F, 0.0030531853F, 0.0031602342F, 0.0032691238F, + 0.0033798538F, 0.0034924239F, 0.0036068338F, 0.0037230833F, + 0.0038411721F, 0.0039610999F, 0.0040828664F, 0.0042064714F, + 0.0043319145F, 0.0044591954F, 0.0045883139F, 0.0047192696F, + 0.0048520622F, 0.0049866914F, 0.0051231569F, 0.0052614583F, + 0.0054015953F, 0.0055435676F, 0.0056873748F, 0.0058330166F, + 0.0059804926F, 0.0061298026F, 0.0062809460F, 0.0064339226F, + 0.0065887320F, 0.0067453738F, 0.0069038476F, 0.0070641531F, + 0.0072262899F, 0.0073902575F, 0.0075560556F, 0.0077236838F, + 0.0078931417F, 0.0080644288F, 0.0082375447F, 0.0084124891F, + 0.0085892615F, 0.0087678614F, 0.0089482885F, 0.0091305422F, + 0.0093146223F, 0.0095005281F, 0.0096882592F, 0.0098778153F, + 0.0100691958F, 0.0102624002F, 0.0104574281F, 0.0106542791F, + 0.0108529525F, 0.0110534480F, 0.0112557651F, 0.0114599032F, + 0.0116658618F, 0.0118736405F, 0.0120832387F, 0.0122946560F, + 0.0125078917F, 0.0127229454F, 0.0129398166F, 0.0131585046F, + 0.0133790090F, 0.0136013292F, 0.0138254647F, 0.0140514149F, + 0.0142791792F, 0.0145087572F, 0.0147401481F, 0.0149733515F, + 0.0152083667F, 0.0154451932F, 0.0156838304F, 0.0159242777F, + 0.0161665345F, 0.0164106001F, 0.0166564741F, 0.0169041557F, + 0.0171536443F, 0.0174049393F, 0.0176580401F, 0.0179129461F, + 0.0181696565F, 0.0184281708F, 0.0186884883F, 0.0189506084F, + 0.0192145303F, 0.0194802535F, 0.0197477772F, 0.0200171008F, + 0.0202882236F, 0.0205611449F, 0.0208358639F, 0.0211123801F, + 0.0213906927F, 0.0216708011F, 0.0219527043F, 0.0222364019F, + 0.0225218930F, 0.0228091769F, 0.0230982529F, 0.0233891203F, + 0.0236817782F, 0.0239762259F, 0.0242724628F, 0.0245704880F, + 0.0248703007F, 0.0251719002F, 0.0254752858F, 0.0257804565F, + 0.0260874117F, 0.0263961506F, 0.0267066722F, 0.0270189760F, + 0.0273330609F, 0.0276489263F, 0.0279665712F, 0.0282859949F, + 0.0286071966F, 0.0289301753F, 0.0292549303F, 0.0295814607F, + 0.0299097656F, 0.0302398442F, 0.0305716957F, 0.0309053191F, + 0.0312407135F, 0.0315778782F, 0.0319168122F, 0.0322575145F, + 0.0325999844F, 0.0329442209F, 0.0332902231F, 0.0336379900F, + 0.0339875208F, 0.0343388146F, 0.0346918703F, 0.0350466871F, + 0.0354032640F, 0.0357616000F, 0.0361216943F, 0.0364835458F, + 0.0368471535F, 0.0372125166F, 0.0375796339F, 0.0379485046F, + 0.0383191276F, 0.0386915020F, 0.0390656267F, 0.0394415008F, + 0.0398191231F, 0.0401984927F, 0.0405796086F, 0.0409624698F, + 0.0413470751F, 0.0417334235F, 0.0421215141F, 0.0425113457F, + 0.0429029172F, 0.0432962277F, 0.0436912760F, 0.0440880610F, + 0.0444865817F, 0.0448868370F, 0.0452888257F, 0.0456925468F, + 0.0460979992F, 0.0465051816F, 0.0469140931F, 0.0473247325F, + 0.0477370986F, 0.0481511902F, 0.0485670064F, 0.0489845458F, + 0.0494038074F, 0.0498247899F, 0.0502474922F, 0.0506719131F, + 0.0510980514F, 0.0515259060F, 0.0519554756F, 0.0523867590F, + 0.0528197550F, 0.0532544624F, 0.0536908800F, 0.0541290066F, + 0.0545688408F, 0.0550103815F, 0.0554536274F, 0.0558985772F, + 0.0563452297F, 0.0567935837F, 0.0572436377F, 0.0576953907F, + 0.0581488412F, 0.0586039880F, 0.0590608297F, 0.0595193651F, + 0.0599795929F, 0.0604415117F, 0.0609051202F, 0.0613704170F, + 0.0618374009F, 0.0623060704F, 0.0627764243F, 0.0632484611F, + 0.0637221795F, 0.0641975781F, 0.0646746555F, 0.0651534104F, + 0.0656338413F, 0.0661159469F, 0.0665997257F, 0.0670851763F, + 0.0675722973F, 0.0680610873F, 0.0685515448F, 0.0690436684F, + 0.0695374567F, 0.0700329081F, 0.0705300213F, 0.0710287947F, + 0.0715292269F, 0.0720313163F, 0.0725350616F, 0.0730404612F, + 0.0735475136F, 0.0740562172F, 0.0745665707F, 0.0750785723F, + 0.0755922207F, 0.0761075143F, 0.0766244515F, 0.0771430307F, + 0.0776632505F, 0.0781851092F, 0.0787086052F, 0.0792337371F, + 0.0797605032F, 0.0802889018F, 0.0808189315F, 0.0813505905F, + 0.0818838773F, 0.0824187903F, 0.0829553277F, 0.0834934881F, + 0.0840332697F, 0.0845746708F, 0.0851176899F, 0.0856623252F, + 0.0862085751F, 0.0867564379F, 0.0873059119F, 0.0878569954F, + 0.0884096867F, 0.0889639840F, 0.0895198858F, 0.0900773902F, + 0.0906364955F, 0.0911972000F, 0.0917595019F, 0.0923233995F, + 0.0928888909F, 0.0934559745F, 0.0940246485F, 0.0945949110F, + 0.0951667604F, 0.0957401946F, 0.0963152121F, 0.0968918109F, + 0.0974699893F, 0.0980497454F, 0.0986310773F, 0.0992139832F, + 0.0997984614F, 0.1003845098F, 0.1009721267F, 0.1015613101F, + 0.1021520582F, 0.1027443692F, 0.1033382410F, 0.1039336718F, + 0.1045306597F, 0.1051292027F, 0.1057292990F, 0.1063309466F, + 0.1069341435F, 0.1075388878F, 0.1081451776F, 0.1087530108F, + 0.1093623856F, 0.1099732998F, 0.1105857516F, 0.1111997389F, + 0.1118152597F, 0.1124323121F, 0.1130508939F, 0.1136710032F, + 0.1142926379F, 0.1149157960F, 0.1155404755F, 0.1161666742F, + 0.1167943901F, 0.1174236211F, 0.1180543652F, 0.1186866202F, + 0.1193203841F, 0.1199556548F, 0.1205924300F, 0.1212307078F, + 0.1218704860F, 0.1225117624F, 0.1231545349F, 0.1237988013F, + 0.1244445596F, 0.1250918074F, 0.1257405427F, 0.1263907632F, + 0.1270424667F, 0.1276956512F, 0.1283503142F, 0.1290064537F, + 0.1296640674F, 0.1303231530F, 0.1309837084F, 0.1316457312F, + 0.1323092193F, 0.1329741703F, 0.1336405820F, 0.1343084520F, + 0.1349777782F, 0.1356485582F, 0.1363207897F, 0.1369944704F, + 0.1376695979F, 0.1383461700F, 0.1390241842F, 0.1397036384F, + 0.1403845300F, 0.1410668567F, 0.1417506162F, 0.1424358061F, + 0.1431224240F, 0.1438104674F, 0.1444999341F, 0.1451908216F, + 0.1458831274F, 0.1465768492F, 0.1472719844F, 0.1479685308F, + 0.1486664857F, 0.1493658468F, 0.1500666115F, 0.1507687775F, + 0.1514723422F, 0.1521773031F, 0.1528836577F, 0.1535914035F, + 0.1543005380F, 0.1550110587F, 0.1557229631F, 0.1564362485F, + 0.1571509124F, 0.1578669524F, 0.1585843657F, 0.1593031499F, + 0.1600233024F, 0.1607448205F, 0.1614677017F, 0.1621919433F, + 0.1629175428F, 0.1636444975F, 0.1643728047F, 0.1651024619F, + 0.1658334665F, 0.1665658156F, 0.1672995067F, 0.1680345371F, + 0.1687709041F, 0.1695086050F, 0.1702476372F, 0.1709879978F, + 0.1717296843F, 0.1724726938F, 0.1732170237F, 0.1739626711F, + 0.1747096335F, 0.1754579079F, 0.1762074916F, 0.1769583819F, + 0.1777105760F, 0.1784640710F, 0.1792188642F, 0.1799749529F, + 0.1807323340F, 0.1814910049F, 0.1822509628F, 0.1830122046F, + 0.1837747277F, 0.1845385292F, 0.1853036062F, 0.1860699558F, + 0.1868375751F, 0.1876064613F, 0.1883766114F, 0.1891480226F, + 0.1899206919F, 0.1906946164F, 0.1914697932F, 0.1922462194F, + 0.1930238919F, 0.1938028079F, 0.1945829643F, 0.1953643583F, + 0.1961469868F, 0.1969308468F, 0.1977159353F, 0.1985022494F, + 0.1992897859F, 0.2000785420F, 0.2008685145F, 0.2016597005F, + 0.2024520968F, 0.2032457005F, 0.2040405084F, 0.2048365175F, + 0.2056337247F, 0.2064321269F, 0.2072317211F, 0.2080325041F, + 0.2088344727F, 0.2096376240F, 0.2104419547F, 0.2112474618F, + 0.2120541420F, 0.2128619923F, 0.2136710094F, 0.2144811902F, + 0.2152925315F, 0.2161050301F, 0.2169186829F, 0.2177334866F, + 0.2185494381F, 0.2193665340F, 0.2201847712F, 0.2210041465F, + 0.2218246565F, 0.2226462981F, 0.2234690680F, 0.2242929629F, + 0.2251179796F, 0.2259441147F, 0.2267713650F, 0.2275997272F, + 0.2284291979F, 0.2292597739F, 0.2300914518F, 0.2309242283F, + 0.2317581001F, 0.2325930638F, 0.2334291160F, 0.2342662534F, + 0.2351044727F, 0.2359437703F, 0.2367841431F, 0.2376255875F, + 0.2384681001F, 0.2393116776F, 0.2401563165F, 0.2410020134F, + 0.2418487649F, 0.2426965675F, 0.2435454178F, 0.2443953122F, + 0.2452462474F, 0.2460982199F, 0.2469512262F, 0.2478052628F, + 0.2486603262F, 0.2495164129F, 0.2503735194F, 0.2512316421F, + 0.2520907776F, 0.2529509222F, 0.2538120726F, 0.2546742250F, + 0.2555373760F, 0.2564015219F, 0.2572666593F, 0.2581327845F, + 0.2589998939F, 0.2598679840F, 0.2607370510F, 0.2616070916F, + 0.2624781019F, 0.2633500783F, 0.2642230173F, 0.2650969152F, + 0.2659717684F, 0.2668475731F, 0.2677243257F, 0.2686020226F, + 0.2694806601F, 0.2703602344F, 0.2712407419F, 0.2721221789F, + 0.2730045417F, 0.2738878265F, 0.2747720297F, 0.2756571474F, + 0.2765431760F, 0.2774301117F, 0.2783179508F, 0.2792066895F, + 0.2800963240F, 0.2809868505F, 0.2818782654F, 0.2827705647F, + 0.2836637447F, 0.2845578016F, 0.2854527315F, 0.2863485307F, + 0.2872451953F, 0.2881427215F, 0.2890411055F, 0.2899403433F, + 0.2908404312F, 0.2917413654F, 0.2926431418F, 0.2935457567F, + 0.2944492061F, 0.2953534863F, 0.2962585932F, 0.2971645230F, + 0.2980712717F, 0.2989788356F, 0.2998872105F, 0.3007963927F, + 0.3017063781F, 0.3026171629F, 0.3035287430F, 0.3044411145F, + 0.3053542736F, 0.3062682161F, 0.3071829381F, 0.3080984356F, + 0.3090147047F, 0.3099317413F, 0.3108495414F, 0.3117681011F, + 0.3126874163F, 0.3136074830F, 0.3145282972F, 0.3154498548F, + 0.3163721517F, 0.3172951841F, 0.3182189477F, 0.3191434385F, + 0.3200686525F, 0.3209945856F, 0.3219212336F, 0.3228485927F, + 0.3237766585F, 0.3247054271F, 0.3256348943F, 0.3265650560F, + 0.3274959081F, 0.3284274465F, 0.3293596671F, 0.3302925657F, + 0.3312261382F, 0.3321603804F, 0.3330952882F, 0.3340308574F, + 0.3349670838F, 0.3359039634F, 0.3368414919F, 0.3377796651F, + 0.3387184789F, 0.3396579290F, 0.3405980113F, 0.3415387216F, + 0.3424800556F, 0.3434220091F, 0.3443645779F, 0.3453077578F, + 0.3462515446F, 0.3471959340F, 0.3481409217F, 0.3490865036F, + 0.3500326754F, 0.3509794328F, 0.3519267715F, 0.3528746873F, + 0.3538231759F, 0.3547722330F, 0.3557218544F, 0.3566720357F, + 0.3576227727F, 0.3585740610F, 0.3595258964F, 0.3604782745F, + 0.3614311910F, 0.3623846417F, 0.3633386221F, 0.3642931280F, + 0.3652481549F, 0.3662036987F, 0.3671597548F, 0.3681163191F, + 0.3690733870F, 0.3700309544F, 0.3709890167F, 0.3719475696F, + 0.3729066089F, 0.3738661299F, 0.3748261285F, 0.3757866002F, + 0.3767475406F, 0.3777089453F, 0.3786708100F, 0.3796331302F, + 0.3805959014F, 0.3815591194F, 0.3825227796F, 0.3834868777F, + 0.3844514093F, 0.3854163698F, 0.3863817549F, 0.3873475601F, + 0.3883137810F, 0.3892804131F, 0.3902474521F, 0.3912148933F, + 0.3921827325F, 0.3931509650F, 0.3941195865F, 0.3950885925F, + 0.3960579785F, 0.3970277400F, 0.3979978725F, 0.3989683716F, + 0.3999392328F, 0.4009104516F, 0.4018820234F, 0.4028539438F, + 0.4038262084F, 0.4047988125F, 0.4057717516F, 0.4067450214F, + 0.4077186172F, 0.4086925345F, 0.4096667688F, 0.4106413155F, + 0.4116161703F, 0.4125913284F, 0.4135667854F, 0.4145425368F, + 0.4155185780F, 0.4164949044F, 0.4174715116F, 0.4184483949F, + 0.4194255498F, 0.4204029718F, 0.4213806563F, 0.4223585987F, + 0.4233367946F, 0.4243152392F, 0.4252939281F, 0.4262728566F, + 0.4272520202F, 0.4282314144F, 0.4292110345F, 0.4301908760F, + 0.4311709343F, 0.4321512047F, 0.4331316828F, 0.4341123639F, + 0.4350932435F, 0.4360743168F, 0.4370555794F, 0.4380370267F, + 0.4390186540F, 0.4400004567F, 0.4409824303F, 0.4419645701F, + 0.4429468716F, 0.4439293300F, 0.4449119409F, 0.4458946996F, + 0.4468776014F, 0.4478606418F, 0.4488438162F, 0.4498271199F, + 0.4508105483F, 0.4517940967F, 0.4527777607F, 0.4537615355F, + 0.4547454165F, 0.4557293991F, 0.4567134786F, 0.4576976505F, + 0.4586819101F, 0.4596662527F, 0.4606506738F, 0.4616351687F, + 0.4626197328F, 0.4636043614F, 0.4645890499F, 0.4655737936F, + 0.4665585880F, 0.4675434284F, 0.4685283101F, 0.4695132286F, + 0.4704981791F, 0.4714831570F, 0.4724681577F, 0.4734531766F, + 0.4744382089F, 0.4754232501F, 0.4764082956F, 0.4773933406F, + 0.4783783806F, 0.4793634108F, 0.4803484267F, 0.4813334237F, + 0.4823183969F, 0.4833033419F, 0.4842882540F, 0.4852731285F, + 0.4862579608F, 0.4872427462F, 0.4882274802F, 0.4892121580F, + 0.4901967751F, 0.4911813267F, 0.4921658083F, 0.4931502151F, + 0.4941345427F, 0.4951187863F, 0.4961029412F, 0.4970870029F, + 0.4980709667F, 0.4990548280F, 0.5000385822F, 0.5010222245F, + 0.5020057505F, 0.5029891553F, 0.5039724345F, 0.5049555834F, + 0.5059385973F, 0.5069214716F, 0.5079042018F, 0.5088867831F, + 0.5098692110F, 0.5108514808F, 0.5118335879F, 0.5128155277F, + 0.5137972956F, 0.5147788869F, 0.5157602971F, 0.5167415215F, + 0.5177225555F, 0.5187033945F, 0.5196840339F, 0.5206644692F, + 0.5216446956F, 0.5226247086F, 0.5236045035F, 0.5245840759F, + 0.5255634211F, 0.5265425344F, 0.5275214114F, 0.5285000474F, + 0.5294784378F, 0.5304565781F, 0.5314344637F, 0.5324120899F, + 0.5333894522F, 0.5343665461F, 0.5353433670F, 0.5363199102F, + 0.5372961713F, 0.5382721457F, 0.5392478287F, 0.5402232159F, + 0.5411983027F, 0.5421730845F, 0.5431475569F, 0.5441217151F, + 0.5450955548F, 0.5460690714F, 0.5470422602F, 0.5480151169F, + 0.5489876368F, 0.5499598155F, 0.5509316484F, 0.5519031310F, + 0.5528742587F, 0.5538450271F, 0.5548154317F, 0.5557854680F, + 0.5567551314F, 0.5577244174F, 0.5586933216F, 0.5596618395F, + 0.5606299665F, 0.5615976983F, 0.5625650302F, 0.5635319580F, + 0.5644984770F, 0.5654645828F, 0.5664302709F, 0.5673955370F, + 0.5683603765F, 0.5693247850F, 0.5702887580F, 0.5712522912F, + 0.5722153800F, 0.5731780200F, 0.5741402069F, 0.5751019362F, + 0.5760632034F, 0.5770240042F, 0.5779843341F, 0.5789441889F, + 0.5799035639F, 0.5808624549F, 0.5818208575F, 0.5827787673F, + 0.5837361800F, 0.5846930910F, 0.5856494961F, 0.5866053910F, + 0.5875607712F, 0.5885156324F, 0.5894699703F, 0.5904237804F, + 0.5913770586F, 0.5923298004F, 0.5932820016F, 0.5942336578F, + 0.5951847646F, 0.5961353179F, 0.5970853132F, 0.5980347464F, + 0.5989836131F, 0.5999319090F, 0.6008796298F, 0.6018267713F, + 0.6027733292F, 0.6037192993F, 0.6046646773F, 0.6056094589F, + 0.6065536400F, 0.6074972162F, 0.6084401833F, 0.6093825372F, + 0.6103242736F, 0.6112653884F, 0.6122058772F, 0.6131457359F, + 0.6140849604F, 0.6150235464F, 0.6159614897F, 0.6168987862F, + 0.6178354318F, 0.6187714223F, 0.6197067535F, 0.6206414213F, + 0.6215754215F, 0.6225087501F, 0.6234414028F, 0.6243733757F, + 0.6253046646F, 0.6262352654F, 0.6271651739F, 0.6280943862F, + 0.6290228982F, 0.6299507057F, 0.6308778048F, 0.6318041913F, + 0.6327298612F, 0.6336548105F, 0.6345790352F, 0.6355025312F, + 0.6364252945F, 0.6373473211F, 0.6382686070F, 0.6391891483F, + 0.6401089409F, 0.6410279808F, 0.6419462642F, 0.6428637869F, + 0.6437805452F, 0.6446965350F, 0.6456117524F, 0.6465261935F, + 0.6474398544F, 0.6483527311F, 0.6492648197F, 0.6501761165F, + 0.6510866174F, 0.6519963186F, 0.6529052162F, 0.6538133064F, + 0.6547205854F, 0.6556270492F, 0.6565326941F, 0.6574375162F, + 0.6583415117F, 0.6592446769F, 0.6601470079F, 0.6610485009F, + 0.6619491521F, 0.6628489578F, 0.6637479143F, 0.6646460177F, + 0.6655432643F, 0.6664396505F, 0.6673351724F, 0.6682298264F, + 0.6691236087F, 0.6700165157F, 0.6709085436F, 0.6717996889F, + 0.6726899478F, 0.6735793167F, 0.6744677918F, 0.6753553697F, + 0.6762420466F, 0.6771278190F, 0.6780126832F, 0.6788966357F, + 0.6797796728F, 0.6806617909F, 0.6815429866F, 0.6824232562F, + 0.6833025961F, 0.6841810030F, 0.6850584731F, 0.6859350031F, + 0.6868105894F, 0.6876852284F, 0.6885589168F, 0.6894316510F, + 0.6903034275F, 0.6911742430F, 0.6920440939F, 0.6929129769F, + 0.6937808884F, 0.6946478251F, 0.6955137837F, 0.6963787606F, + 0.6972427525F, 0.6981057560F, 0.6989677678F, 0.6998287845F, + 0.7006888028F, 0.7015478194F, 0.7024058309F, 0.7032628340F, + 0.7041188254F, 0.7049738019F, 0.7058277601F, 0.7066806969F, + 0.7075326089F, 0.7083834929F, 0.7092333457F, 0.7100821640F, + 0.7109299447F, 0.7117766846F, 0.7126223804F, 0.7134670291F, + 0.7143106273F, 0.7151531721F, 0.7159946602F, 0.7168350885F, + 0.7176744539F, 0.7185127534F, 0.7193499837F, 0.7201861418F, + 0.7210212247F, 0.7218552293F, 0.7226881526F, 0.7235199914F, + 0.7243507428F, 0.7251804039F, 0.7260089715F, 0.7268364426F, + 0.7276628144F, 0.7284880839F, 0.7293122481F, 0.7301353040F, + 0.7309572487F, 0.7317780794F, 0.7325977930F, 0.7334163868F, + 0.7342338579F, 0.7350502033F, 0.7358654202F, 0.7366795059F, + 0.7374924573F, 0.7383042718F, 0.7391149465F, 0.7399244787F, + 0.7407328655F, 0.7415401041F, 0.7423461920F, 0.7431511261F, + 0.7439549040F, 0.7447575227F, 0.7455589797F, 0.7463592723F, + 0.7471583976F, 0.7479563532F, 0.7487531363F, 0.7495487443F, + 0.7503431745F, 0.7511364244F, 0.7519284913F, 0.7527193726F, + 0.7535090658F, 0.7542975683F, 0.7550848776F, 0.7558709910F, + 0.7566559062F, 0.7574396205F, 0.7582221314F, 0.7590034366F, + 0.7597835334F, 0.7605624194F, 0.7613400923F, 0.7621165495F, + 0.7628917886F, 0.7636658072F, 0.7644386030F, 0.7652101735F, + 0.7659805164F, 0.7667496292F, 0.7675175098F, 0.7682841556F, + 0.7690495645F, 0.7698137341F, 0.7705766622F, 0.7713383463F, + 0.7720987844F, 0.7728579741F, 0.7736159132F, 0.7743725994F, + 0.7751280306F, 0.7758822046F, 0.7766351192F, 0.7773867722F, + 0.7781371614F, 0.7788862848F, 0.7796341401F, 0.7803807253F, + 0.7811260383F, 0.7818700769F, 0.7826128392F, 0.7833543230F, + 0.7840945263F, 0.7848334471F, 0.7855710833F, 0.7863074330F, + 0.7870424941F, 0.7877762647F, 0.7885087428F, 0.7892399264F, + 0.7899698137F, 0.7906984026F, 0.7914256914F, 0.7921516780F, + 0.7928763607F, 0.7935997375F, 0.7943218065F, 0.7950425661F, + 0.7957620142F, 0.7964801492F, 0.7971969692F, 0.7979124724F, + 0.7986266570F, 0.7993395214F, 0.8000510638F, 0.8007612823F, + 0.8014701754F, 0.8021777413F, 0.8028839784F, 0.8035888849F, + 0.8042924592F, 0.8049946997F, 0.8056956048F, 0.8063951727F, + 0.8070934020F, 0.8077902910F, 0.8084858381F, 0.8091800419F, + 0.8098729007F, 0.8105644130F, 0.8112545774F, 0.8119433922F, + 0.8126308561F, 0.8133169676F, 0.8140017251F, 0.8146851272F, + 0.8153671726F, 0.8160478598F, 0.8167271874F, 0.8174051539F, + 0.8180817582F, 0.8187569986F, 0.8194308741F, 0.8201033831F, + 0.8207745244F, 0.8214442966F, 0.8221126986F, 0.8227797290F, + 0.8234453865F, 0.8241096700F, 0.8247725781F, 0.8254341097F, + 0.8260942636F, 0.8267530385F, 0.8274104334F, 0.8280664470F, + 0.8287210782F, 0.8293743259F, 0.8300261889F, 0.8306766662F, + 0.8313257566F, 0.8319734591F, 0.8326197727F, 0.8332646963F, + 0.8339082288F, 0.8345503692F, 0.8351911167F, 0.8358304700F, + 0.8364684284F, 0.8371049907F, 0.8377401562F, 0.8383739238F, + 0.8390062927F, 0.8396372618F, 0.8402668305F, 0.8408949977F, + 0.8415217626F, 0.8421471245F, 0.8427710823F, 0.8433936354F, + 0.8440147830F, 0.8446345242F, 0.8452528582F, 0.8458697844F, + 0.8464853020F, 0.8470994102F, 0.8477121084F, 0.8483233958F, + 0.8489332718F, 0.8495417356F, 0.8501487866F, 0.8507544243F, + 0.8513586479F, 0.8519614568F, 0.8525628505F, 0.8531628283F, + 0.8537613897F, 0.8543585341F, 0.8549542611F, 0.8555485699F, + 0.8561414603F, 0.8567329315F, 0.8573229832F, 0.8579116149F, + 0.8584988262F, 0.8590846165F, 0.8596689855F, 0.8602519327F, + 0.8608334577F, 0.8614135603F, 0.8619922399F, 0.8625694962F, + 0.8631453289F, 0.8637197377F, 0.8642927222F, 0.8648642821F, + 0.8654344172F, 0.8660031272F, 0.8665704118F, 0.8671362708F, + 0.8677007039F, 0.8682637109F, 0.8688252917F, 0.8693854460F, + 0.8699441737F, 0.8705014745F, 0.8710573485F, 0.8716117953F, + 0.8721648150F, 0.8727164073F, 0.8732665723F, 0.8738153098F, + 0.8743626197F, 0.8749085021F, 0.8754529569F, 0.8759959840F, + 0.8765375835F, 0.8770777553F, 0.8776164996F, 0.8781538162F, + 0.8786897054F, 0.8792241670F, 0.8797572013F, 0.8802888082F, + 0.8808189880F, 0.8813477407F, 0.8818750664F, 0.8824009653F, + 0.8829254375F, 0.8834484833F, 0.8839701028F, 0.8844902961F, + 0.8850090636F, 0.8855264054F, 0.8860423218F, 0.8865568131F, + 0.8870698794F, 0.8875815212F, 0.8880917386F, 0.8886005319F, + 0.8891079016F, 0.8896138479F, 0.8901183712F, 0.8906214719F, + 0.8911231503F, 0.8916234067F, 0.8921222417F, 0.8926196556F, + 0.8931156489F, 0.8936102219F, 0.8941033752F, 0.8945951092F, + 0.8950854244F, 0.8955743212F, 0.8960618003F, 0.8965478621F, + 0.8970325071F, 0.8975157359F, 0.8979975490F, 0.8984779471F, + 0.8989569307F, 0.8994345004F, 0.8999106568F, 0.9003854005F, + 0.9008587323F, 0.9013306526F, 0.9018011623F, 0.9022702619F, + 0.9027379521F, 0.9032042337F, 0.9036691074F, 0.9041325739F, + 0.9045946339F, 0.9050552882F, 0.9055145376F, 0.9059723828F, + 0.9064288246F, 0.9068838638F, 0.9073375013F, 0.9077897379F, + 0.9082405743F, 0.9086900115F, 0.9091380503F, 0.9095846917F, + 0.9100299364F, 0.9104737854F, 0.9109162397F, 0.9113573001F, + 0.9117969675F, 0.9122352430F, 0.9126721275F, 0.9131076219F, + 0.9135417273F, 0.9139744447F, 0.9144057750F, 0.9148357194F, + 0.9152642787F, 0.9156914542F, 0.9161172468F, 0.9165416576F, + 0.9169646877F, 0.9173863382F, 0.9178066102F, 0.9182255048F, + 0.9186430232F, 0.9190591665F, 0.9194739359F, 0.9198873324F, + 0.9202993574F, 0.9207100120F, 0.9211192973F, 0.9215272147F, + 0.9219337653F, 0.9223389504F, 0.9227427713F, 0.9231452290F, + 0.9235463251F, 0.9239460607F, 0.9243444371F, 0.9247414557F, + 0.9251371177F, 0.9255314245F, 0.9259243774F, 0.9263159778F, + 0.9267062270F, 0.9270951264F, 0.9274826774F, 0.9278688814F, + 0.9282537398F, 0.9286372540F, 0.9290194254F, 0.9294002555F, + 0.9297797458F, 0.9301578976F, 0.9305347125F, 0.9309101919F, + 0.9312843373F, 0.9316571503F, 0.9320286323F, 0.9323987849F, + 0.9327676097F, 0.9331351080F, 0.9335012816F, 0.9338661320F, + 0.9342296607F, 0.9345918694F, 0.9349527596F, 0.9353123330F, + 0.9356705911F, 0.9360275357F, 0.9363831683F, 0.9367374905F, + 0.9370905042F, 0.9374422108F, 0.9377926122F, 0.9381417099F, + 0.9384895057F, 0.9388360014F, 0.9391811985F, 0.9395250989F, + 0.9398677043F, 0.9402090165F, 0.9405490371F, 0.9408877680F, + 0.9412252110F, 0.9415613678F, 0.9418962402F, 0.9422298301F, + 0.9425621392F, 0.9428931695F, 0.9432229226F, 0.9435514005F, + 0.9438786050F, 0.9442045381F, 0.9445292014F, 0.9448525971F, + 0.9451747268F, 0.9454955926F, 0.9458151963F, 0.9461335399F, + 0.9464506253F, 0.9467664545F, 0.9470810293F, 0.9473943517F, + 0.9477064238F, 0.9480172474F, 0.9483268246F, 0.9486351573F, + 0.9489422475F, 0.9492480973F, 0.9495527087F, 0.9498560837F, + 0.9501582243F, 0.9504591325F, 0.9507588105F, 0.9510572603F, + 0.9513544839F, 0.9516504834F, 0.9519452609F, 0.9522388186F, + 0.9525311584F, 0.9528222826F, 0.9531121932F, 0.9534008923F, + 0.9536883821F, 0.9539746647F, 0.9542597424F, 0.9545436171F, + 0.9548262912F, 0.9551077667F, 0.9553880459F, 0.9556671309F, + 0.9559450239F, 0.9562217272F, 0.9564972429F, 0.9567715733F, + 0.9570447206F, 0.9573166871F, 0.9575874749F, 0.9578570863F, + 0.9581255236F, 0.9583927890F, 0.9586588849F, 0.9589238134F, + 0.9591875769F, 0.9594501777F, 0.9597116180F, 0.9599719003F, + 0.9602310267F, 0.9604889995F, 0.9607458213F, 0.9610014942F, + 0.9612560206F, 0.9615094028F, 0.9617616433F, 0.9620127443F, + 0.9622627083F, 0.9625115376F, 0.9627592345F, 0.9630058016F, + 0.9632512411F, 0.9634955555F, 0.9637387471F, 0.9639808185F, + 0.9642217720F, 0.9644616100F, 0.9647003349F, 0.9649379493F, + 0.9651744556F, 0.9654098561F, 0.9656441534F, 0.9658773499F, + 0.9661094480F, 0.9663404504F, 0.9665703593F, 0.9667991774F, + 0.9670269071F, 0.9672535509F, 0.9674791114F, 0.9677035909F, + 0.9679269921F, 0.9681493174F, 0.9683705694F, 0.9685907506F, + 0.9688098636F, 0.9690279108F, 0.9692448948F, 0.9694608182F, + 0.9696756836F, 0.9698894934F, 0.9701022503F, 0.9703139569F, + 0.9705246156F, 0.9707342291F, 0.9709428000F, 0.9711503309F, + 0.9713568243F, 0.9715622829F, 0.9717667093F, 0.9719701060F, + 0.9721724757F, 0.9723738210F, 0.9725741446F, 0.9727734490F, + 0.9729717369F, 0.9731690109F, 0.9733652737F, 0.9735605279F, + 0.9737547762F, 0.9739480212F, 0.9741402656F, 0.9743315120F, + 0.9745217631F, 0.9747110216F, 0.9748992901F, 0.9750865714F, + 0.9752728681F, 0.9754581829F, 0.9756425184F, 0.9758258775F, + 0.9760082627F, 0.9761896768F, 0.9763701224F, 0.9765496024F, + 0.9767281193F, 0.9769056760F, 0.9770822751F, 0.9772579193F, + 0.9774326114F, 0.9776063542F, 0.9777791502F, 0.9779510023F, + 0.9781219133F, 0.9782918858F, 0.9784609226F, 0.9786290264F, + 0.9787962000F, 0.9789624461F, 0.9791277676F, 0.9792921671F, + 0.9794556474F, 0.9796182113F, 0.9797798615F, 0.9799406009F, + 0.9801004321F, 0.9802593580F, 0.9804173813F, 0.9805745049F, + 0.9807307314F, 0.9808860637F, 0.9810405046F, 0.9811940568F, + 0.9813467232F, 0.9814985065F, 0.9816494095F, 0.9817994351F, + 0.9819485860F, 0.9820968650F, 0.9822442750F, 0.9823908186F, + 0.9825364988F, 0.9826813184F, 0.9828252801F, 0.9829683868F, + 0.9831106413F, 0.9832520463F, 0.9833926048F, 0.9835323195F, + 0.9836711932F, 0.9838092288F, 0.9839464291F, 0.9840827969F, + 0.9842183351F, 0.9843530464F, 0.9844869337F, 0.9846199998F, + 0.9847522475F, 0.9848836798F, 0.9850142993F, 0.9851441090F, + 0.9852731117F, 0.9854013101F, 0.9855287073F, 0.9856553058F, + 0.9857811087F, 0.9859061188F, 0.9860303388F, 0.9861537717F, + 0.9862764202F, 0.9863982872F, 0.9865193756F, 0.9866396882F, + 0.9867592277F, 0.9868779972F, 0.9869959993F, 0.9871132370F, + 0.9872297131F, 0.9873454304F, 0.9874603918F, 0.9875746001F, + 0.9876880581F, 0.9878007688F, 0.9879127348F, 0.9880239592F, + 0.9881344447F, 0.9882441941F, 0.9883532104F, 0.9884614962F, + 0.9885690546F, 0.9886758883F, 0.9887820001F, 0.9888873930F, + 0.9889920697F, 0.9890960331F, 0.9891992859F, 0.9893018312F, + 0.9894036716F, 0.9895048100F, 0.9896052493F, 0.9897049923F, + 0.9898040418F, 0.9899024006F, 0.9900000717F, 0.9900970577F, + 0.9901933616F, 0.9902889862F, 0.9903839343F, 0.9904782087F, + 0.9905718122F, 0.9906647477F, 0.9907570180F, 0.9908486259F, + 0.9909395742F, 0.9910298658F, 0.9911195034F, 0.9912084899F, + 0.9912968281F, 0.9913845208F, 0.9914715708F, 0.9915579810F, + 0.9916437540F, 0.9917288928F, 0.9918134001F, 0.9918972788F, + 0.9919805316F, 0.9920631613F, 0.9921451707F, 0.9922265626F, + 0.9923073399F, 0.9923875052F, 0.9924670615F, 0.9925460114F, + 0.9926243577F, 0.9927021033F, 0.9927792508F, 0.9928558032F, + 0.9929317631F, 0.9930071333F, 0.9930819167F, 0.9931561158F, + 0.9932297337F, 0.9933027728F, 0.9933752362F, 0.9934471264F, + 0.9935184462F, 0.9935891985F, 0.9936593859F, 0.9937290112F, + 0.9937980771F, 0.9938665864F, 0.9939345418F, 0.9940019460F, + 0.9940688018F, 0.9941351118F, 0.9942008789F, 0.9942661057F, + 0.9943307950F, 0.9943949494F, 0.9944585717F, 0.9945216645F, + 0.9945842307F, 0.9946462728F, 0.9947077936F, 0.9947687957F, + 0.9948292820F, 0.9948892550F, 0.9949487174F, 0.9950076719F, + 0.9950661212F, 0.9951240679F, 0.9951815148F, 0.9952384645F, + 0.9952949196F, 0.9953508828F, 0.9954063568F, 0.9954613442F, + 0.9955158476F, 0.9955698697F, 0.9956234132F, 0.9956764806F, + 0.9957290746F, 0.9957811978F, 0.9958328528F, 0.9958840423F, + 0.9959347688F, 0.9959850351F, 0.9960348435F, 0.9960841969F, + 0.9961330977F, 0.9961815486F, 0.9962295521F, 0.9962771108F, + 0.9963242274F, 0.9963709043F, 0.9964171441F, 0.9964629494F, + 0.9965083228F, 0.9965532668F, 0.9965977840F, 0.9966418768F, + 0.9966855479F, 0.9967287998F, 0.9967716350F, 0.9968140559F, + 0.9968560653F, 0.9968976655F, 0.9969388591F, 0.9969796485F, + 0.9970200363F, 0.9970600250F, 0.9970996170F, 0.9971388149F, + 0.9971776211F, 0.9972160380F, 0.9972540683F, 0.9972917142F, + 0.9973289783F, 0.9973658631F, 0.9974023709F, 0.9974385042F, + 0.9974742655F, 0.9975096571F, 0.9975446816F, 0.9975793413F, + 0.9976136386F, 0.9976475759F, 0.9976811557F, 0.9977143803F, + 0.9977472521F, 0.9977797736F, 0.9978119470F, 0.9978437748F, + 0.9978752593F, 0.9979064029F, 0.9979372079F, 0.9979676768F, + 0.9979978117F, 0.9980276151F, 0.9980570893F, 0.9980862367F, + 0.9981150595F, 0.9981435600F, 0.9981717406F, 0.9981996035F, + 0.9982271511F, 0.9982543856F, 0.9982813093F, 0.9983079246F, + 0.9983342336F, 0.9983602386F, 0.9983859418F, 0.9984113456F, + 0.9984364522F, 0.9984612638F, 0.9984857825F, 0.9985100108F, + 0.9985339507F, 0.9985576044F, 0.9985809743F, 0.9986040624F, + 0.9986268710F, 0.9986494022F, 0.9986716583F, 0.9986936413F, + 0.9987153535F, 0.9987367969F, 0.9987579738F, 0.9987788864F, + 0.9987995366F, 0.9988199267F, 0.9988400587F, 0.9988599348F, + 0.9988795572F, 0.9988989278F, 0.9989180487F, 0.9989369222F, + 0.9989555501F, 0.9989739347F, 0.9989920780F, 0.9990099820F, + 0.9990276487F, 0.9990450803F, 0.9990622787F, 0.9990792460F, + 0.9990959841F, 0.9991124952F, 0.9991287812F, 0.9991448440F, + 0.9991606858F, 0.9991763084F, 0.9991917139F, 0.9992069042F, + 0.9992218813F, 0.9992366471F, 0.9992512035F, 0.9992655525F, + 0.9992796961F, 0.9992936361F, 0.9993073744F, 0.9993209131F, + 0.9993342538F, 0.9993473987F, 0.9993603494F, 0.9993731080F, + 0.9993856762F, 0.9993980559F, 0.9994102490F, 0.9994222573F, + 0.9994340827F, 0.9994457269F, 0.9994571918F, 0.9994684793F, + 0.9994795910F, 0.9994905288F, 0.9995012945F, 0.9995118898F, + 0.9995223165F, 0.9995325765F, 0.9995426713F, 0.9995526029F, + 0.9995623728F, 0.9995719829F, 0.9995814349F, 0.9995907304F, + 0.9995998712F, 0.9996088590F, 0.9996176954F, 0.9996263821F, + 0.9996349208F, 0.9996433132F, 0.9996515609F, 0.9996596656F, + 0.9996676288F, 0.9996754522F, 0.9996831375F, 0.9996906862F, + 0.9996981000F, 0.9997053804F, 0.9997125290F, 0.9997195474F, + 0.9997264371F, 0.9997331998F, 0.9997398369F, 0.9997463500F, + 0.9997527406F, 0.9997590103F, 0.9997651606F, 0.9997711930F, + 0.9997771089F, 0.9997829098F, 0.9997885973F, 0.9997941728F, + 0.9997996378F, 0.9998049936F, 0.9998102419F, 0.9998153839F, + 0.9998204211F, 0.9998253550F, 0.9998301868F, 0.9998349182F, + 0.9998395503F, 0.9998440847F, 0.9998485226F, 0.9998528654F, + 0.9998571146F, 0.9998612713F, 0.9998653370F, 0.9998693130F, + 0.9998732007F, 0.9998770012F, 0.9998807159F, 0.9998843461F, + 0.9998878931F, 0.9998913581F, 0.9998947424F, 0.9998980473F, + 0.9999012740F, 0.9999044237F, 0.9999074976F, 0.9999104971F, + 0.9999134231F, 0.9999162771F, 0.9999190601F, 0.9999217733F, + 0.9999244179F, 0.9999269950F, 0.9999295058F, 0.9999319515F, + 0.9999343332F, 0.9999366519F, 0.9999389088F, 0.9999411050F, + 0.9999432416F, 0.9999453196F, 0.9999473402F, 0.9999493044F, + 0.9999512132F, 0.9999530677F, 0.9999548690F, 0.9999566180F, + 0.9999583157F, 0.9999599633F, 0.9999615616F, 0.9999631116F, + 0.9999646144F, 0.9999660709F, 0.9999674820F, 0.9999688487F, + 0.9999701719F, 0.9999714526F, 0.9999726917F, 0.9999738900F, + 0.9999750486F, 0.9999761682F, 0.9999772497F, 0.9999782941F, + 0.9999793021F, 0.9999802747F, 0.9999812126F, 0.9999821167F, + 0.9999829878F, 0.9999838268F, 0.9999846343F, 0.9999854113F, + 0.9999861584F, 0.9999868765F, 0.9999875664F, 0.9999882287F, + 0.9999888642F, 0.9999894736F, 0.9999900577F, 0.9999906172F, + 0.9999911528F, 0.9999916651F, 0.9999921548F, 0.9999926227F, + 0.9999930693F, 0.9999934954F, 0.9999939015F, 0.9999942883F, + 0.9999946564F, 0.9999950064F, 0.9999953390F, 0.9999956547F, + 0.9999959541F, 0.9999962377F, 0.9999965062F, 0.9999967601F, + 0.9999969998F, 0.9999972260F, 0.9999974392F, 0.9999976399F, + 0.9999978285F, 0.9999980056F, 0.9999981716F, 0.9999983271F, + 0.9999984724F, 0.9999986081F, 0.9999987345F, 0.9999988521F, + 0.9999989613F, 0.9999990625F, 0.9999991562F, 0.9999992426F, + 0.9999993223F, 0.9999993954F, 0.9999994625F, 0.9999995239F, + 0.9999995798F, 0.9999996307F, 0.9999996768F, 0.9999997184F, + 0.9999997559F, 0.9999997895F, 0.9999998195F, 0.9999998462F, + 0.9999998698F, 0.9999998906F, 0.9999999088F, 0.9999999246F, + 0.9999999383F, 0.9999999500F, 0.9999999600F, 0.9999999684F, + 0.9999999754F, 0.9999999811F, 0.9999999858F, 0.9999999896F, + 0.9999999925F, 0.9999999948F, 0.9999999965F, 0.9999999978F, + 0.9999999986F, 0.9999999992F, 0.9999999996F, 0.9999999998F, + 0.9999999999F, 1.0000000000F, 1.0000000000F, 1.0000000000F, +}; + +static const float vwin8192[4096] = { + 0.0000000578F, 0.0000005198F, 0.0000014438F, 0.0000028299F, + 0.0000046780F, 0.0000069882F, 0.0000097604F, 0.0000129945F, + 0.0000166908F, 0.0000208490F, 0.0000254692F, 0.0000305515F, + 0.0000360958F, 0.0000421021F, 0.0000485704F, 0.0000555006F, + 0.0000628929F, 0.0000707472F, 0.0000790635F, 0.0000878417F, + 0.0000970820F, 0.0001067842F, 0.0001169483F, 0.0001275744F, + 0.0001386625F, 0.0001502126F, 0.0001622245F, 0.0001746984F, + 0.0001876343F, 0.0002010320F, 0.0002148917F, 0.0002292132F, + 0.0002439967F, 0.0002592421F, 0.0002749493F, 0.0002911184F, + 0.0003077493F, 0.0003248421F, 0.0003423967F, 0.0003604132F, + 0.0003788915F, 0.0003978316F, 0.0004172335F, 0.0004370971F, + 0.0004574226F, 0.0004782098F, 0.0004994587F, 0.0005211694F, + 0.0005433418F, 0.0005659759F, 0.0005890717F, 0.0006126292F, + 0.0006366484F, 0.0006611292F, 0.0006860716F, 0.0007114757F, + 0.0007373414F, 0.0007636687F, 0.0007904576F, 0.0008177080F, + 0.0008454200F, 0.0008735935F, 0.0009022285F, 0.0009313250F, + 0.0009608830F, 0.0009909025F, 0.0010213834F, 0.0010523257F, + 0.0010837295F, 0.0011155946F, 0.0011479211F, 0.0011807090F, + 0.0012139582F, 0.0012476687F, 0.0012818405F, 0.0013164736F, + 0.0013515679F, 0.0013871235F, 0.0014231402F, 0.0014596182F, + 0.0014965573F, 0.0015339576F, 0.0015718190F, 0.0016101415F, + 0.0016489251F, 0.0016881698F, 0.0017278754F, 0.0017680421F, + 0.0018086698F, 0.0018497584F, 0.0018913080F, 0.0019333185F, + 0.0019757898F, 0.0020187221F, 0.0020621151F, 0.0021059690F, + 0.0021502837F, 0.0021950591F, 0.0022402953F, 0.0022859921F, + 0.0023321497F, 0.0023787679F, 0.0024258467F, 0.0024733861F, + 0.0025213861F, 0.0025698466F, 0.0026187676F, 0.0026681491F, + 0.0027179911F, 0.0027682935F, 0.0028190562F, 0.0028702794F, + 0.0029219628F, 0.0029741066F, 0.0030267107F, 0.0030797749F, + 0.0031332994F, 0.0031872841F, 0.0032417289F, 0.0032966338F, + 0.0033519988F, 0.0034078238F, 0.0034641089F, 0.0035208539F, + 0.0035780589F, 0.0036357237F, 0.0036938485F, 0.0037524331F, + 0.0038114775F, 0.0038709817F, 0.0039309456F, 0.0039913692F, + 0.0040522524F, 0.0041135953F, 0.0041753978F, 0.0042376599F, + 0.0043003814F, 0.0043635624F, 0.0044272029F, 0.0044913028F, + 0.0045558620F, 0.0046208806F, 0.0046863585F, 0.0047522955F, + 0.0048186919F, 0.0048855473F, 0.0049528619F, 0.0050206356F, + 0.0050888684F, 0.0051575601F, 0.0052267108F, 0.0052963204F, + 0.0053663890F, 0.0054369163F, 0.0055079025F, 0.0055793474F, + 0.0056512510F, 0.0057236133F, 0.0057964342F, 0.0058697137F, + 0.0059434517F, 0.0060176482F, 0.0060923032F, 0.0061674166F, + 0.0062429883F, 0.0063190183F, 0.0063955066F, 0.0064724532F, + 0.0065498579F, 0.0066277207F, 0.0067060416F, 0.0067848205F, + 0.0068640575F, 0.0069437523F, 0.0070239051F, 0.0071045157F, + 0.0071855840F, 0.0072671102F, 0.0073490940F, 0.0074315355F, + 0.0075144345F, 0.0075977911F, 0.0076816052F, 0.0077658768F, + 0.0078506057F, 0.0079357920F, 0.0080214355F, 0.0081075363F, + 0.0081940943F, 0.0082811094F, 0.0083685816F, 0.0084565108F, + 0.0085448970F, 0.0086337401F, 0.0087230401F, 0.0088127969F, + 0.0089030104F, 0.0089936807F, 0.0090848076F, 0.0091763911F, + 0.0092684311F, 0.0093609276F, 0.0094538805F, 0.0095472898F, + 0.0096411554F, 0.0097354772F, 0.0098302552F, 0.0099254894F, + 0.0100211796F, 0.0101173259F, 0.0102139281F, 0.0103109863F, + 0.0104085002F, 0.0105064700F, 0.0106048955F, 0.0107037766F, + 0.0108031133F, 0.0109029056F, 0.0110031534F, 0.0111038565F, + 0.0112050151F, 0.0113066289F, 0.0114086980F, 0.0115112222F, + 0.0116142015F, 0.0117176359F, 0.0118215252F, 0.0119258695F, + 0.0120306686F, 0.0121359225F, 0.0122416312F, 0.0123477944F, + 0.0124544123F, 0.0125614847F, 0.0126690116F, 0.0127769928F, + 0.0128854284F, 0.0129943182F, 0.0131036623F, 0.0132134604F, + 0.0133237126F, 0.0134344188F, 0.0135455790F, 0.0136571929F, + 0.0137692607F, 0.0138817821F, 0.0139947572F, 0.0141081859F, + 0.0142220681F, 0.0143364037F, 0.0144511927F, 0.0145664350F, + 0.0146821304F, 0.0147982791F, 0.0149148808F, 0.0150319355F, + 0.0151494431F, 0.0152674036F, 0.0153858168F, 0.0155046828F, + 0.0156240014F, 0.0157437726F, 0.0158639962F, 0.0159846723F, + 0.0161058007F, 0.0162273814F, 0.0163494142F, 0.0164718991F, + 0.0165948361F, 0.0167182250F, 0.0168420658F, 0.0169663584F, + 0.0170911027F, 0.0172162987F, 0.0173419462F, 0.0174680452F, + 0.0175945956F, 0.0177215974F, 0.0178490504F, 0.0179769545F, + 0.0181053098F, 0.0182341160F, 0.0183633732F, 0.0184930812F, + 0.0186232399F, 0.0187538494F, 0.0188849094F, 0.0190164200F, + 0.0191483809F, 0.0192807923F, 0.0194136539F, 0.0195469656F, + 0.0196807275F, 0.0198149394F, 0.0199496012F, 0.0200847128F, + 0.0202202742F, 0.0203562853F, 0.0204927460F, 0.0206296561F, + 0.0207670157F, 0.0209048245F, 0.0210430826F, 0.0211817899F, + 0.0213209462F, 0.0214605515F, 0.0216006057F, 0.0217411086F, + 0.0218820603F, 0.0220234605F, 0.0221653093F, 0.0223076066F, + 0.0224503521F, 0.0225935459F, 0.0227371879F, 0.0228812779F, + 0.0230258160F, 0.0231708018F, 0.0233162355F, 0.0234621169F, + 0.0236084459F, 0.0237552224F, 0.0239024462F, 0.0240501175F, + 0.0241982359F, 0.0243468015F, 0.0244958141F, 0.0246452736F, + 0.0247951800F, 0.0249455331F, 0.0250963329F, 0.0252475792F, + 0.0253992720F, 0.0255514111F, 0.0257039965F, 0.0258570281F, + 0.0260105057F, 0.0261644293F, 0.0263187987F, 0.0264736139F, + 0.0266288747F, 0.0267845811F, 0.0269407330F, 0.0270973302F, + 0.0272543727F, 0.0274118604F, 0.0275697930F, 0.0277281707F, + 0.0278869932F, 0.0280462604F, 0.0282059723F, 0.0283661287F, + 0.0285267295F, 0.0286877747F, 0.0288492641F, 0.0290111976F, + 0.0291735751F, 0.0293363965F, 0.0294996617F, 0.0296633706F, + 0.0298275231F, 0.0299921190F, 0.0301571583F, 0.0303226409F, + 0.0304885667F, 0.0306549354F, 0.0308217472F, 0.0309890017F, + 0.0311566989F, 0.0313248388F, 0.0314934211F, 0.0316624459F, + 0.0318319128F, 0.0320018220F, 0.0321721732F, 0.0323429663F, + 0.0325142013F, 0.0326858779F, 0.0328579962F, 0.0330305559F, + 0.0332035570F, 0.0333769994F, 0.0335508829F, 0.0337252074F, + 0.0338999728F, 0.0340751790F, 0.0342508259F, 0.0344269134F, + 0.0346034412F, 0.0347804094F, 0.0349578178F, 0.0351356663F, + 0.0353139548F, 0.0354926831F, 0.0356718511F, 0.0358514588F, + 0.0360315059F, 0.0362119924F, 0.0363929182F, 0.0365742831F, + 0.0367560870F, 0.0369383297F, 0.0371210113F, 0.0373041315F, + 0.0374876902F, 0.0376716873F, 0.0378561226F, 0.0380409961F, + 0.0382263077F, 0.0384120571F, 0.0385982443F, 0.0387848691F, + 0.0389719315F, 0.0391594313F, 0.0393473683F, 0.0395357425F, + 0.0397245537F, 0.0399138017F, 0.0401034866F, 0.0402936080F, + 0.0404841660F, 0.0406751603F, 0.0408665909F, 0.0410584576F, + 0.0412507603F, 0.0414434988F, 0.0416366731F, 0.0418302829F, + 0.0420243282F, 0.0422188088F, 0.0424137246F, 0.0426090755F, + 0.0428048613F, 0.0430010819F, 0.0431977371F, 0.0433948269F, + 0.0435923511F, 0.0437903095F, 0.0439887020F, 0.0441875285F, + 0.0443867889F, 0.0445864830F, 0.0447866106F, 0.0449871717F, + 0.0451881661F, 0.0453895936F, 0.0455914542F, 0.0457937477F, + 0.0459964738F, 0.0461996326F, 0.0464032239F, 0.0466072475F, + 0.0468117032F, 0.0470165910F, 0.0472219107F, 0.0474276622F, + 0.0476338452F, 0.0478404597F, 0.0480475056F, 0.0482549827F, + 0.0484628907F, 0.0486712297F, 0.0488799994F, 0.0490891998F, + 0.0492988306F, 0.0495088917F, 0.0497193830F, 0.0499303043F, + 0.0501416554F, 0.0503534363F, 0.0505656468F, 0.0507782867F, + 0.0509913559F, 0.0512048542F, 0.0514187815F, 0.0516331376F, + 0.0518479225F, 0.0520631358F, 0.0522787775F, 0.0524948475F, + 0.0527113455F, 0.0529282715F, 0.0531456252F, 0.0533634066F, + 0.0535816154F, 0.0538002515F, 0.0540193148F, 0.0542388051F, + 0.0544587222F, 0.0546790660F, 0.0548998364F, 0.0551210331F, + 0.0553426561F, 0.0555647051F, 0.0557871801F, 0.0560100807F, + 0.0562334070F, 0.0564571587F, 0.0566813357F, 0.0569059378F, + 0.0571309649F, 0.0573564168F, 0.0575822933F, 0.0578085942F, + 0.0580353195F, 0.0582624689F, 0.0584900423F, 0.0587180396F, + 0.0589464605F, 0.0591753049F, 0.0594045726F, 0.0596342635F, + 0.0598643774F, 0.0600949141F, 0.0603258735F, 0.0605572555F, + 0.0607890597F, 0.0610212862F, 0.0612539346F, 0.0614870049F, + 0.0617204968F, 0.0619544103F, 0.0621887451F, 0.0624235010F, + 0.0626586780F, 0.0628942758F, 0.0631302942F, 0.0633667331F, + 0.0636035923F, 0.0638408717F, 0.0640785710F, 0.0643166901F, + 0.0645552288F, 0.0647941870F, 0.0650335645F, 0.0652733610F, + 0.0655135765F, 0.0657542108F, 0.0659952636F, 0.0662367348F, + 0.0664786242F, 0.0667209316F, 0.0669636570F, 0.0672068000F, + 0.0674503605F, 0.0676943384F, 0.0679387334F, 0.0681835454F, + 0.0684287742F, 0.0686744196F, 0.0689204814F, 0.0691669595F, + 0.0694138536F, 0.0696611637F, 0.0699088894F, 0.0701570307F, + 0.0704055873F, 0.0706545590F, 0.0709039458F, 0.0711537473F, + 0.0714039634F, 0.0716545939F, 0.0719056387F, 0.0721570975F, + 0.0724089702F, 0.0726612565F, 0.0729139563F, 0.0731670694F, + 0.0734205956F, 0.0736745347F, 0.0739288866F, 0.0741836510F, + 0.0744388277F, 0.0746944166F, 0.0749504175F, 0.0752068301F, + 0.0754636543F, 0.0757208899F, 0.0759785367F, 0.0762365946F, + 0.0764950632F, 0.0767539424F, 0.0770132320F, 0.0772729319F, + 0.0775330418F, 0.0777935616F, 0.0780544909F, 0.0783158298F, + 0.0785775778F, 0.0788397349F, 0.0791023009F, 0.0793652755F, + 0.0796286585F, 0.0798924498F, 0.0801566492F, 0.0804212564F, + 0.0806862712F, 0.0809516935F, 0.0812175231F, 0.0814837597F, + 0.0817504031F, 0.0820174532F, 0.0822849097F, 0.0825527724F, + 0.0828210412F, 0.0830897158F, 0.0833587960F, 0.0836282816F, + 0.0838981724F, 0.0841684682F, 0.0844391688F, 0.0847102740F, + 0.0849817835F, 0.0852536973F, 0.0855260150F, 0.0857987364F, + 0.0860718614F, 0.0863453897F, 0.0866193211F, 0.0868936554F, + 0.0871683924F, 0.0874435319F, 0.0877190737F, 0.0879950175F, + 0.0882713632F, 0.0885481105F, 0.0888252592F, 0.0891028091F, + 0.0893807600F, 0.0896591117F, 0.0899378639F, 0.0902170165F, + 0.0904965692F, 0.0907765218F, 0.0910568740F, 0.0913376258F, + 0.0916187767F, 0.0919003268F, 0.0921822756F, 0.0924646230F, + 0.0927473687F, 0.0930305126F, 0.0933140545F, 0.0935979940F, + 0.0938823310F, 0.0941670653F, 0.0944521966F, 0.0947377247F, + 0.0950236494F, 0.0953099704F, 0.0955966876F, 0.0958838007F, + 0.0961713094F, 0.0964592136F, 0.0967475131F, 0.0970362075F, + 0.0973252967F, 0.0976147805F, 0.0979046585F, 0.0981949307F, + 0.0984855967F, 0.0987766563F, 0.0990681093F, 0.0993599555F, + 0.0996521945F, 0.0999448263F, 0.1002378506F, 0.1005312671F, + 0.1008250755F, 0.1011192757F, 0.1014138675F, 0.1017088505F, + 0.1020042246F, 0.1022999895F, 0.1025961450F, 0.1028926909F, + 0.1031896268F, 0.1034869526F, 0.1037846680F, 0.1040827729F, + 0.1043812668F, 0.1046801497F, 0.1049794213F, 0.1052790813F, + 0.1055791294F, 0.1058795656F, 0.1061803894F, 0.1064816006F, + 0.1067831991F, 0.1070851846F, 0.1073875568F, 0.1076903155F, + 0.1079934604F, 0.1082969913F, 0.1086009079F, 0.1089052101F, + 0.1092098975F, 0.1095149699F, 0.1098204270F, 0.1101262687F, + 0.1104324946F, 0.1107391045F, 0.1110460982F, 0.1113534754F, + 0.1116612359F, 0.1119693793F, 0.1122779055F, 0.1125868142F, + 0.1128961052F, 0.1132057781F, 0.1135158328F, 0.1138262690F, + 0.1141370863F, 0.1144482847F, 0.1147598638F, 0.1150718233F, + 0.1153841631F, 0.1156968828F, 0.1160099822F, 0.1163234610F, + 0.1166373190F, 0.1169515559F, 0.1172661714F, 0.1175811654F, + 0.1178965374F, 0.1182122874F, 0.1185284149F, 0.1188449198F, + 0.1191618018F, 0.1194790606F, 0.1197966960F, 0.1201147076F, + 0.1204330953F, 0.1207518587F, 0.1210709976F, 0.1213905118F, + 0.1217104009F, 0.1220306647F, 0.1223513029F, 0.1226723153F, + 0.1229937016F, 0.1233154615F, 0.1236375948F, 0.1239601011F, + 0.1242829803F, 0.1246062319F, 0.1249298559F, 0.1252538518F, + 0.1255782195F, 0.1259029586F, 0.1262280689F, 0.1265535501F, + 0.1268794019F, 0.1272056241F, 0.1275322163F, 0.1278591784F, + 0.1281865099F, 0.1285142108F, 0.1288422805F, 0.1291707190F, + 0.1294995259F, 0.1298287009F, 0.1301582437F, 0.1304881542F, + 0.1308184319F, 0.1311490766F, 0.1314800881F, 0.1318114660F, + 0.1321432100F, 0.1324753200F, 0.1328077955F, 0.1331406364F, + 0.1334738422F, 0.1338074129F, 0.1341413479F, 0.1344756472F, + 0.1348103103F, 0.1351453370F, 0.1354807270F, 0.1358164801F, + 0.1361525959F, 0.1364890741F, 0.1368259145F, 0.1371631167F, + 0.1375006805F, 0.1378386056F, 0.1381768917F, 0.1385155384F, + 0.1388545456F, 0.1391939129F, 0.1395336400F, 0.1398737266F, + 0.1402141724F, 0.1405549772F, 0.1408961406F, 0.1412376623F, + 0.1415795421F, 0.1419217797F, 0.1422643746F, 0.1426073268F, + 0.1429506358F, 0.1432943013F, 0.1436383231F, 0.1439827008F, + 0.1443274342F, 0.1446725229F, 0.1450179667F, 0.1453637652F, + 0.1457099181F, 0.1460564252F, 0.1464032861F, 0.1467505006F, + 0.1470980682F, 0.1474459888F, 0.1477942620F, 0.1481428875F, + 0.1484918651F, 0.1488411942F, 0.1491908748F, 0.1495409065F, + 0.1498912889F, 0.1502420218F, 0.1505931048F, 0.1509445376F, + 0.1512963200F, 0.1516484516F, 0.1520009321F, 0.1523537612F, + 0.1527069385F, 0.1530604638F, 0.1534143368F, 0.1537685571F, + 0.1541231244F, 0.1544780384F, 0.1548332987F, 0.1551889052F, + 0.1555448574F, 0.1559011550F, 0.1562577978F, 0.1566147853F, + 0.1569721173F, 0.1573297935F, 0.1576878135F, 0.1580461771F, + 0.1584048838F, 0.1587639334F, 0.1591233255F, 0.1594830599F, + 0.1598431361F, 0.1602035540F, 0.1605643131F, 0.1609254131F, + 0.1612868537F, 0.1616486346F, 0.1620107555F, 0.1623732160F, + 0.1627360158F, 0.1630991545F, 0.1634626319F, 0.1638264476F, + 0.1641906013F, 0.1645550926F, 0.1649199212F, 0.1652850869F, + 0.1656505892F, 0.1660164278F, 0.1663826024F, 0.1667491127F, + 0.1671159583F, 0.1674831388F, 0.1678506541F, 0.1682185036F, + 0.1685866872F, 0.1689552044F, 0.1693240549F, 0.1696932384F, + 0.1700627545F, 0.1704326029F, 0.1708027833F, 0.1711732952F, + 0.1715441385F, 0.1719153127F, 0.1722868175F, 0.1726586526F, + 0.1730308176F, 0.1734033121F, 0.1737761359F, 0.1741492886F, + 0.1745227698F, 0.1748965792F, 0.1752707164F, 0.1756451812F, + 0.1760199731F, 0.1763950918F, 0.1767705370F, 0.1771463083F, + 0.1775224054F, 0.1778988279F, 0.1782755754F, 0.1786526477F, + 0.1790300444F, 0.1794077651F, 0.1797858094F, 0.1801641771F, + 0.1805428677F, 0.1809218810F, 0.1813012165F, 0.1816808739F, + 0.1820608528F, 0.1824411530F, 0.1828217739F, 0.1832027154F, + 0.1835839770F, 0.1839655584F, 0.1843474592F, 0.1847296790F, + 0.1851122175F, 0.1854950744F, 0.1858782492F, 0.1862617417F, + 0.1866455514F, 0.1870296780F, 0.1874141211F, 0.1877988804F, + 0.1881839555F, 0.1885693461F, 0.1889550517F, 0.1893410721F, + 0.1897274068F, 0.1901140555F, 0.1905010178F, 0.1908882933F, + 0.1912758818F, 0.1916637828F, 0.1920519959F, 0.1924405208F, + 0.1928293571F, 0.1932185044F, 0.1936079625F, 0.1939977308F, + 0.1943878091F, 0.1947781969F, 0.1951688939F, 0.1955598998F, + 0.1959512141F, 0.1963428364F, 0.1967347665F, 0.1971270038F, + 0.1975195482F, 0.1979123990F, 0.1983055561F, 0.1986990190F, + 0.1990927873F, 0.1994868607F, 0.1998812388F, 0.2002759212F, + 0.2006709075F, 0.2010661974F, 0.2014617904F, 0.2018576862F, + 0.2022538844F, 0.2026503847F, 0.2030471865F, 0.2034442897F, + 0.2038416937F, 0.2042393982F, 0.2046374028F, 0.2050357071F, + 0.2054343107F, 0.2058332133F, 0.2062324145F, 0.2066319138F, + 0.2070317110F, 0.2074318055F, 0.2078321970F, 0.2082328852F, + 0.2086338696F, 0.2090351498F, 0.2094367255F, 0.2098385962F, + 0.2102407617F, 0.2106432213F, 0.2110459749F, 0.2114490220F, + 0.2118523621F, 0.2122559950F, 0.2126599202F, 0.2130641373F, + 0.2134686459F, 0.2138734456F, 0.2142785361F, 0.2146839168F, + 0.2150895875F, 0.2154955478F, 0.2159017972F, 0.2163083353F, + 0.2167151617F, 0.2171222761F, 0.2175296780F, 0.2179373670F, + 0.2183453428F, 0.2187536049F, 0.2191621529F, 0.2195709864F, + 0.2199801051F, 0.2203895085F, 0.2207991961F, 0.2212091677F, + 0.2216194228F, 0.2220299610F, 0.2224407818F, 0.2228518850F, + 0.2232632699F, 0.2236749364F, 0.2240868839F, 0.2244991121F, + 0.2249116204F, 0.2253244086F, 0.2257374763F, 0.2261508229F, + 0.2265644481F, 0.2269783514F, 0.2273925326F, 0.2278069911F, + 0.2282217265F, 0.2286367384F, 0.2290520265F, 0.2294675902F, + 0.2298834292F, 0.2302995431F, 0.2307159314F, 0.2311325937F, + 0.2315495297F, 0.2319667388F, 0.2323842207F, 0.2328019749F, + 0.2332200011F, 0.2336382988F, 0.2340568675F, 0.2344757070F, + 0.2348948166F, 0.2353141961F, 0.2357338450F, 0.2361537629F, + 0.2365739493F, 0.2369944038F, 0.2374151261F, 0.2378361156F, + 0.2382573720F, 0.2386788948F, 0.2391006836F, 0.2395227380F, + 0.2399450575F, 0.2403676417F, 0.2407904902F, 0.2412136026F, + 0.2416369783F, 0.2420606171F, 0.2424845185F, 0.2429086820F, + 0.2433331072F, 0.2437577936F, 0.2441827409F, 0.2446079486F, + 0.2450334163F, 0.2454591435F, 0.2458851298F, 0.2463113747F, + 0.2467378779F, 0.2471646389F, 0.2475916573F, 0.2480189325F, + 0.2484464643F, 0.2488742521F, 0.2493022955F, 0.2497305940F, + 0.2501591473F, 0.2505879549F, 0.2510170163F, 0.2514463311F, + 0.2518758989F, 0.2523057193F, 0.2527357916F, 0.2531661157F, + 0.2535966909F, 0.2540275169F, 0.2544585931F, 0.2548899193F, + 0.2553214948F, 0.2557533193F, 0.2561853924F, 0.2566177135F, + 0.2570502822F, 0.2574830981F, 0.2579161608F, 0.2583494697F, + 0.2587830245F, 0.2592168246F, 0.2596508697F, 0.2600851593F, + 0.2605196929F, 0.2609544701F, 0.2613894904F, 0.2618247534F, + 0.2622602586F, 0.2626960055F, 0.2631319938F, 0.2635682230F, + 0.2640046925F, 0.2644414021F, 0.2648783511F, 0.2653155391F, + 0.2657529657F, 0.2661906305F, 0.2666285329F, 0.2670666725F, + 0.2675050489F, 0.2679436616F, 0.2683825101F, 0.2688215940F, + 0.2692609127F, 0.2697004660F, 0.2701402532F, 0.2705802739F, + 0.2710205278F, 0.2714610142F, 0.2719017327F, 0.2723426830F, + 0.2727838644F, 0.2732252766F, 0.2736669191F, 0.2741087914F, + 0.2745508930F, 0.2749932235F, 0.2754357824F, 0.2758785693F, + 0.2763215837F, 0.2767648251F, 0.2772082930F, 0.2776519870F, + 0.2780959066F, 0.2785400513F, 0.2789844207F, 0.2794290143F, + 0.2798738316F, 0.2803188722F, 0.2807641355F, 0.2812096211F, + 0.2816553286F, 0.2821012574F, 0.2825474071F, 0.2829937773F, + 0.2834403673F, 0.2838871768F, 0.2843342053F, 0.2847814523F, + 0.2852289174F, 0.2856765999F, 0.2861244996F, 0.2865726159F, + 0.2870209482F, 0.2874694962F, 0.2879182594F, 0.2883672372F, + 0.2888164293F, 0.2892658350F, 0.2897154540F, 0.2901652858F, + 0.2906153298F, 0.2910655856F, 0.2915160527F, 0.2919667306F, + 0.2924176189F, 0.2928687171F, 0.2933200246F, 0.2937715409F, + 0.2942232657F, 0.2946751984F, 0.2951273386F, 0.2955796856F, + 0.2960322391F, 0.2964849986F, 0.2969379636F, 0.2973911335F, + 0.2978445080F, 0.2982980864F, 0.2987518684F, 0.2992058534F, + 0.2996600409F, 0.3001144305F, 0.3005690217F, 0.3010238139F, + 0.3014788067F, 0.3019339995F, 0.3023893920F, 0.3028449835F, + 0.3033007736F, 0.3037567618F, 0.3042129477F, 0.3046693306F, + 0.3051259102F, 0.3055826859F, 0.3060396572F, 0.3064968236F, + 0.3069541847F, 0.3074117399F, 0.3078694887F, 0.3083274307F, + 0.3087855653F, 0.3092438920F, 0.3097024104F, 0.3101611199F, + 0.3106200200F, 0.3110791103F, 0.3115383902F, 0.3119978592F, + 0.3124575169F, 0.3129173627F, 0.3133773961F, 0.3138376166F, + 0.3142980238F, 0.3147586170F, 0.3152193959F, 0.3156803598F, + 0.3161415084F, 0.3166028410F, 0.3170643573F, 0.3175260566F, + 0.3179879384F, 0.3184500023F, 0.3189122478F, 0.3193746743F, + 0.3198372814F, 0.3203000685F, 0.3207630351F, 0.3212261807F, + 0.3216895048F, 0.3221530069F, 0.3226166865F, 0.3230805430F, + 0.3235445760F, 0.3240087849F, 0.3244731693F, 0.3249377285F, + 0.3254024622F, 0.3258673698F, 0.3263324507F, 0.3267977045F, + 0.3272631306F, 0.3277287286F, 0.3281944978F, 0.3286604379F, + 0.3291265482F, 0.3295928284F, 0.3300592777F, 0.3305258958F, + 0.3309926821F, 0.3314596361F, 0.3319267573F, 0.3323940451F, + 0.3328614990F, 0.3333291186F, 0.3337969033F, 0.3342648525F, + 0.3347329658F, 0.3352012427F, 0.3356696825F, 0.3361382849F, + 0.3366070492F, 0.3370759749F, 0.3375450616F, 0.3380143087F, + 0.3384837156F, 0.3389532819F, 0.3394230071F, 0.3398928905F, + 0.3403629317F, 0.3408331302F, 0.3413034854F, 0.3417739967F, + 0.3422446638F, 0.3427154860F, 0.3431864628F, 0.3436575938F, + 0.3441288782F, 0.3446003158F, 0.3450719058F, 0.3455436478F, + 0.3460155412F, 0.3464875856F, 0.3469597804F, 0.3474321250F, + 0.3479046189F, 0.3483772617F, 0.3488500527F, 0.3493229914F, + 0.3497960774F, 0.3502693100F, 0.3507426887F, 0.3512162131F, + 0.3516898825F, 0.3521636965F, 0.3526376545F, 0.3531117559F, + 0.3535860003F, 0.3540603870F, 0.3545349157F, 0.3550095856F, + 0.3554843964F, 0.3559593474F, 0.3564344381F, 0.3569096680F, + 0.3573850366F, 0.3578605432F, 0.3583361875F, 0.3588119687F, + 0.3592878865F, 0.3597639402F, 0.3602401293F, 0.3607164533F, + 0.3611929117F, 0.3616695038F, 0.3621462292F, 0.3626230873F, + 0.3631000776F, 0.3635771995F, 0.3640544525F, 0.3645318360F, + 0.3650093496F, 0.3654869926F, 0.3659647645F, 0.3664426648F, + 0.3669206930F, 0.3673988484F, 0.3678771306F, 0.3683555390F, + 0.3688340731F, 0.3693127322F, 0.3697915160F, 0.3702704237F, + 0.3707494549F, 0.3712286091F, 0.3717078857F, 0.3721872840F, + 0.3726668037F, 0.3731464441F, 0.3736262047F, 0.3741060850F, + 0.3745860843F, 0.3750662023F, 0.3755464382F, 0.3760267915F, + 0.3765072618F, 0.3769878484F, 0.3774685509F, 0.3779493686F, + 0.3784303010F, 0.3789113475F, 0.3793925076F, 0.3798737809F, + 0.3803551666F, 0.3808366642F, 0.3813182733F, 0.3817999932F, + 0.3822818234F, 0.3827637633F, 0.3832458124F, 0.3837279702F, + 0.3842102360F, 0.3846926093F, 0.3851750897F, 0.3856576764F, + 0.3861403690F, 0.3866231670F, 0.3871060696F, 0.3875890765F, + 0.3880721870F, 0.3885554007F, 0.3890387168F, 0.3895221349F, + 0.3900056544F, 0.3904892748F, 0.3909729955F, 0.3914568160F, + 0.3919407356F, 0.3924247539F, 0.3929088702F, 0.3933930841F, + 0.3938773949F, 0.3943618021F, 0.3948463052F, 0.3953309035F, + 0.3958155966F, 0.3963003838F, 0.3967852646F, 0.3972702385F, + 0.3977553048F, 0.3982404631F, 0.3987257127F, 0.3992110531F, + 0.3996964838F, 0.4001820041F, 0.4006676136F, 0.4011533116F, + 0.4016390976F, 0.4021249710F, 0.4026109313F, 0.4030969779F, + 0.4035831102F, 0.4040693277F, 0.4045556299F, 0.4050420160F, + 0.4055284857F, 0.4060150383F, 0.4065016732F, 0.4069883899F, + 0.4074751879F, 0.4079620665F, 0.4084490252F, 0.4089360635F, + 0.4094231807F, 0.4099103763F, 0.4103976498F, 0.4108850005F, + 0.4113724280F, 0.4118599315F, 0.4123475107F, 0.4128351648F, + 0.4133228934F, 0.4138106959F, 0.4142985716F, 0.4147865201F, + 0.4152745408F, 0.4157626330F, 0.4162507963F, 0.4167390301F, + 0.4172273337F, 0.4177157067F, 0.4182041484F, 0.4186926583F, + 0.4191812359F, 0.4196698805F, 0.4201585915F, 0.4206473685F, + 0.4211362108F, 0.4216251179F, 0.4221140892F, 0.4226031241F, + 0.4230922221F, 0.4235813826F, 0.4240706050F, 0.4245598887F, + 0.4250492332F, 0.4255386379F, 0.4260281022F, 0.4265176256F, + 0.4270072075F, 0.4274968473F, 0.4279865445F, 0.4284762984F, + 0.4289661086F, 0.4294559743F, 0.4299458951F, 0.4304358704F, + 0.4309258996F, 0.4314159822F, 0.4319061175F, 0.4323963050F, + 0.4328865441F, 0.4333768342F, 0.4338671749F, 0.4343575654F, + 0.4348480052F, 0.4353384938F, 0.4358290306F, 0.4363196149F, + 0.4368102463F, 0.4373009241F, 0.4377916478F, 0.4382824168F, + 0.4387732305F, 0.4392640884F, 0.4397549899F, 0.4402459343F, + 0.4407369212F, 0.4412279499F, 0.4417190198F, 0.4422101305F, + 0.4427012813F, 0.4431924717F, 0.4436837010F, 0.4441749686F, + 0.4446662742F, 0.4451576169F, 0.4456489963F, 0.4461404118F, + 0.4466318628F, 0.4471233487F, 0.4476148690F, 0.4481064230F, + 0.4485980103F, 0.4490896302F, 0.4495812821F, 0.4500729654F, + 0.4505646797F, 0.4510564243F, 0.4515481986F, 0.4520400021F, + 0.4525318341F, 0.4530236942F, 0.4535155816F, 0.4540074959F, + 0.4544994365F, 0.4549914028F, 0.4554833941F, 0.4559754100F, + 0.4564674499F, 0.4569595131F, 0.4574515991F, 0.4579437074F, + 0.4584358372F, 0.4589279881F, 0.4594201595F, 0.4599123508F, + 0.4604045615F, 0.4608967908F, 0.4613890383F, 0.4618813034F, + 0.4623735855F, 0.4628658841F, 0.4633581984F, 0.4638505281F, + 0.4643428724F, 0.4648352308F, 0.4653276028F, 0.4658199877F, + 0.4663123849F, 0.4668047940F, 0.4672972143F, 0.4677896451F, + 0.4682820861F, 0.4687745365F, 0.4692669958F, 0.4697594634F, + 0.4702519387F, 0.4707444211F, 0.4712369102F, 0.4717294052F, + 0.4722219056F, 0.4727144109F, 0.4732069204F, 0.4736994336F, + 0.4741919498F, 0.4746844686F, 0.4751769893F, 0.4756695113F, + 0.4761620341F, 0.4766545571F, 0.4771470797F, 0.4776396013F, + 0.4781321213F, 0.4786246392F, 0.4791171544F, 0.4796096663F, + 0.4801021744F, 0.4805946779F, 0.4810871765F, 0.4815796694F, + 0.4820721561F, 0.4825646360F, 0.4830571086F, 0.4835495732F, + 0.4840420293F, 0.4845344763F, 0.4850269136F, 0.4855193407F, + 0.4860117569F, 0.4865041617F, 0.4869965545F, 0.4874889347F, + 0.4879813018F, 0.4884736551F, 0.4889659941F, 0.4894583182F, + 0.4899506268F, 0.4904429193F, 0.4909351952F, 0.4914274538F, + 0.4919196947F, 0.4924119172F, 0.4929041207F, 0.4933963046F, + 0.4938884685F, 0.4943806116F, 0.4948727335F, 0.4953648335F, + 0.4958569110F, 0.4963489656F, 0.4968409965F, 0.4973330032F, + 0.4978249852F, 0.4983169419F, 0.4988088726F, 0.4993007768F, + 0.4997926539F, 0.5002845034F, 0.5007763247F, 0.5012681171F, + 0.5017598801F, 0.5022516132F, 0.5027433157F, 0.5032349871F, + 0.5037266268F, 0.5042182341F, 0.5047098086F, 0.5052013497F, + 0.5056928567F, 0.5061843292F, 0.5066757664F, 0.5071671679F, + 0.5076585330F, 0.5081498613F, 0.5086411520F, 0.5091324047F, + 0.5096236187F, 0.5101147934F, 0.5106059284F, 0.5110970230F, + 0.5115880766F, 0.5120790887F, 0.5125700587F, 0.5130609860F, + 0.5135518700F, 0.5140427102F, 0.5145335059F, 0.5150242566F, + 0.5155149618F, 0.5160056208F, 0.5164962331F, 0.5169867980F, + 0.5174773151F, 0.5179677837F, 0.5184582033F, 0.5189485733F, + 0.5194388931F, 0.5199291621F, 0.5204193798F, 0.5209095455F, + 0.5213996588F, 0.5218897190F, 0.5223797256F, 0.5228696779F, + 0.5233595755F, 0.5238494177F, 0.5243392039F, 0.5248289337F, + 0.5253186063F, 0.5258082213F, 0.5262977781F, 0.5267872760F, + 0.5272767146F, 0.5277660932F, 0.5282554112F, 0.5287446682F, + 0.5292338635F, 0.5297229965F, 0.5302120667F, 0.5307010736F, + 0.5311900164F, 0.5316788947F, 0.5321677079F, 0.5326564554F, + 0.5331451366F, 0.5336337511F, 0.5341222981F, 0.5346107771F, + 0.5350991876F, 0.5355875290F, 0.5360758007F, 0.5365640021F, + 0.5370521327F, 0.5375401920F, 0.5380281792F, 0.5385160939F, + 0.5390039355F, 0.5394917034F, 0.5399793971F, 0.5404670159F, + 0.5409545594F, 0.5414420269F, 0.5419294179F, 0.5424167318F, + 0.5429039680F, 0.5433911261F, 0.5438782053F, 0.5443652051F, + 0.5448521250F, 0.5453389644F, 0.5458257228F, 0.5463123995F, + 0.5467989940F, 0.5472855057F, 0.5477719341F, 0.5482582786F, + 0.5487445387F, 0.5492307137F, 0.5497168031F, 0.5502028063F, + 0.5506887228F, 0.5511745520F, 0.5516602934F, 0.5521459463F, + 0.5526315103F, 0.5531169847F, 0.5536023690F, 0.5540876626F, + 0.5545728649F, 0.5550579755F, 0.5555429937F, 0.5560279189F, + 0.5565127507F, 0.5569974884F, 0.5574821315F, 0.5579666794F, + 0.5584511316F, 0.5589354875F, 0.5594197465F, 0.5599039080F, + 0.5603879716F, 0.5608719367F, 0.5613558026F, 0.5618395689F, + 0.5623232350F, 0.5628068002F, 0.5632902642F, 0.5637736262F, + 0.5642568858F, 0.5647400423F, 0.5652230953F, 0.5657060442F, + 0.5661888883F, 0.5666716272F, 0.5671542603F, 0.5676367870F, + 0.5681192069F, 0.5686015192F, 0.5690837235F, 0.5695658192F, + 0.5700478058F, 0.5705296827F, 0.5710114494F, 0.5714931052F, + 0.5719746497F, 0.5724560822F, 0.5729374023F, 0.5734186094F, + 0.5738997029F, 0.5743806823F, 0.5748615470F, 0.5753422965F, + 0.5758229301F, 0.5763034475F, 0.5767838480F, 0.5772641310F, + 0.5777442960F, 0.5782243426F, 0.5787042700F, 0.5791840778F, + 0.5796637654F, 0.5801433322F, 0.5806227778F, 0.5811021016F, + 0.5815813029F, 0.5820603814F, 0.5825393363F, 0.5830181673F, + 0.5834968737F, 0.5839754549F, 0.5844539105F, 0.5849322399F, + 0.5854104425F, 0.5858885179F, 0.5863664653F, 0.5868442844F, + 0.5873219746F, 0.5877995353F, 0.5882769660F, 0.5887542661F, + 0.5892314351F, 0.5897084724F, 0.5901853776F, 0.5906621500F, + 0.5911387892F, 0.5916152945F, 0.5920916655F, 0.5925679016F, + 0.5930440022F, 0.5935199669F, 0.5939957950F, 0.5944714861F, + 0.5949470396F, 0.5954224550F, 0.5958977317F, 0.5963728692F, + 0.5968478669F, 0.5973227244F, 0.5977974411F, 0.5982720163F, + 0.5987464497F, 0.5992207407F, 0.5996948887F, 0.6001688932F, + 0.6006427537F, 0.6011164696F, 0.6015900405F, 0.6020634657F, + 0.6025367447F, 0.6030098770F, 0.6034828621F, 0.6039556995F, + 0.6044283885F, 0.6049009288F, 0.6053733196F, 0.6058455606F, + 0.6063176512F, 0.6067895909F, 0.6072613790F, 0.6077330152F, + 0.6082044989F, 0.6086758295F, 0.6091470065F, 0.6096180294F, + 0.6100888977F, 0.6105596108F, 0.6110301682F, 0.6115005694F, + 0.6119708139F, 0.6124409011F, 0.6129108305F, 0.6133806017F, + 0.6138502139F, 0.6143196669F, 0.6147889599F, 0.6152580926F, + 0.6157270643F, 0.6161958746F, 0.6166645230F, 0.6171330088F, + 0.6176013317F, 0.6180694910F, 0.6185374863F, 0.6190053171F, + 0.6194729827F, 0.6199404828F, 0.6204078167F, 0.6208749841F, + 0.6213419842F, 0.6218088168F, 0.6222754811F, 0.6227419768F, + 0.6232083032F, 0.6236744600F, 0.6241404465F, 0.6246062622F, + 0.6250719067F, 0.6255373795F, 0.6260026799F, 0.6264678076F, + 0.6269327619F, 0.6273975425F, 0.6278621487F, 0.6283265800F, + 0.6287908361F, 0.6292549163F, 0.6297188201F, 0.6301825471F, + 0.6306460966F, 0.6311094683F, 0.6315726617F, 0.6320356761F, + 0.6324985111F, 0.6329611662F, 0.6334236410F, 0.6338859348F, + 0.6343480472F, 0.6348099777F, 0.6352717257F, 0.6357332909F, + 0.6361946726F, 0.6366558704F, 0.6371168837F, 0.6375777122F, + 0.6380383552F, 0.6384988123F, 0.6389590830F, 0.6394191668F, + 0.6398790631F, 0.6403387716F, 0.6407982916F, 0.6412576228F, + 0.6417167645F, 0.6421757163F, 0.6426344778F, 0.6430930483F, + 0.6435514275F, 0.6440096149F, 0.6444676098F, 0.6449254119F, + 0.6453830207F, 0.6458404356F, 0.6462976562F, 0.6467546820F, + 0.6472115125F, 0.6476681472F, 0.6481245856F, 0.6485808273F, + 0.6490368717F, 0.6494927183F, 0.6499483667F, 0.6504038164F, + 0.6508590670F, 0.6513141178F, 0.6517689684F, 0.6522236185F, + 0.6526780673F, 0.6531323146F, 0.6535863598F, 0.6540402024F, + 0.6544938419F, 0.6549472779F, 0.6554005099F, 0.6558535373F, + 0.6563063598F, 0.6567589769F, 0.6572113880F, 0.6576635927F, + 0.6581155906F, 0.6585673810F, 0.6590189637F, 0.6594703380F, + 0.6599215035F, 0.6603724598F, 0.6608232064F, 0.6612737427F, + 0.6617240684F, 0.6621741829F, 0.6626240859F, 0.6630737767F, + 0.6635232550F, 0.6639725202F, 0.6644215720F, 0.6648704098F, + 0.6653190332F, 0.6657674417F, 0.6662156348F, 0.6666636121F, + 0.6671113731F, 0.6675589174F, 0.6680062445F, 0.6684533538F, + 0.6689002450F, 0.6693469177F, 0.6697933712F, 0.6702396052F, + 0.6706856193F, 0.6711314129F, 0.6715769855F, 0.6720223369F, + 0.6724674664F, 0.6729123736F, 0.6733570581F, 0.6738015194F, + 0.6742457570F, 0.6746897706F, 0.6751335596F, 0.6755771236F, + 0.6760204621F, 0.6764635747F, 0.6769064609F, 0.6773491204F, + 0.6777915525F, 0.6782337570F, 0.6786757332F, 0.6791174809F, + 0.6795589995F, 0.6800002886F, 0.6804413477F, 0.6808821765F, + 0.6813227743F, 0.6817631409F, 0.6822032758F, 0.6826431785F, + 0.6830828485F, 0.6835222855F, 0.6839614890F, 0.6844004585F, + 0.6848391936F, 0.6852776939F, 0.6857159589F, 0.6861539883F, + 0.6865917815F, 0.6870293381F, 0.6874666576F, 0.6879037398F, + 0.6883405840F, 0.6887771899F, 0.6892135571F, 0.6896496850F, + 0.6900855733F, 0.6905212216F, 0.6909566294F, 0.6913917963F, + 0.6918267218F, 0.6922614055F, 0.6926958471F, 0.6931300459F, + 0.6935640018F, 0.6939977141F, 0.6944311825F, 0.6948644066F, + 0.6952973859F, 0.6957301200F, 0.6961626085F, 0.6965948510F, + 0.6970268470F, 0.6974585961F, 0.6978900980F, 0.6983213521F, + 0.6987523580F, 0.6991831154F, 0.6996136238F, 0.7000438828F, + 0.7004738921F, 0.7009036510F, 0.7013331594F, 0.7017624166F, + 0.7021914224F, 0.7026201763F, 0.7030486779F, 0.7034769268F, + 0.7039049226F, 0.7043326648F, 0.7047601531F, 0.7051873870F, + 0.7056143662F, 0.7060410902F, 0.7064675586F, 0.7068937711F, + 0.7073197271F, 0.7077454264F, 0.7081708684F, 0.7085960529F, + 0.7090209793F, 0.7094456474F, 0.7098700566F, 0.7102942066F, + 0.7107180970F, 0.7111417274F, 0.7115650974F, 0.7119882066F, + 0.7124110545F, 0.7128336409F, 0.7132559653F, 0.7136780272F, + 0.7140998264F, 0.7145213624F, 0.7149426348F, 0.7153636433F, + 0.7157843874F, 0.7162048668F, 0.7166250810F, 0.7170450296F, + 0.7174647124F, 0.7178841289F, 0.7183032786F, 0.7187221613F, + 0.7191407765F, 0.7195591239F, 0.7199772030F, 0.7203950135F, + 0.7208125550F, 0.7212298271F, 0.7216468294F, 0.7220635616F, + 0.7224800233F, 0.7228962140F, 0.7233121335F, 0.7237277813F, + 0.7241431571F, 0.7245582604F, 0.7249730910F, 0.7253876484F, + 0.7258019322F, 0.7262159422F, 0.7266296778F, 0.7270431388F, + 0.7274563247F, 0.7278692353F, 0.7282818700F, 0.7286942287F, + 0.7291063108F, 0.7295181160F, 0.7299296440F, 0.7303408944F, + 0.7307518669F, 0.7311625609F, 0.7315729763F, 0.7319831126F, + 0.7323929695F, 0.7328025466F, 0.7332118435F, 0.7336208600F, + 0.7340295955F, 0.7344380499F, 0.7348462226F, 0.7352541134F, + 0.7356617220F, 0.7360690478F, 0.7364760907F, 0.7368828502F, + 0.7372893259F, 0.7376955176F, 0.7381014249F, 0.7385070475F, + 0.7389123849F, 0.7393174368F, 0.7397222029F, 0.7401266829F, + 0.7405308763F, 0.7409347829F, 0.7413384023F, 0.7417417341F, + 0.7421447780F, 0.7425475338F, 0.7429500009F, 0.7433521791F, + 0.7437540681F, 0.7441556674F, 0.7445569769F, 0.7449579960F, + 0.7453587245F, 0.7457591621F, 0.7461593084F, 0.7465591631F, + 0.7469587259F, 0.7473579963F, 0.7477569741F, 0.7481556590F, + 0.7485540506F, 0.7489521486F, 0.7493499526F, 0.7497474623F, + 0.7501446775F, 0.7505415977F, 0.7509382227F, 0.7513345521F, + 0.7517305856F, 0.7521263229F, 0.7525217636F, 0.7529169074F, + 0.7533117541F, 0.7537063032F, 0.7541005545F, 0.7544945076F, + 0.7548881623F, 0.7552815182F, 0.7556745749F, 0.7560673323F, + 0.7564597899F, 0.7568519474F, 0.7572438046F, 0.7576353611F, + 0.7580266166F, 0.7584175708F, 0.7588082235F, 0.7591985741F, + 0.7595886226F, 0.7599783685F, 0.7603678116F, 0.7607569515F, + 0.7611457879F, 0.7615343206F, 0.7619225493F, 0.7623104735F, + 0.7626980931F, 0.7630854078F, 0.7634724171F, 0.7638591209F, + 0.7642455188F, 0.7646316106F, 0.7650173959F, 0.7654028744F, + 0.7657880459F, 0.7661729100F, 0.7665574664F, 0.7669417150F, + 0.7673256553F, 0.7677092871F, 0.7680926100F, 0.7684756239F, + 0.7688583284F, 0.7692407232F, 0.7696228080F, 0.7700045826F, + 0.7703860467F, 0.7707671999F, 0.7711480420F, 0.7715285728F, + 0.7719087918F, 0.7722886989F, 0.7726682938F, 0.7730475762F, + 0.7734265458F, 0.7738052023F, 0.7741835454F, 0.7745615750F, + 0.7749392906F, 0.7753166921F, 0.7756937791F, 0.7760705514F, + 0.7764470087F, 0.7768231508F, 0.7771989773F, 0.7775744880F, + 0.7779496827F, 0.7783245610F, 0.7786991227F, 0.7790733676F, + 0.7794472953F, 0.7798209056F, 0.7801941982F, 0.7805671729F, + 0.7809398294F, 0.7813121675F, 0.7816841869F, 0.7820558873F, + 0.7824272684F, 0.7827983301F, 0.7831690720F, 0.7835394940F, + 0.7839095957F, 0.7842793768F, 0.7846488373F, 0.7850179767F, + 0.7853867948F, 0.7857552914F, 0.7861234663F, 0.7864913191F, + 0.7868588497F, 0.7872260578F, 0.7875929431F, 0.7879595055F, + 0.7883257445F, 0.7886916601F, 0.7890572520F, 0.7894225198F, + 0.7897874635F, 0.7901520827F, 0.7905163772F, 0.7908803468F, + 0.7912439912F, 0.7916073102F, 0.7919703035F, 0.7923329710F, + 0.7926953124F, 0.7930573274F, 0.7934190158F, 0.7937803774F, + 0.7941414120F, 0.7945021193F, 0.7948624991F, 0.7952225511F, + 0.7955822752F, 0.7959416711F, 0.7963007387F, 0.7966594775F, + 0.7970178875F, 0.7973759685F, 0.7977337201F, 0.7980911422F, + 0.7984482346F, 0.7988049970F, 0.7991614292F, 0.7995175310F, + 0.7998733022F, 0.8002287426F, 0.8005838519F, 0.8009386299F, + 0.8012930765F, 0.8016471914F, 0.8020009744F, 0.8023544253F, + 0.8027075438F, 0.8030603298F, 0.8034127831F, 0.8037649035F, + 0.8041166906F, 0.8044681445F, 0.8048192647F, 0.8051700512F, + 0.8055205038F, 0.8058706222F, 0.8062204062F, 0.8065698556F, + 0.8069189702F, 0.8072677499F, 0.8076161944F, 0.8079643036F, + 0.8083120772F, 0.8086595151F, 0.8090066170F, 0.8093533827F, + 0.8096998122F, 0.8100459051F, 0.8103916613F, 0.8107370806F, + 0.8110821628F, 0.8114269077F, 0.8117713151F, 0.8121153849F, + 0.8124591169F, 0.8128025108F, 0.8131455666F, 0.8134882839F, + 0.8138306627F, 0.8141727027F, 0.8145144038F, 0.8148557658F, + 0.8151967886F, 0.8155374718F, 0.8158778154F, 0.8162178192F, + 0.8165574830F, 0.8168968067F, 0.8172357900F, 0.8175744328F, + 0.8179127349F, 0.8182506962F, 0.8185883164F, 0.8189255955F, + 0.8192625332F, 0.8195991295F, 0.8199353840F, 0.8202712967F, + 0.8206068673F, 0.8209420958F, 0.8212769820F, 0.8216115256F, + 0.8219457266F, 0.8222795848F, 0.8226131000F, 0.8229462721F, + 0.8232791009F, 0.8236115863F, 0.8239437280F, 0.8242755260F, + 0.8246069801F, 0.8249380901F, 0.8252688559F, 0.8255992774F, + 0.8259293544F, 0.8262590867F, 0.8265884741F, 0.8269175167F, + 0.8272462141F, 0.8275745663F, 0.8279025732F, 0.8282302344F, + 0.8285575501F, 0.8288845199F, 0.8292111437F, 0.8295374215F, + 0.8298633530F, 0.8301889382F, 0.8305141768F, 0.8308390688F, + 0.8311636141F, 0.8314878124F, 0.8318116637F, 0.8321351678F, + 0.8324583246F, 0.8327811340F, 0.8331035957F, 0.8334257098F, + 0.8337474761F, 0.8340688944F, 0.8343899647F, 0.8347106867F, + 0.8350310605F, 0.8353510857F, 0.8356707624F, 0.8359900904F, + 0.8363090696F, 0.8366276999F, 0.8369459811F, 0.8372639131F, + 0.8375814958F, 0.8378987292F, 0.8382156130F, 0.8385321472F, + 0.8388483316F, 0.8391641662F, 0.8394796508F, 0.8397947853F, + 0.8401095697F, 0.8404240037F, 0.8407380873F, 0.8410518204F, + 0.8413652029F, 0.8416782347F, 0.8419909156F, 0.8423032456F, + 0.8426152245F, 0.8429268523F, 0.8432381289F, 0.8435490541F, + 0.8438596279F, 0.8441698502F, 0.8444797208F, 0.8447892396F, + 0.8450984067F, 0.8454072218F, 0.8457156849F, 0.8460237959F, + 0.8463315547F, 0.8466389612F, 0.8469460154F, 0.8472527170F, + 0.8475590661F, 0.8478650625F, 0.8481707063F, 0.8484759971F, + 0.8487809351F, 0.8490855201F, 0.8493897521F, 0.8496936308F, + 0.8499971564F, 0.8503003286F, 0.8506031474F, 0.8509056128F, + 0.8512077246F, 0.8515094828F, 0.8518108872F, 0.8521119379F, + 0.8524126348F, 0.8527129777F, 0.8530129666F, 0.8533126015F, + 0.8536118822F, 0.8539108087F, 0.8542093809F, 0.8545075988F, + 0.8548054623F, 0.8551029712F, 0.8554001257F, 0.8556969255F, + 0.8559933707F, 0.8562894611F, 0.8565851968F, 0.8568805775F, + 0.8571756034F, 0.8574702743F, 0.8577645902F, 0.8580585509F, + 0.8583521566F, 0.8586454070F, 0.8589383021F, 0.8592308420F, + 0.8595230265F, 0.8598148556F, 0.8601063292F, 0.8603974473F, + 0.8606882098F, 0.8609786167F, 0.8612686680F, 0.8615583636F, + 0.8618477034F, 0.8621366874F, 0.8624253156F, 0.8627135878F, + 0.8630015042F, 0.8632890646F, 0.8635762690F, 0.8638631173F, + 0.8641496096F, 0.8644357457F, 0.8647215257F, 0.8650069495F, + 0.8652920171F, 0.8655767283F, 0.8658610833F, 0.8661450820F, + 0.8664287243F, 0.8667120102F, 0.8669949397F, 0.8672775127F, + 0.8675597293F, 0.8678415894F, 0.8681230929F, 0.8684042398F, + 0.8686850302F, 0.8689654640F, 0.8692455412F, 0.8695252617F, + 0.8698046255F, 0.8700836327F, 0.8703622831F, 0.8706405768F, + 0.8709185138F, 0.8711960940F, 0.8714733174F, 0.8717501840F, + 0.8720266939F, 0.8723028469F, 0.8725786430F, 0.8728540824F, + 0.8731291648F, 0.8734038905F, 0.8736782592F, 0.8739522711F, + 0.8742259261F, 0.8744992242F, 0.8747721653F, 0.8750447496F, + 0.8753169770F, 0.8755888475F, 0.8758603611F, 0.8761315177F, + 0.8764023175F, 0.8766727603F, 0.8769428462F, 0.8772125752F, + 0.8774819474F, 0.8777509626F, 0.8780196209F, 0.8782879224F, + 0.8785558669F, 0.8788234546F, 0.8790906854F, 0.8793575594F, + 0.8796240765F, 0.8798902368F, 0.8801560403F, 0.8804214870F, + 0.8806865768F, 0.8809513099F, 0.8812156863F, 0.8814797059F, + 0.8817433687F, 0.8820066749F, 0.8822696243F, 0.8825322171F, + 0.8827944532F, 0.8830563327F, 0.8833178556F, 0.8835790219F, + 0.8838398316F, 0.8841002848F, 0.8843603815F, 0.8846201217F, + 0.8848795054F, 0.8851385327F, 0.8853972036F, 0.8856555182F, + 0.8859134764F, 0.8861710783F, 0.8864283239F, 0.8866852133F, + 0.8869417464F, 0.8871979234F, 0.8874537443F, 0.8877092090F, + 0.8879643177F, 0.8882190704F, 0.8884734671F, 0.8887275078F, + 0.8889811927F, 0.8892345216F, 0.8894874948F, 0.8897401122F, + 0.8899923738F, 0.8902442798F, 0.8904958301F, 0.8907470248F, + 0.8909978640F, 0.8912483477F, 0.8914984759F, 0.8917482487F, + 0.8919976662F, 0.8922467284F, 0.8924954353F, 0.8927437871F, + 0.8929917837F, 0.8932394252F, 0.8934867118F, 0.8937336433F, + 0.8939802199F, 0.8942264417F, 0.8944723087F, 0.8947178210F, + 0.8949629785F, 0.8952077815F, 0.8954522299F, 0.8956963239F, + 0.8959400634F, 0.8961834486F, 0.8964264795F, 0.8966691561F, + 0.8969114786F, 0.8971534470F, 0.8973950614F, 0.8976363219F, + 0.8978772284F, 0.8981177812F, 0.8983579802F, 0.8985978256F, + 0.8988373174F, 0.8990764556F, 0.8993152405F, 0.8995536720F, + 0.8997917502F, 0.9000294751F, 0.9002668470F, 0.9005038658F, + 0.9007405317F, 0.9009768446F, 0.9012128048F, 0.9014484123F, + 0.9016836671F, 0.9019185693F, 0.9021531191F, 0.9023873165F, + 0.9026211616F, 0.9028546546F, 0.9030877954F, 0.9033205841F, + 0.9035530210F, 0.9037851059F, 0.9040168392F, 0.9042482207F, + 0.9044792507F, 0.9047099293F, 0.9049402564F, 0.9051702323F, + 0.9053998569F, 0.9056291305F, 0.9058580531F, 0.9060866248F, + 0.9063148457F, 0.9065427159F, 0.9067702355F, 0.9069974046F, + 0.9072242233F, 0.9074506917F, 0.9076768100F, 0.9079025782F, + 0.9081279964F, 0.9083530647F, 0.9085777833F, 0.9088021523F, + 0.9090261717F, 0.9092498417F, 0.9094731623F, 0.9096961338F, + 0.9099187561F, 0.9101410295F, 0.9103629540F, 0.9105845297F, + 0.9108057568F, 0.9110266354F, 0.9112471656F, 0.9114673475F, + 0.9116871812F, 0.9119066668F, 0.9121258046F, 0.9123445945F, + 0.9125630367F, 0.9127811314F, 0.9129988786F, 0.9132162785F, + 0.9134333312F, 0.9136500368F, 0.9138663954F, 0.9140824073F, + 0.9142980724F, 0.9145133910F, 0.9147283632F, 0.9149429890F, + 0.9151572687F, 0.9153712023F, 0.9155847900F, 0.9157980319F, + 0.9160109282F, 0.9162234790F, 0.9164356844F, 0.9166475445F, + 0.9168590595F, 0.9170702296F, 0.9172810548F, 0.9174915354F, + 0.9177016714F, 0.9179114629F, 0.9181209102F, 0.9183300134F, + 0.9185387726F, 0.9187471879F, 0.9189552595F, 0.9191629876F, + 0.9193703723F, 0.9195774136F, 0.9197841119F, 0.9199904672F, + 0.9201964797F, 0.9204021495F, 0.9206074767F, 0.9208124616F, + 0.9210171043F, 0.9212214049F, 0.9214253636F, 0.9216289805F, + 0.9218322558F, 0.9220351896F, 0.9222377821F, 0.9224400335F, + 0.9226419439F, 0.9228435134F, 0.9230447423F, 0.9232456307F, + 0.9234461787F, 0.9236463865F, 0.9238462543F, 0.9240457822F, + 0.9242449704F, 0.9244438190F, 0.9246423282F, 0.9248404983F, + 0.9250383293F, 0.9252358214F, 0.9254329747F, 0.9256297896F, + 0.9258262660F, 0.9260224042F, 0.9262182044F, 0.9264136667F, + 0.9266087913F, 0.9268035783F, 0.9269980280F, 0.9271921405F, + 0.9273859160F, 0.9275793546F, 0.9277724566F, 0.9279652221F, + 0.9281576513F, 0.9283497443F, 0.9285415014F, 0.9287329227F, + 0.9289240084F, 0.9291147586F, 0.9293051737F, 0.9294952536F, + 0.9296849987F, 0.9298744091F, 0.9300634850F, 0.9302522266F, + 0.9304406340F, 0.9306287074F, 0.9308164471F, 0.9310038532F, + 0.9311909259F, 0.9313776654F, 0.9315640719F, 0.9317501455F, + 0.9319358865F, 0.9321212951F, 0.9323063713F, 0.9324911155F, + 0.9326755279F, 0.9328596085F, 0.9330433577F, 0.9332267756F, + 0.9334098623F, 0.9335926182F, 0.9337750434F, 0.9339571380F, + 0.9341389023F, 0.9343203366F, 0.9345014409F, 0.9346822155F, + 0.9348626606F, 0.9350427763F, 0.9352225630F, 0.9354020207F, + 0.9355811498F, 0.9357599503F, 0.9359384226F, 0.9361165667F, + 0.9362943830F, 0.9364718716F, 0.9366490327F, 0.9368258666F, + 0.9370023733F, 0.9371785533F, 0.9373544066F, 0.9375299335F, + 0.9377051341F, 0.9378800087F, 0.9380545576F, 0.9382287809F, + 0.9384026787F, 0.9385762515F, 0.9387494993F, 0.9389224223F, + 0.9390950209F, 0.9392672951F, 0.9394392453F, 0.9396108716F, + 0.9397821743F, 0.9399531536F, 0.9401238096F, 0.9402941427F, + 0.9404641530F, 0.9406338407F, 0.9408032061F, 0.9409722495F, + 0.9411409709F, 0.9413093707F, 0.9414774491F, 0.9416452062F, + 0.9418126424F, 0.9419797579F, 0.9421465528F, 0.9423130274F, + 0.9424791819F, 0.9426450166F, 0.9428105317F, 0.9429757274F, + 0.9431406039F, 0.9433051616F, 0.9434694005F, 0.9436333209F, + 0.9437969232F, 0.9439602074F, 0.9441231739F, 0.9442858229F, + 0.9444481545F, 0.9446101691F, 0.9447718669F, 0.9449332481F, + 0.9450943129F, 0.9452550617F, 0.9454154945F, 0.9455756118F, + 0.9457354136F, 0.9458949003F, 0.9460540721F, 0.9462129292F, + 0.9463714719F, 0.9465297003F, 0.9466876149F, 0.9468452157F, + 0.9470025031F, 0.9471594772F, 0.9473161384F, 0.9474724869F, + 0.9476285229F, 0.9477842466F, 0.9479396584F, 0.9480947585F, + 0.9482495470F, 0.9484040243F, 0.9485581906F, 0.9487120462F, + 0.9488655913F, 0.9490188262F, 0.9491717511F, 0.9493243662F, + 0.9494766718F, 0.9496286683F, 0.9497803557F, 0.9499317345F, + 0.9500828047F, 0.9502335668F, 0.9503840209F, 0.9505341673F, + 0.9506840062F, 0.9508335380F, 0.9509827629F, 0.9511316810F, + 0.9512802928F, 0.9514285984F, 0.9515765982F, 0.9517242923F, + 0.9518716810F, 0.9520187646F, 0.9521655434F, 0.9523120176F, + 0.9524581875F, 0.9526040534F, 0.9527496154F, 0.9528948739F, + 0.9530398292F, 0.9531844814F, 0.9533288310F, 0.9534728780F, + 0.9536166229F, 0.9537600659F, 0.9539032071F, 0.9540460470F, + 0.9541885858F, 0.9543308237F, 0.9544727611F, 0.9546143981F, + 0.9547557351F, 0.9548967723F, 0.9550375100F, 0.9551779485F, + 0.9553180881F, 0.9554579290F, 0.9555974714F, 0.9557367158F, + 0.9558756623F, 0.9560143112F, 0.9561526628F, 0.9562907174F, + 0.9564284752F, 0.9565659366F, 0.9567031017F, 0.9568399710F, + 0.9569765446F, 0.9571128229F, 0.9572488061F, 0.9573844944F, + 0.9575198883F, 0.9576549879F, 0.9577897936F, 0.9579243056F, + 0.9580585242F, 0.9581924497F, 0.9583260824F, 0.9584594226F, + 0.9585924705F, 0.9587252264F, 0.9588576906F, 0.9589898634F, + 0.9591217452F, 0.9592533360F, 0.9593846364F, 0.9595156465F, + 0.9596463666F, 0.9597767971F, 0.9599069382F, 0.9600367901F, + 0.9601663533F, 0.9602956279F, 0.9604246143F, 0.9605533128F, + 0.9606817236F, 0.9608098471F, 0.9609376835F, 0.9610652332F, + 0.9611924963F, 0.9613194733F, 0.9614461644F, 0.9615725699F, + 0.9616986901F, 0.9618245253F, 0.9619500757F, 0.9620753418F, + 0.9622003238F, 0.9623250219F, 0.9624494365F, 0.9625735679F, + 0.9626974163F, 0.9628209821F, 0.9629442656F, 0.9630672671F, + 0.9631899868F, 0.9633124251F, 0.9634345822F, 0.9635564585F, + 0.9636780543F, 0.9637993699F, 0.9639204056F, 0.9640411616F, + 0.9641616383F, 0.9642818359F, 0.9644017549F, 0.9645213955F, + 0.9646407579F, 0.9647598426F, 0.9648786497F, 0.9649971797F, + 0.9651154328F, 0.9652334092F, 0.9653511095F, 0.9654685337F, + 0.9655856823F, 0.9657025556F, 0.9658191538F, 0.9659354773F, + 0.9660515263F, 0.9661673013F, 0.9662828024F, 0.9663980300F, + 0.9665129845F, 0.9666276660F, 0.9667420750F, 0.9668562118F, + 0.9669700766F, 0.9670836698F, 0.9671969917F, 0.9673100425F, + 0.9674228227F, 0.9675353325F, 0.9676475722F, 0.9677595422F, + 0.9678712428F, 0.9679826742F, 0.9680938368F, 0.9682047309F, + 0.9683153569F, 0.9684257150F, 0.9685358056F, 0.9686456289F, + 0.9687551853F, 0.9688644752F, 0.9689734987F, 0.9690822564F, + 0.9691907483F, 0.9692989750F, 0.9694069367F, 0.9695146337F, + 0.9696220663F, 0.9697292349F, 0.9698361398F, 0.9699427813F, + 0.9700491597F, 0.9701552754F, 0.9702611286F, 0.9703667197F, + 0.9704720490F, 0.9705771169F, 0.9706819236F, 0.9707864695F, + 0.9708907549F, 0.9709947802F, 0.9710985456F, 0.9712020514F, + 0.9713052981F, 0.9714082859F, 0.9715110151F, 0.9716134862F, + 0.9717156993F, 0.9718176549F, 0.9719193532F, 0.9720207946F, + 0.9721219794F, 0.9722229080F, 0.9723235806F, 0.9724239976F, + 0.9725241593F, 0.9726240661F, 0.9727237183F, 0.9728231161F, + 0.9729222601F, 0.9730211503F, 0.9731197873F, 0.9732181713F, + 0.9733163027F, 0.9734141817F, 0.9735118088F, 0.9736091842F, + 0.9737063083F, 0.9738031814F, 0.9738998039F, 0.9739961760F, + 0.9740922981F, 0.9741881706F, 0.9742837938F, 0.9743791680F, + 0.9744742935F, 0.9745691707F, 0.9746637999F, 0.9747581814F, + 0.9748523157F, 0.9749462029F, 0.9750398435F, 0.9751332378F, + 0.9752263861F, 0.9753192887F, 0.9754119461F, 0.9755043585F, + 0.9755965262F, 0.9756884496F, 0.9757801291F, 0.9758715650F, + 0.9759627575F, 0.9760537071F, 0.9761444141F, 0.9762348789F, + 0.9763251016F, 0.9764150828F, 0.9765048228F, 0.9765943218F, + 0.9766835802F, 0.9767725984F, 0.9768613767F, 0.9769499154F, + 0.9770382149F, 0.9771262755F, 0.9772140976F, 0.9773016815F, + 0.9773890275F, 0.9774761360F, 0.9775630073F, 0.9776496418F, + 0.9777360398F, 0.9778222016F, 0.9779081277F, 0.9779938182F, + 0.9780792736F, 0.9781644943F, 0.9782494805F, 0.9783342326F, + 0.9784187509F, 0.9785030359F, 0.9785870877F, 0.9786709069F, + 0.9787544936F, 0.9788378484F, 0.9789209714F, 0.9790038631F, + 0.9790865238F, 0.9791689538F, 0.9792511535F, 0.9793331232F, + 0.9794148633F, 0.9794963742F, 0.9795776561F, 0.9796587094F, + 0.9797395345F, 0.9798201316F, 0.9799005013F, 0.9799806437F, + 0.9800605593F, 0.9801402483F, 0.9802197112F, 0.9802989483F, + 0.9803779600F, 0.9804567465F, 0.9805353082F, 0.9806136455F, + 0.9806917587F, 0.9807696482F, 0.9808473143F, 0.9809247574F, + 0.9810019778F, 0.9810789759F, 0.9811557519F, 0.9812323064F, + 0.9813086395F, 0.9813847517F, 0.9814606433F, 0.9815363147F, + 0.9816117662F, 0.9816869981F, 0.9817620108F, 0.9818368047F, + 0.9819113801F, 0.9819857374F, 0.9820598769F, 0.9821337989F, + 0.9822075038F, 0.9822809920F, 0.9823542638F, 0.9824273195F, + 0.9825001596F, 0.9825727843F, 0.9826451940F, 0.9827173891F, + 0.9827893700F, 0.9828611368F, 0.9829326901F, 0.9830040302F, + 0.9830751574F, 0.9831460720F, 0.9832167745F, 0.9832872652F, + 0.9833575444F, 0.9834276124F, 0.9834974697F, 0.9835671166F, + 0.9836365535F, 0.9837057806F, 0.9837747983F, 0.9838436071F, + 0.9839122072F, 0.9839805990F, 0.9840487829F, 0.9841167591F, + 0.9841845282F, 0.9842520903F, 0.9843194459F, 0.9843865953F, + 0.9844535389F, 0.9845202771F, 0.9845868101F, 0.9846531383F, + 0.9847192622F, 0.9847851820F, 0.9848508980F, 0.9849164108F, + 0.9849817205F, 0.9850468276F, 0.9851117324F, 0.9851764352F, + 0.9852409365F, 0.9853052366F, 0.9853693358F, 0.9854332344F, + 0.9854969330F, 0.9855604317F, 0.9856237309F, 0.9856868310F, + 0.9857497325F, 0.9858124355F, 0.9858749404F, 0.9859372477F, + 0.9859993577F, 0.9860612707F, 0.9861229871F, 0.9861845072F, + 0.9862458315F, 0.9863069601F, 0.9863678936F, 0.9864286322F, + 0.9864891764F, 0.9865495264F, 0.9866096826F, 0.9866696454F, + 0.9867294152F, 0.9867889922F, 0.9868483769F, 0.9869075695F, + 0.9869665706F, 0.9870253803F, 0.9870839991F, 0.9871424273F, + 0.9872006653F, 0.9872587135F, 0.9873165721F, 0.9873742415F, + 0.9874317222F, 0.9874890144F, 0.9875461185F, 0.9876030348F, + 0.9876597638F, 0.9877163057F, 0.9877726610F, 0.9878288300F, + 0.9878848130F, 0.9879406104F, 0.9879962225F, 0.9880516497F, + 0.9881068924F, 0.9881619509F, 0.9882168256F, 0.9882715168F, + 0.9883260249F, 0.9883803502F, 0.9884344931F, 0.9884884539F, + 0.9885422331F, 0.9885958309F, 0.9886492477F, 0.9887024838F, + 0.9887555397F, 0.9888084157F, 0.9888611120F, 0.9889136292F, + 0.9889659675F, 0.9890181273F, 0.9890701089F, 0.9891219128F, + 0.9891735392F, 0.9892249885F, 0.9892762610F, 0.9893273572F, + 0.9893782774F, 0.9894290219F, 0.9894795911F, 0.9895299853F, + 0.9895802049F, 0.9896302502F, 0.9896801217F, 0.9897298196F, + 0.9897793443F, 0.9898286961F, 0.9898778755F, 0.9899268828F, + 0.9899757183F, 0.9900243823F, 0.9900728753F, 0.9901211976F, + 0.9901693495F, 0.9902173314F, 0.9902651436F, 0.9903127865F, + 0.9903602605F, 0.9904075659F, 0.9904547031F, 0.9905016723F, + 0.9905484740F, 0.9905951086F, 0.9906415763F, 0.9906878775F, + 0.9907340126F, 0.9907799819F, 0.9908257858F, 0.9908714247F, + 0.9909168988F, 0.9909622086F, 0.9910073543F, 0.9910523364F, + 0.9910971552F, 0.9911418110F, 0.9911863042F, 0.9912306351F, + 0.9912748042F, 0.9913188117F, 0.9913626580F, 0.9914063435F, + 0.9914498684F, 0.9914932333F, 0.9915364383F, 0.9915794839F, + 0.9916223703F, 0.9916650981F, 0.9917076674F, 0.9917500787F, + 0.9917923323F, 0.9918344286F, 0.9918763679F, 0.9919181505F, + 0.9919597769F, 0.9920012473F, 0.9920425621F, 0.9920837217F, + 0.9921247263F, 0.9921655765F, 0.9922062724F, 0.9922468145F, + 0.9922872030F, 0.9923274385F, 0.9923675211F, 0.9924074513F, + 0.9924472294F, 0.9924868557F, 0.9925263306F, 0.9925656544F, + 0.9926048275F, 0.9926438503F, 0.9926827230F, 0.9927214461F, + 0.9927600199F, 0.9927984446F, 0.9928367208F, 0.9928748486F, + 0.9929128285F, 0.9929506608F, 0.9929883459F, 0.9930258841F, + 0.9930632757F, 0.9931005211F, 0.9931376207F, 0.9931745747F, + 0.9932113836F, 0.9932480476F, 0.9932845671F, 0.9933209425F, + 0.9933571742F, 0.9933932623F, 0.9934292074F, 0.9934650097F, + 0.9935006696F, 0.9935361874F, 0.9935715635F, 0.9936067982F, + 0.9936418919F, 0.9936768448F, 0.9937116574F, 0.9937463300F, + 0.9937808629F, 0.9938152565F, 0.9938495111F, 0.9938836271F, + 0.9939176047F, 0.9939514444F, 0.9939851465F, 0.9940187112F, + 0.9940521391F, 0.9940854303F, 0.9941185853F, 0.9941516044F, + 0.9941844879F, 0.9942172361F, 0.9942498495F, 0.9942823283F, + 0.9943146729F, 0.9943468836F, 0.9943789608F, 0.9944109047F, + 0.9944427158F, 0.9944743944F, 0.9945059408F, 0.9945373553F, + 0.9945686384F, 0.9945997902F, 0.9946308112F, 0.9946617017F, + 0.9946924621F, 0.9947230926F, 0.9947535937F, 0.9947839656F, + 0.9948142086F, 0.9948443232F, 0.9948743097F, 0.9949041683F, + 0.9949338995F, 0.9949635035F, 0.9949929807F, 0.9950223315F, + 0.9950515561F, 0.9950806549F, 0.9951096282F, 0.9951384764F, + 0.9951671998F, 0.9951957987F, 0.9952242735F, 0.9952526245F, + 0.9952808520F, 0.9953089564F, 0.9953369380F, 0.9953647971F, + 0.9953925340F, 0.9954201491F, 0.9954476428F, 0.9954750153F, + 0.9955022670F, 0.9955293981F, 0.9955564092F, 0.9955833003F, + 0.9956100720F, 0.9956367245F, 0.9956632582F, 0.9956896733F, + 0.9957159703F, 0.9957421494F, 0.9957682110F, 0.9957941553F, + 0.9958199828F, 0.9958456937F, 0.9958712884F, 0.9958967672F, + 0.9959221305F, 0.9959473784F, 0.9959725115F, 0.9959975300F, + 0.9960224342F, 0.9960472244F, 0.9960719011F, 0.9960964644F, + 0.9961209148F, 0.9961452525F, 0.9961694779F, 0.9961935913F, + 0.9962175930F, 0.9962414834F, 0.9962652627F, 0.9962889313F, + 0.9963124895F, 0.9963359377F, 0.9963592761F, 0.9963825051F, + 0.9964056250F, 0.9964286361F, 0.9964515387F, 0.9964743332F, + 0.9964970198F, 0.9965195990F, 0.9965420709F, 0.9965644360F, + 0.9965866946F, 0.9966088469F, 0.9966308932F, 0.9966528340F, + 0.9966746695F, 0.9966964001F, 0.9967180260F, 0.9967395475F, + 0.9967609651F, 0.9967822789F, 0.9968034894F, 0.9968245968F, + 0.9968456014F, 0.9968665036F, 0.9968873037F, 0.9969080019F, + 0.9969285987F, 0.9969490942F, 0.9969694889F, 0.9969897830F, + 0.9970099769F, 0.9970300708F, 0.9970500651F, 0.9970699601F, + 0.9970897561F, 0.9971094533F, 0.9971290522F, 0.9971485531F, + 0.9971679561F, 0.9971872617F, 0.9972064702F, 0.9972255818F, + 0.9972445968F, 0.9972635157F, 0.9972823386F, 0.9973010659F, + 0.9973196980F, 0.9973382350F, 0.9973566773F, 0.9973750253F, + 0.9973932791F, 0.9974114392F, 0.9974295059F, 0.9974474793F, + 0.9974653599F, 0.9974831480F, 0.9975008438F, 0.9975184476F, + 0.9975359598F, 0.9975533806F, 0.9975707104F, 0.9975879495F, + 0.9976050981F, 0.9976221566F, 0.9976391252F, 0.9976560043F, + 0.9976727941F, 0.9976894950F, 0.9977061073F, 0.9977226312F, + 0.9977390671F, 0.9977554152F, 0.9977716759F, 0.9977878495F, + 0.9978039361F, 0.9978199363F, 0.9978358501F, 0.9978516780F, + 0.9978674202F, 0.9978830771F, 0.9978986488F, 0.9979141358F, + 0.9979295383F, 0.9979448566F, 0.9979600909F, 0.9979752417F, + 0.9979903091F, 0.9980052936F, 0.9980201952F, 0.9980350145F, + 0.9980497515F, 0.9980644067F, 0.9980789804F, 0.9980934727F, + 0.9981078841F, 0.9981222147F, 0.9981364649F, 0.9981506350F, + 0.9981647253F, 0.9981787360F, 0.9981926674F, 0.9982065199F, + 0.9982202936F, 0.9982339890F, 0.9982476062F, 0.9982611456F, + 0.9982746074F, 0.9982879920F, 0.9983012996F, 0.9983145304F, + 0.9983276849F, 0.9983407632F, 0.9983537657F, 0.9983666926F, + 0.9983795442F, 0.9983923208F, 0.9984050226F, 0.9984176501F, + 0.9984302033F, 0.9984426827F, 0.9984550884F, 0.9984674208F, + 0.9984796802F, 0.9984918667F, 0.9985039808F, 0.9985160227F, + 0.9985279926F, 0.9985398909F, 0.9985517177F, 0.9985634734F, + 0.9985751583F, 0.9985867727F, 0.9985983167F, 0.9986097907F, + 0.9986211949F, 0.9986325297F, 0.9986437953F, 0.9986549919F, + 0.9986661199F, 0.9986771795F, 0.9986881710F, 0.9986990946F, + 0.9987099507F, 0.9987207394F, 0.9987314611F, 0.9987421161F, + 0.9987527045F, 0.9987632267F, 0.9987736829F, 0.9987840734F, + 0.9987943985F, 0.9988046584F, 0.9988148534F, 0.9988249838F, + 0.9988350498F, 0.9988450516F, 0.9988549897F, 0.9988648641F, + 0.9988746753F, 0.9988844233F, 0.9988941086F, 0.9989037313F, + 0.9989132918F, 0.9989227902F, 0.9989322269F, 0.9989416021F, + 0.9989509160F, 0.9989601690F, 0.9989693613F, 0.9989784931F, + 0.9989875647F, 0.9989965763F, 0.9990055283F, 0.9990144208F, + 0.9990232541F, 0.9990320286F, 0.9990407443F, 0.9990494016F, + 0.9990580008F, 0.9990665421F, 0.9990750257F, 0.9990834519F, + 0.9990918209F, 0.9991001331F, 0.9991083886F, 0.9991165877F, + 0.9991247307F, 0.9991328177F, 0.9991408491F, 0.9991488251F, + 0.9991567460F, 0.9991646119F, 0.9991724232F, 0.9991801801F, + 0.9991878828F, 0.9991955316F, 0.9992031267F, 0.9992106684F, + 0.9992181569F, 0.9992255925F, 0.9992329753F, 0.9992403057F, + 0.9992475839F, 0.9992548101F, 0.9992619846F, 0.9992691076F, + 0.9992761793F, 0.9992832001F, 0.9992901701F, 0.9992970895F, + 0.9993039587F, 0.9993107777F, 0.9993175470F, 0.9993242667F, + 0.9993309371F, 0.9993375583F, 0.9993441307F, 0.9993506545F, + 0.9993571298F, 0.9993635570F, 0.9993699362F, 0.9993762678F, + 0.9993825519F, 0.9993887887F, 0.9993949785F, 0.9994011216F, + 0.9994072181F, 0.9994132683F, 0.9994192725F, 0.9994252307F, + 0.9994311434F, 0.9994370107F, 0.9994428327F, 0.9994486099F, + 0.9994543423F, 0.9994600303F, 0.9994656739F, 0.9994712736F, + 0.9994768294F, 0.9994823417F, 0.9994878105F, 0.9994932363F, + 0.9994986191F, 0.9995039592F, 0.9995092568F, 0.9995145122F, + 0.9995197256F, 0.9995248971F, 0.9995300270F, 0.9995351156F, + 0.9995401630F, 0.9995451695F, 0.9995501352F, 0.9995550604F, + 0.9995599454F, 0.9995647903F, 0.9995695953F, 0.9995743607F, + 0.9995790866F, 0.9995837734F, 0.9995884211F, 0.9995930300F, + 0.9995976004F, 0.9996021324F, 0.9996066263F, 0.9996110822F, + 0.9996155004F, 0.9996198810F, 0.9996242244F, 0.9996285306F, + 0.9996327999F, 0.9996370326F, 0.9996412287F, 0.9996453886F, + 0.9996495125F, 0.9996536004F, 0.9996576527F, 0.9996616696F, + 0.9996656512F, 0.9996695977F, 0.9996735094F, 0.9996773865F, + 0.9996812291F, 0.9996850374F, 0.9996888118F, 0.9996925523F, + 0.9996962591F, 0.9996999325F, 0.9997035727F, 0.9997071798F, + 0.9997107541F, 0.9997142957F, 0.9997178049F, 0.9997212818F, + 0.9997247266F, 0.9997281396F, 0.9997315209F, 0.9997348708F, + 0.9997381893F, 0.9997414767F, 0.9997447333F, 0.9997479591F, + 0.9997511544F, 0.9997543194F, 0.9997574542F, 0.9997605591F, + 0.9997636342F, 0.9997666797F, 0.9997696958F, 0.9997726828F, + 0.9997756407F, 0.9997785698F, 0.9997814703F, 0.9997843423F, + 0.9997871860F, 0.9997900016F, 0.9997927894F, 0.9997955494F, + 0.9997982818F, 0.9998009869F, 0.9998036648F, 0.9998063157F, + 0.9998089398F, 0.9998115373F, 0.9998141082F, 0.9998166529F, + 0.9998191715F, 0.9998216642F, 0.9998241311F, 0.9998265724F, + 0.9998289884F, 0.9998313790F, 0.9998337447F, 0.9998360854F, + 0.9998384015F, 0.9998406930F, 0.9998429602F, 0.9998452031F, + 0.9998474221F, 0.9998496171F, 0.9998517885F, 0.9998539364F, + 0.9998560610F, 0.9998581624F, 0.9998602407F, 0.9998622962F, + 0.9998643291F, 0.9998663394F, 0.9998683274F, 0.9998702932F, + 0.9998722370F, 0.9998741589F, 0.9998760591F, 0.9998779378F, + 0.9998797952F, 0.9998816313F, 0.9998834464F, 0.9998852406F, + 0.9998870141F, 0.9998887670F, 0.9998904995F, 0.9998922117F, + 0.9998939039F, 0.9998955761F, 0.9998972285F, 0.9998988613F, + 0.9999004746F, 0.9999020686F, 0.9999036434F, 0.9999051992F, + 0.9999067362F, 0.9999082544F, 0.9999097541F, 0.9999112354F, + 0.9999126984F, 0.9999141433F, 0.9999155703F, 0.9999169794F, + 0.9999183709F, 0.9999197449F, 0.9999211014F, 0.9999224408F, + 0.9999237631F, 0.9999250684F, 0.9999263570F, 0.9999276289F, + 0.9999288843F, 0.9999301233F, 0.9999313461F, 0.9999325529F, + 0.9999337437F, 0.9999349187F, 0.9999360780F, 0.9999372218F, + 0.9999383503F, 0.9999394635F, 0.9999405616F, 0.9999416447F, + 0.9999427129F, 0.9999437665F, 0.9999448055F, 0.9999458301F, + 0.9999468404F, 0.9999478365F, 0.9999488185F, 0.9999497867F, + 0.9999507411F, 0.9999516819F, 0.9999526091F, 0.9999535230F, + 0.9999544236F, 0.9999553111F, 0.9999561856F, 0.9999570472F, + 0.9999578960F, 0.9999587323F, 0.9999595560F, 0.9999603674F, + 0.9999611666F, 0.9999619536F, 0.9999627286F, 0.9999634917F, + 0.9999642431F, 0.9999649828F, 0.9999657110F, 0.9999664278F, + 0.9999671334F, 0.9999678278F, 0.9999685111F, 0.9999691835F, + 0.9999698451F, 0.9999704960F, 0.9999711364F, 0.9999717662F, + 0.9999723858F, 0.9999729950F, 0.9999735942F, 0.9999741834F, + 0.9999747626F, 0.9999753321F, 0.9999758919F, 0.9999764421F, + 0.9999769828F, 0.9999775143F, 0.9999780364F, 0.9999785495F, + 0.9999790535F, 0.9999795485F, 0.9999800348F, 0.9999805124F, + 0.9999809813F, 0.9999814417F, 0.9999818938F, 0.9999823375F, + 0.9999827731F, 0.9999832005F, 0.9999836200F, 0.9999840316F, + 0.9999844353F, 0.9999848314F, 0.9999852199F, 0.9999856008F, + 0.9999859744F, 0.9999863407F, 0.9999866997F, 0.9999870516F, + 0.9999873965F, 0.9999877345F, 0.9999880656F, 0.9999883900F, + 0.9999887078F, 0.9999890190F, 0.9999893237F, 0.9999896220F, + 0.9999899140F, 0.9999901999F, 0.9999904796F, 0.9999907533F, + 0.9999910211F, 0.9999912830F, 0.9999915391F, 0.9999917896F, + 0.9999920345F, 0.9999922738F, 0.9999925077F, 0.9999927363F, + 0.9999929596F, 0.9999931777F, 0.9999933907F, 0.9999935987F, + 0.9999938018F, 0.9999940000F, 0.9999941934F, 0.9999943820F, + 0.9999945661F, 0.9999947456F, 0.9999949206F, 0.9999950912F, + 0.9999952575F, 0.9999954195F, 0.9999955773F, 0.9999957311F, + 0.9999958807F, 0.9999960265F, 0.9999961683F, 0.9999963063F, + 0.9999964405F, 0.9999965710F, 0.9999966979F, 0.9999968213F, + 0.9999969412F, 0.9999970576F, 0.9999971707F, 0.9999972805F, + 0.9999973871F, 0.9999974905F, 0.9999975909F, 0.9999976881F, + 0.9999977824F, 0.9999978738F, 0.9999979624F, 0.9999980481F, + 0.9999981311F, 0.9999982115F, 0.9999982892F, 0.9999983644F, + 0.9999984370F, 0.9999985072F, 0.9999985750F, 0.9999986405F, + 0.9999987037F, 0.9999987647F, 0.9999988235F, 0.9999988802F, + 0.9999989348F, 0.9999989873F, 0.9999990379F, 0.9999990866F, + 0.9999991334F, 0.9999991784F, 0.9999992217F, 0.9999992632F, + 0.9999993030F, 0.9999993411F, 0.9999993777F, 0.9999994128F, + 0.9999994463F, 0.9999994784F, 0.9999995091F, 0.9999995384F, + 0.9999995663F, 0.9999995930F, 0.9999996184F, 0.9999996426F, + 0.9999996657F, 0.9999996876F, 0.9999997084F, 0.9999997282F, + 0.9999997469F, 0.9999997647F, 0.9999997815F, 0.9999997973F, + 0.9999998123F, 0.9999998265F, 0.9999998398F, 0.9999998524F, + 0.9999998642F, 0.9999998753F, 0.9999998857F, 0.9999998954F, + 0.9999999045F, 0.9999999130F, 0.9999999209F, 0.9999999282F, + 0.9999999351F, 0.9999999414F, 0.9999999472F, 0.9999999526F, + 0.9999999576F, 0.9999999622F, 0.9999999664F, 0.9999999702F, + 0.9999999737F, 0.9999999769F, 0.9999999798F, 0.9999999824F, + 0.9999999847F, 0.9999999868F, 0.9999999887F, 0.9999999904F, + 0.9999999919F, 0.9999999932F, 0.9999999943F, 0.9999999953F, + 0.9999999961F, 0.9999999969F, 0.9999999975F, 0.9999999980F, + 0.9999999985F, 0.9999999988F, 0.9999999991F, 0.9999999993F, + 0.9999999995F, 0.9999999997F, 0.9999999998F, 0.9999999999F, + 0.9999999999F, 1.0000000000F, 1.0000000000F, 1.0000000000F, + 1.0000000000F, 1.0000000000F, 1.0000000000F, 1.0000000000F, +}; + +const float ff_vorbis_floor1_inverse_db_table[256]={ + 1.0649863e-07F, 1.1341951e-07F, 1.2079015e-07F, 1.2863978e-07F, + 1.3699951e-07F, 1.4590251e-07F, 1.5538408e-07F, 1.6548181e-07F, + 1.7623575e-07F, 1.8768855e-07F, 1.9988561e-07F, 2.128753e-07F, + 2.2670913e-07F, 2.4144197e-07F, 2.5713223e-07F, 2.7384213e-07F, + 2.9163793e-07F, 3.1059021e-07F, 3.3077411e-07F, 3.5226968e-07F, + 3.7516214e-07F, 3.9954229e-07F, 4.2550680e-07F, 4.5315863e-07F, + 4.8260743e-07F, 5.1396998e-07F, 5.4737065e-07F, 5.8294187e-07F, + 6.2082472e-07F, 6.6116941e-07F, 7.0413592e-07F, 7.4989464e-07F, + 7.9862701e-07F, 8.5052630e-07F, 9.0579828e-07F, 9.6466216e-07F, + 1.0273513e-06F, 1.0941144e-06F, 1.1652161e-06F, 1.2409384e-06F, + 1.3215816e-06F, 1.4074654e-06F, 1.4989305e-06F, 1.5963394e-06F, + 1.7000785e-06F, 1.8105592e-06F, 1.9282195e-06F, 2.0535261e-06F, + 2.1869758e-06F, 2.3290978e-06F, 2.4804557e-06F, 2.6416497e-06F, + 2.8133190e-06F, 2.9961443e-06F, 3.1908506e-06F, 3.3982101e-06F, + 3.6190449e-06F, 3.8542308e-06F, 4.1047004e-06F, 4.3714470e-06F, + 4.6555282e-06F, 4.9580707e-06F, 5.2802740e-06F, 5.6234160e-06F, + 5.9888572e-06F, 6.3780469e-06F, 6.7925283e-06F, 7.2339451e-06F, + 7.7040476e-06F, 8.2047000e-06F, 8.7378876e-06F, 9.3057248e-06F, + 9.9104632e-06F, 1.0554501e-05F, 1.1240392e-05F, 1.1970856e-05F, + 1.2748789e-05F, 1.3577278e-05F, 1.4459606e-05F, 1.5399272e-05F, + 1.6400004e-05F, 1.7465768e-05F, 1.8600792e-05F, 1.9809576e-05F, + 2.1096914e-05F, 2.2467911e-05F, 2.3928002e-05F, 2.5482978e-05F, + 2.7139006e-05F, 2.8902651e-05F, 3.0780908e-05F, 3.2781225e-05F, + 3.4911534e-05F, 3.7180282e-05F, 3.9596466e-05F, 4.2169667e-05F, + 4.4910090e-05F, 4.7828601e-05F, 5.0936773e-05F, 5.4246931e-05F, + 5.7772202e-05F, 6.1526565e-05F, 6.5524908e-05F, 6.9783085e-05F, + 7.4317983e-05F, 7.9147585e-05F, 8.4291040e-05F, 8.9768747e-05F, + 9.5602426e-05F, 0.00010181521F, 0.00010843174F, 0.00011547824F, + 0.00012298267F, 0.00013097477F, 0.00013948625F, 0.00014855085F, + 0.00015820453F, 0.00016848555F, 0.00017943469F, 0.00019109536F, + 0.00020351382F, 0.00021673929F, 0.00023082423F, 0.00024582449F, + 0.00026179955F, 0.00027881276F, 0.00029693158F, 0.00031622787F, + 0.00033677814F, 0.00035866388F, 0.00038197188F, 0.00040679456F, + 0.00043323036F, 0.00046138411F, 0.00049136745F, 0.00052329927F, + 0.00055730621F, 0.00059352311F, 0.00063209358F, 0.00067317058F, + 0.00071691700F, 0.00076350630F, 0.00081312324F, 0.00086596457F, + 0.00092223983F, 0.00098217216F, 0.0010459992F, 0.0011139742F, + 0.0011863665F, 0.0012634633F, 0.0013455702F, 0.0014330129F, + 0.0015261382F, 0.0016253153F, 0.0017309374F, 0.0018434235F, + 0.0019632195F, 0.0020908006F, 0.0022266726F, 0.0023713743F, + 0.0025254795F, 0.0026895994F, 0.0028643847F, 0.0030505286F, + 0.0032487691F, 0.0034598925F, 0.0036847358F, 0.0039241906F, + 0.0041792066F, 0.0044507950F, 0.0047400328F, 0.0050480668F, + 0.0053761186F, 0.0057254891F, 0.0060975636F, 0.0064938176F, + 0.0069158225F, 0.0073652516F, 0.0078438871F, 0.0083536271F, + 0.0088964928F, 0.009474637F, 0.010090352F, 0.010746080F, + 0.011444421F, 0.012188144F, 0.012980198F, 0.013823725F, + 0.014722068F, 0.015678791F, 0.016697687F, 0.017782797F, + 0.018938423F, 0.020169149F, 0.021479854F, 0.022875735F, + 0.024362330F, 0.025945531F, 0.027631618F, 0.029427276F, + 0.031339626F, 0.033376252F, 0.035545228F, 0.037855157F, + 0.040315199F, 0.042935108F, 0.045725273F, 0.048696758F, + 0.051861348F, 0.055231591F, 0.058820850F, 0.062643361F, + 0.066714279F, 0.071049749F, 0.075666962F, 0.080584227F, + 0.085821044F, 0.091398179F, 0.097337747F, 0.10366330F, + 0.11039993F, 0.11757434F, 0.12521498F, 0.13335215F, + 0.14201813F, 0.15124727F, 0.16107617F, 0.17154380F, + 0.18269168F, 0.19456402F, 0.20720788F, 0.22067342F, + 0.23501402F, 0.25028656F, 0.26655159F, 0.28387361F, + 0.30232132F, 0.32196786F, 0.34289114F, 0.36517414F, + 0.38890521F, 0.41417847F, 0.44109412F, 0.46975890F, + 0.50028648F, 0.53279791F, 0.56742212F, 0.60429640F, + 0.64356699F, 0.68538959F, 0.72993007F, 0.77736504F, + 0.82788260F, 0.88168307F, 0.9389798F, 1.F, +}; + +const float * ff_vorbis_vwin[8] = { vwin64, vwin128, vwin256, vwin512, vwin1024, vwin2048, vwin4096, vwin8192 }; + diff --git a/src/libffmpeg/libavcodec/vp5.c b/src/libffmpeg/libavcodec/vp5.c new file mode 100644 index 000000000..ac953c7aa --- /dev/null +++ b/src/libffmpeg/libavcodec/vp5.c @@ -0,0 +1,290 @@ +/** + * @file vp5.c + * VP5 compatible video decoder + * + * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <stdlib.h> +#include <string.h> + +#include "avcodec.h" +#include "dsputil.h" +#include "bitstream.h" +#include "mpegvideo.h" + +#include "vp56.h" +#include "vp56data.h" +#include "vp5data.h" + + +static int vp5_parse_header(vp56_context_t *s, uint8_t *buf, int buf_size, + int *golden_frame) +{ + vp56_range_coder_t *c = &s->c; + int rows, cols; + + vp56_init_range_decoder(&s->c, buf, buf_size); + s->frames[VP56_FRAME_CURRENT].key_frame = !vp56_rac_get(c); + vp56_rac_get(c); + vp56_init_dequant(s, vp56_rac_gets(c, 6)); + if (s->frames[VP56_FRAME_CURRENT].key_frame) + { + vp56_rac_gets(c, 8); + if(vp56_rac_gets(c, 5) > 5) + return 0; + vp56_rac_gets(c, 2); + if (vp56_rac_get(c)) { + av_log(s->avctx, AV_LOG_ERROR, "interlacing not supported\n"); + return 0; + } + rows = vp56_rac_gets(c, 8); /* number of stored macroblock rows */ + cols = vp56_rac_gets(c, 8); /* number of stored macroblock cols */ + vp56_rac_gets(c, 8); /* number of displayed macroblock rows */ + vp56_rac_gets(c, 8); /* number of displayed macroblock cols */ + vp56_rac_gets(c, 2); + if (16*cols != s->avctx->coded_width || + 16*rows != s->avctx->coded_height) { + avcodec_set_dimensions(s->avctx, 16*cols, 16*rows); + return 2; + } + } + return 1; +} + +/* Gives very similar result than the vp6 version except in a few cases */ +static int vp5_adjust(int v, int t) +{ + int s2, s1 = v >> 31; + v ^= s1; + v -= s1; + v *= v < 2*t; + v -= t; + s2 = v >> 31; + v ^= s2; + v -= s2; + v = t - v; + v += s1; + v ^= s1; + return v; +} + +static void vp5_parse_vector_adjustment(vp56_context_t *s, vp56_mv_t *vect) +{ + vp56_range_coder_t *c = &s->c; + int comp, di; + + for (comp=0; comp<2; comp++) { + int delta = 0; + if (vp56_rac_get_prob(c, s->vector_model_dct[comp])) { + int sign = vp56_rac_get_prob(c, s->vector_model_sig[comp]); + di = vp56_rac_get_prob(c, s->vector_model_pdi[comp][0]); + di |= vp56_rac_get_prob(c, s->vector_model_pdi[comp][1]) << 1; + delta = vp56_rac_get_tree(c, vp56_pva_tree, + s->vector_model_pdv[comp]); + delta = di | (delta << 2); + delta = (delta ^ -sign) + sign; + } + if (!comp) + vect->x = delta; + else + vect->y = delta; + } +} + +static void vp5_parse_vector_models(vp56_context_t *s) +{ + vp56_range_coder_t *c = &s->c; + int comp, node; + + for (comp=0; comp<2; comp++) { + if (vp56_rac_get_prob(c, vp5_vmc_pct[comp][0])) + s->vector_model_dct[comp] = vp56_rac_gets_nn(c, 7); + if (vp56_rac_get_prob(c, vp5_vmc_pct[comp][1])) + s->vector_model_sig[comp] = vp56_rac_gets_nn(c, 7); + if (vp56_rac_get_prob(c, vp5_vmc_pct[comp][2])) + s->vector_model_pdi[comp][0] = vp56_rac_gets_nn(c, 7); + if (vp56_rac_get_prob(c, vp5_vmc_pct[comp][3])) + s->vector_model_pdi[comp][1] = vp56_rac_gets_nn(c, 7); + } + + for (comp=0; comp<2; comp++) + for (node=0; node<7; node++) + if (vp56_rac_get_prob(c, vp5_vmc_pct[comp][4 + node])) + s->vector_model_pdv[comp][node] = vp56_rac_gets_nn(c, 7); +} + +static void vp5_parse_coeff_models(vp56_context_t *s) +{ + vp56_range_coder_t *c = &s->c; + uint8_t def_prob[11]; + int node, cg, ctx; + int ct; /* code type */ + int pt; /* plane type (0 for Y, 1 for U or V) */ + + memset(def_prob, 0x80, sizeof(def_prob)); + + for (pt=0; pt<2; pt++) + for (node=0; node<11; node++) + if (vp56_rac_get_prob(c, vp5_dccv_pct[pt][node])) { + def_prob[node] = vp56_rac_gets_nn(c, 7); + s->coeff_model_dccv[pt][node] = def_prob[node]; + } else if (s->frames[VP56_FRAME_CURRENT].key_frame) { + s->coeff_model_dccv[pt][node] = def_prob[node]; + } + + for (ct=0; ct<3; ct++) + for (pt=0; pt<2; pt++) + for (cg=0; cg<6; cg++) + for (node=0; node<11; node++) + if (vp56_rac_get_prob(c, vp5_ract_pct[ct][pt][cg][node])) { + def_prob[node] = vp56_rac_gets_nn(c, 7); + s->coeff_model_ract[pt][ct][cg][node] = def_prob[node]; + } else if (s->frames[VP56_FRAME_CURRENT].key_frame) { + s->coeff_model_ract[pt][ct][cg][node] = def_prob[node]; + } + + /* coeff_model_dcct is a linear combination of coeff_model_dccv */ + for (pt=0; pt<2; pt++) + for (ctx=0; ctx<36; ctx++) + for (node=0; node<5; node++) + s->coeff_model_dcct[pt][ctx][node] = clip(((s->coeff_model_dccv[pt][node] * vp5_dccv_lc[node][ctx][0] + 128) >> 8) + vp5_dccv_lc[node][ctx][1], 1, 254); + + /* coeff_model_acct is a linear combination of coeff_model_ract */ + for (ct=0; ct<3; ct++) + for (pt=0; pt<2; pt++) + for (cg=0; cg<3; cg++) + for (ctx=0; ctx<6; ctx++) + for (node=0; node<5; node++) + s->coeff_model_acct[pt][ct][cg][ctx][node] = clip(((s->coeff_model_ract[pt][ct][cg][node] * vp5_ract_lc[ct][cg][node][ctx][0] + 128) >> 8) + vp5_ract_lc[ct][cg][node][ctx][1], 1, 254); +} + +static void vp5_parse_coeff(vp56_context_t *s) +{ + vp56_range_coder_t *c = &s->c; + uint8_t *permute = s->scantable.permutated; + uint8_t *model, *model2; + int coeff, sign, coeff_idx; + int b, i, cg, idx, ctx, ctx_last; + int pt = 0; /* plane type (0 for Y, 1 for U or V) */ + + for (b=0; b<6; b++) { + int ct = 1; /* code type */ + + if (b > 3) pt = 1; + + ctx = 6*s->coeff_ctx[vp56_b6to4[b]][0] + + s->above_blocks[s->above_block_idx[b]].not_null_dc; + model = s->coeff_model_dccv[pt]; + model2 = s->coeff_model_dcct[pt][ctx]; + + for (coeff_idx=0; coeff_idx<64; ) { + if (vp56_rac_get_prob(c, model2[0])) { + if (vp56_rac_get_prob(c, model2[2])) { + if (vp56_rac_get_prob(c, model2[3])) { + s->coeff_ctx[vp56_b6to4[b]][coeff_idx] = 4; + idx = vp56_rac_get_tree(c, vp56_pc_tree, model); + sign = vp56_rac_get(c); + coeff = vp56_coeff_bias[idx]; + for (i=vp56_coeff_bit_length[idx]; i>=0; i--) + coeff += vp56_rac_get_prob(c, vp56_coeff_parse_table[idx][i]) << i; + } else { + if (vp56_rac_get_prob(c, model2[4])) { + coeff = 3 + vp56_rac_get_prob(c, model[5]); + s->coeff_ctx[vp56_b6to4[b]][coeff_idx] = 3; + } else { + coeff = 2; + s->coeff_ctx[vp56_b6to4[b]][coeff_idx] = 2; + } + sign = vp56_rac_get(c); + } + ct = 2; + } else { + ct = 1; + s->coeff_ctx[vp56_b6to4[b]][coeff_idx] = 1; + sign = vp56_rac_get(c); + coeff = 1; + } + coeff = (coeff ^ -sign) + sign; + if (coeff_idx) + coeff *= s->dequant_ac; + s->block_coeff[b][permute[coeff_idx]] = coeff; + } else { + if (ct && !vp56_rac_get_prob(c, model2[1])) + break; + ct = 0; + s->coeff_ctx[vp56_b6to4[b]][coeff_idx] = 0; + } + + cg = vp5_coeff_groups[++coeff_idx]; + ctx = s->coeff_ctx[vp56_b6to4[b]][coeff_idx]; + model = s->coeff_model_ract[pt][ct][cg]; + model2 = cg > 2 ? model : s->coeff_model_acct[pt][ct][cg][ctx]; + } + + ctx_last = FFMIN(s->coeff_ctx_last[vp56_b6to4[b]], 24); + s->coeff_ctx_last[vp56_b6to4[b]] = coeff_idx; + if (coeff_idx < ctx_last) + for (i=coeff_idx; i<=ctx_last; i++) + s->coeff_ctx[vp56_b6to4[b]][i] = 5; + s->above_blocks[s->above_block_idx[b]].not_null_dc = s->coeff_ctx[vp56_b6to4[b]][0]; + } +} + +static void vp5_default_models_init(vp56_context_t *s) +{ + int i; + + for (i=0; i<2; i++) { + s->vector_model_sig[i] = 0x80; + s->vector_model_dct[i] = 0x80; + s->vector_model_pdi[i][0] = 0x55; + s->vector_model_pdi[i][1] = 0x80; + } + memcpy(s->mb_types_stats, vp56_def_mb_types_stats, sizeof(s->mb_types_stats)); + memset(s->vector_model_pdv, 0x80, sizeof(s->vector_model_pdv)); +} + +static int vp5_decode_init(AVCodecContext *avctx) +{ + vp56_context_t *s = avctx->priv_data; + + vp56_init(s, avctx, 1); + s->vp56_coord_div = vp5_coord_div; + s->parse_vector_adjustment = vp5_parse_vector_adjustment; + s->adjust = vp5_adjust; + s->parse_coeff = vp5_parse_coeff; + s->default_models_init = vp5_default_models_init; + s->parse_vector_models = vp5_parse_vector_models; + s->parse_coeff_models = vp5_parse_coeff_models; + s->parse_header = vp5_parse_header; + + return 0; +} + +AVCodec vp5_decoder = { + "vp5", + CODEC_TYPE_VIDEO, + CODEC_ID_VP5, + sizeof(vp56_context_t), + vp5_decode_init, + NULL, + vp56_free, + vp56_decode_frame, +}; diff --git a/src/libffmpeg/libavcodec/vp56.c b/src/libffmpeg/libavcodec/vp56.c new file mode 100644 index 000000000..eb78d02e4 --- /dev/null +++ b/src/libffmpeg/libavcodec/vp56.c @@ -0,0 +1,665 @@ +/** + * @file vp56.c + * VP5 and VP6 compatible video decoder (common features) + * + * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "avcodec.h" + +#include "vp56.h" +#include "vp56data.h" + + +void vp56_init_dequant(vp56_context_t *s, int quantizer) +{ + s->quantizer = quantizer; + s->dequant_dc = vp56_dc_dequant[quantizer] << 2; + s->dequant_ac = vp56_ac_dequant[quantizer] << 2; +} + +static int vp56_get_vectors_predictors(vp56_context_t *s, int row, int col, + vp56_frame_t ref_frame) +{ + int nb_pred = 0; + vp56_mv_t vect[2] = {{0,0}, {0,0}}; + int pos, offset; + vp56_mv_t mvp; + + for (pos=0; pos<12; pos++) { + mvp.x = col + vp56_candidate_predictor_pos[pos][0]; + mvp.y = row + vp56_candidate_predictor_pos[pos][1]; + if (mvp.x < 0 || mvp.x >= s->mb_width || + mvp.y < 0 || mvp.y >= s->mb_height) + continue; + offset = mvp.x + s->mb_width*mvp.y; + + if (vp56_reference_frame[s->macroblocks[offset].type] != ref_frame) + continue; + if ((s->macroblocks[offset].mv.x == vect[0].x && + s->macroblocks[offset].mv.y == vect[0].y) || + (s->macroblocks[offset].mv.x == 0 && + s->macroblocks[offset].mv.y == 0)) + continue; + + vect[nb_pred++] = s->macroblocks[offset].mv; + if (nb_pred > 1) { + nb_pred = -1; + break; + } + s->vector_candidate_pos = pos; + } + + s->vector_candidate[0] = vect[0]; + s->vector_candidate[1] = vect[1]; + + return nb_pred+1; +} + +static void vp56_parse_mb_type_models(vp56_context_t *s) +{ + vp56_range_coder_t *c = &s->c; + int i, ctx, type; + + for (ctx=0; ctx<3; ctx++) { + if (vp56_rac_get_prob(c, 174)) { + int idx = vp56_rac_gets(c, 4); + memcpy(s->mb_types_stats[ctx],vp56_pre_def_mb_type_stats[idx][ctx], + sizeof(s->mb_types_stats[ctx])); + } + if (vp56_rac_get_prob(c, 254)) { + for (type=0; type<10; type++) { + for(i=0; i<2; i++) { + if (vp56_rac_get_prob(c, 205)) { + int delta, sign = vp56_rac_get(c); + + delta = vp56_rac_get_tree(c, vp56_pmbtm_tree, + vp56_mb_type_model_model); + if (!delta) + delta = 4 * vp56_rac_gets(c, 7); + s->mb_types_stats[ctx][type][i] += (delta ^ -sign) + sign; + } + } + } + } + } + + /* compute MB type probability tables based on previous MB type */ + for (ctx=0; ctx<3; ctx++) { + int p[10]; + + for (type=0; type<10; type++) + p[type] = 100 * s->mb_types_stats[ctx][type][1]; + + for (type=0; type<10; type++) { + int p02, p34, p0234, p17, p56, p89, p5689, p156789; + + /* conservative MB type probability */ + s->mb_type_model[ctx][type][0] = 255 - (255 * s->mb_types_stats[ctx][type][0]) / (1 + s->mb_types_stats[ctx][type][0] + s->mb_types_stats[ctx][type][1]); + + p[type] = 0; /* same MB type => weight is null */ + + /* binary tree parsing probabilities */ + p02 = p[0] + p[2]; + p34 = p[3] + p[4]; + p0234 = p02 + p34; + p17 = p[1] + p[7]; + p56 = p[5] + p[6]; + p89 = p[8] + p[9]; + p5689 = p56 + p89; + p156789 = p17 + p5689; + + s->mb_type_model[ctx][type][1] = 1 + 255 * p0234/(1+p0234+p156789); + s->mb_type_model[ctx][type][2] = 1 + 255 * p02 / (1+p0234); + s->mb_type_model[ctx][type][3] = 1 + 255 * p17 / (1+p156789); + s->mb_type_model[ctx][type][4] = 1 + 255 * p[0] / (1+p02); + s->mb_type_model[ctx][type][5] = 1 + 255 * p[3] / (1+p34); + s->mb_type_model[ctx][type][6] = 1 + 255 * p[1] / (1+p17); + s->mb_type_model[ctx][type][7] = 1 + 255 * p56 / (1+p5689); + s->mb_type_model[ctx][type][8] = 1 + 255 * p[5] / (1+p56); + s->mb_type_model[ctx][type][9] = 1 + 255 * p[8] / (1+p89); + + /* restore initial value */ + p[type] = 100 * s->mb_types_stats[ctx][type][1]; + } + } +} + +static vp56_mb_t vp56_parse_mb_type(vp56_context_t *s, + vp56_mb_t prev_type, int ctx) +{ + uint8_t *mb_type_model = s->mb_type_model[ctx][prev_type]; + vp56_range_coder_t *c = &s->c; + + if (vp56_rac_get_prob(c, mb_type_model[0])) + return prev_type; + else + return vp56_rac_get_tree(c, vp56_pmbt_tree, mb_type_model); +} + +static void vp56_decode_4mv(vp56_context_t *s, int row, int col) +{ + vp56_mv_t mv = {0,0}; + int type[4]; + int b; + + /* parse each block type */ + for (b=0; b<4; b++) { + type[b] = vp56_rac_gets(&s->c, 2); + if (type[b]) + type[b]++; /* only returns 0, 2, 3 or 4 (all INTER_PF) */ + } + + /* get vectors */ + for (b=0; b<4; b++) { + switch (type[b]) { + case VP56_MB_INTER_NOVEC_PF: + s->mv[b] = (vp56_mv_t) {0,0}; + break; + case VP56_MB_INTER_DELTA_PF: + s->parse_vector_adjustment(s, &s->mv[b]); + break; + case VP56_MB_INTER_V1_PF: + s->mv[b] = s->vector_candidate[0]; + break; + case VP56_MB_INTER_V2_PF: + s->mv[b] = s->vector_candidate[1]; + break; + } + mv.x += s->mv[b].x; + mv.y += s->mv[b].y; + } + + /* this is the one selected for the whole MB for prediction */ + s->macroblocks[row * s->mb_width + col].mv = s->mv[3]; + + /* chroma vectors are average luma vectors */ + if (s->avctx->codec->id == CODEC_ID_VP5) { + s->mv[4].x = s->mv[5].x = RSHIFT(mv.x,2); + s->mv[4].y = s->mv[5].y = RSHIFT(mv.y,2); + } else { + s->mv[4] = s->mv[5] = (vp56_mv_t) {mv.x/4, mv.y/4}; + } +} + +static vp56_mb_t vp56_decode_mv(vp56_context_t *s, int row, int col) +{ + vp56_mv_t *mv, vect = {0,0}; + int ctx, b; + + ctx = vp56_get_vectors_predictors(s, row, col, VP56_FRAME_PREVIOUS); + s->mb_type = vp56_parse_mb_type(s, s->mb_type, ctx); + s->macroblocks[row * s->mb_width + col].type = s->mb_type; + + switch (s->mb_type) { + case VP56_MB_INTER_V1_PF: + mv = &s->vector_candidate[0]; + break; + + case VP56_MB_INTER_V2_PF: + mv = &s->vector_candidate[1]; + break; + + case VP56_MB_INTER_V1_GF: + vp56_get_vectors_predictors(s, row, col, VP56_FRAME_GOLDEN); + mv = &s->vector_candidate[0]; + break; + + case VP56_MB_INTER_V2_GF: + vp56_get_vectors_predictors(s, row, col, VP56_FRAME_GOLDEN); + mv = &s->vector_candidate[1]; + break; + + case VP56_MB_INTER_DELTA_PF: + s->parse_vector_adjustment(s, &vect); + mv = &vect; + break; + + case VP56_MB_INTER_DELTA_GF: + vp56_get_vectors_predictors(s, row, col, VP56_FRAME_GOLDEN); + s->parse_vector_adjustment(s, &vect); + mv = &vect; + break; + + case VP56_MB_INTER_4V: + vp56_decode_4mv(s, row, col); + return s->mb_type; + + default: + mv = &vect; + break; + } + + s->macroblocks[row*s->mb_width + col].mv = *mv; + + /* same vector for all blocks */ + for (b=0; b<6; b++) + s->mv[b] = *mv; + + return s->mb_type; +} + +static void vp56_add_predictors_dc(vp56_context_t *s, vp56_frame_t ref_frame) +{ + int idx = s->scantable.permutated[0]; + int i; + + for (i=0; i<6; i++) { + vp56_ref_dc_t *ab = &s->above_blocks[s->above_block_idx[i]]; + vp56_ref_dc_t *lb = &s->left_block[vp56_b6to4[i]]; + int count = 0; + int dc = 0; + + if (ref_frame == lb->ref_frame) { + dc += lb->dc_coeff; + count++; + } + if (ref_frame == ab->ref_frame) { + dc += ab->dc_coeff; + count++; + } + if (s->avctx->codec->id == CODEC_ID_VP5) { + if (count < 2 && ref_frame == ab[-1].ref_frame) { + dc += ab[-1].dc_coeff; + count++; + } + if (count < 2 && ref_frame == ab[1].ref_frame) { + dc += ab[1].dc_coeff; + count++; + } + } + if (count == 0) + dc = s->prev_dc[vp56_b6to3[i]][ref_frame]; + else if (count == 2) + dc /= 2; + + s->block_coeff[i][idx] += dc; + s->prev_dc[vp56_b6to3[i]][ref_frame] = s->block_coeff[i][idx]; + ab->dc_coeff = s->block_coeff[i][idx]; + ab->ref_frame = ref_frame; + lb->dc_coeff = s->block_coeff[i][idx]; + lb->ref_frame = ref_frame; + s->block_coeff[i][idx] *= s->dequant_dc; + } +} + +static void vp56_edge_filter(vp56_context_t *s, uint8_t *yuv, + int pix_inc, int line_inc, int t) +{ + int pix2_inc = 2 * pix_inc; + int i, v; + + for (i=0; i<12; i++) { + v = (yuv[-pix2_inc] + 3*(yuv[0]-yuv[-pix_inc]) - yuv[pix_inc] + 4) >>3; + v = s->adjust(v, t); + yuv[-pix_inc] = clip_uint8(yuv[-pix_inc] + v); + yuv[0] = clip_uint8(yuv[0] - v); + yuv += line_inc; + } +} + +static void vp56_deblock_filter(vp56_context_t *s, uint8_t *yuv, + int stride, int dx, int dy) +{ + int t = vp56_filter_threshold[s->quantizer]; + if (dx) vp56_edge_filter(s, yuv + 10-dx , 1, stride, t); + if (dy) vp56_edge_filter(s, yuv + stride*(10-dy), stride, 1, t); +} + +static void vp56_mc(vp56_context_t *s, int b, uint8_t *src, + int stride, int x, int y) +{ + int plane = vp56_b6to3[b]; + uint8_t *dst= s->frames[VP56_FRAME_CURRENT].data[plane]+s->block_offset[b]; + uint8_t *src_block; + int src_offset; + int overlap_offset = 0; + int mask = s->vp56_coord_div[b] - 1; + int deblock_filtering = s->deblock_filtering; + int dx; + int dy; + + if (s->avctx->skip_loop_filter >= AVDISCARD_ALL || + (s->avctx->skip_loop_filter >= AVDISCARD_NONKEY + && !s->frames[VP56_FRAME_CURRENT].key_frame)) + deblock_filtering = 0; + + dx = s->mv[b].x / s->vp56_coord_div[b]; + dy = s->mv[b].y / s->vp56_coord_div[b]; + + if (b >= 4) { + x /= 2; + y /= 2; + } + x += dx - 2; + y += dy - 2; + + if (x<0 || x+12>=s->plane_width[plane] || + y<0 || y+12>=s->plane_height[plane]) { + ff_emulated_edge_mc(s->edge_emu_buffer, + src + s->block_offset[b] + (dy-2)*stride + (dx-2), + stride, 12, 12, x, y, + s->plane_width[plane], + s->plane_height[plane]); + src_block = s->edge_emu_buffer; + src_offset = 2 + 2*stride; + } else if (deblock_filtering) { + /* only need a 12x12 block, but there is no such dsp function, */ + /* so copy a 16x12 block */ + s->dsp.put_pixels_tab[0][0](s->edge_emu_buffer, + src + s->block_offset[b] + (dy-2)*stride + (dx-2), + stride, 12); + src_block = s->edge_emu_buffer; + src_offset = 2 + 2*stride; + } else { + src_block = src; + src_offset = s->block_offset[b] + dy*stride + dx; + } + + if (deblock_filtering) + vp56_deblock_filter(s, src_block, stride, dx&7, dy&7); + + if (s->mv[b].x & mask) + overlap_offset += (s->mv[b].x > 0) ? 1 : -1; + if (s->mv[b].y & mask) + overlap_offset += (s->mv[b].y > 0) ? stride : -stride; + + if (overlap_offset) { + if (s->filter) + s->filter(s, dst, src_block, src_offset, src_offset+overlap_offset, + stride, s->mv[b], mask, s->filter_selection, b<4); + else + s->dsp.put_no_rnd_pixels_l2[1](dst, src_block+src_offset, + src_block+src_offset+overlap_offset, + stride, 8); + } else { + s->dsp.put_pixels_tab[1][0](dst, src_block+src_offset, stride, 8); + } +} + +static void vp56_decode_mb(vp56_context_t *s, int row, int col) +{ + AVFrame *frame_current, *frame_ref; + vp56_mb_t mb_type; + vp56_frame_t ref_frame; + int b, plan, off; + + if (s->frames[VP56_FRAME_CURRENT].key_frame) + mb_type = VP56_MB_INTRA; + else + mb_type = vp56_decode_mv(s, row, col); + ref_frame = vp56_reference_frame[mb_type]; + + memset(s->block_coeff, 0, sizeof(s->block_coeff)); + + s->parse_coeff(s); + + vp56_add_predictors_dc(s, ref_frame); + + frame_current = &s->frames[VP56_FRAME_CURRENT]; + frame_ref = &s->frames[ref_frame]; + + switch (mb_type) { + case VP56_MB_INTRA: + for (b=0; b<6; b++) { + plan = vp56_b6to3[b]; + s->dsp.idct_put(frame_current->data[plan] + s->block_offset[b], + s->stride[plan], s->block_coeff[b]); + } + break; + + case VP56_MB_INTER_NOVEC_PF: + case VP56_MB_INTER_NOVEC_GF: + for (b=0; b<6; b++) { + plan = vp56_b6to3[b]; + off = s->block_offset[b]; + s->dsp.put_pixels_tab[1][0](frame_current->data[plan] + off, + frame_ref->data[plan] + off, + s->stride[plan], 8); + s->dsp.idct_add(frame_current->data[plan] + off, + s->stride[plan], s->block_coeff[b]); + } + break; + + case VP56_MB_INTER_DELTA_PF: + case VP56_MB_INTER_V1_PF: + case VP56_MB_INTER_V2_PF: + case VP56_MB_INTER_DELTA_GF: + case VP56_MB_INTER_4V: + case VP56_MB_INTER_V1_GF: + case VP56_MB_INTER_V2_GF: + for (b=0; b<6; b++) { + int x_off = b==1 || b==3 ? 8 : 0; + int y_off = b==2 || b==3 ? 8 : 0; + plan = vp56_b6to3[b]; + vp56_mc(s, b, frame_ref->data[plan], s->stride[plan], + 16*col+x_off, 16*row+y_off); + s->dsp.idct_add(frame_current->data[plan] + s->block_offset[b], + s->stride[plan], s->block_coeff[b]); + } + break; + } +} + +static int vp56_size_changed(AVCodecContext *avctx, vp56_context_t *s) +{ + int stride = s->frames[VP56_FRAME_CURRENT].linesize[0]; + int i; + + s->plane_width[0] = s->avctx->coded_width; + s->plane_width[1] = s->plane_width[2] = s->avctx->coded_width/2; + s->plane_height[0] = s->avctx->coded_height; + s->plane_height[1] = s->plane_height[2] = s->avctx->coded_height/2; + + for (i=0; i<3; i++) + s->stride[i] = s->flip * s->frames[VP56_FRAME_CURRENT].linesize[i]; + + s->mb_width = (s->avctx->coded_width+15) / 16; + s->mb_height = (s->avctx->coded_height+15) / 16; + + if (s->mb_width > 1000 || s->mb_height > 1000) { + av_log(avctx, AV_LOG_ERROR, "picture too big\n"); + return -1; + } + + s->above_blocks = av_realloc(s->above_blocks, + (4*s->mb_width+6) * sizeof(*s->above_blocks)); + s->macroblocks = av_realloc(s->macroblocks, + s->mb_width*s->mb_height*sizeof(*s->macroblocks)); + av_free(s->edge_emu_buffer_alloc); + s->edge_emu_buffer_alloc = av_malloc(16*stride); + s->edge_emu_buffer = s->edge_emu_buffer_alloc; + if (s->flip < 0) + s->edge_emu_buffer += 15 * stride; + + return 0; +} + +int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size, + uint8_t *buf, int buf_size) +{ + vp56_context_t *s = avctx->priv_data; + AVFrame *const p = &s->frames[VP56_FRAME_CURRENT]; + AVFrame *picture = data; + int mb_row, mb_col, mb_row_flip, mb_offset = 0; + int block, y, uv, stride_y, stride_uv; + int golden_frame = 0; + int res; + + res = s->parse_header(s, buf, buf_size, &golden_frame); + if (!res) + return -1; + + p->reference = 1; + if (avctx->get_buffer(avctx, p) < 0) { + av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); + return -1; + } + + if (res == 2) + if (vp56_size_changed(avctx, s)) { + avctx->release_buffer(avctx, p); + return -1; + } + + if (p->key_frame) { + p->pict_type = FF_I_TYPE; + s->default_models_init(s); + for (block=0; block<s->mb_height*s->mb_width; block++) + s->macroblocks[block].type = VP56_MB_INTRA; + } else { + p->pict_type = FF_P_TYPE; + vp56_parse_mb_type_models(s); + s->parse_vector_models(s); + s->mb_type = VP56_MB_INTER_NOVEC_PF; + } + + s->parse_coeff_models(s); + + memset(s->prev_dc, 0, sizeof(s->prev_dc)); + s->prev_dc[1][VP56_FRAME_CURRENT] = 128; + s->prev_dc[2][VP56_FRAME_CURRENT] = 128; + + for (block=0; block < 4*s->mb_width+6; block++) { + s->above_blocks[block].ref_frame = -1; + s->above_blocks[block].dc_coeff = 0; + s->above_blocks[block].not_null_dc = 0; + } + s->above_blocks[2*s->mb_width + 2].ref_frame = 0; + s->above_blocks[3*s->mb_width + 4].ref_frame = 0; + + stride_y = p->linesize[0]; + stride_uv = p->linesize[1]; + + if (s->flip < 0) + mb_offset = 7; + + /* main macroblocks loop */ + for (mb_row=0; mb_row<s->mb_height; mb_row++) { + if (s->flip < 0) + mb_row_flip = s->mb_height - mb_row - 1; + else + mb_row_flip = mb_row; + + for (block=0; block<4; block++) { + s->left_block[block].ref_frame = -1; + s->left_block[block].dc_coeff = 0; + s->left_block[block].not_null_dc = 0; + memset(s->coeff_ctx[block], 0, 64*sizeof(s->coeff_ctx[block][0])); + } + memset(s->coeff_ctx_last, 24, sizeof(s->coeff_ctx_last)); + + s->above_block_idx[0] = 1; + s->above_block_idx[1] = 2; + s->above_block_idx[2] = 1; + s->above_block_idx[3] = 2; + s->above_block_idx[4] = 2*s->mb_width + 2 + 1; + s->above_block_idx[5] = 3*s->mb_width + 4 + 1; + + s->block_offset[s->frbi] = (mb_row_flip*16 + mb_offset) * stride_y; + s->block_offset[s->srbi] = s->block_offset[s->frbi] + 8*stride_y; + s->block_offset[1] = s->block_offset[0] + 8; + s->block_offset[3] = s->block_offset[2] + 8; + s->block_offset[4] = (mb_row_flip*8 + mb_offset) * stride_uv; + s->block_offset[5] = s->block_offset[4]; + + for (mb_col=0; mb_col<s->mb_width; mb_col++) { + vp56_decode_mb(s, mb_row, mb_col); + + for (y=0; y<4; y++) { + s->above_block_idx[y] += 2; + s->block_offset[y] += 16; + } + + for (uv=4; uv<6; uv++) { + s->above_block_idx[uv] += 1; + s->block_offset[uv] += 8; + } + } + } + + if (s->frames[VP56_FRAME_PREVIOUS].data[0] + && (s->frames[VP56_FRAME_PREVIOUS].data[0] + != s->frames[VP56_FRAME_GOLDEN].data[0])) { + avctx->release_buffer(avctx, &s->frames[VP56_FRAME_PREVIOUS]); + } + if (p->key_frame || golden_frame) { + if (s->frames[VP56_FRAME_GOLDEN].data[0]) + avctx->release_buffer(avctx, &s->frames[VP56_FRAME_GOLDEN]); + s->frames[VP56_FRAME_GOLDEN] = *p; + } + s->frames[VP56_FRAME_PREVIOUS] = *p; + + *picture = *p; + *data_size = sizeof(AVPicture); + + return buf_size; +} + +void vp56_init(vp56_context_t *s, AVCodecContext *avctx, int flip) +{ + int i; + + s->avctx = avctx; + avctx->pix_fmt = PIX_FMT_YUV420P; + + if (s->avctx->idct_algo == FF_IDCT_AUTO) + s->avctx->idct_algo = FF_IDCT_VP3; + dsputil_init(&s->dsp, s->avctx); + ff_init_scantable(s->dsp.idct_permutation, &s->scantable,ff_zigzag_direct); + + avcodec_set_dimensions(s->avctx, 0, 0); + + for (i=0; i<3; i++) + s->frames[i].data[0] = NULL; + s->edge_emu_buffer_alloc = NULL; + + s->above_blocks = NULL; + s->macroblocks = NULL; + s->quantizer = -1; + s->deblock_filtering = 1; + + s->filter = NULL; + + if (flip) { + s->flip = -1; + s->frbi = 2; + s->srbi = 0; + } else { + s->flip = 1; + s->frbi = 0; + s->srbi = 2; + } +} + +int vp56_free(AVCodecContext *avctx) +{ + vp56_context_t *s = avctx->priv_data; + + av_free(s->above_blocks); + av_free(s->macroblocks); + av_free(s->edge_emu_buffer_alloc); + if (s->frames[VP56_FRAME_GOLDEN].data[0] + && (s->frames[VP56_FRAME_PREVIOUS].data[0] + != s->frames[VP56_FRAME_GOLDEN].data[0])) + avctx->release_buffer(avctx, &s->frames[VP56_FRAME_GOLDEN]); + if (s->frames[VP56_FRAME_PREVIOUS].data[0]) + avctx->release_buffer(avctx, &s->frames[VP56_FRAME_PREVIOUS]); + return 0; +} diff --git a/src/libffmpeg/libavcodec/vp56.h b/src/libffmpeg/libavcodec/vp56.h new file mode 100644 index 000000000..50e201550 --- /dev/null +++ b/src/libffmpeg/libavcodec/vp56.h @@ -0,0 +1,252 @@ +/** + * @file vp56.h + * VP5 and VP6 compatible video decoder (common features) + * + * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef VP56_H +#define VP56_H + +#include "vp56data.h" +#include "dsputil.h" +#include "mpegvideo.h" + + +typedef struct vp56_context vp56_context_t; +typedef struct vp56_mv vp56_mv_t; + +typedef void (*vp56_parse_vector_adjustment_t)(vp56_context_t *s, + vp56_mv_t *vect); +typedef int (*vp56_adjust_t)(int v, int t); +typedef void (*vp56_filter_t)(vp56_context_t *s, uint8_t *dst, uint8_t *src, + int offset1, int offset2, int stride, + vp56_mv_t mv, int mask, int select, int luma); +typedef void (*vp56_parse_coeff_t)(vp56_context_t *s); +typedef void (*vp56_default_models_init_t)(vp56_context_t *s); +typedef void (*vp56_parse_vector_models_t)(vp56_context_t *s); +typedef void (*vp56_parse_coeff_models_t)(vp56_context_t *s); +typedef int (*vp56_parse_header_t)(vp56_context_t *s, uint8_t *buf, + int buf_size, int *golden_frame); + +typedef struct { + int high; + int bits; + const uint8_t *buffer; + unsigned long code_word; +} vp56_range_coder_t; + +typedef struct { + uint8_t not_null_dc; + vp56_frame_t ref_frame; + DCTELEM dc_coeff; +} vp56_ref_dc_t; + +struct vp56_mv { + int x; + int y; +}; + +typedef struct { + uint8_t type; + vp56_mv_t mv; +} vp56_macroblock_t; + +struct vp56_context { + AVCodecContext *avctx; + DSPContext dsp; + ScanTable scantable; + AVFrame frames[3]; + uint8_t *edge_emu_buffer_alloc; + uint8_t *edge_emu_buffer; + vp56_range_coder_t c; + vp56_range_coder_t cc; + vp56_range_coder_t *ccp; + int sub_version; + + /* frame info */ + int plane_width[3]; + int plane_height[3]; + int mb_width; /* number of horizontal MB */ + int mb_height; /* number of vertical MB */ + int block_offset[6]; + + int quantizer; + uint16_t dequant_dc; + uint16_t dequant_ac; + + /* DC predictors management */ + vp56_ref_dc_t *above_blocks; + vp56_ref_dc_t left_block[4]; + int above_block_idx[6]; + DCTELEM prev_dc[3][3]; /* [plan][ref_frame] */ + + /* blocks / macroblock */ + vp56_mb_t mb_type; + vp56_macroblock_t *macroblocks; + DECLARE_ALIGNED_16(DCTELEM, block_coeff[6][64]); + uint8_t coeff_reorder[64]; /* used in vp6 only */ + uint8_t coeff_index_to_pos[64]; /* used in vp6 only */ + + /* motion vectors */ + vp56_mv_t mv[6]; /* vectors for each block in MB */ + vp56_mv_t vector_candidate[2]; + int vector_candidate_pos; + + /* filtering hints */ + int filter_header; /* used in vp6 only */ + int deblock_filtering; + int filter_selection; + int filter_mode; + int max_vector_length; + int sample_variance_threshold; + + /* AC models */ + uint8_t vector_model_sig[2]; /* delta sign */ + uint8_t vector_model_dct[2]; /* delta coding types */ + uint8_t vector_model_pdi[2][2]; /* predefined delta init */ + uint8_t vector_model_pdv[2][7]; /* predefined delta values */ + uint8_t vector_model_fdv[2][8]; /* 8 bit delta value definition */ + uint8_t mb_type_model[3][10][10]; /* model for decoding MB type */ + uint8_t coeff_model_dccv[2][11]; /* DC coeff value */ + uint8_t coeff_model_ract[2][3][6][11]; /* Run/AC coding type and AC coeff value */ + uint8_t coeff_model_acct[2][3][3][6][5];/* vp5 only AC coding type for coding group < 3 */ + uint8_t coeff_model_dcct[2][36][5]; /* DC coeff coding type */ + uint8_t coeff_model_runv[2][14]; /* run value (vp6 only) */ + uint8_t mb_types_stats[3][10][2]; /* contextual, next MB type stats */ + uint8_t coeff_ctx[4][64]; /* used in vp5 only */ + uint8_t coeff_ctx_last[4]; /* used in vp5 only */ + + /* upside-down flipping hints */ + int flip; /* are we flipping ? */ + int frbi; /* first row block index in MB */ + int srbi; /* second row block index in MB */ + int stride[3]; /* stride for each plan */ + + const uint8_t *vp56_coord_div; + vp56_parse_vector_adjustment_t parse_vector_adjustment; + vp56_adjust_t adjust; + vp56_filter_t filter; + vp56_parse_coeff_t parse_coeff; + vp56_default_models_init_t default_models_init; + vp56_parse_vector_models_t parse_vector_models; + vp56_parse_coeff_models_t parse_coeff_models; + vp56_parse_header_t parse_header; +}; + + +void vp56_init(vp56_context_t *s, AVCodecContext *avctx, int flip); +int vp56_free(AVCodecContext *avctx); +void vp56_init_dequant(vp56_context_t *s, int quantizer); +int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size, + uint8_t *buf, int buf_size); + + +/** + * vp56 specific range coder implementation + */ + +static inline void vp56_init_range_decoder(vp56_range_coder_t *c, + const uint8_t *buf, int buf_size) +{ + c->high = 255; + c->bits = 8; + c->buffer = buf; + c->code_word = *c->buffer++ << 8; + c->code_word |= *c->buffer++; +} + +static inline int vp56_rac_get_prob(vp56_range_coder_t *c, uint8_t prob) +{ + unsigned int low = 1 + (((c->high - 1) * prob) / 256); + unsigned int low_shift = low << 8; + int bit = c->code_word >= low_shift; + + if (bit) { + c->high -= low; + c->code_word -= low_shift; + } else { + c->high = low; + } + + /* normalize */ + while (c->high < 128) { + c->high <<= 1; + c->code_word <<= 1; + if (--c->bits == 0) { + c->bits = 8; + c->code_word |= *c->buffer++; + } + } + return bit; +} + +static inline int vp56_rac_get(vp56_range_coder_t *c) +{ + /* equiprobable */ + int low = (c->high + 1) >> 1; + unsigned int low_shift = low << 8; + int bit = c->code_word >= low_shift; + if (bit) { + c->high = (c->high - low) << 1; + c->code_word -= low_shift; + } else { + c->high = low << 1; + } + + /* normalize */ + c->code_word <<= 1; + if (--c->bits == 0) { + c->bits = 8; + c->code_word |= *c->buffer++; + } + return bit; +} + +static inline int vp56_rac_gets(vp56_range_coder_t *c, int bits) +{ + int value = 0; + + while (bits--) { + value = (value << 1) | vp56_rac_get(c); + } + + return value; +} + +static inline int vp56_rac_gets_nn(vp56_range_coder_t *c, int bits) +{ + int v = vp56_rac_gets(c, 7) << 1; + return v + !v; +} + +static inline int vp56_rac_get_tree(vp56_range_coder_t *c, + const vp56_tree_t *tree, + const uint8_t *probs) +{ + while (tree->val > 0) { + if (vp56_rac_get_prob(c, probs[tree->prob_idx])) + tree += tree->val; + else + tree++; + } + return -tree->val; +} + +#endif /* VP56_H */ diff --git a/src/libffmpeg/libavcodec/vp56data.c b/src/libffmpeg/libavcodec/vp56data.c new file mode 100644 index 000000000..e75c6d1ce --- /dev/null +++ b/src/libffmpeg/libavcodec/vp56data.c @@ -0,0 +1,66 @@ +/** + * @file vp56data.c + * VP5 and VP6 compatible video decoder (common data) + * + * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "vp56data.h" + +const uint8_t vp56_b6to3[] = { 0, 0, 0, 0, 1, 2 }; +const uint8_t vp56_b6to4[] = { 0, 0, 1, 1, 2, 3 }; + +const uint8_t vp56_coeff_parse_table[6][11] = { + { 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 145, 165, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 140, 148, 173, 0, 0, 0, 0, 0, 0, 0, 0 }, + { 135, 140, 155, 176, 0, 0, 0, 0, 0, 0, 0 }, + { 130, 134, 141, 157, 180, 0, 0, 0, 0, 0, 0 }, + { 129, 130, 133, 140, 153, 177, 196, 230, 243, 254, 254 }, +}; + +const uint8_t vp56_def_mb_types_stats[3][10][2] = { + { { 69, 42 }, { 1, 2 }, { 1, 7 }, { 44, 42 }, { 6, 22 }, + { 1, 3 }, { 0, 2 }, { 1, 5 }, { 0, 1 }, { 0, 0 }, }, + { { 229, 8 }, { 1, 1 }, { 0, 8 }, { 0, 0 }, { 0, 0 }, + { 1, 2 }, { 0, 1 }, { 0, 0 }, { 1, 1 }, { 0, 0 }, }, + { { 122, 35 }, { 1, 1 }, { 1, 6 }, { 46, 34 }, { 0, 0 }, + { 1, 2 }, { 0, 1 }, { 0, 1 }, { 1, 1 }, { 0, 0 }, }, +}; + +const vp56_tree_t vp56_pva_tree[] = { + { 8, 0}, + { 4, 1}, + { 2, 2}, {-0}, {-1}, + { 2, 3}, {-2}, {-3}, + { 4, 4}, + { 2, 5}, {-4}, {-5}, + { 2, 6}, {-6}, {-7}, +}; + +const vp56_tree_t vp56_pc_tree[] = { + { 4, 6}, + { 2, 7}, {-0}, {-1}, + { 4, 8}, + { 2, 9}, {-2}, {-3}, + { 2,10}, {-4}, {-5}, +}; + +const uint8_t vp56_coeff_bias[] = { 5, 7, 11, 19, 35, 67 }; +const uint8_t vp56_coeff_bit_length[] = { 0, 1, 2, 3, 4, 10 }; diff --git a/src/libffmpeg/libavcodec/vp56data.h b/src/libffmpeg/libavcodec/vp56data.h new file mode 100644 index 000000000..dbf92dd68 --- /dev/null +++ b/src/libffmpeg/libavcodec/vp56data.h @@ -0,0 +1,248 @@ +/** + * @file vp56data.h + * VP5 and VP6 compatible video decoder (common data) + * + * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef VP56DATA_H +#define VP56DATA_H + +#include "common.h" + +typedef enum { + VP56_FRAME_CURRENT = 0, + VP56_FRAME_PREVIOUS = 1, + VP56_FRAME_GOLDEN = 2, +} vp56_frame_t; + +typedef enum { + VP56_MB_INTER_NOVEC_PF = 0, /**< Inter MB, no vector, from previous frame */ + VP56_MB_INTRA = 1, /**< Intra MB */ + VP56_MB_INTER_DELTA_PF = 2, /**< Inter MB, above/left vector + delta, from previous frame */ + VP56_MB_INTER_V1_PF = 3, /**< Inter MB, first vector, from previous frame */ + VP56_MB_INTER_V2_PF = 4, /**< Inter MB, second vector, from previous frame */ + VP56_MB_INTER_NOVEC_GF = 5, /**< Inter MB, no vector, from golden frame */ + VP56_MB_INTER_DELTA_GF = 6, /**< Inter MB, above/left vector + delta, from golden frame */ + VP56_MB_INTER_4V = 7, /**< Inter MB, 4 vectors, from previous frame */ + VP56_MB_INTER_V1_GF = 8, /**< Inter MB, first vector, from golden frame */ + VP56_MB_INTER_V2_GF = 9, /**< Inter MB, second vector, from golden frame */ +} vp56_mb_t; + +typedef struct { + int8_t val; + int8_t prob_idx; +} vp56_tree_t; + +extern const uint8_t vp56_b6to3[]; +extern const uint8_t vp56_b6to4[]; +extern const uint8_t vp56_coeff_parse_table[6][11]; +extern const uint8_t vp56_def_mb_types_stats[3][10][2]; +extern const vp56_tree_t vp56_pva_tree[]; +extern const vp56_tree_t vp56_pc_tree[]; +extern const uint8_t vp56_coeff_bias[]; +extern const uint8_t vp56_coeff_bit_length[]; + +static const vp56_frame_t vp56_reference_frame[] = { + VP56_FRAME_PREVIOUS, /* VP56_MB_INTER_NOVEC_PF */ + VP56_FRAME_CURRENT, /* VP56_MB_INTRA */ + VP56_FRAME_PREVIOUS, /* VP56_MB_INTER_DELTA_PF */ + VP56_FRAME_PREVIOUS, /* VP56_MB_INTER_V1_PF */ + VP56_FRAME_PREVIOUS, /* VP56_MB_INTER_V2_PF */ + VP56_FRAME_GOLDEN, /* VP56_MB_INTER_NOVEC_GF */ + VP56_FRAME_GOLDEN, /* VP56_MB_INTER_DELTA_GF */ + VP56_FRAME_PREVIOUS, /* VP56_MB_INTER_4V */ + VP56_FRAME_GOLDEN, /* VP56_MB_INTER_V1_GF */ + VP56_FRAME_GOLDEN, /* VP56_MB_INTER_V2_GF */ +}; + +static const uint8_t vp56_ac_dequant[64] = { + 94, 92, 90, 88, 86, 82, 78, 74, + 70, 66, 62, 58, 54, 53, 52, 51, + 50, 49, 48, 47, 46, 45, 44, 43, + 42, 40, 39, 37, 36, 35, 34, 33, + 32, 31, 30, 29, 28, 27, 26, 25, + 24, 23, 22, 21, 20, 19, 18, 17, + 16, 15, 14, 13, 12, 11, 10, 9, + 8, 7, 6, 5, 4, 3, 2, 1, +}; + +static const uint8_t vp56_dc_dequant[64] = { + 47, 47, 47, 47, 45, 43, 43, 43, + 43, 43, 42, 41, 41, 40, 40, 40, + 40, 35, 35, 35, 35, 33, 33, 33, + 33, 32, 32, 32, 27, 27, 26, 26, + 25, 25, 24, 24, 23, 23, 19, 19, + 19, 19, 18, 18, 17, 16, 16, 16, + 16, 16, 15, 11, 11, 11, 10, 10, + 9, 8, 7, 5, 3, 3, 2, 2, +}; + +static const uint8_t vp56_pre_def_mb_type_stats[16][3][10][2] = { + { { { 9, 15 }, { 32, 25 }, { 7, 19 }, { 9, 21 }, { 1, 12 }, + { 14, 12 }, { 3, 18 }, { 14, 23 }, { 3, 10 }, { 0, 4 }, }, + { { 41, 22 }, { 1, 0 }, { 1, 31 }, { 0, 0 }, { 0, 0 }, + { 0, 1 }, { 1, 7 }, { 0, 1 }, { 98, 25 }, { 4, 10 }, }, + { { 2, 3 }, { 2, 3 }, { 0, 2 }, { 0, 2 }, { 0, 0 }, + { 11, 4 }, { 1, 4 }, { 0, 2 }, { 3, 2 }, { 0, 4 }, }, }, + { { { 48, 39 }, { 1, 2 }, { 11, 27 }, { 29, 44 }, { 7, 27 }, + { 1, 4 }, { 0, 3 }, { 1, 6 }, { 1, 2 }, { 0, 0 }, }, + { { 123, 37 }, { 6, 4 }, { 1, 27 }, { 0, 0 }, { 0, 0 }, + { 5, 8 }, { 1, 7 }, { 0, 1 }, { 12, 10 }, { 0, 2 }, }, + { { 49, 46 }, { 3, 4 }, { 7, 31 }, { 42, 41 }, { 0, 0 }, + { 2, 6 }, { 1, 7 }, { 1, 4 }, { 2, 4 }, { 0, 1 }, }, }, + { { { 21, 32 }, { 1, 2 }, { 4, 10 }, { 32, 43 }, { 6, 23 }, + { 2, 3 }, { 1, 19 }, { 1, 6 }, { 12, 21 }, { 0, 7 }, }, + { { 26, 14 }, { 14, 12 }, { 0, 24 }, { 0, 0 }, { 0, 0 }, + { 55, 17 }, { 1, 9 }, { 0, 36 }, { 5, 7 }, { 1, 3 }, }, + { { 26, 25 }, { 1, 1 }, { 2, 10 }, { 67, 39 }, { 0, 0 }, + { 1, 1 }, { 0, 14 }, { 0, 2 }, { 31, 26 }, { 1, 6 }, }, }, + { { { 69, 83 }, { 0, 0 }, { 0, 2 }, { 10, 29 }, { 3, 12 }, + { 0, 1 }, { 0, 3 }, { 0, 3 }, { 2, 2 }, { 0, 0 }, }, + { { 209, 5 }, { 0, 0 }, { 0, 27 }, { 0, 0 }, { 0, 0 }, + { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 0 }, { 0, 0 }, }, + { { 103, 46 }, { 1, 2 }, { 2, 10 }, { 33, 42 }, { 0, 0 }, + { 1, 4 }, { 0, 3 }, { 0, 1 }, { 1, 3 }, { 0, 0 }, }, }, + { { { 11, 20 }, { 1, 4 }, { 18, 36 }, { 43, 48 }, { 13, 35 }, + { 0, 2 }, { 0, 5 }, { 3, 12 }, { 1, 2 }, { 0, 0 }, }, + { { 2, 5 }, { 4, 5 }, { 0, 121 }, { 0, 0 }, { 0, 0 }, + { 0, 3 }, { 2, 4 }, { 1, 4 }, { 2, 2 }, { 0, 1 }, }, + { { 14, 31 }, { 9, 13 }, { 14, 54 }, { 22, 29 }, { 0, 0 }, + { 2, 6 }, { 4, 18 }, { 6, 13 }, { 1, 5 }, { 0, 1 }, }, }, + { { { 70, 44 }, { 0, 1 }, { 2, 10 }, { 37, 46 }, { 8, 26 }, + { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 1 }, { 0, 0 }, }, + { { 175, 5 }, { 0, 1 }, { 0, 48 }, { 0, 0 }, { 0, 0 }, + { 0, 2 }, { 0, 1 }, { 0, 2 }, { 0, 1 }, { 0, 0 }, }, + { { 85, 39 }, { 0, 0 }, { 1, 9 }, { 69, 40 }, { 0, 0 }, + { 0, 1 }, { 0, 3 }, { 0, 1 }, { 2, 3 }, { 0, 0 }, }, }, + { { { 8, 15 }, { 0, 1 }, { 8, 21 }, { 74, 53 }, { 22, 42 }, + { 0, 1 }, { 0, 2 }, { 0, 3 }, { 1, 2 }, { 0, 0 }, }, + { { 83, 5 }, { 2, 3 }, { 0, 102 }, { 0, 0 }, { 0, 0 }, + { 1, 3 }, { 0, 2 }, { 0, 1 }, { 0, 0 }, { 0, 0 }, }, + { { 31, 28 }, { 0, 0 }, { 3, 14 }, { 130, 34 }, { 0, 0 }, + { 0, 1 }, { 0, 3 }, { 0, 1 }, { 3, 3 }, { 0, 1 }, }, }, + { { { 141, 42 }, { 0, 0 }, { 1, 4 }, { 11, 24 }, { 1, 11 }, + { 0, 1 }, { 0, 1 }, { 0, 2 }, { 0, 0 }, { 0, 0 }, }, + { { 233, 6 }, { 0, 0 }, { 0, 8 }, { 0, 0 }, { 0, 0 }, + { 0, 1 }, { 0, 1 }, { 0, 0 }, { 0, 1 }, { 0, 0 }, }, + { { 171, 25 }, { 0, 0 }, { 1, 5 }, { 25, 21 }, { 0, 0 }, + { 0, 1 }, { 0, 1 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, }, }, + { { { 8, 19 }, { 4, 10 }, { 24, 45 }, { 21, 37 }, { 9, 29 }, + { 0, 3 }, { 1, 7 }, { 11, 25 }, { 0, 2 }, { 0, 1 }, }, + { { 34, 16 }, { 112, 21 }, { 1, 28 }, { 0, 0 }, { 0, 0 }, + { 6, 8 }, { 1, 7 }, { 0, 3 }, { 2, 5 }, { 0, 2 }, }, + { { 17, 21 }, { 68, 29 }, { 6, 15 }, { 13, 22 }, { 0, 0 }, + { 6, 12 }, { 3, 14 }, { 4, 10 }, { 1, 7 }, { 0, 3 }, }, }, + { { { 46, 42 }, { 0, 1 }, { 2, 10 }, { 54, 51 }, { 10, 30 }, + { 0, 2 }, { 0, 2 }, { 0, 1 }, { 0, 1 }, { 0, 0 }, }, + { { 159, 35 }, { 2, 2 }, { 0, 25 }, { 0, 0 }, { 0, 0 }, + { 3, 6 }, { 0, 5 }, { 0, 1 }, { 4, 4 }, { 0, 1 }, }, + { { 51, 39 }, { 0, 1 }, { 2, 12 }, { 91, 44 }, { 0, 0 }, + { 0, 2 }, { 0, 3 }, { 0, 1 }, { 2, 3 }, { 0, 1 }, }, }, + { { { 28, 32 }, { 0, 0 }, { 3, 10 }, { 75, 51 }, { 14, 33 }, + { 0, 1 }, { 0, 2 }, { 0, 1 }, { 1, 2 }, { 0, 0 }, }, + { { 75, 39 }, { 5, 7 }, { 2, 48 }, { 0, 0 }, { 0, 0 }, + { 3, 11 }, { 2, 16 }, { 1, 4 }, { 7, 10 }, { 0, 2 }, }, + { { 81, 25 }, { 0, 0 }, { 2, 9 }, { 106, 26 }, { 0, 0 }, + { 0, 1 }, { 0, 1 }, { 0, 1 }, { 1, 1 }, { 0, 0 }, }, }, + { { { 100, 46 }, { 0, 1 }, { 3, 9 }, { 21, 37 }, { 5, 20 }, + { 0, 1 }, { 0, 2 }, { 1, 2 }, { 0, 1 }, { 0, 0 }, }, + { { 212, 21 }, { 0, 1 }, { 0, 9 }, { 0, 0 }, { 0, 0 }, + { 1, 2 }, { 0, 2 }, { 0, 0 }, { 2, 2 }, { 0, 0 }, }, + { { 140, 37 }, { 0, 1 }, { 1, 8 }, { 24, 33 }, { 0, 0 }, + { 1, 2 }, { 0, 2 }, { 0, 1 }, { 1, 2 }, { 0, 0 }, }, }, + { { { 27, 29 }, { 0, 1 }, { 9, 25 }, { 53, 51 }, { 12, 34 }, + { 0, 1 }, { 0, 3 }, { 1, 5 }, { 0, 2 }, { 0, 0 }, }, + { { 4, 2 }, { 0, 0 }, { 0, 172 }, { 0, 0 }, { 0, 0 }, + { 0, 1 }, { 0, 2 }, { 0, 0 }, { 2, 0 }, { 0, 0 }, }, + { { 14, 23 }, { 1, 3 }, { 11, 53 }, { 90, 31 }, { 0, 0 }, + { 0, 3 }, { 1, 5 }, { 2, 6 }, { 1, 2 }, { 0, 0 }, }, }, + { { { 80, 38 }, { 0, 0 }, { 1, 4 }, { 69, 33 }, { 5, 16 }, + { 0, 1 }, { 0, 1 }, { 0, 0 }, { 0, 1 }, { 0, 0 }, }, + { { 187, 22 }, { 1, 1 }, { 0, 17 }, { 0, 0 }, { 0, 0 }, + { 3, 6 }, { 0, 4 }, { 0, 1 }, { 4, 4 }, { 0, 1 }, }, + { { 123, 29 }, { 0, 0 }, { 1, 7 }, { 57, 30 }, { 0, 0 }, + { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 0 }, }, }, + { { { 16, 20 }, { 0, 0 }, { 2, 8 }, { 104, 49 }, { 15, 33 }, + { 0, 1 }, { 0, 1 }, { 0, 1 }, { 1, 1 }, { 0, 0 }, }, + { { 133, 6 }, { 1, 2 }, { 1, 70 }, { 0, 0 }, { 0, 0 }, + { 0, 2 }, { 0, 4 }, { 0, 3 }, { 1, 1 }, { 0, 0 }, }, + { { 13, 14 }, { 0, 0 }, { 4, 20 }, { 175, 20 }, { 0, 0 }, + { 0, 1 }, { 0, 1 }, { 0, 1 }, { 1, 1 }, { 0, 0 }, }, }, + { { { 194, 16 }, { 0, 0 }, { 1, 1 }, { 1, 9 }, { 1, 3 }, + { 0, 0 }, { 0, 1 }, { 0, 1 }, { 0, 0 }, { 0, 0 }, }, + { { 251, 1 }, { 0, 0 }, { 0, 2 }, { 0, 0 }, { 0, 0 }, + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, }, + { { 202, 23 }, { 0, 0 }, { 1, 3 }, { 2, 9 }, { 0, 0 }, + { 0, 1 }, { 0, 1 }, { 0, 1 }, { 0, 0 }, { 0, 0 }, }, }, +}; + +static const uint8_t vp56_filter_threshold[] = { + 14, 14, 13, 13, 12, 12, 10, 10, + 10, 10, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 7, 7, 7, 7, + 7, 7, 6, 6, 6, 6, 6, 6, + 5, 5, 5, 5, 4, 4, 4, 4, + 4, 4, 4, 3, 3, 3, 3, 2, +}; + +static const uint8_t vp56_mb_type_model_model[] = { + 171, 83, 199, 140, 125, 104, +}; + +static const vp56_tree_t vp56_pmbtm_tree[] = { + { 4, 0}, + { 2, 1}, {-8}, {-4}, + { 8, 2}, + { 6, 3}, + { 4, 4}, + { 2, 5}, {-24}, {-20}, {-16}, {-12}, {-0}, +}; + +static const vp56_tree_t vp56_pmbt_tree[] = { + { 8, 1}, + { 4, 2}, + { 2, 4}, {-VP56_MB_INTER_NOVEC_PF}, {-VP56_MB_INTER_DELTA_PF}, + { 2, 5}, {-VP56_MB_INTER_V1_PF}, {-VP56_MB_INTER_V2_PF}, + { 4, 3}, + { 2, 6}, {-VP56_MB_INTRA}, {-VP56_MB_INTER_4V}, + { 4, 7}, + { 2, 8}, {-VP56_MB_INTER_NOVEC_GF}, {-VP56_MB_INTER_DELTA_GF}, + { 2, 9}, {-VP56_MB_INTER_V1_GF}, {-VP56_MB_INTER_V2_GF}, +}; + +/* relative pos of surrounding blocks, from closest to farthest */ +static const int8_t vp56_candidate_predictor_pos[12][2] = { + { 0, -1 }, + { -1, 0 }, + { -1, -1 }, + { 1, -1 }, + { 0, -2 }, + { -2, 0 }, + { -2, -1 }, + { -1, -2 }, + { 1, -2 }, + { 2, -1 }, + { -2, -2 }, + { 2, -2 }, +}; + +#endif /* VP56DATA */ diff --git a/src/libffmpeg/libavcodec/vp5data.h b/src/libffmpeg/libavcodec/vp5data.h new file mode 100644 index 000000000..effc17c2c --- /dev/null +++ b/src/libffmpeg/libavcodec/vp5data.h @@ -0,0 +1,173 @@ +/** + * @file vp5data.h + * VP5 compatible video decoder + * + * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef VP5DATA_H +#define VP5DATA_H + +static const uint8_t vp5_coeff_groups[] = { + -1, 0, 1, 1, 2, 1, 1, 2, + 2, 1, 1, 2, 2, 2, 1, 2, + 2, 2, 2, 2, 1, 1, 2, 2, + 3, 3, 4, 3, 4, 4, 4, 3, + 3, 3, 3, 3, 4, 3, 3, 3, + 4, 4, 4, 4, 4, 3, 3, 4, + 4, 4, 3, 4, 4, 4, 4, 4, + 4, 4, 5, 5, 5, 5, 5, 5, +}; + +static const uint8_t vp5_vmc_pct[2][11] = { + { 243, 220, 251, 253, 237, 232, 241, 245, 247, 251, 253 }, + { 235, 211, 246, 249, 234, 231, 248, 249, 252, 252, 254 }, +}; + +static const uint8_t vp5_dccv_pct[2][11] = { + { 146, 197, 181, 207, 232, 243, 238, 251, 244, 250, 249 }, + { 179, 219, 214, 240, 250, 254, 244, 254, 254, 254, 254 }, +}; + +static const uint8_t vp5_ract_pct[3][2][6][11] = { + { { { 227, 246, 230, 247, 244, 254, 254, 254, 254, 254, 254 }, + { 202, 254, 209, 231, 231, 249, 249, 253, 254, 254, 254 }, + { 206, 254, 225, 242, 241, 251, 253, 254, 254, 254, 254 }, + { 235, 254, 241, 253, 252, 254, 254, 254, 254, 254, 254 }, + { 234, 254, 248, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 } }, + { { 240, 254, 248, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 238, 254, 240, 253, 254, 254, 254, 254, 254, 254, 254 }, + { 244, 254, 251, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 } } }, + { { { 206, 203, 227, 239, 247, 254, 253, 254, 254, 254, 254 }, + { 207, 199, 220, 236, 243, 252, 252, 254, 254, 254, 254 }, + { 212, 219, 230, 243, 244, 253, 252, 254, 254, 254, 254 }, + { 236, 237, 247, 252, 253, 254, 254, 254, 254, 254, 254 }, + { 240, 240, 248, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 } }, + { { 230, 233, 249, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 238, 238, 250, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 248, 251, 254, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 } } }, + { { { 225, 239, 227, 231, 244, 253, 243, 254, 254, 253, 254 }, + { 232, 234, 224, 228, 242, 249, 242, 252, 251, 251, 254 }, + { 235, 249, 238, 240, 251, 254, 249, 254, 253, 253, 254 }, + { 249, 253, 251, 250, 254, 254, 254, 254, 254, 254, 254 }, + { 251, 250, 249, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 } }, + { { 243, 244, 250, 250, 254, 254, 254, 254, 254, 254, 254 }, + { 249, 248, 250, 253, 254, 254, 254, 254, 254, 254, 254 }, + { 253, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 }, + { 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254 } } }, +}; + +static const int16_t vp5_dccv_lc[5][36][2] = { + { {154, 61}, {141, 54}, { 90, 45}, { 54, 34}, { 54, 13}, {128, 109}, + {136, 54}, {148, 45}, { 92, 41}, { 54, 33}, { 51, 15}, { 87, 113}, + { 87, 44}, { 97, 40}, { 67, 36}, { 46, 29}, { 41, 15}, { 64, 80}, + { 59, 33}, { 61, 31}, { 51, 28}, { 44, 22}, { 33, 12}, { 49, 63}, + { 69, 12}, { 59, 16}, { 46, 14}, { 31, 13}, { 26, 6}, { 92, 26}, + {128, 108}, { 77, 119}, { 54, 84}, { 26, 71}, { 87, 19}, { 95, 155} }, + { {154, 4}, {182, 0}, {159, -8}, {128, -5}, {143, -5}, {187, 55}, + {182, 0}, {228, -3}, {187, -7}, {174, -9}, {189, -11}, {169, 79}, + {161, -9}, {192, -8}, {187, -9}, {169, -10}, {136, -9}, {184, 40}, + {164, -11}, {179, -10}, {174, -10}, {161, -10}, {115, -7}, {197, 20}, + {195, -11}, {195, -11}, {146, -10}, {110, -6}, { 95, -4}, {195, 39}, + {182, 55}, {172, 77}, {177, 37}, {169, 29}, {172, 52}, { 92, 162} }, + { {174, 80}, {164, 80}, { 95, 80}, { 46, 66}, { 56, 24}, { 36, 193}, + {164, 80}, {166, 77}, {105, 76}, { 49, 68}, { 46, 31}, { 49, 186}, + { 97, 78}, {110, 74}, { 72, 72}, { 44, 60}, { 33, 30}, { 69, 131}, + { 61, 61}, { 69, 63}, { 51, 57}, { 31, 48}, { 26, 27}, { 64, 89}, + { 67, 23}, { 51, 32}, { 36, 33}, { 26, 28}, { 20, 12}, { 44, 68}, + { 26, 197}, { 41, 189}, { 61, 129}, { 28, 103}, { 49, 52}, {-12, 245} }, + { {102, 141}, { 79, 166}, { 72, 162}, { 97, 125}, {179, 4}, {307, 0}, + { 72, 168}, { 69, 175}, { 84, 160}, {105, 127}, {148, 34}, {310, 0}, + { 84, 151}, { 82, 161}, { 87, 153}, { 87, 135}, {115, 51}, {317, 0}, + { 97, 125}, {102, 131}, {105, 125}, { 87, 122}, { 84, 64}, { 54, 184}, + {166, 18}, {146, 43}, {125, 51}, { 90, 64}, { 95, 7}, { 38, 154}, + {294, 0}, { 13, 225}, { 10, 225}, { 67, 168}, { 0, 167}, {161, 94} }, + { {172, 76}, {172, 75}, {136, 80}, { 64, 98}, { 74, 67}, {315, 0}, + {169, 76}, {207, 56}, {164, 66}, { 97, 80}, { 67, 72}, {328, 0}, + {136, 80}, {187, 53}, {154, 62}, { 72, 85}, { -2, 105}, {305, 0}, + { 74, 91}, {128, 64}, {113, 64}, { 61, 77}, { 41, 75}, {259, 0}, + { 46, 84}, { 51, 81}, { 28, 89}, { 31, 78}, { 23, 77}, {202, 0}, + {323, 0}, {323, 0}, {300, 0}, {236, 0}, {195, 0}, {328, 0} }, +}; + +static const int16_t vp5_ract_lc[3][3][5][6][2] = { + { { { {276, 0}, {238, 0}, {195, 0}, {156, 0}, {113, 0}, {274, 0} }, + { { 0, 1}, { 0, 1}, { 0, 1}, { 0, 1}, { 0, 1}, { 0, 1} }, + { {192, 59}, {182, 50}, {141, 48}, {110, 40}, { 92, 19}, {125,128} }, + { {169, 87}, {169, 83}, {184, 62}, {220, 16}, {184, 0}, {264, 0} }, + { {212, 40}, {212, 36}, {169, 49}, {174, 27}, { 8,120}, {182, 71} } }, + { { {259, 10}, {197, 19}, {143, 22}, {123, 16}, {110, 8}, {133, 88} }, + { { 0, 1}, {256, 0}, { 0, 1}, { 0, 1}, { 0, 1}, { 0, 1} }, + { {207, 46}, {187, 50}, { 97, 83}, { 23,100}, { 41, 56}, { 56,188} }, + { {166, 90}, {146,108}, {161, 88}, {136, 95}, {174, 0}, {266, 0} }, + { {264, 7}, {243, 18}, {184, 43}, {-14,154}, { 20,112}, { 20,199} } }, + { { {230, 26}, {197, 22}, {159, 20}, {146, 12}, {136, 4}, { 54,162} }, + { { 0, 1}, { 0, 1}, { 0, 1}, { 0, 1}, { 0, 1}, { 0, 1} }, + { {192, 59}, {156, 72}, { 84,101}, { 49,101}, { 79, 47}, { 79,167} }, + { {138,115}, {136,116}, {166, 80}, {238, 0}, {195, 0}, {261, 0} }, + { {225, 33}, {205, 42}, {159, 61}, { 79, 96}, { 92, 66}, { 28,195} } }, + }, { + { { {200, 37}, {197, 18}, {159, 13}, {143, 7}, {102, 5}, {123,126} }, + { {197, 3}, {220, -9}, {210,-12}, {187, -6}, {151, -2}, {174, 80} }, + { {200, 53}, {187, 47}, {159, 40}, {118, 38}, {100, 18}, {141,111} }, + { {179, 78}, {166, 86}, {197, 50}, {207, 27}, {187, 0}, {115,139} }, + { {218, 34}, {220, 29}, {174, 46}, {128, 61}, { 54, 89}, {187, 65} } }, + { { {238, 14}, {197, 18}, {125, 26}, { 90, 25}, { 82, 13}, {161, 86} }, + { {189, 1}, {205, -2}, {156, -4}, {143, -4}, {146, -4}, {172, 72} }, + { {230, 31}, {192, 45}, {102, 76}, { 38, 85}, { 56, 41}, { 64,173} }, + { {166, 91}, {141,111}, {128,116}, {118,109}, {177, 0}, { 23,222} }, + { {253, 14}, {236, 21}, {174, 49}, { 33,118}, { 44, 93}, { 23,187} } }, + { { {218, 28}, {179, 28}, {118, 35}, { 95, 30}, { 72, 24}, {128,108} }, + { {187, 1}, {174, -1}, {125, -1}, {110, -1}, {108, -1}, {202, 52} }, + { {197, 53}, {146, 75}, { 46,118}, { 33,103}, { 64, 50}, {118,126} }, + { {138,114}, {128,122}, {161, 86}, {243, -6}, {195, 0}, { 38,210} }, + { {215, 39}, {179, 58}, { 97,101}, { 95, 85}, { 87, 70}, { 69,152} } }, + }, { + { { {236, 24}, {205, 18}, {172, 12}, {154, 6}, {125, 1}, {169, 75} }, + { {187, 4}, {230, -2}, {228, -4}, {236, -4}, {241, -2}, {192, 66} }, + { {200, 46}, {187, 42}, {159, 34}, {136, 25}, {105, 10}, {179, 62} }, + { {207, 55}, {192, 63}, {192, 54}, {195, 36}, {177, 1}, {143, 98} }, + { {225, 27}, {207, 34}, {200, 30}, {131, 57}, { 97, 60}, {197, 45} } }, + { { {271, 8}, {218, 13}, {133, 19}, { 90, 19}, { 72, 7}, {182, 51} }, + { {179, 1}, {225, -1}, {154, -2}, {110, -1}, { 92, 0}, {195, 41} }, + { {241, 26}, {189, 40}, { 82, 64}, { 33, 60}, { 67, 17}, {120, 94} }, + { {192, 68}, {151, 94}, {146, 90}, {143, 72}, {161, 0}, {113,128} }, + { {256, 12}, {218, 29}, {166, 48}, { 44, 99}, { 31, 87}, {148, 78} } }, + { { {238, 20}, {184, 22}, {113, 27}, { 90, 22}, { 74, 9}, {192, 37} }, + { {184, 0}, {215, -1}, {141, -1}, { 97, 0}, { 49, 0}, {264, 13} }, + { {182, 51}, {138, 61}, { 95, 63}, { 54, 59}, { 64, 25}, {200, 45} }, + { {179, 75}, {156, 87}, {174, 65}, {177, 44}, {174, 0}, {164, 85} }, + { {195, 45}, {148, 65}, {105, 79}, { 95, 72}, { 87, 60}, {169, 63} } }, + } +}; + +static const uint8_t vp5_coord_div[] = { 2, 2, 2, 2, 4, 4 }; + +#endif /* VP5DATA_H */ diff --git a/src/libffmpeg/libavcodec/vp6.c b/src/libffmpeg/libavcodec/vp6.c new file mode 100644 index 000000000..df4ebf87d --- /dev/null +++ b/src/libffmpeg/libavcodec/vp6.c @@ -0,0 +1,556 @@ +/** + * @file vp6.c + * VP6 compatible video decoder + * + * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * + * The VP6F decoder accept an optional 1 byte extradata. It is composed of: + * - upper 4bits: difference between encoded width and visible width + * - lower 4bits: difference between encoded height and visible height + */ + +#include <stdlib.h> + +#include "avcodec.h" +#include "dsputil.h" +#include "bitstream.h" +#include "mpegvideo.h" + +#include "vp56.h" +#include "vp56data.h" +#include "vp6data.h" + + +static int vp6_parse_header(vp56_context_t *s, uint8_t *buf, int buf_size, + int *golden_frame) +{ + vp56_range_coder_t *c = &s->c; + int parse_filter_info = 0; + int coeff_offset = 0; + int vrt_shift = 0; + int sub_version; + int rows, cols; + int res = 1; + int separated_coeff = buf[0] & 1; + + s->frames[VP56_FRAME_CURRENT].key_frame = !(buf[0] & 0x80); + vp56_init_dequant(s, (buf[0] >> 1) & 0x3F); + + if (s->frames[VP56_FRAME_CURRENT].key_frame) { + sub_version = buf[1] >> 3; + if (sub_version > 8) + return 0; + s->filter_header = buf[1] & 0x06; + if (buf[1] & 1) { + av_log(s->avctx, AV_LOG_ERROR, "interlacing not supported\n"); + return 0; + } + if (separated_coeff || !s->filter_header) { + coeff_offset = AV_RB16(buf+2) - 2; + buf += 2; + buf_size -= 2; + } + + rows = buf[2]; /* number of stored macroblock rows */ + cols = buf[3]; /* number of stored macroblock cols */ + /* buf[4] is number of displayed macroblock rows */ + /* buf[5] is number of displayed macroblock cols */ + + if (16*cols != s->avctx->coded_width || + 16*rows != s->avctx->coded_height) { + avcodec_set_dimensions(s->avctx, 16*cols, 16*rows); + if (s->avctx->extradata_size == 1) { + s->avctx->width -= s->avctx->extradata[0] >> 4; + s->avctx->height -= s->avctx->extradata[0] & 0x0F; + } + res = 2; + } + + vp56_init_range_decoder(c, buf+6, buf_size-6); + vp56_rac_gets(c, 2); + + parse_filter_info = s->filter_header; + if (sub_version < 8) + vrt_shift = 5; + s->sub_version = sub_version; + } else { + if (!s->sub_version) + return 0; + + if (separated_coeff || !s->filter_header) { + coeff_offset = AV_RB16(buf+1) - 2; + buf += 2; + buf_size -= 2; + } + vp56_init_range_decoder(c, buf+1, buf_size-1); + + *golden_frame = vp56_rac_get(c); + if (s->filter_header) { + s->deblock_filtering = vp56_rac_get(c); + if (s->deblock_filtering) + vp56_rac_get(c); + if (s->sub_version > 7) + parse_filter_info = vp56_rac_get(c); + } + } + + if (parse_filter_info) { + if (vp56_rac_get(c)) { + s->filter_mode = 2; + s->sample_variance_threshold = vp56_rac_gets(c, 5) << vrt_shift; + s->max_vector_length = 2 << vp56_rac_gets(c, 3); + } else if (vp56_rac_get(c)) { + s->filter_mode = 1; + } else { + s->filter_mode = 0; + } + if (s->sub_version > 7) + s->filter_selection = vp56_rac_gets(c, 4); + else + s->filter_selection = 16; + } + + vp56_rac_get(c); + + if (coeff_offset) { + vp56_init_range_decoder(&s->cc, buf+coeff_offset, + buf_size-coeff_offset); + s->ccp = &s->cc; + } else { + s->ccp = &s->c; + } + + return res; +} + +static void vp6_coeff_order_table_init(vp56_context_t *s) +{ + int i, pos, idx = 1; + + s->coeff_index_to_pos[0] = 0; + for (i=0; i<16; i++) + for (pos=1; pos<64; pos++) + if (s->coeff_reorder[pos] == i) + s->coeff_index_to_pos[idx++] = pos; +} + +static void vp6_default_models_init(vp56_context_t *s) +{ + s->vector_model_dct[0] = 0xA2; + s->vector_model_dct[1] = 0xA4; + s->vector_model_sig[0] = 0x80; + s->vector_model_sig[1] = 0x80; + + memcpy(s->mb_types_stats, vp56_def_mb_types_stats, sizeof(s->mb_types_stats)); + memcpy(s->vector_model_fdv, vp6_def_fdv_vector_model, sizeof(s->vector_model_fdv)); + memcpy(s->vector_model_pdv, vp6_def_pdv_vector_model, sizeof(s->vector_model_pdv)); + memcpy(s->coeff_model_runv, vp6_def_runv_coeff_model, sizeof(s->coeff_model_runv)); + memcpy(s->coeff_reorder, vp6_def_coeff_reorder, sizeof(s->coeff_reorder)); + + vp6_coeff_order_table_init(s); +} + +static void vp6_parse_vector_models(vp56_context_t *s) +{ + vp56_range_coder_t *c = &s->c; + int comp, node; + + for (comp=0; comp<2; comp++) { + if (vp56_rac_get_prob(c, vp6_sig_dct_pct[comp][0])) + s->vector_model_dct[comp] = vp56_rac_gets_nn(c, 7); + if (vp56_rac_get_prob(c, vp6_sig_dct_pct[comp][1])) + s->vector_model_sig[comp] = vp56_rac_gets_nn(c, 7); + } + + for (comp=0; comp<2; comp++) + for (node=0; node<7; node++) + if (vp56_rac_get_prob(c, vp6_pdv_pct[comp][node])) + s->vector_model_pdv[comp][node] = vp56_rac_gets_nn(c, 7); + + for (comp=0; comp<2; comp++) + for (node=0; node<8; node++) + if (vp56_rac_get_prob(c, vp6_fdv_pct[comp][node])) + s->vector_model_fdv[comp][node] = vp56_rac_gets_nn(c, 7); +} + +static void vp6_parse_coeff_models(vp56_context_t *s) +{ + vp56_range_coder_t *c = &s->c; + int def_prob[11]; + int node, cg, ctx, pos; + int ct; /* code type */ + int pt; /* plane type (0 for Y, 1 for U or V) */ + + memset(def_prob, 0x80, sizeof(def_prob)); + + for (pt=0; pt<2; pt++) + for (node=0; node<11; node++) + if (vp56_rac_get_prob(c, vp6_dccv_pct[pt][node])) { + def_prob[node] = vp56_rac_gets_nn(c, 7); + s->coeff_model_dccv[pt][node] = def_prob[node]; + } else if (s->frames[VP56_FRAME_CURRENT].key_frame) { + s->coeff_model_dccv[pt][node] = def_prob[node]; + } + + if (vp56_rac_get(c)) { + for (pos=1; pos<64; pos++) + if (vp56_rac_get_prob(c, vp6_coeff_reorder_pct[pos])) + s->coeff_reorder[pos] = vp56_rac_gets(c, 4); + vp6_coeff_order_table_init(s); + } + + for (cg=0; cg<2; cg++) + for (node=0; node<14; node++) + if (vp56_rac_get_prob(c, vp6_runv_pct[cg][node])) + s->coeff_model_runv[cg][node] = vp56_rac_gets_nn(c, 7); + + for (ct=0; ct<3; ct++) + for (pt=0; pt<2; pt++) + for (cg=0; cg<6; cg++) + for (node=0; node<11; node++) + if (vp56_rac_get_prob(c, vp6_ract_pct[ct][pt][cg][node])) { + def_prob[node] = vp56_rac_gets_nn(c, 7); + s->coeff_model_ract[pt][ct][cg][node] = def_prob[node]; + } else if (s->frames[VP56_FRAME_CURRENT].key_frame) { + s->coeff_model_ract[pt][ct][cg][node] = def_prob[node]; + } + + /* coeff_model_dcct is a linear combination of coeff_model_dccv */ + for (pt=0; pt<2; pt++) + for (ctx=0; ctx<3; ctx++) + for (node=0; node<5; node++) + s->coeff_model_dcct[pt][ctx][node] = clip(((s->coeff_model_dccv[pt][node] * vp6_dccv_lc[ctx][node][0] + 128) >> 8) + vp6_dccv_lc[ctx][node][1], 1, 255); +} + +static void vp6_parse_vector_adjustment(vp56_context_t *s, vp56_mv_t *vect) +{ + vp56_range_coder_t *c = &s->c; + int comp; + + *vect = (vp56_mv_t) {0,0}; + if (s->vector_candidate_pos < 2) + *vect = s->vector_candidate[0]; + + for (comp=0; comp<2; comp++) { + int i, delta = 0; + + if (vp56_rac_get_prob(c, s->vector_model_dct[comp])) { + static const uint8_t prob_order[] = {0, 1, 2, 7, 6, 5, 4}; + for (i=0; i<sizeof(prob_order); i++) { + int j = prob_order[i]; + delta |= vp56_rac_get_prob(c, s->vector_model_fdv[comp][j])<<j; + } + if (delta & 0xF0) + delta |= vp56_rac_get_prob(c, s->vector_model_fdv[comp][3])<<3; + else + delta |= 8; + } else { + delta = vp56_rac_get_tree(c, vp56_pva_tree, + s->vector_model_pdv[comp]); + } + + if (delta && vp56_rac_get_prob(c, s->vector_model_sig[comp])) + delta = -delta; + + if (!comp) + vect->x += delta; + else + vect->y += delta; + } +} + +static void vp6_parse_coeff(vp56_context_t *s) +{ + vp56_range_coder_t *c = s->ccp; + uint8_t *permute = s->scantable.permutated; + uint8_t *model, *model2, *model3; + int coeff, sign, coeff_idx; + int b, i, cg, idx, ctx; + int pt = 0; /* plane type (0 for Y, 1 for U or V) */ + + for (b=0; b<6; b++) { + int ct = 1; /* code type */ + int run = 1; + + if (b > 3) pt = 1; + + ctx = s->left_block[vp56_b6to4[b]].not_null_dc + + s->above_blocks[s->above_block_idx[b]].not_null_dc; + model = s->coeff_model_dccv[pt]; + model2 = s->coeff_model_dcct[pt][ctx]; + + for (coeff_idx=0; coeff_idx<64; ) { + if ((coeff_idx>1 && ct==0) || vp56_rac_get_prob(c, model2[0])) { + /* parse a coeff */ + if (coeff_idx == 0) { + s->left_block[vp56_b6to4[b]].not_null_dc = 1; + s->above_blocks[s->above_block_idx[b]].not_null_dc = 1; + } + + if (vp56_rac_get_prob(c, model2[2])) { + if (vp56_rac_get_prob(c, model2[3])) { + idx = vp56_rac_get_tree(c, vp56_pc_tree, model); + coeff = vp56_coeff_bias[idx]; + for (i=vp56_coeff_bit_length[idx]; i>=0; i--) + coeff += vp56_rac_get_prob(c, vp56_coeff_parse_table[idx][i]) << i; + } else { + if (vp56_rac_get_prob(c, model2[4])) + coeff = 3 + vp56_rac_get_prob(c, model[5]); + else + coeff = 2; + } + ct = 2; + } else { + ct = 1; + coeff = 1; + } + sign = vp56_rac_get(c); + coeff = (coeff ^ -sign) + sign; + if (coeff_idx) + coeff *= s->dequant_ac; + idx = s->coeff_index_to_pos[coeff_idx]; + s->block_coeff[b][permute[idx]] = coeff; + run = 1; + } else { + /* parse a run */ + ct = 0; + if (coeff_idx == 0) { + s->left_block[vp56_b6to4[b]].not_null_dc = 0; + s->above_blocks[s->above_block_idx[b]].not_null_dc = 0; + } else { + if (!vp56_rac_get_prob(c, model2[1])) + break; + + model3 = s->coeff_model_runv[coeff_idx >= 6]; + run = vp56_rac_get_tree(c, vp6_pcr_tree, model3); + if (!run) + for (run=9, i=0; i<6; i++) + run += vp56_rac_get_prob(c, model3[i+8]) << i; + } + } + + cg = vp6_coeff_groups[coeff_idx+=run]; + model = model2 = s->coeff_model_ract[pt][ct][cg]; + } + } +} + +static int vp6_adjust(int v, int t) +{ + int V = v, s = v >> 31; + V ^= s; + V -= s; + if (V-t-1 >= (unsigned)(t-1)) + return v; + V = 2*t - V; + V += s; + V ^= s; + return V; +} + +static int vp6_block_variance(uint8_t *src, int stride) +{ + int sum = 0, square_sum = 0; + int y, x; + + for (y=0; y<8; y+=2) { + for (x=0; x<8; x+=2) { + sum += src[x]; + square_sum += src[x]*src[x]; + } + src += 2*stride; + } + return (16*square_sum - sum*sum) >> 8; +} + +static void vp6_filter_hv2(vp56_context_t *s, uint8_t *dst, uint8_t *src, + int stride, int delta, int16_t weight) +{ + s->dsp.put_pixels_tab[1][0](dst, src, stride, 8); + s->dsp.biweight_h264_pixels_tab[3](dst, src+delta, stride, 2, + 8-weight, weight, 0); +} + +static void vp6_filter_hv4(uint8_t *dst, uint8_t *src, int stride, + int delta, const int16_t *weights) +{ + int x, y; + + for (y=0; y<8; y++) { + for (x=0; x<8; x++) { + dst[x] = clip_uint8(( src[x-delta ] * weights[0] + + src[x ] * weights[1] + + src[x+delta ] * weights[2] + + src[x+2*delta] * weights[3] + 64) >> 7); + } + src += stride; + dst += stride; + } +} + +static void vp6_filter_diag2(vp56_context_t *s, uint8_t *dst, uint8_t *src, + int stride, int h_weight, int v_weight) +{ + uint8_t *tmp = s->edge_emu_buffer+16; + int x, xmax; + + s->dsp.put_pixels_tab[1][0](tmp, src, stride, 8); + s->dsp.biweight_h264_pixels_tab[3](tmp, src+1, stride, 2, + 8-h_weight, h_weight, 0); + /* we need a 8x9 block to do vertical filter, so compute one more line */ + for (x=8*stride, xmax=x+8; x<xmax; x++) + tmp[x] = (src[x]*(8-h_weight) + src[x+1]*h_weight + 4) >> 3; + + s->dsp.put_pixels_tab[1][0](dst, tmp, stride, 8); + s->dsp.biweight_h264_pixels_tab[3](dst, tmp+stride, stride, 2, + 8-v_weight, v_weight, 0); +} + +static void vp6_filter_diag4(uint8_t *dst, uint8_t *src, int stride, + const int16_t *h_weights,const int16_t *v_weights) +{ + int x, y; + int tmp[8*11]; + int *t = tmp; + + src -= stride; + + for (y=0; y<11; y++) { + for (x=0; x<8; x++) { + t[x] = clip_uint8(( src[x-1] * h_weights[0] + + src[x ] * h_weights[1] + + src[x+1] * h_weights[2] + + src[x+2] * h_weights[3] + 64) >> 7); + } + src += stride; + t += 8; + } + + t = tmp + 8; + for (y=0; y<8; y++) { + for (x=0; x<8; x++) { + dst[x] = clip_uint8(( t[x-8 ] * v_weights[0] + + t[x ] * v_weights[1] + + t[x+8 ] * v_weights[2] + + t[x+16] * v_weights[3] + 64) >> 7); + } + dst += stride; + t += 8; + } +} + +static void vp6_filter(vp56_context_t *s, uint8_t *dst, uint8_t *src, + int offset1, int offset2, int stride, + vp56_mv_t mv, int mask, int select, int luma) +{ + int filter4 = 0; + int x8 = mv.x & mask; + int y8 = mv.y & mask; + + if (luma) { + x8 *= 2; + y8 *= 2; + filter4 = s->filter_mode; + if (filter4 == 2) { + if (s->max_vector_length && + (FFABS(mv.x) > s->max_vector_length || + FFABS(mv.y) > s->max_vector_length)) { + filter4 = 0; + } else if (s->sample_variance_threshold + && (vp6_block_variance(src+offset1, stride) + < s->sample_variance_threshold)) { + filter4 = 0; + } + } + } + + if ((y8 && (offset2-offset1)*s->flip<0) || (!y8 && offset1 > offset2)) { + offset1 = offset2; + } + + if (filter4) { + if (!y8) { /* left or right combine */ + vp6_filter_hv4(dst, src+offset1, stride, 1, + vp6_block_copy_filter[select][x8]); + } else if (!x8) { /* above or below combine */ + vp6_filter_hv4(dst, src+offset1, stride, stride, + vp6_block_copy_filter[select][y8]); + } else if ((mv.x^mv.y) >> 31) { /* lower-left or upper-right combine */ + vp6_filter_diag4(dst, src+offset1-1, stride, + vp6_block_copy_filter[select][x8], + vp6_block_copy_filter[select][y8]); + } else { /* lower-right or upper-left combine */ + vp6_filter_diag4(dst, src+offset1, stride, + vp6_block_copy_filter[select][x8], + vp6_block_copy_filter[select][y8]); + } + } else { + if (!y8) { /* left or right combine */ + vp6_filter_hv2(s, dst, src+offset1, stride, 1, x8); + } else if (!x8) { /* above or below combine */ + vp6_filter_hv2(s, dst, src+offset1, stride, stride, y8); + } else if ((mv.x^mv.y) >> 31) { /* lower-left or upper-right combine */ + vp6_filter_diag2(s, dst, src+offset1-1, stride, x8, y8); + } else { /* lower-right or upper-left combine */ + vp6_filter_diag2(s, dst, src+offset1, stride, x8, y8); + } + } +} + +static int vp6_decode_init(AVCodecContext *avctx) +{ + vp56_context_t *s = avctx->priv_data; + + vp56_init(s, avctx, avctx->codec->id == CODEC_ID_VP6); + s->vp56_coord_div = vp6_coord_div; + s->parse_vector_adjustment = vp6_parse_vector_adjustment; + s->adjust = vp6_adjust; + s->filter = vp6_filter; + s->parse_coeff = vp6_parse_coeff; + s->default_models_init = vp6_default_models_init; + s->parse_vector_models = vp6_parse_vector_models; + s->parse_coeff_models = vp6_parse_coeff_models; + s->parse_header = vp6_parse_header; + + return 0; +} + +AVCodec vp6_decoder = { + "vp6", + CODEC_TYPE_VIDEO, + CODEC_ID_VP6, + sizeof(vp56_context_t), + vp6_decode_init, + NULL, + vp56_free, + vp56_decode_frame, +}; + +/* flash version, not flipped upside-down */ +AVCodec vp6f_decoder = { + "vp6f", + CODEC_TYPE_VIDEO, + CODEC_ID_VP6F, + sizeof(vp56_context_t), + vp6_decode_init, + NULL, + vp56_free, + vp56_decode_frame, +}; diff --git a/src/libffmpeg/libavcodec/vp6data.h b/src/libffmpeg/libavcodec/vp6data.h new file mode 100644 index 000000000..0545a9d66 --- /dev/null +++ b/src/libffmpeg/libavcodec/vp6data.h @@ -0,0 +1,300 @@ +/** + * @file vp6data.h + * VP6 compatible video decoder + * + * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef VP6DATA_H +#define VP6DATA_H + +#include "vp56data.h" + +static const uint8_t vp6_def_fdv_vector_model[2][8] = { + { 247, 210, 135, 68, 138, 220, 239, 246 }, + { 244, 184, 201, 44, 173, 221, 239, 253 }, +}; + +static const uint8_t vp6_def_pdv_vector_model[2][7] = { + { 225, 146, 172, 147, 214, 39, 156 }, + { 204, 170, 119, 235, 140, 230, 228 }, +}; + +static const uint8_t vp6_def_coeff_reorder[] = { + 0, 0, 1, 1, 1, 2, 2, 2, + 2, 2, 2, 3, 3, 4, 4, 4, + 5, 5, 5, 5, 6, 6, 7, 7, + 7, 7, 7, 8, 8, 9, 9, 9, + 9, 9, 9, 10, 10, 11, 11, 11, + 11, 11, 11, 12, 12, 12, 12, 12, + 12, 13, 13, 13, 13, 13, 14, 14, + 14, 14, 15, 15, 15, 15, 15, 15, +}; + +static const uint8_t vp6_def_runv_coeff_model[2][14] = { + { 198, 197, 196, 146, 198, 204, 169, 142, 130, 136, 149, 149, 191, 249 }, + { 135, 201, 181, 154, 98, 117, 132, 126, 146, 169, 184, 240, 246, 254 }, +}; + +static const uint8_t vp6_sig_dct_pct[2][2] = { + { 237, 246 }, + { 231, 243 }, +}; + +static const uint8_t vp6_pdv_pct[2][7] = { + { 253, 253, 254, 254, 254, 254, 254 }, + { 245, 253, 254, 254, 254, 254, 254 }, +}; + +static const uint8_t vp6_fdv_pct[2][8] = { + { 254, 254, 254, 254, 254, 250, 250, 252 }, + { 254, 254, 254, 254, 254, 251, 251, 254 }, +}; + +static const uint8_t vp6_dccv_pct[2][11] = { + { 146, 255, 181, 207, 232, 243, 238, 251, 244, 250, 249 }, + { 179, 255, 214, 240, 250, 255, 244, 255, 255, 255, 255 }, +}; + +static const uint8_t vp6_coeff_reorder_pct[] = { + 255, 132, 132, 159, 153, 151, 161, 170, + 164, 162, 136, 110, 103, 114, 129, 118, + 124, 125, 132, 136, 114, 110, 142, 135, + 134, 123, 143, 126, 153, 183, 166, 161, + 171, 180, 179, 164, 203, 218, 225, 217, + 215, 206, 203, 217, 229, 241, 248, 243, + 253, 255, 253, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, +}; + +static const uint8_t vp6_runv_pct[2][14] = { + { 219, 246, 238, 249, 232, 239, 249, 255, 248, 253, 239, 244, 241, 248 }, + { 198, 232, 251, 253, 219, 241, 253, 255, 248, 249, 244, 238, 251, 255 }, +}; + +static const uint8_t vp6_ract_pct[3][2][6][11] = { + { { { 227, 246, 230, 247, 244, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 209, 231, 231, 249, 249, 253, 255, 255, 255 }, + { 255, 255, 225, 242, 241, 251, 253, 255, 255, 255, 255 }, + { 255, 255, 241, 253, 252, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 248, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } }, + { { 240, 255, 248, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 240, 253, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } } }, + { { { 206, 203, 227, 239, 247, 255, 253, 255, 255, 255, 255 }, + { 207, 199, 220, 236, 243, 252, 252, 255, 255, 255, 255 }, + { 212, 219, 230, 243, 244, 253, 252, 255, 255, 255, 255 }, + { 236, 237, 247, 252, 253, 255, 255, 255, 255, 255, 255 }, + { 240, 240, 248, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } }, + { { 230, 233, 249, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 238, 238, 250, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 248, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } } }, + { { { 225, 239, 227, 231, 244, 253, 243, 255, 255, 253, 255 }, + { 232, 234, 224, 228, 242, 249, 242, 252, 251, 251, 255 }, + { 235, 249, 238, 240, 251, 255, 249, 255, 253, 253, 255 }, + { 249, 253, 251, 250, 255, 255, 255, 255, 255, 255, 255 }, + { 251, 250, 249, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } }, + { { 243, 244, 250, 250, 255, 255, 255, 255, 255, 255, 255 }, + { 249, 248, 250, 253, 255, 255, 255, 255, 255, 255, 255 }, + { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 }, + { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 } } } +}; + +static const int vp6_dccv_lc[3][5][2] = { + { { 122, 133 }, { 0, 1 }, { 78, 171 }, { 139, 117 }, { 168, 79 } }, + { { 133, 51 }, { 0, 1 }, { 169, 71 }, { 214, 44 }, { 210, 38 } }, + { { 142, -16 }, { 0, 1 }, { 221, -30 }, { 246, -3 }, { 203, 17 } }, +}; + +static const uint8_t vp6_coeff_groups[] = { + 0, 0, 1, 1, 1, 2, 2, 2, + 2, 2, 2, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, +}; + +static const int16_t vp6_block_copy_filter[17][8][4] = { + { { 0, 128, 0, 0 }, /* 0 */ + { -3, 122, 9, 0 }, + { -4, 109, 24, -1 }, + { -5, 91, 45, -3 }, + { -4, 68, 68, -4 }, + { -3, 45, 91, -5 }, + { -1, 24, 109, -4 }, + { 0, 9, 122, -3 } }, + { { 0, 128, 0, 0 }, /* 1 */ + { -4, 124, 9, -1 }, + { -5, 110, 25, -2 }, + { -6, 91, 46, -3 }, + { -5, 69, 69, -5 }, + { -3, 46, 91, -6 }, + { -2, 25, 110, -5 }, + { -1, 9, 124, -4 } }, + { { 0, 128, 0, 0 }, /* 2 */ + { -4, 123, 10, -1 }, + { -6, 110, 26, -2 }, + { -7, 92, 47, -4 }, + { -6, 70, 70, -6 }, + { -4, 47, 92, -7 }, + { -2, 26, 110, -6 }, + { -1, 10, 123, -4 } }, + { { 0, 128, 0, 0 }, /* 3 */ + { -5, 124, 10, -1 }, + { -7, 110, 27, -2 }, + { -7, 91, 48, -4 }, + { -6, 70, 70, -6 }, + { -4, 48, 92, -8 }, + { -2, 27, 110, -7 }, + { -1, 10, 124, -5 } }, + { { 0, 128, 0, 0 }, /* 4 */ + { -6, 124, 11, -1 }, + { -8, 111, 28, -3 }, + { -8, 92, 49, -5 }, + { -7, 71, 71, -7 }, + { -5, 49, 92, -8 }, + { -3, 28, 111, -8 }, + { -1, 11, 124, -6 } }, + { { 0, 128, 0, 0 }, /* 5 */ + { -6, 123, 12, -1 }, + { -9, 111, 29, -3 }, + { -9, 93, 50, -6 }, + { -8, 72, 72, -8 }, + { -6, 50, 93, -9 }, + { -3, 29, 111, -9 }, + { -1, 12, 123, -6 } }, + { { 0, 128, 0, 0 }, /* 6 */ + { -7, 124, 12, -1 }, + { -10, 111, 30, -3 }, + { -10, 93, 51, -6 }, + { -9, 73, 73, -9 }, + { -6, 51, 93, -10 }, + { -3, 30, 111, -10 }, + { -1, 12, 124, -7 } }, + { { 0, 128, 0, 0 }, /* 7 */ + { -7, 123, 13, -1 }, + { -11, 112, 31, -4 }, + { -11, 94, 52, -7 }, + { -10, 74, 74, -10 }, + { -7, 52, 94, -11 }, + { -4, 31, 112, -11 }, + { -1, 13, 123, -7 } }, + { { 0, 128, 0, 0 }, /* 8 */ + { -8, 124, 13, -1 }, + { -12, 112, 32, -4 }, + { -12, 94, 53, -7 }, + { -10, 74, 74, -10 }, + { -7, 53, 94, -12 }, + { -4, 32, 112, -12 }, + { -1, 13, 124, -8 } }, + { { 0, 128, 0, 0 }, /* 9 */ + { -9, 124, 14, -1 }, + { -13, 112, 33, -4 }, + { -13, 95, 54, -8 }, + { -11, 75, 75, -11 }, + { -8, 54, 95, -13 }, + { -4, 33, 112, -13 }, + { -1, 14, 124, -9 } }, + { { 0, 128, 0, 0 }, /* 10 */ + { -9, 123, 15, -1 }, + { -14, 113, 34, -5 }, + { -14, 95, 55, -8 }, + { -12, 76, 76, -12 }, + { -8, 55, 95, -14 }, + { -5, 34, 112, -13 }, + { -1, 15, 123, -9 } }, + { { 0, 128, 0, 0 }, /* 11 */ + { -10, 124, 15, -1 }, + { -14, 113, 34, -5 }, + { -15, 96, 56, -9 }, + { -13, 77, 77, -13 }, + { -9, 56, 96, -15 }, + { -5, 34, 113, -14 }, + { -1, 15, 124, -10 } }, + { { 0, 128, 0, 0 }, /* 12 */ + { -10, 123, 16, -1 }, + { -15, 113, 35, -5 }, + { -16, 98, 56, -10 }, + { -14, 78, 78, -14 }, + { -10, 56, 98, -16 }, + { -5, 35, 113, -15 }, + { -1, 16, 123, -10 } }, + { { 0, 128, 0, 0 }, /* 13 */ + { -11, 124, 17, -2 }, + { -16, 113, 36, -5 }, + { -17, 98, 57, -10 }, + { -14, 78, 78, -14 }, + { -10, 57, 98, -17 }, + { -5, 36, 113, -16 }, + { -2, 17, 124, -11 } }, + { { 0, 128, 0, 0 }, /* 14 */ + { -12, 125, 17, -2 }, + { -17, 114, 37, -6 }, + { -18, 99, 58, -11 }, + { -15, 79, 79, -15 }, + { -11, 58, 99, -18 }, + { -6, 37, 114, -17 }, + { -2, 17, 125, -12 } }, + { { 0, 128, 0, 0 }, /* 15 */ + { -12, 124, 18, -2 }, + { -18, 114, 38, -6 }, + { -19, 99, 59, -11 }, + { -16, 80, 80, -16 }, + { -11, 59, 99, -19 }, + { -6, 38, 114, -18 }, + { -2, 18, 124, -12 } }, + { { 0, 128, 0, 0 }, /* 16 */ + { -4, 118, 16, -2 }, + { -7, 106, 34, -5 }, + { -8, 90, 53, -7 }, + { -8, 72, 72, -8 }, + { -7, 53, 90, -8 }, + { -5, 34, 106, -7 }, + { -2, 16, 118, -4 } }, +}; + +static const vp56_tree_t vp6_pcr_tree[] = { + { 8, 0}, + { 4, 1}, + { 2, 2}, {-1}, {-2}, + { 2, 3}, {-3}, {-4}, + { 8, 4}, + { 4, 5}, + { 2, 6}, {-5}, {-6}, + { 2, 7}, {-7}, {-8}, + {-0}, +}; + +static const uint8_t vp6_coord_div[] = { 4, 4, 4, 4, 8, 8 }; + +#endif /* VP6DATA_H */ diff --git a/src/libffmpeg/libavcodec/wavpack.c b/src/libffmpeg/libavcodec/wavpack.c new file mode 100644 index 000000000..b462174da --- /dev/null +++ b/src/libffmpeg/libavcodec/wavpack.c @@ -0,0 +1,556 @@ +/* + * WavPack lossless audio decoder + * Copyright (c) 2006 Konstantin Shishkov + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +#define ALT_BITSTREAM_READER_LE +#include "avcodec.h" +#include "bitstream.h" + +/** + * @file wavpack.c + * WavPack lossless audio decoder + */ + +#define WV_JOINT 0x0010 + +enum WP_ID_Flags{ + WP_IDF_MASK = 0x1F, + WP_IDF_IGNORE = 0x20, + WP_IDF_ODD = 0x40, + WP_IDF_LONG = 0x80 +}; + +enum WP_ID{ + WP_ID_DUMMY = 0, + WP_ID_ENCINFO, + WP_ID_DECTERMS, + WP_ID_DECWEIGHTS, + WP_ID_DECSAMPLES, + WP_ID_ENTROPY, + WP_ID_HYBRID, + WP_ID_SHAPING, + WP_ID_FLOATINFO, + WP_ID_INT32INFO, + WP_ID_DATA, + WP_ID_CORR, + WP_ID_FLT, + WP_ID_CHANINFO +}; + +#define MAX_TERMS 16 + +typedef struct Decorr { + int delta; + int value; + int weightA; + int weightB; + int samplesA[8]; + int samplesB[8]; +} Decorr; + +typedef struct WavpackContext { + AVCodecContext *avctx; + int stereo; + int joint; + uint32_t CRC; + GetBitContext gb; + int data_size; // in bits + int samples; + int median[6]; + int terms; + Decorr decorr[MAX_TERMS]; + int zero, one, zeroes; +} WavpackContext; + +// exponent table copied from WavPack source +static const uint8_t wp_exp2_table [256] = { + 0x00, 0x01, 0x01, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x08, 0x09, 0x0a, 0x0b, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0e, 0x0f, 0x10, 0x10, 0x11, 0x12, 0x13, 0x13, 0x14, 0x15, 0x16, 0x16, + 0x17, 0x18, 0x19, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1d, 0x1e, 0x1f, 0x20, 0x20, 0x21, 0x22, 0x23, + 0x24, 0x24, 0x25, 0x26, 0x27, 0x28, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3a, 0x3b, 0x3c, 0x3d, + 0x3e, 0x3f, 0x40, 0x41, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x48, 0x49, 0x4a, 0x4b, + 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, + 0x5b, 0x5c, 0x5d, 0x5e, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, + 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, + 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x87, 0x88, 0x89, 0x8a, + 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, + 0x9c, 0x9d, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, + 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, + 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc8, 0xc9, 0xca, 0xcb, 0xcd, 0xce, 0xcf, 0xd0, 0xd2, 0xd3, 0xd4, + 0xd6, 0xd7, 0xd8, 0xd9, 0xdb, 0xdc, 0xdd, 0xde, 0xe0, 0xe1, 0xe2, 0xe4, 0xe5, 0xe6, 0xe8, 0xe9, + 0xea, 0xec, 0xed, 0xee, 0xf0, 0xf1, 0xf2, 0xf4, 0xf5, 0xf6, 0xf8, 0xf9, 0xfa, 0xfc, 0xfd, 0xff +}; + +static av_always_inline int wp_exp2(int16_t val) +{ + int res, neg = 0; + + if(val < 0){ + val = -val; + neg = 1; + } + + res = wp_exp2_table[val & 0xFF] | 0x100; + val >>= 8; + res = (val > 9) ? (res << (val - 9)) : (res >> (9 - val)); + return neg ? -res : res; +} + +static inline int get_unary(GetBitContext *gb){ + int r=0; + while(get_bits1(gb) && r<33)r++; + return r; +} + +// macros for manipulating median values +#define GET_MED(n) ((median[n] >> 4) + 1) +#define DEC_MED(n) median[n] -= ((median[n] + (128>>n) - 2) / (128>>n)) * 2 +#define INC_MED(n) median[n] += ((median[n] + (128>>n)) / (128>>n)) * 5 + +// macros for applying weight +#define UPDATE_WEIGHT_CLIP(weight, delta, samples, in) \ + if(samples && in){ \ + if((samples ^ in) < 0){ \ + weight -= delta; \ + if(weight < -1024) weight = -1024; \ + }else{ \ + weight += delta; \ + if(weight > 1024) weight = 1024; \ + } \ + } + + +static av_always_inline int get_tail(GetBitContext *gb, int k) +{ + int p, e, res; + + if(k<1)return 0; + p = av_log2(k); + e = (1 << (p + 1)) - k - 1; + res = p ? get_bits(gb, p) : 0; + if(res >= e){ + res = (res<<1) - e + get_bits1(gb); + } + return res; +} + +static int wv_get_value(WavpackContext *ctx, GetBitContext *gb, int *median, int *last) +{ + int t, t2; + int sign, base, add, ret; + + *last = 0; + + if((ctx->median[0] < 2U) && (ctx->median[3] < 2U) && !ctx->zero && !ctx->one){ + if(ctx->zeroes){ + ctx->zeroes--; + if(ctx->zeroes) + return 0; + }else{ + t = get_unary(gb); + if(t >= 2) t = get_bits(gb, t - 1) | (1 << (t-1)); + ctx->zeroes = t; + if(ctx->zeroes){ + memset(ctx->median, 0, sizeof(ctx->median)); + return 0; + } + } + } + + if(get_bits_count(gb) >= ctx->data_size){ + *last = 1; + return 0; + } + + if(ctx->zero){ + t = 0; + ctx->zero = 0; + }else{ + t = get_unary(gb); + if(get_bits_count(gb) >= ctx->data_size){ + *last = 1; + return 0; + } + if(t == 16) { + t2 = get_unary(gb); + if(t2 < 2) t += t2; + else t += get_bits(gb, t2 - 1) | (1 << (t2 - 1)); + } + + if(ctx->one){ + ctx->one = t&1; + t = (t>>1) + 1; + }else{ + ctx->one = t&1; + t >>= 1; + } + ctx->zero = !ctx->one; + } + + if(!t){ + base = 0; + add = GET_MED(0) - 1; + DEC_MED(0); + }else if(t == 1){ + base = GET_MED(0); + add = GET_MED(1) - 1; + INC_MED(0); + DEC_MED(1); + }else if(t == 2){ + base = GET_MED(0) + GET_MED(1); + add = GET_MED(2) - 1; + INC_MED(0); + INC_MED(1); + DEC_MED(2); + }else{ + base = GET_MED(0) + GET_MED(1) + GET_MED(2) * (t - 2); + add = GET_MED(2) - 1; + INC_MED(0); + INC_MED(1); + INC_MED(2); + } + ret = base + get_tail(gb, add); + sign = get_bits1(gb); + return sign ? ~ret : ret; +} + +static int wv_unpack_stereo(WavpackContext *s, GetBitContext *gb, int16_t *dst) +{ + int i, j, count = 0; + int last, t; + int A, B, L, L2, R, R2; + int pos = 0; + uint32_t crc = 0xFFFFFFFF; + + s->one = s->zero = s->zeroes = 0; + do{ + L = wv_get_value(s, gb, s->median, &last); + if(last) break; + R = wv_get_value(s, gb, s->median + 3, &last); + if(last) break; + for(i = 0; i < s->terms; i++){ + t = s->decorr[i].value; + j = 0; + if(t > 0){ + if(t > 8){ + if(t & 1){ + A = 2 * s->decorr[i].samplesA[0] - s->decorr[i].samplesA[1]; + B = 2 * s->decorr[i].samplesB[0] - s->decorr[i].samplesB[1]; + }else{ + A = (3 * s->decorr[i].samplesA[0] - s->decorr[i].samplesA[1]) >> 1; + B = (3 * s->decorr[i].samplesB[0] - s->decorr[i].samplesB[1]) >> 1; + } + s->decorr[i].samplesA[1] = s->decorr[i].samplesA[0]; + s->decorr[i].samplesB[1] = s->decorr[i].samplesB[0]; + j = 0; + }else{ + A = s->decorr[i].samplesA[pos]; + B = s->decorr[i].samplesB[pos]; + j = (pos + t) & 7; + } + L2 = L + ((s->decorr[i].weightA * A + 512) >> 10); + R2 = R + ((s->decorr[i].weightB * B + 512) >> 10); + if(A && L) s->decorr[i].weightA -= ((((L ^ A) >> 30) & 2) - 1) * s->decorr[i].delta; + if(B && R) s->decorr[i].weightB -= ((((R ^ B) >> 30) & 2) - 1) * s->decorr[i].delta; + s->decorr[i].samplesA[j] = L = L2; + s->decorr[i].samplesB[j] = R = R2; + }else if(t == -1){ + L2 = L + ((s->decorr[i].weightA * s->decorr[i].samplesA[0] + 512) >> 10); + UPDATE_WEIGHT_CLIP(s->decorr[i].weightA, s->decorr[i].delta, s->decorr[i].samplesA[0], L); + L = L2; + R2 = R + ((s->decorr[i].weightB * L2 + 512) >> 10); + UPDATE_WEIGHT_CLIP(s->decorr[i].weightB, s->decorr[i].delta, L2, R); + R = R2; + s->decorr[i].samplesA[0] = R; + }else{ + R2 = R + ((s->decorr[i].weightB * s->decorr[i].samplesB[0] + 512) >> 10); + UPDATE_WEIGHT_CLIP(s->decorr[i].weightB, s->decorr[i].delta, s->decorr[i].samplesB[0], R); + R = R2; + + if(t == -3){ + R2 = s->decorr[i].samplesA[0]; + s->decorr[i].samplesA[0] = R; + } + + L2 = L + ((s->decorr[i].weightA * R2 + 512) >> 10); + UPDATE_WEIGHT_CLIP(s->decorr[i].weightA, s->decorr[i].delta, R2, L); + L = L2; + s->decorr[i].samplesB[0] = L; + } + } + pos = (pos + 1) & 7; + if(s->joint) + L += (R -= (L >> 1)); + crc = (crc * 3 + L) * 3 + R; + *dst++ = L; + *dst++ = R; + + count++; + }while(!last && count < s->samples); + + if(crc != s->CRC){ + av_log(s->avctx, AV_LOG_ERROR, "CRC error\n"); + return -1; + } + return count * 2; +} + +static int wv_unpack_mono(WavpackContext *s, GetBitContext *gb, int16_t *dst) +{ + int i, j, count = 0; + int last, t; + int A, S, T; + int pos = 0; + uint32_t crc = 0xFFFFFFFF; + + s->one = s->zero = s->zeroes = 0; + do{ + T = wv_get_value(s, gb, s->median, &last); + S = 0; + if(last) break; + for(i = 0; i < s->terms; i++){ + t = s->decorr[i].value; + if(t > 8){ + if(t & 1) + A = 2 * s->decorr[i].samplesA[0] - s->decorr[i].samplesA[1]; + else + A = (3 * s->decorr[i].samplesA[0] - s->decorr[i].samplesA[1]) >> 1; + s->decorr[i].samplesA[1] = s->decorr[i].samplesA[0]; + j = 0; + }else{ + A = s->decorr[i].samplesA[pos]; + j = (pos + t) & 7; + } + S = T + ((s->decorr[i].weightA * A + 512) >> 10); + if(A && T) s->decorr[i].weightA -= ((((T ^ A) >> 30) & 2) - 1) * s->decorr[i].delta; + s->decorr[i].samplesA[j] = T = S; + } + pos = (pos + 1) & 7; + crc = crc * 3 + S; + *dst++ = S; + count++; + }while(!last && count < s->samples); + + if(crc != s->CRC){ + av_log(s->avctx, AV_LOG_ERROR, "CRC error\n"); + return -1; + } + return count; +} + +static int wavpack_decode_init(AVCodecContext *avctx) +{ + WavpackContext *s = avctx->priv_data; + + s->avctx = avctx; + s->stereo = (avctx->channels == 2); + + return 0; +} + +static int wavpack_decode_close(AVCodecContext *avctx) +{ +// WavpackContext *s = avctx->priv_data; + + return 0; +} + +static int wavpack_decode_frame(AVCodecContext *avctx, + void *data, int *data_size, + uint8_t *buf, int buf_size) +{ + WavpackContext *s = avctx->priv_data; + int16_t *samples = data; + int samplecount; + int got_terms = 0, got_weights = 0, got_samples = 0, got_entropy = 0, got_bs = 0; + uint8_t* buf_end = buf + buf_size; + int i, j, id, size, ssize, weights, t; + + if (buf_size == 0) return 0; + + memset(s->decorr, 0, MAX_TERMS * sizeof(Decorr)); + + s->samples = AV_RL32(buf); buf += 4; + if(!s->samples) return buf_size; + /* should not happen but who knows */ + if(s->samples * 2 * avctx->channels > AVCODEC_MAX_AUDIO_FRAME_SIZE){ + av_log(avctx, AV_LOG_ERROR, "Packet size is too big to be handled in lavc!\n"); + return -1; + } + s->joint = AV_RL32(buf) & WV_JOINT; buf += 4; + s->CRC = AV_RL32(buf); buf += 4; + // parse metadata blocks + while(buf < buf_end){ + id = *buf++; + size = *buf++; + if(id & WP_IDF_LONG) { + size |= (*buf++) << 8; + size |= (*buf++) << 16; + } + size <<= 1; // size is specified in words + ssize = size; + if(id & WP_IDF_ODD) size--; + if(size < 0){ + av_log(avctx, AV_LOG_ERROR, "Got incorrect block %02X with size %i\n", id, size); + break; + } + if(buf + ssize > buf_end){ + av_log(avctx, AV_LOG_ERROR, "Block size %i is out of bounds\n", size); + break; + } + if(id & WP_IDF_IGNORE){ + buf += ssize; + continue; + } + switch(id & WP_IDF_MASK){ + case WP_ID_DECTERMS: + s->terms = size; + if(s->terms > MAX_TERMS){ + av_log(avctx, AV_LOG_ERROR, "Too many decorrelation terms\n"); + buf += ssize; + continue; + } + for(i = 0; i < s->terms; i++) { + s->decorr[s->terms - i - 1].value = (*buf & 0x1F) - 5; + s->decorr[s->terms - i - 1].delta = *buf >> 5; + buf++; + } + got_terms = 1; + break; + case WP_ID_DECWEIGHTS: + if(!got_terms){ + av_log(avctx, AV_LOG_ERROR, "No decorrelation terms met\n"); + continue; + } + weights = size >> s->stereo; + if(weights > MAX_TERMS || weights > s->terms){ + av_log(avctx, AV_LOG_ERROR, "Too many decorrelation weights\n"); + buf += ssize; + continue; + } + for(i = 0; i < weights; i++) { + t = (int8_t)(*buf++); + s->decorr[s->terms - i - 1].weightA = t << 3; + if(s->decorr[s->terms - i - 1].weightA > 0) + s->decorr[s->terms - i - 1].weightA += (s->decorr[s->terms - i - 1].weightA + 64) >> 7; + if(s->stereo){ + t = (int8_t)(*buf++); + s->decorr[s->terms - i - 1].weightB = t << 3; + if(s->decorr[s->terms - i - 1].weightB > 0) + s->decorr[s->terms - i - 1].weightB += (s->decorr[s->terms - i - 1].weightB + 64) >> 7; + } + } + got_weights = 1; + break; + case WP_ID_DECSAMPLES: + if(!got_terms){ + av_log(avctx, AV_LOG_ERROR, "No decorrelation terms met\n"); + continue; + } + t = 0; + for(i = s->terms - 1; (i >= 0) && (t < size); i--) { + if(s->decorr[i].value > 8){ + s->decorr[i].samplesA[0] = wp_exp2(AV_RL16(buf)); buf += 2; + s->decorr[i].samplesA[1] = wp_exp2(AV_RL16(buf)); buf += 2; + if(s->stereo){ + s->decorr[i].samplesB[0] = wp_exp2(AV_RL16(buf)); buf += 2; + s->decorr[i].samplesB[1] = wp_exp2(AV_RL16(buf)); buf += 2; + t += 4; + } + t += 4; + }else if(s->decorr[i].value < 0){ + s->decorr[i].samplesA[0] = wp_exp2(AV_RL16(buf)); buf += 2; + s->decorr[i].samplesB[0] = wp_exp2(AV_RL16(buf)); buf += 2; + t += 4; + }else{ + for(j = 0; j < s->decorr[i].value; j++){ + s->decorr[i].samplesA[j] = wp_exp2(AV_RL16(buf)); buf += 2; + if(s->stereo){ + s->decorr[i].samplesB[j] = wp_exp2(AV_RL16(buf)); buf += 2; + } + } + t += s->decorr[i].value * 2 * avctx->channels; + } + } + got_samples = 1; + break; + case WP_ID_ENTROPY: + if(size != 6 * avctx->channels){ + av_log(avctx, AV_LOG_ERROR, "Entropy vars size should be %i, got %i", 6 * avctx->channels, size); + buf += ssize; + continue; + } + for(i = 0; i < 3 * avctx->channels; i++){ + s->median[i] = wp_exp2(AV_RL16(buf)); + buf += 2; + } + got_entropy = 1; + break; + case WP_ID_DATA: + init_get_bits(&s->gb, buf, size * 8); + s->data_size = size * 8; + buf += size; + got_bs = 1; + break; + default: + buf += size; + } + if(id & WP_IDF_ODD) buf++; + } + if(!got_terms){ + av_log(avctx, AV_LOG_ERROR, "No block with decorrelation terms\n"); + return -1; + } + if(!got_weights){ + av_log(avctx, AV_LOG_ERROR, "No block with decorrelation weights\n"); + return -1; + } + if(!got_samples){ + av_log(avctx, AV_LOG_ERROR, "No block with decorrelation samples\n"); + return -1; + } + if(!got_entropy){ + av_log(avctx, AV_LOG_ERROR, "No block with entropy info\n"); + return -1; + } + if(!got_bs){ + av_log(avctx, AV_LOG_ERROR, "Packed samples not found\n"); + return -1; + } + + if(s->stereo) + samplecount = wv_unpack_stereo(s, &s->gb, samples); + else + samplecount = wv_unpack_mono(s, &s->gb, samples); + *data_size = samplecount * 2; + + return buf_size; +} + +AVCodec wavpack_decoder = { + "wavpack", + CODEC_TYPE_AUDIO, + CODEC_ID_WAVPACK, + sizeof(WavpackContext), + wavpack_decode_init, + NULL, + wavpack_decode_close, + wavpack_decode_frame, +}; diff --git a/src/libspucc/.cvsignore b/src/libffmpeg/libavutil/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libspucc/.cvsignore +++ b/src/libffmpeg/libavutil/.hgignore diff --git a/src/libffmpeg/libavutil/intreadwrite.h b/src/libffmpeg/libavutil/intreadwrite.h new file mode 100644 index 000000000..e6db5ce6f --- /dev/null +++ b/src/libffmpeg/libavutil/intreadwrite.h @@ -0,0 +1,65 @@ +#ifndef INTREADWRITE_H +#define INTREADWRITE_H + +#ifdef __GNUC__ + +struct unaligned_64 { uint64_t l; } __attribute__((packed)); +struct unaligned_32 { uint32_t l; } __attribute__((packed)); +struct unaligned_16 { uint16_t l; } __attribute__((packed)); + +#define LD16(a) (((const struct unaligned_16 *) (a))->l) +#define LD32(a) (((const struct unaligned_32 *) (a))->l) +#define LD64(a) (((const struct unaligned_64 *) (a))->l) + +#define ST16(a, b) (((struct unaligned_16 *) (a))->l) = (b) +#define ST32(a, b) (((struct unaligned_32 *) (a))->l) = (b) + +#else /* __GNUC__ */ + +#define LD16(a) (*((uint16_t*)(a))) +#define LD32(a) (*((uint32_t*)(a))) +#define LD64(a) (*((uint64_t*)(a))) + +#define ST16(a, b) *((uint16_t*)(a)) = (b) +#define ST32(a, b) *((uint32_t*)(a)) = (b) + +#endif /* !__GNUC__ */ + +/* endian macros */ +#define AV_RB8(x) (((uint8_t*)(x))[0]) +#define AV_WB8(p, i, d) { ((uint8_t*)(p))[(i)] = (d); } + +#define AV_RB16(x) ((((uint8_t*)(x))[0] << 8) | ((uint8_t*)(x))[1]) +#define AV_WB16(p, i, d) { \ + ((uint8_t*)(p))[(i)+1] = (d); \ + ((uint8_t*)(p))[(i)] = (d)>>8; } + +#define AV_RB32(x) ((((uint8_t*)(x))[0] << 24) | \ + (((uint8_t*)(x))[1] << 16) | \ + (((uint8_t*)(x))[2] << 8) | \ + ((uint8_t*)(x))[3]) +#define AV_WB32(p, i, d) { \ + ((uint8_t*)(p))[(i)+3] = (d); \ + ((uint8_t*)(p))[(i)+2] = (d)>>8; \ + ((uint8_t*)(p))[(i)+1] = (d)>>16; \ + ((uint8_t*)(p))[(i)] = (d)>>24; } + +#define AV_RL8(x) AV_RB8(x) +#define AV_WL8(p, i, d) AV_WB8(p, i, d) + +#define AV_RL16(x) ((((uint8_t*)(x))[1] << 8) | ((uint8_t*)(x))[0]) +#define AV_WL16(p, i, d) { \ + ((uint8_t*)(p))[(i)] = (d); \ + ((uint8_t*)(p))[(i)+1] = (d)>>8; } + +#define AV_RL32(x) ((((uint8_t*)(x))[3] << 24) | \ + (((uint8_t*)(x))[2] << 16) | \ + (((uint8_t*)(x))[1] << 8) | \ + ((uint8_t*)(x))[0]) +#define AV_WL32(p, i, d) { \ + ((uint8_t*)(p))[(i)] = (d); \ + ((uint8_t*)(p))[(i)+1] = (d)>>8; \ + ((uint8_t*)(p))[(i)+2] = (d)>>16; \ + ((uint8_t*)(p))[(i)+3] = (d)>>24; } + +#endif /* INTREADWRITE_H */ diff --git a/src/libffmpeg/libavutil/mem.c b/src/libffmpeg/libavutil/mem.c new file mode 100644 index 000000000..f43fb5420 --- /dev/null +++ b/src/libffmpeg/libavutil/mem.c @@ -0,0 +1,171 @@ +/* + * default memory allocator for libavutil + * Copyright (c) 2002 Fabrice Bellard. + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file mem.c + * default memory allocator for libavutil. + */ + +#include "common.h" + +/* here we can use OS dependant allocation functions */ +#undef malloc +#undef free +#undef realloc + +#ifdef HAVE_MALLOC_H +#include <malloc.h> +#endif + +/* you can redefine av_malloc and av_free in your project to use your + memory allocator. You do not need to suppress this file because the + linker will do it automatically */ + +/** + * Memory allocation of size byte with alignment suitable for all + * memory accesses (including vectors if available on the + * CPU). av_malloc(0) must return a non NULL pointer. + */ +void *av_malloc(unsigned int size) +{ + void *ptr; +#ifdef CONFIG_MEMALIGN_HACK + long diff; +#endif + + /* let's disallow possible ambiguous cases */ + if(size > (INT_MAX-16) ) + return NULL; + +#ifdef CONFIG_MEMALIGN_HACK + ptr = malloc(size+16); + if(!ptr) + return ptr; + diff= ((-(long)ptr - 1)&15) + 1; + ptr += diff; + ((char*)ptr)[-1]= diff; +#elif defined (HAVE_MEMALIGN) + ptr = memalign(16,size); + /* Why 64? + Indeed, we should align it: + on 4 for 386 + on 16 for 486 + on 32 for 586, PPro - k6-III + on 64 for K7 (maybe for P3 too). + Because L1 and L2 caches are aligned on those values. + But I don't want to code such logic here! + */ + /* Why 16? + because some cpus need alignment, for example SSE2 on P4, & most RISC cpus + it will just trigger an exception and the unaligned load will be done in the + exception handler or it will just segfault (SSE2 on P4) + Why not larger? because i didnt see a difference in benchmarks ... + */ + /* benchmarks with p3 + memalign(64)+1 3071,3051,3032 + memalign(64)+2 3051,3032,3041 + memalign(64)+4 2911,2896,2915 + memalign(64)+8 2545,2554,2550 + memalign(64)+16 2543,2572,2563 + memalign(64)+32 2546,2545,2571 + memalign(64)+64 2570,2533,2558 + + btw, malloc seems to do 8 byte alignment by default here + */ +#else + ptr = malloc(size); +#endif + return ptr; +} + +/** + * av_realloc semantics (same as glibc): if ptr is NULL and size > 0, + * identical to malloc(size). If size is zero, it is identical to + * free(ptr) and NULL is returned. + */ +void *av_realloc(void *ptr, unsigned int size) +{ +#ifdef CONFIG_MEMALIGN_HACK + int diff; +#endif + + /* let's disallow possible ambiguous cases */ + if(size > (INT_MAX-16) ) + return NULL; + +#ifdef CONFIG_MEMALIGN_HACK + //FIXME this isn't aligned correctly, though it probably isn't needed + if(!ptr) return av_malloc(size); + diff= ((char*)ptr)[-1]; + return realloc(ptr - diff, size + diff) + diff; +#else + return realloc(ptr, size); +#endif +} + +/** + * Free memory which has been allocated with av_malloc(z)() or av_realloc(). + * NOTE: ptr = NULL is explicetly allowed + * Note2: it is recommended that you use av_freep() instead + */ +void av_free(void *ptr) +{ + /* XXX: this test should not be needed on most libcs */ + if (ptr) +#ifdef CONFIG_MEMALIGN_HACK + free(ptr - ((char*)ptr)[-1]); +#else + free(ptr); +#endif +} + +/** + * Frees memory and sets the pointer to NULL. + * @param arg pointer to the pointer which should be freed + */ +void av_freep(void *arg) +{ + void **ptr= (void**)arg; + av_free(*ptr); + *ptr = NULL; +} + +void *av_mallocz(unsigned int size) +{ + void *ptr; + + ptr = av_malloc(size); + if (ptr) + memset(ptr, 0, size); + return ptr; +} + +char *av_strdup(const char *s) +{ + char *ptr; + int len; + len = strlen(s) + 1; + ptr = av_malloc(len); + if (ptr) + memcpy(ptr, s, len); + return ptr; +} + diff --git a/src/libffmpeg/mpeg_parser.c b/src/libffmpeg/mpeg_parser.c index d9ee602b2..14a08a456 100644 --- a/src/libffmpeg/mpeg_parser.c +++ b/src/libffmpeg/mpeg_parser.c @@ -20,7 +20,7 @@ * Simple MPEG-ES parser/framer by Thibaut Mattern (tmattern@noos.fr) * based on libmpeg2 decoder. * - * $Id: mpeg_parser.c,v 1.4 2006/09/26 01:19:31 dgp85 Exp $ + * $Id: mpeg_parser.c,v 1.7 2007/03/29 18:52:45 dgp85 Exp $ */ #define LOG_MODULE "mpeg_parser" #define LOG_VERBOSE @@ -52,9 +52,17 @@ static const int frame_rate_tab[][2] = { void mpeg_parser_init (mpeg_parser_t *parser) { + parser->chunk_buffer = xine_xmalloc(BUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE); mpeg_parser_reset(parser); } +void mpeg_parser_dispose (mpeg_parser_t *parser) +{ + if ( parser == NULL ) return; + + free(parser->chunk_buffer); +} + void mpeg_parser_reset (mpeg_parser_t *parser) { parser->shift = 0xffffff00; @@ -162,8 +170,7 @@ static int parse_chunk (mpeg_parser_t *parser, int code, uint8_t *buffer, int le case 0xb3: /* sequence_header_code */ { int value; - int width; - int height; + uint16_t width, height; if (parser->is_sequence_needed) { parser->is_sequence_needed = 0; diff --git a/src/libffmpeg/mpeg_parser.h b/src/libffmpeg/mpeg_parser.h index 9cc12f380..859a0fcec 100644 --- a/src/libffmpeg/mpeg_parser.h +++ b/src/libffmpeg/mpeg_parser.h @@ -20,7 +20,7 @@ * Simple MPEG-ES parser/framer by Thibaut Mattern (tmattern@noos.fr) * based on libmpeg2 decoder. * - * $Id: mpeg_parser.h,v 1.2 2004/09/21 19:27:18 tmattern Exp $ + * $Id: mpeg_parser.h,v 1.5 2007/03/29 18:52:45 dgp85 Exp $ */ #ifndef HAVE_MPEG_PARSER_H #define HAVE_MPEG_PARSER_H @@ -37,23 +37,26 @@ #define D_TYPE 4 typedef struct mpeg_parser_s { - uint32_t shift; - int is_sequence_needed; - uint8_t chunk_buffer[BUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE]; + uint8_t *chunk_buffer; uint8_t *chunk_ptr; uint8_t *chunk_start; + uint32_t shift; int buffer_size; uint8_t code; uint8_t picture_coding_type; - int rate_code; + + uint8_t is_sequence_needed:1; + uint8_t is_mpeg1:1; /* public */ + uint8_t has_sequence:1; /* public */ + uint8_t in_slice:1; + + uint8_t rate_code:4; + int aspect_ratio_info; - int in_slice; /* public properties */ - int is_mpeg1; - int has_sequence; - int width; - int height; + uint16_t width; + uint16_t height; int frame_duration; double frame_aspect_ratio; @@ -62,6 +65,9 @@ typedef struct mpeg_parser_s { /* parser initialization */ void mpeg_parser_init (mpeg_parser_t *parser); +/* parser disposal */ +void mpeg_parser_dispose (mpeg_parser_t *parser); + /* read a frame * return a pointer to the first byte of the next frame * or NULL if more bytes are needed diff --git a/src/libffmpeg/video_decoder.c b/src/libffmpeg/video_decoder.c index 2d5733211..e366a945c 100644 --- a/src/libffmpeg/video_decoder.c +++ b/src/libffmpeg/video_decoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2001-2004 the xine project + * Copyright (C) 2001-2007 the xine project * * This file is part of xine, a free video player. * @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_decoder.c,v 1.63.2.1 2006/12/02 01:20:07 dgp85 Exp $ + * $Id: video_decoder.c,v 1.73 2007/03/29 18:41:02 dgp85 Exp $ * * xine video decoder plugin using ffmpeg * @@ -25,6 +25,7 @@ #ifdef HAVE_CONFIG_H #include "config.h" +#include "ffmpeg_config.h" #endif #include <stdlib.h> @@ -74,8 +75,14 @@ struct ff_video_decoder_s { xine_stream_t *stream; int64_t pts; int video_step; - int decoder_ok; - int decoder_init_mode; + + uint8_t decoder_ok:1; + uint8_t decoder_init_mode:1; + uint8_t is_mpeg12:1; + uint8_t pp_available:1; + uint8_t yuv_init:1; + uint8_t is_direct_rendering_disabled:1; + uint8_t cs_convert_init:1; xine_bmiheader bih; unsigned char *buf; @@ -89,15 +96,13 @@ struct ff_video_decoder_s { AVCodecContext *context; AVCodec *codec; - int pp_available; int pp_quality; int pp_flags; pp_context_t *pp_context; pp_mode_t *pp_mode; /* mpeg-es parsing */ - mpeg_parser_t mpeg_parser; - int is_mpeg12; + mpeg_parser_t *mpeg_parser; double aspect_ratio; int aspect_ratio_prio; @@ -105,11 +110,10 @@ struct ff_video_decoder_s { int crop_right, crop_bottom; int output_format; - yuv_planes_t yuv; - int yuv_init; - int cs_convert_init; - int is_direct_rendering_disabled; + xine_list_t *dr1_frames; + + yuv_planes_t yuv; AVPaletteControl palette_control; }; @@ -199,16 +203,25 @@ static int get_buffer(AVCodecContext *context, AVFrame *av_frame){ av_frame->type= FF_BUFFER_TYPE_USER; + xine_list_push_back(this->dr1_frames, av_frame); + return 0; } static void release_buffer(struct AVCodecContext *context, AVFrame *av_frame){ + ff_video_decoder_t *this = (ff_video_decoder_t *)context->opaque; if (av_frame->type == FF_BUFFER_TYPE_USER) { vo_frame_t *img = (vo_frame_t *)av_frame->opaque; + xine_list_iterator_t it; assert(av_frame->opaque); img->free(img); + + it = xine_list_find(this->dr1_frames, av_frame); + assert(it); + if( it != NULL ) + xine_list_remove(this->dr1_frames, it); } else { avcodec_default_release_buffer(context, av_frame); } @@ -233,7 +246,7 @@ static const ff_codec_t ff_video_lookup[] = { {BUF_VIDEO_3IVX, CODEC_ID_MPEG4, "ISO MPEG-4 (3ivx, ffmpeg)"}, {BUF_VIDEO_JPEG, CODEC_ID_MJPEG, "Motion JPEG (ffmpeg)"}, {BUF_VIDEO_MJPEG, CODEC_ID_MJPEG, "Motion JPEG (ffmpeg)"}, - {BUF_VIDEO_MJPEG_B, CODEC_ID_MJPEGB, "Motion JPEG B (ffmpeg"}, + {BUF_VIDEO_MJPEG_B, CODEC_ID_MJPEGB, "Motion JPEG B (ffmpeg)"}, {BUF_VIDEO_I263, CODEC_ID_H263I, "ITU H.263 (ffmpeg)"}, {BUF_VIDEO_H263, CODEC_ID_H263, "H.263 (ffmpeg)"}, {BUF_VIDEO_RV10, CODEC_ID_RV10, "Real Video 1.0 (ffmpeg)"}, @@ -245,6 +258,9 @@ static const ff_codec_t ff_video_lookup[] = { {BUF_VIDEO_DV, CODEC_ID_DVVIDEO, "DV (ffmpeg)"}, {BUF_VIDEO_HUFFYUV, CODEC_ID_HUFFYUV, "HuffYUV (ffmpeg)"}, {BUF_VIDEO_VP31, CODEC_ID_VP3, "On2 VP3.1 (ffmpeg)"}, + {BUF_VIDEO_VP5, CODEC_ID_VP5, "On2 VP5 (ffmpeg)"}, + {BUF_VIDEO_VP6, CODEC_ID_VP6, "On2 VP6 (ffmpeg)"}, + {BUF_VIDEO_VP6F, CODEC_ID_VP6F, "On2 VP6 (ffmpeg)"}, {BUF_VIDEO_4XM, CODEC_ID_4XM, "4X Video (ffmpeg)"}, {BUF_VIDEO_CINEPAK, CODEC_ID_CINEPAK, "Cinepak (ffmpeg)"}, {BUF_VIDEO_MSVC, CODEC_ID_MSVIDEO1, "Microsoft Video 1 (ffmpeg)"}, @@ -372,7 +388,7 @@ static void init_video_codec (ff_video_decoder_t *this, unsigned int codec_type) /* enable direct rendering by default */ this->output_format = XINE_IMGFMT_YV12; #ifdef ENABLE_DIRECT_RENDERING - if( this->codec->capabilities & CODEC_CAP_DR1 ) { + if( this->codec->capabilities & CODEC_CAP_DR1 && this->codec->id != CODEC_ID_H264 ) { this->context->get_buffer = get_buffer; this->context->release_buffer = release_buffer; xprintf(this->stream->xine, XINE_VERBOSITY_LOG, @@ -411,7 +427,7 @@ static void pp_change_quality (ff_video_decoder_t *this) { this->pp_quality = this->class->pp_quality; if(this->pp_available && this->pp_quality) { - if(!this->pp_context) + if(!this->pp_context && this->context) this->pp_context = pp_get_context(this->context->width, this->context->height, this->pp_flags); if(this->pp_mode) @@ -504,7 +520,7 @@ static int ff_handle_mpeg_sequence(ff_video_decoder_t *this, mpeg_parser_t *pars data.pan_scan = 0; xine_event_send(this->stream, &event); } - this->video_step = this->mpeg_parser.frame_duration; + this->video_step = this->mpeg_parser->frame_duration; return 1; } @@ -797,7 +813,7 @@ static void ff_check_bufsize (ff_video_decoder_t *this, int size) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, _("ffmpeg_video_dec: increasing buffer to %d to avoid overflow.\n"), this->bufsize); - this->buf = realloc(this->buf, this->bufsize); + this->buf = realloc(this->buf, this->bufsize + FF_INPUT_BUFFER_PADDING_SIZE ); } } @@ -807,8 +823,14 @@ static void ff_handle_preview_buffer (ff_video_decoder_t *this, buf_element_t *b lprintf ("preview buffer\n"); codec_type = buf->type & 0xFFFF0000; - if (codec_type == BUF_VIDEO_MPEG) + if (codec_type == BUF_VIDEO_MPEG) { this->is_mpeg12 = 1; + if ( this->mpeg_parser == NULL ) { + this->mpeg_parser = xine_xmalloc(sizeof(mpeg_parser_t)); + mpeg_parser_init(this->mpeg_parser); + this->decoder_init_mode = 0; + } + } if (this->decoder_init_mode && !this->is_mpeg12) { init_video_codec(this, codec_type); @@ -822,7 +844,7 @@ static void ff_handle_header_buffer (ff_video_decoder_t *this, buf_element_t *bu lprintf ("header buffer\n"); /* accumulate data */ - ff_check_bufsize(this, this->size + buf->size + FF_INPUT_BUFFER_PADDING_SIZE); + ff_check_bufsize(this, this->size + buf->size); xine_fast_memcpy (&this->buf[this->size], buf->content, buf->size); this->size += buf->size; @@ -961,7 +983,7 @@ static void ff_handle_mpeg12_buffer (ff_video_decoder_t *this, buf_element_t *bu got_picture = 0; if (!flush) { - current = mpeg_parser_decode_data(&this->mpeg_parser, + current = mpeg_parser_decode_data(this->mpeg_parser, buf->content + offset, buf->content + offset + size, &next_flush); } else { @@ -973,8 +995,8 @@ static void ff_handle_mpeg12_buffer (ff_video_decoder_t *this, buf_element_t *bu return; } - if (this->mpeg_parser.has_sequence) { - ff_handle_mpeg_sequence(this, &this->mpeg_parser); + if (this->mpeg_parser->has_sequence) { + ff_handle_mpeg_sequence(this, this->mpeg_parser); } if (!this->decoder_ok) @@ -983,16 +1005,16 @@ static void ff_handle_mpeg12_buffer (ff_video_decoder_t *this, buf_element_t *bu if (flush) { lprintf("flush lavc buffers\n"); /* hack: ffmpeg outputs the last frame if size=0 */ - this->mpeg_parser.buffer_size = 0; + this->mpeg_parser->buffer_size = 0; } /* skip decoding b frames if too late */ this->context->hurry_up = (this->skipframes > 0); - lprintf("avcodec_decode_video: size=%d\n", this->mpeg_parser.buffer_size); + lprintf("avcodec_decode_video: size=%d\n", this->mpeg_parser->buffer_size); len = avcodec_decode_video (this->context, this->av_frame, - &got_picture, this->mpeg_parser.chunk_buffer, - this->mpeg_parser.buffer_size); + &got_picture, this->mpeg_parser->chunk_buffer, + this->mpeg_parser->buffer_size); lprintf("avcodec_decode_video: decoded_size=%d, got_picture=%d\n", len, got_picture); len = current - buf->content - offset; @@ -1098,7 +1120,7 @@ static void ff_handle_buffer (ff_video_decoder_t *this, buf_element_t *buf) { lprintf("no memcpy needed to accumulate data\n"); } else { /* copy data into our internal buffer */ - ff_check_bufsize(this, this->size + buf->size + FF_INPUT_BUFFER_PADDING_SIZE); + ff_check_bufsize(this, this->size + buf->size); chunk_buf = this->buf; /* ff_check_bufsize might realloc this->buf */ xine_fast_memcpy (&this->buf[this->size], buf->content, buf->size); @@ -1118,7 +1140,10 @@ static void ff_handle_buffer (ff_video_decoder_t *this, buf_element_t *buf) { int codec_type = buf->type & 0xFFFF0000; /* pad input data */ - chunk_buf[this->size] = 0; + /* note: bitstream, alt bitstream reader or something will cause + * severe mpeg4 artifacts if padding is less than 32 bits. + */ + memset(&chunk_buf[this->size], 0, FF_INPUT_BUFFER_PADDING_SIZE); while (this->size > 0) { @@ -1146,7 +1171,7 @@ static void ff_handle_buffer (ff_video_decoder_t *this, buf_element_t *buf) { this->size -= len; if (this->size > 0) { - ff_check_bufsize(this, this->size + FF_INPUT_BUFFER_PADDING_SIZE); + ff_check_bufsize(this, this->size); memmove (this->buf, &chunk_buf[offset], this->size); chunk_buf = this->buf; } @@ -1252,7 +1277,7 @@ static void ff_handle_buffer (ff_video_decoder_t *this, buf_element_t *buf) { img->crop_bottom = this->crop_bottom; this->skipframes = img->draw(img, this->stream); - + if(free_img) img->free(img); } @@ -1342,7 +1367,7 @@ static void ff_reset (video_decoder_t *this_gen) { avcodec_flush_buffers(this->context); if (this->is_mpeg12) - mpeg_parser_reset(&this->mpeg_parser); + mpeg_parser_reset(this->mpeg_parser); } static void ff_discontinuity (video_decoder_t *this_gen) { @@ -1356,12 +1381,23 @@ static void ff_dispose (video_decoder_t *this_gen) { ff_video_decoder_t *this = (ff_video_decoder_t *) this_gen; lprintf ("ff_dispose\n"); - + if (this->decoder_ok) { + xine_list_iterator_t it; + AVFrame *av_frame; + pthread_mutex_lock(&ffmpeg_lock); avcodec_close (this->context); pthread_mutex_unlock(&ffmpeg_lock); - + + /* frame garbage collector here - workaround for buggy ffmpeg codecs that + * don't release their DR1 frames */ + while( (it = xine_list_front(this->dr1_frames)) != NULL ) + { + av_frame = (AVFrame *)xine_list_get_value(this->dr1_frames, it); + release_buffer(this->context, av_frame); + } + this->stream->video_out->close(this->stream->video_out, this->stream); this->decoder_ok = 0; } @@ -1390,6 +1426,10 @@ static void ff_dispose (video_decoder_t *this_gen) { if(this->pp_mode) pp_free_mode(this->pp_mode); + + mpeg_parser_dispose(this->mpeg_parser); + + xine_list_delete(this->dr1_frames); free (this_gen); } @@ -1429,7 +1469,9 @@ static video_decoder_t *ff_video_open_plugin (video_decoder_class_t *class_gen, this->pp_context = NULL; this->pp_mode = NULL; - mpeg_parser_init(&this->mpeg_parser); + this->mpeg_parser = NULL; + + this->dr1_frames = xine_list_new(); return &this->video_decoder; } @@ -1479,74 +1521,224 @@ void *init_video_plugin (xine_t *xine, void *data) { } static uint32_t supported_video_types[] = { - BUF_VIDEO_MSMPEG4_V1, + #ifdef CONFIG_MSMPEG4V1_DECODER + BUF_VIDEO_MSMPEG4_V1, + #endif + #ifdef CONFIG_MSMPEG4V2_DECODER BUF_VIDEO_MSMPEG4_V2, - BUF_VIDEO_MSMPEG4_V3, - BUF_VIDEO_WMV7, + #endif + #ifdef CONFIG_MSMPEG4V3_DECODER + BUF_VIDEO_MSMPEG4_V3, + #endif + #ifdef CONFIG_WMV1_DECODER + BUF_VIDEO_WMV7, + #endif + #ifdef CONFIG_WMV2_DECODER + BUF_VIDEO_WMV8, + #endif + #ifdef CONFIG_WMV3_DECODER + BUF_VIDEO_WMV9, + #endif + #ifdef CONFIG_MPEG4_DECODER BUF_VIDEO_MPEG4, - BUF_VIDEO_XVID, - BUF_VIDEO_DIVX5, + #endif + #ifdef CONFIG_MPEG4_DECODER + BUF_VIDEO_XVID, + #endif + #ifdef CONFIG_MPEG4_DECODER + BUF_VIDEO_DIVX5, + #endif + #ifdef CONFIG_MPEG4_DECODER BUF_VIDEO_3IVX, + #endif + #ifdef CONFIG_MJPEG_DECODER + BUF_VIDEO_JPEG, + #endif + #ifdef CONFIG_MJPEG_DECODER BUF_VIDEO_MJPEG, + #endif + #ifdef CONFIG_MJPEGB_DECODER BUF_VIDEO_MJPEG_B, + #endif + #ifdef CONFIG_H263I_DECODER + BUF_VIDEO_I263, + #endif + #ifdef CONFIG_H263_DECODER BUF_VIDEO_H263, + #endif + #ifdef CONFIG_RV10_DECODER BUF_VIDEO_RV10, + #endif + #ifdef CONFIG_RV20_DECODER BUF_VIDEO_RV20, + #endif + #ifdef CONFIG_INDEO3_DECODER BUF_VIDEO_IV31, + #endif + #ifdef CONFIG_INDEO3_DECODER BUF_VIDEO_IV32, + #endif + #ifdef CONFIG_SVQ1_DECODER BUF_VIDEO_SORENSON_V1, + #endif + #ifdef CONFIG_SVQ3_DECODER BUF_VIDEO_SORENSON_V3, - BUF_VIDEO_JPEG, - BUF_VIDEO_MPEG, + #endif + #ifdef CONFIG_DVVIDEO_DECODER BUF_VIDEO_DV, + #endif + #ifdef CONFIG_HUFFYUV_DECODER BUF_VIDEO_HUFFYUV, + #endif + #ifdef CONFIG_VP3_DECODER BUF_VIDEO_VP31, + #endif + #ifdef CONFIG_VP5_DECODER + BUF_VIDEO_VP5, + #endif + #ifdef CONFIG_VP6_DECODER + BUF_VIDEO_VP6, + BUF_VIDEO_VP6F, + #endif + #ifdef CONFIG_4XM_DECODER BUF_VIDEO_4XM, + #endif + #ifdef CONFIG_CINEPAK_DECODER BUF_VIDEO_CINEPAK, + #endif + #ifdef CONFIG_MSVIDEO1_DECODER BUF_VIDEO_MSVC, + #endif + #ifdef CONFIG_MSRLE_DECODER BUF_VIDEO_MSRLE, + #endif + #ifdef CONFIG_RPZA_DECODER BUF_VIDEO_RPZA, + #endif + #ifdef CONFIG_CYUV_DECODER BUF_VIDEO_CYUV, + #endif + #ifdef CONFIG_ROQ_DECODER BUF_VIDEO_ROQ, + #endif + #ifdef CONFIG_IDCIN_DECODER BUF_VIDEO_IDCIN, + #endif + #ifdef CONFIG_XAN_WC3_DECODER BUF_VIDEO_WC3, + #endif + #ifdef CONFIG_WS_VQA_DECODER BUF_VIDEO_VQA, + #endif + #ifdef CONFIG_INTERPLAY_VIDEO_DECODER BUF_VIDEO_INTERPLAY, + #endif + #ifdef CONFIG_FLIC_DECODER BUF_VIDEO_FLI, + #endif + #ifdef CONFIG_8BPS_DECODER BUF_VIDEO_8BPS, + #endif + #ifdef CONFIG_SMC_DECODER BUF_VIDEO_SMC, - BUF_VIDEO_VMD, + #endif + #ifdef CONFIG_TRUEMOTION1_DECODER BUF_VIDEO_DUCKTM1, + #endif + #ifdef CONFIG_TRUEMOTION2_DECODER BUF_VIDEO_DUCKTM2, + #endif + #ifdef CONFIG_VMDVIDEO_DECODER + BUF_VIDEO_VMD, + #endif + #ifdef CONFIG_ZLIB_DECODER BUF_VIDEO_ZLIB, + #endif + #ifdef CONFIG_MSZH_DECODER BUF_VIDEO_MSZH, + #endif + #ifdef CONFIG_ASV1_DECODER BUF_VIDEO_ASV1, + #endif + #ifdef CONFIG_ASV2_DECODER BUF_VIDEO_ASV2, + #endif + #ifdef CONFIG_VCR1_DECODER BUF_VIDEO_ATIVCR1, + #endif + #ifdef CONFIG_FLV_DECODER BUF_VIDEO_FLV1, + #endif + #ifdef CONFIG_QTRLE_DECODER BUF_VIDEO_QTRLE, + #endif + #ifdef CONFIG_H264_DECODER BUF_VIDEO_H264, + #endif + #ifdef CONFIG_H261_DECODER BUF_VIDEO_H261, + #endif + #ifdef CONFIG_AASC_DECODER BUF_VIDEO_AASC, + #endif + #ifdef CONFIG_LOCO_DECODER BUF_VIDEO_LOCO, + #endif + #ifdef CONFIG_QDRAW_DECODER BUF_VIDEO_QDRW, + #endif + #ifdef CONFIG_QPEG_DECODER BUF_VIDEO_QPEG, + #endif + #ifdef CONFIG_TSCC_DECODER BUF_VIDEO_TSCC, + #endif + #ifdef CONFIG_ULTI_DECODER BUF_VIDEO_ULTI, + #endif + #ifdef CONFIG_WNV1_DECODER BUF_VIDEO_WNV1, + #endif + #ifdef CONFIG_VIXL_DECODER BUF_VIDEO_XL, + #endif + #ifdef CONFIG_INDEO2_DECODER BUF_VIDEO_RT21, + #endif + #ifdef CONFIG_FRAPS_DECODER BUF_VIDEO_FPS1, - BUF_VIDEO_WMV9, + #endif + #ifdef CONFIG_MPEG1VIDEO_DECODER + BUF_VIDEO_MPEG, + #endif + #ifdef CONFIG_CSCD_DECODER BUF_VIDEO_CSCD, + #endif + #ifdef CONFIG_AVS_DECODER + BUF_VIDEO_AVS, + #endif + #ifdef CONFIG_MMVIDEO_DECODER BUF_VIDEO_ALGMM, + #endif + #ifdef CONFIG_ZMBV_DECODER BUF_VIDEO_ZMBV, - BUF_VIDEO_AVS, + #endif + #ifdef CONFIG_SMACKVIDEO_DECODER BUF_VIDEO_SMACKER, + #endif + #ifdef CONFIG_NUV_DECODER BUF_VIDEO_NUV, + #endif + #ifdef CONFIG_KMVC_DECODER BUF_VIDEO_KMVC, + #endif + #ifdef CONFIG_FLASHSV_DECODER BUF_VIDEO_FLASHSV, + #endif + #ifdef CONFIG_CAVS_DECODER BUF_VIDEO_CAVS, + #endif + 0 }; diff --git a/src/libffmpeg/xine_decoder.c b/src/libffmpeg/xine_decoder.c index 10f420997..2eeb9746b 100644 --- a/src/libffmpeg/xine_decoder.c +++ b/src/libffmpeg/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.171 2006/10/11 12:53:12 dgp85 Exp $ + * $Id: xine_decoder.c,v 1.173 2007/01/13 21:19:52 miguelfreitas Exp $ * * xine decoder plugin using ffmpeg * @@ -25,6 +25,7 @@ #ifdef HAVE_CONFIG_H #include "config.h" +#include "ffmpeg_config.h" #endif #include "xine_internal.h" @@ -39,114 +40,273 @@ pthread_once_t once_control = PTHREAD_ONCE_INIT; pthread_mutex_t ffmpeg_lock; #ifndef HAVE_FFMPEG + +#define REGISTER_ENCODER(X,x) \ + if(ENABLE_##X##_ENCODER) register_avcodec(&x##_encoder) +#define REGISTER_DECODER(X,x) \ + if(ENABLE_##X##_DECODER) register_avcodec(&x##_decoder) +#define REGISTER_ENCDEC(X,x) REGISTER_ENCODER(X,x); REGISTER_DECODER(X,x) + +#define REGISTER_PARSER(X,x) \ + if(ENABLE_##X##_PARSER) av_register_codec_parser(&x##_parser) + +/* If you do not call this function, then you can select exactly which + formats you want to support */ + +/** + * simple call to register all the codecs. + */ void avcodec_register_all(void) { static int inited = 0; - + if (inited != 0) - return; + return; inited = 1; - /* decoders */ - register_avcodec(&h263_decoder); - register_avcodec(&mpeg4_decoder); - register_avcodec(&msmpeg4v1_decoder); - register_avcodec(&msmpeg4v2_decoder); - register_avcodec(&msmpeg4v3_decoder); - register_avcodec(&wmv1_decoder); - register_avcodec(&wmv2_decoder); - register_avcodec(&h263i_decoder); - register_avcodec(&rv10_decoder); - register_avcodec(&rv20_decoder); - register_avcodec(&svq1_decoder); - register_avcodec(&svq3_decoder); - register_avcodec(&wmav1_decoder); - register_avcodec(&wmav2_decoder); - register_avcodec(&indeo3_decoder); - register_avcodec(&mpeg1video_decoder); - register_avcodec(&dvvideo_decoder); - register_avcodec(&pcm_s16le_decoder); - register_avcodec(&mjpeg_decoder); - register_avcodec(&mjpegb_decoder); - register_avcodec(&mp2_decoder); - register_avcodec(&mp3_decoder); - register_avcodec(&mace3_decoder); - register_avcodec(&mace6_decoder); - register_avcodec(&huffyuv_decoder); - register_avcodec(&cyuv_decoder); - register_avcodec(&h264_decoder); - register_avcodec(&vp3_decoder); - register_avcodec(&fourxm_decoder); - register_avcodec(&ra_144_decoder); - register_avcodec(&ra_288_decoder); - register_avcodec(&adpcm_ms_decoder); - register_avcodec(&adpcm_ima_qt_decoder); - register_avcodec(&adpcm_ima_wav_decoder); - register_avcodec(&adpcm_ima_dk3_decoder); - register_avcodec(&adpcm_ima_dk4_decoder); - register_avcodec(&adpcm_ima_ws_decoder); - register_avcodec(&adpcm_ima_smjpeg_decoder); - register_avcodec(&adpcm_xa_decoder); - register_avcodec(&adpcm_4xm_decoder); - register_avcodec(&adpcm_ea_decoder); - register_avcodec(&pcm_alaw_decoder); - register_avcodec(&pcm_mulaw_decoder); - register_avcodec(&roq_dpcm_decoder); - register_avcodec(&interplay_dpcm_decoder); - register_avcodec(&cinepak_decoder); - register_avcodec(&msvideo1_decoder); - register_avcodec(&msrle_decoder); - register_avcodec(&rpza_decoder); - register_avcodec(&roq_decoder); - register_avcodec(&idcin_decoder); - register_avcodec(&xan_wc3_decoder); - register_avcodec(&vqa_decoder); - register_avcodec(&interplay_video_decoder); - register_avcodec(&flic_decoder); - register_avcodec(&smc_decoder); - register_avcodec(&eightbps_decoder); - register_avcodec(&vmdvideo_decoder); - register_avcodec(&vmdaudio_decoder); - register_avcodec(&truemotion1_decoder); - register_avcodec(&mszh_decoder); - register_avcodec(&zlib_decoder); - register_avcodec(&xan_dpcm_decoder); - register_avcodec(&asv1_decoder); - register_avcodec(&asv2_decoder); - register_avcodec(&vcr1_decoder); - register_avcodec(&flv_decoder); - register_avcodec(&qtrle_decoder); - register_avcodec(&flac_decoder); - register_avcodec(&aasc_decoder); - register_avcodec(&alac_decoder); - register_avcodec(&h261_decoder); - register_avcodec(&loco_decoder); - register_avcodec(&qdraw_decoder); - register_avcodec(&qpeg_decoder); - register_avcodec(&tscc_decoder); - register_avcodec(&ulti_decoder); - register_avcodec(&wnv1_decoder); - register_avcodec(&xl_decoder); - register_avcodec(&indeo2_decoder); - register_avcodec(&fraps_decoder); - register_avcodec(&shorten_decoder); - register_avcodec(&qdm2_decoder); - register_avcodec(&truemotion2_decoder); - register_avcodec(&wmv3_decoder); - register_avcodec(&cscd_decoder); - register_avcodec(&mmvideo_decoder); - register_avcodec(&zmbv_decoder); - register_avcodec(&avs_decoder); - register_avcodec(&smacker_decoder); - register_avcodec(&smackaud_decoder); - register_avcodec(&nuv_decoder); - register_avcodec(&kmvc_decoder); - register_avcodec(&flashsv_decoder); - register_avcodec(&cavs_decoder); - register_avcodec(&cook_decoder); - register_avcodec(&truespeech_decoder); - register_avcodec(&tta_decoder); + /* video codecs */ + REGISTER_DECODER(AASC, aasc); + REGISTER_ENCDEC (ASV1, asv1); + REGISTER_ENCDEC (ASV2, asv2); + REGISTER_DECODER(AVS, avs); + REGISTER_DECODER(BMP, bmp); + REGISTER_DECODER(CAVS, cavs); + REGISTER_DECODER(CINEPAK, cinepak); + REGISTER_DECODER(CLJR, cljr); + REGISTER_DECODER(CSCD, cscd); + REGISTER_DECODER(CYUV, cyuv); + REGISTER_DECODER(DSICINVIDEO, dsicinvideo); + REGISTER_ENCDEC (DVVIDEO, dvvideo); + REGISTER_DECODER(EIGHTBPS, eightbps); + REGISTER_ENCDEC (FFV1, ffv1); + REGISTER_ENCDEC (FFVHUFF, ffvhuff); + REGISTER_DECODER(FLASHSV, flashsv); + REGISTER_DECODER(FLIC, flic); + REGISTER_ENCDEC (FLV, flv); + REGISTER_DECODER(FOURXM, fourxm); + REGISTER_DECODER(FRAPS, fraps); + REGISTER_ENCDEC (GIF, gif); + REGISTER_ENCDEC (H261, h261); + REGISTER_ENCDEC (H263, h263); + REGISTER_DECODER(H263I, h263i); + REGISTER_ENCODER(H263P, h263p); + REGISTER_DECODER(H264, h264); + REGISTER_ENCDEC (HUFFYUV, huffyuv); + REGISTER_DECODER(IDCIN, idcin); + REGISTER_DECODER(INDEO2, indeo2); + REGISTER_DECODER(INDEO3, indeo3); + REGISTER_DECODER(INTERPLAY_VIDEO, interplay_video); + REGISTER_ENCODER(JPEGLS, jpegls); + REGISTER_DECODER(KMVC, kmvc); + REGISTER_ENCODER(LJPEG, ljpeg); + REGISTER_DECODER(LOCO, loco); + REGISTER_DECODER(MDEC, mdec); + REGISTER_ENCDEC (MJPEG, mjpeg); + REGISTER_DECODER(MJPEGB, mjpegb); + REGISTER_DECODER(MMVIDEO, mmvideo); +#ifdef HAVE_XVMC + REGISTER_DECODER(MPEG_XVMC, mpeg_xvmc); +#endif + REGISTER_ENCDEC (MPEG1VIDEO, mpeg1video); + REGISTER_ENCDEC (MPEG2VIDEO, mpeg2video); + REGISTER_ENCDEC (MPEG4, mpeg4); + REGISTER_DECODER(MPEGVIDEO, mpegvideo); + REGISTER_ENCDEC (MSMPEG4V1, msmpeg4v1); + REGISTER_ENCDEC (MSMPEG4V2, msmpeg4v2); + REGISTER_ENCDEC (MSMPEG4V3, msmpeg4v3); + REGISTER_DECODER(MSRLE, msrle); + REGISTER_DECODER(MSVIDEO1, msvideo1); + REGISTER_DECODER(MSZH, mszh); + REGISTER_DECODER(NUV, nuv); + REGISTER_ENCODER(PAM, pam); + REGISTER_ENCODER(PBM, pbm); + REGISTER_ENCODER(PGM, pgm); + REGISTER_ENCODER(PGMYUV, pgmyuv); +#ifdef CONFIG_ZLIB + REGISTER_ENCDEC (PNG, png); +#endif + REGISTER_ENCODER(PPM, ppm); + REGISTER_DECODER(QDRAW, qdraw); + REGISTER_DECODER(QPEG, qpeg); + REGISTER_DECODER(QTRLE, qtrle); + REGISTER_ENCDEC (RAWVIDEO, rawvideo); + REGISTER_DECODER(ROQ, roq); + REGISTER_DECODER(RPZA, rpza); + REGISTER_ENCDEC (RV10, rv10); + REGISTER_ENCDEC (RV20, rv20); + REGISTER_DECODER(SMACKER, smacker); + REGISTER_DECODER(SMC, smc); + REGISTER_ENCDEC (SNOW, snow); + REGISTER_DECODER(SP5X, sp5x); + REGISTER_ENCDEC (SVQ1, svq1); + REGISTER_DECODER(SVQ3, svq3); + REGISTER_DECODER(TARGA, targa); + REGISTER_DECODER(THEORA, theora); + REGISTER_DECODER(TIERTEXSEQVIDEO, tiertexseqvideo); + REGISTER_DECODER(TIFF, tiff); + REGISTER_DECODER(TRUEMOTION1, truemotion1); + REGISTER_DECODER(TRUEMOTION2, truemotion2); + REGISTER_DECODER(TSCC, tscc); + REGISTER_DECODER(ULTI, ulti); + REGISTER_DECODER(VC1, vc1); + REGISTER_DECODER(VCR1, vcr1); + REGISTER_DECODER(VMDVIDEO, vmdvideo); + REGISTER_DECODER(VMNC, vmnc); + REGISTER_DECODER(VP3, vp3); + REGISTER_DECODER(VP5, vp5); + REGISTER_DECODER(VP6, vp6); + REGISTER_DECODER(VP6F, vp6f); + REGISTER_DECODER(VQA, vqa); + REGISTER_ENCDEC (WMV1, wmv1); + REGISTER_ENCDEC (WMV2, wmv2); + REGISTER_DECODER(WMV3, wmv3); + REGISTER_DECODER(WNV1, wnv1); +#ifdef CONFIG_X264 + REGISTER_ENCODER(X264, x264); +#endif + REGISTER_DECODER(XAN_WC3, xan_wc3); + REGISTER_DECODER(XL, xl); +#ifdef CONFIG_XVID + REGISTER_ENCODER(XVID, xvid); +#endif + REGISTER_ENCDEC (ZLIB, zlib); +#ifdef CONFIG_ZLIB + REGISTER_ENCDEC (ZMBV, zmbv); +#endif + + /* audio codecs */ +#ifdef CONFIG_LIBFAAD + REGISTER_DECODER(AAC, aac); + REGISTER_DECODER(MPEG4AAC, mpeg4aac); +#endif +#ifdef CONFIG_LIBA52 + REGISTER_DECODER(AC3, ac3); +#endif + REGISTER_ENCODER(AC3, ac3); + REGISTER_DECODER(ALAC, alac); +#if defined(CONFIG_AMR_NB) || defined(CONFIG_AMR_NB_FIXED) + REGISTER_ENCDEC (AMR_NB, amr_nb); +#endif +#ifdef CONFIG_AMR_WB + REGISTER_ENCDEC (AMR_WB, amr_wb); +#endif + REGISTER_DECODER(COOK, cook); + REGISTER_DECODER(DSICINAUDIO, dsicinaudio); +#ifdef CONFIG_LIBDTS + REGISTER_DECODER(DTS, dts); +#endif +#ifdef CONFIG_LIBFAAC + REGISTER_ENCODER(FAAC, faac); +#endif + REGISTER_ENCDEC (FLAC, flac); + REGISTER_DECODER(IMC, imc); +#ifdef CONFIG_LIBGSM + REGISTER_ENCDEC (LIBGSM, libgsm); +#endif + REGISTER_DECODER(MACE3, mace3); + REGISTER_DECODER(MACE6, mace6); + REGISTER_ENCDEC (MP2, mp2); + REGISTER_DECODER(MP3, mp3); + REGISTER_DECODER(MP3ADU, mp3adu); +#ifdef CONFIG_LIBMP3LAME + REGISTER_ENCODER(MP3LAME, mp3lame); +#endif + REGISTER_DECODER(MP3ON4, mp3on4); + REGISTER_DECODER(MPC7, mpc7); +#ifdef CONFIG_LIBVORBIS + if (!ENABLE_VORBIS_ENCODER) REGISTER_ENCODER(OGGVORBIS, oggvorbis); + if (!ENABLE_VORBIS_DECODER) REGISTER_DECODER(OGGVORBIS, oggvorbis); +#endif + REGISTER_DECODER(QDM2, qdm2); + REGISTER_DECODER(RA_144, ra_144); + REGISTER_DECODER(RA_288, ra_288); + REGISTER_DECODER(SHORTEN, shorten); + REGISTER_DECODER(SMACKAUD, smackaud); + REGISTER_ENCDEC (SONIC, sonic); + REGISTER_ENCODER(SONIC_LS, sonic_ls); + REGISTER_DECODER(TRUESPEECH, truespeech); + REGISTER_DECODER(TTA, tta); + REGISTER_DECODER(VMDAUDIO, vmdaudio); + REGISTER_ENCDEC (VORBIS, vorbis); + REGISTER_DECODER(WAVPACK, wavpack); + REGISTER_DECODER(WMAV1, wmav1); + REGISTER_DECODER(WMAV2, wmav2); + REGISTER_DECODER(WS_SND1, ws_snd1); + + /* pcm codecs */ + REGISTER_ENCDEC (PCM_ALAW, pcm_alaw); + REGISTER_ENCDEC (PCM_MULAW, pcm_mulaw); + REGISTER_ENCDEC (PCM_S8, pcm_s8); + REGISTER_ENCDEC (PCM_S16BE, pcm_s16be); + REGISTER_ENCDEC (PCM_S16LE, pcm_s16le); + REGISTER_ENCDEC (PCM_S24BE, pcm_s24be); + REGISTER_ENCDEC (PCM_S24DAUD, pcm_s24daud); + REGISTER_ENCDEC (PCM_S24LE, pcm_s24le); + REGISTER_ENCDEC (PCM_S32BE, pcm_s32be); + REGISTER_ENCDEC (PCM_S32LE, pcm_s32le); + REGISTER_ENCDEC (PCM_U8, pcm_u8); + REGISTER_ENCDEC (PCM_U16BE, pcm_u16be); + REGISTER_ENCDEC (PCM_U16LE, pcm_u16le); + REGISTER_ENCDEC (PCM_U24BE, pcm_u24be); + REGISTER_ENCDEC (PCM_U24LE, pcm_u24le); + REGISTER_ENCDEC (PCM_U32BE, pcm_u32be); + REGISTER_ENCDEC (PCM_U32LE, pcm_u32le); + + /* dpcm codecs */ + REGISTER_DECODER(INTERPLAY_DPCM, interplay_dpcm); + REGISTER_DECODER(ROQ_DPCM, roq_dpcm); + REGISTER_DECODER(SOL_DPCM, sol_dpcm); + REGISTER_DECODER(XAN_DPCM, xan_dpcm); + + /* adpcm codecs */ + REGISTER_ENCDEC (ADPCM_4XM, adpcm_4xm); + REGISTER_ENCDEC (ADPCM_ADX, adpcm_adx); + REGISTER_ENCDEC (ADPCM_CT, adpcm_ct); + REGISTER_ENCDEC (ADPCM_EA, adpcm_ea); + REGISTER_ENCDEC (ADPCM_G726, adpcm_g726); + REGISTER_ENCDEC (ADPCM_IMA_DK3, adpcm_ima_dk3); + REGISTER_ENCDEC (ADPCM_IMA_DK4, adpcm_ima_dk4); + REGISTER_ENCDEC (ADPCM_IMA_QT, adpcm_ima_qt); + REGISTER_ENCDEC (ADPCM_IMA_SMJPEG, adpcm_ima_smjpeg); + REGISTER_ENCDEC (ADPCM_IMA_WAV, adpcm_ima_wav); + REGISTER_ENCDEC (ADPCM_IMA_WS, adpcm_ima_ws); + REGISTER_ENCDEC (ADPCM_MS, adpcm_ms); + REGISTER_ENCDEC (ADPCM_SBPRO_2, adpcm_sbpro_2); + REGISTER_ENCDEC (ADPCM_SBPRO_3, adpcm_sbpro_3); + REGISTER_ENCDEC (ADPCM_SBPRO_4, adpcm_sbpro_4); + REGISTER_ENCDEC (ADPCM_SWF, adpcm_swf); + REGISTER_ENCDEC (ADPCM_XA, adpcm_xa); + REGISTER_ENCDEC (ADPCM_YAMAHA, adpcm_yamaha); + + /* subtitles */ + REGISTER_ENCDEC (DVBSUB, dvbsub); + REGISTER_ENCDEC (DVDSUB, dvdsub); + + /* parsers */ + REGISTER_PARSER (AAC, aac); + REGISTER_PARSER (AC3, ac3); + REGISTER_PARSER (CAVSVIDEO, cavsvideo); + REGISTER_PARSER (DVBSUB, dvbsub); + REGISTER_PARSER (DVDSUB, dvdsub); + REGISTER_PARSER (H261, h261); + REGISTER_PARSER (H263, h263); + REGISTER_PARSER (H264, h264); + REGISTER_PARSER (MJPEG, mjpeg); + REGISTER_PARSER (MPEG4VIDEO, mpeg4video); + REGISTER_PARSER (MPEGAUDIO, mpegaudio); + REGISTER_PARSER (MPEGVIDEO, mpegvideo); + REGISTER_PARSER (PNM, pnm); + + /* + av_register_bitstream_filter(&dump_extradata_bsf); + av_register_bitstream_filter(&remove_extradata_bsf); + av_register_bitstream_filter(&noise_bsf); + av_register_bitstream_filter(&mp3_header_compress_bsf); + av_register_bitstream_filter(&mp3_header_decompress_bsf); + av_register_bitstream_filter(&mjpega_dump_header_bsf); + */ } + #endif void init_once_routine(void) { diff --git a/src/libspucmml/.cvsignore b/src/libflac/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libspucmml/.cvsignore +++ b/src/libflac/.hgignore diff --git a/src/libflac/Makefile.am b/src/libflac/Makefile.am index 12304ff84..6449820bc 100644 --- a/src/libflac/Makefile.am +++ b/src/libflac/Makefile.am @@ -1,12 +1,10 @@ include $(top_srcdir)/misc/Makefile.common -if HAVE_FLAC -flac_module = xineplug_flac.la -endif - libdir = $(XINE_PLUGINDIR) -lib_LTLIBRARIES = $(flac_module) +if HAVE_LIBFLAC +lib_LTLIBRARIES = xineplug_flac.la +endif xineplug_flac_la_SOURCES = demux_flac.c decoder_flac.c xineplug_flac_la_LIBADD = $(LIBFLAC_LIBS) $(XINE_LIB) diff --git a/src/libflac/decoder_flac.c b/src/libflac/decoder_flac.c index b62286eaa..9b77cc27d 100644 --- a/src/libflac/decoder_flac.c +++ b/src/libflac/decoder_flac.c @@ -30,6 +30,13 @@ #include <FLAC/stream_decoder.h> +#if !defined FLAC_API_VERSION_CURRENT || FLAC_API_VERSION_CURRENT < 8 +#include <FLAC/seekable_stream_decoder.h> +#define LEGACY_FLAC +#else +#undef LEGACY_FLAC +#endif + #define LOG_MODULE "flac_decoder" #define LOG_VERBOSE @@ -344,6 +351,7 @@ open_plugin (audio_decoder_class_t *class_gen, xine_stream_t *stream) { this->flac_decoder = FLAC__stream_decoder_new(); +#ifdef LEGACY_FLAC FLAC__stream_decoder_set_read_callback (this->flac_decoder, flac_read_callback); FLAC__stream_decoder_set_write_callback (this->flac_decoder, @@ -355,10 +363,26 @@ open_plugin (audio_decoder_class_t *class_gen, xine_stream_t *stream) { FLAC__stream_decoder_set_client_data (this->flac_decoder, this); - if (FLAC__stream_decoder_init (this->flac_decoder) == FLAC__STREAM_DECODER_SEARCH_FOR_METADATA) { + if (FLAC__stream_decoder_init (this->flac_decoder) != FLAC__STREAM_DECODER_SEARCH_FOR_METADATA) { + free (this); + return NULL; + } +#else + if ( FLAC__stream_decoder_init_stream (this->flac_decoder, + flac_read_callback, + NULL, /* seek */ + NULL, /* tell */ + NULL, /* length */ + NULL, /* eof */ + flac_write_callback, + NULL, /* metadata */ + flac_error_callback, + this + ) != FLAC__STREAM_DECODER_INIT_STATUS_OK ) { free (this); return NULL; } +#endif return (audio_decoder_t *) this; } diff --git a/src/libflac/demux_flac.c b/src/libflac/demux_flac.c index efee0b179..43ee17d5c 100644 --- a/src/libflac/demux_flac.c +++ b/src/libflac/demux_flac.c @@ -441,7 +441,11 @@ demux_flac_dispose (demux_plugin_t *this_gen) { lprintf("demux_flac_dispose\n"); if (this->flac_decoder) +#ifdef LEGACY_FLAC FLAC__seekable_stream_decoder_delete (this->flac_decoder); +#else + FLAC__stream_decoder_delete (this->flac_decoder); +#endif free(this); return; @@ -494,8 +498,13 @@ demux_flac_seek (demux_plugin_t *this_gen, off_t start_pos, int start_time, int } target_sample = (uint64_t)(distance * this->total_samples); +#ifdef LEGACY_FLAC s = FLAC__seekable_stream_decoder_seek_absolute (this->flac_decoder, target_sample); +#else + s = FLAC__stream_decoder_seek_absolute (this->flac_decoder, + target_sample); +#endif if (s) { lprintf ("Seek to: %d successfull!\n", start_time); @@ -618,9 +627,6 @@ open_plugin (demux_class_t *class_gen, /* Get a new FLAC decoder and hook up callbacks */ #ifdef LEGACY_FLAC this->flac_decoder = FLAC__seekable_stream_decoder_new(); -#else - this->flac_decoder = FLAC__stream_decoder_new(); -#endif lprintf("this->flac_decoder: %p\n", this->flac_decoder); FLAC__seekable_stream_decoder_set_md5_checking (this->flac_decoder, false); @@ -644,6 +650,37 @@ open_plugin (demux_class_t *class_gen, this); FLAC__seekable_stream_decoder_init (this->flac_decoder); +#else + this->flac_decoder = FLAC__stream_decoder_new(); + lprintf("this->flac_decoder: %p\n", this->flac_decoder); + + if ( ! this->flac_decoder ) { + free(this); + return NULL; + } + + FLAC__stream_decoder_set_md5_checking (this->flac_decoder, false); + + if ( FLAC__stream_decoder_init_stream(this->flac_decoder, + flac_read_callback, + flac_seek_callback, + flac_tell_callback, + flac_length_callback, + flac_eof_callback, + flac_write_callback, + flac_metadata_callback, + flac_error_callback, + this + ) != FLAC__STREAM_DECODER_INIT_STATUS_OK ) { +#ifdef LEGACY_FLAC + FLAC__seekable_stream_decoder_delete (this->flac_decoder); +#else + FLAC__stream_decoder_delete (this->flac_decoder); +#endif + free(this); + return NULL; + } +#endif /* Get some stream info */ this->data_size = this->input->get_length (this->input); @@ -653,13 +690,21 @@ open_plugin (demux_class_t *class_gen, * this flac stream */ this->status = DEMUX_OK; +#ifdef LEGACY_FLAC FLAC__seekable_stream_decoder_process_until_end_of_metadata (this->flac_decoder); +#else + FLAC__stream_decoder_process_until_end_of_metadata (this->flac_decoder); +#endif lprintf("Processed file until end of metadata: %s\n", this->status == DEMUX_OK ? "success" : "failure"); if (this->status != DEMUX_OK) { +#ifdef LEGACY_FLAC FLAC__seekable_stream_decoder_delete (this->flac_decoder); +#else + FLAC__stream_decoder_delete (this->flac_decoder); +#endif free (this); return NULL; } diff --git a/src/libspudec/.cvsignore b/src/liblpcm/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libspudec/.cvsignore +++ b/src/liblpcm/.hgignore diff --git a/src/liblpcm/xine_decoder.c b/src/liblpcm/xine_decoder.c index 65ec012d7..43bea4cbf 100644 --- a/src/liblpcm/xine_decoder.c +++ b/src/liblpcm/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.61 2006/07/10 22:08:29 dgp85 Exp $ + * $Id: xine_decoder.c,v 1.62 2007/03/17 20:59:36 dgp85 Exp $ * * 31-8-2001 Added LPCM rate sensing. * (c) 2001 James Courtier-Dutton James@superbug.demon.co.uk @@ -191,20 +191,16 @@ static void lpcm_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) { int n = buf->size; while (n >= 0) { - *d++ = s[8]; - *d++ = s[0]; - - *d++ = s[9]; - *d++ = s[2]; - - *d++ = s[10]; - *d++ = s[4]; - - *d++ = s[11]; - *d++ = s[6]; + if ( stream_be ) { + *d++ = s[0]; + *d++ = s[1]; + } else { + *d++ = s[1]; + *d++ = s[2]; + } - s += 12; - n -= 12; + s += 3; + n -= 3; } } else { memcpy (audio_buffer->mem, sample_buffer, buf->size); diff --git a/src/libspudvb/.cvsignore b/src/libmad/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libspudvb/.cvsignore +++ b/src/libmad/.hgignore diff --git a/src/libsputext/.cvsignore b/src/libmpeg2/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libsputext/.cvsignore +++ b/src/libmpeg2/.hgignore diff --git a/src/libmpeg2/Makefile.am b/src/libmpeg2/Makefile.am index cbc79fabd..550ce581f 100644 --- a/src/libmpeg2/Makefile.am +++ b/src/libmpeg2/Makefile.am @@ -26,7 +26,7 @@ xineplug_decode_mpeg2_la_SOURCES = \ xine_decoder.c \ libmpeg2_accel.c -xineplug_decode_mpeg2_la_LIBADD = $(MLIB_LIBS) $(XINE_LIB) +xineplug_decode_mpeg2_la_LIBADD = $(MLIB_LIBS) $(XINE_LIB) -lm xineplug_decode_mpeg2_la_CFLAGS = $(VISIBILITY_FLAG) xineplug_decode_mpeg2_la_LDFLAGS = -avoid-version -module diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c index f20698520..a2bb868df 100644 --- a/src/libmpeg2/decode.c +++ b/src/libmpeg2/decode.c @@ -130,7 +130,7 @@ static inline void get_frame_duration (mpeg2dec_t * mpeg2dec, vo_frame_t *frame) (mpeg2dec->rff_pattern & 0xff) == 0x55) && !mpeg2dec->picture->progressive_sequence ) { /* special case for ntsc 3:2 pulldown */ - duration *= 5 / 4; + duration *= 5.0 / 4.0; } else { @@ -139,7 +139,7 @@ static inline void get_frame_duration (mpeg2dec_t * mpeg2dec, vo_frame_t *frame) frame->progressive_frame ) { /* decoder should output 3 fields, so adjust duration to count on this extra field time */ - duration *= 3 / 2; + duration *= 3.0 / 2.0; } else if( mpeg2dec->picture->progressive_sequence ) { /* for progressive sequences the output should repeat the frame 1 or 2 times depending on top_field_first flag. */ diff --git a/src/libmpeg2/slice.c b/src/libmpeg2/slice.c index f214f1f25..8cb5c33b6 100644 --- a/src/libmpeg2/slice.c +++ b/src/libmpeg2/slice.c @@ -45,7 +45,7 @@ static inline int get_macroblock_modes (picture_t * picture) #define bits (picture->bitstream_bits) #define bit_ptr (picture->bitstream_ptr) int macroblock_modes; - MBtab * tab; + const MBtab * tab; switch (picture->picture_coding_type) { case I_TYPE: @@ -160,7 +160,7 @@ static inline int get_motion_delta (picture_t * picture, int f_code) int delta; int sign; - MVtab * tab; + const MVtab * tab; if (bit_buf & 0x80000000) { DUMPBITS (bit_buf, bits, 1); @@ -230,7 +230,7 @@ static inline int get_dmv (picture_t * picture) #define bits (picture->bitstream_bits) #define bit_ptr (picture->bitstream_ptr) - DMVtab * tab; + const DMVtab * tab; tab = DMV_2 + UBITS (bit_buf, 2); DUMPBITS (bit_buf, bits, tab->len); @@ -246,7 +246,7 @@ static inline int get_coded_block_pattern (picture_t * picture) #define bits (picture->bitstream_bits) #define bit_ptr (picture->bitstream_ptr) - CBPtab * tab; + const CBPtab * tab; NEEDBITS (bit_buf, bits, bit_ptr); @@ -273,7 +273,7 @@ static inline int get_luma_dc_dct_diff (picture_t * picture) #define bit_buf (picture->bitstream_buf) #define bits (picture->bitstream_bits) #define bit_ptr (picture->bitstream_ptr) - DCtab * tab; + const DCtab * tab; int size; int dc_diff; @@ -310,7 +310,7 @@ static inline int get_chroma_dc_dct_diff (picture_t * picture) #define bit_buf (picture->bitstream_buf) #define bits (picture->bitstream_bits) #define bit_ptr (picture->bitstream_ptr) - DCtab * tab; + const DCtab * tab; int size; int dc_diff; @@ -357,7 +357,7 @@ static void get_intra_block_B14 (picture_t * picture) uint8_t * quant_matrix = picture->intra_quantizer_matrix; int quantizer_scale = picture->quantizer_scale; int mismatch; - DCTtab * tab; + const DCTtab * tab; uint32_t bit_buf; int bits; uint8_t * bit_ptr; @@ -471,7 +471,7 @@ static void get_intra_block_B15 (picture_t * picture) uint8_t * quant_matrix = picture->intra_quantizer_matrix; int quantizer_scale = picture->quantizer_scale; int mismatch; - DCTtab * tab; + const DCTtab * tab; uint32_t bit_buf; int bits; uint8_t * bit_ptr; @@ -584,7 +584,7 @@ static void get_non_intra_block (picture_t * picture) uint8_t * quant_matrix = picture->non_intra_quantizer_matrix; int quantizer_scale = picture->quantizer_scale; int mismatch; - DCTtab * tab; + const DCTtab * tab; uint32_t bit_buf; int bits; uint8_t * bit_ptr; @@ -706,7 +706,7 @@ static void get_mpeg1_intra_block (picture_t * picture) uint8_t * scan = picture->scan; uint8_t * quant_matrix = picture->intra_quantizer_matrix; int quantizer_scale = picture->quantizer_scale; - DCTtab * tab; + const DCTtab * tab; uint32_t bit_buf; int bits; uint8_t * bit_ptr; @@ -825,7 +825,7 @@ static void get_mpeg1_non_intra_block (picture_t * picture) uint8_t * scan = picture->scan; uint8_t * quant_matrix = picture->non_intra_quantizer_matrix; int quantizer_scale = picture->quantizer_scale; - DCTtab * tab; + const DCTtab * tab; uint32_t bit_buf; int bits; uint8_t * bit_ptr; @@ -1463,7 +1463,7 @@ static inline int slice_init (picture_t * picture, int code) int offset, height; struct vo_frame_s * forward_reference_frame; struct vo_frame_s * backward_reference_frame; - MBAtab * mba; + const MBAtab * mba; offset = picture->picture_structure == BOTTOM_FIELD; picture->pitches[0] = picture->current_frame->pitches[0]; @@ -1634,7 +1634,7 @@ void mpeg2_slice (picture_t * picture, int code, uint8_t * buffer) while (1) { int macroblock_modes; int mba_inc; - MBAtab * mba; + const MBAtab * mba; NEEDBITS (bit_buf, bits, bit_ptr); diff --git a/src/libmpeg2/slice_xvmc.c b/src/libmpeg2/slice_xvmc.c index 4aa383b9a..e21b1eb98 100644 --- a/src/libmpeg2/slice_xvmc.c +++ b/src/libmpeg2/slice_xvmc.c @@ -96,7 +96,7 @@ static inline int get_xvmc_macroblock_modes (picture_t * picture) #define bits (picture->bitstream_bits) #define bit_ptr (picture->bitstream_ptr) int macroblock_modes; - MBtab * tab; + const MBtab * tab; switch (picture->picture_coding_type) { case I_TYPE: @@ -211,7 +211,7 @@ static inline int get_xvmc_motion_delta (picture_t * picture, int f_code) int delta; int sign; - MVtab * tab; + const MVtab * tab; if (bit_buf & 0x80000000) { DUMPBITS (bit_buf, bits, 1); @@ -281,7 +281,7 @@ static inline int get_xvmc_dmv (picture_t * picture) #define bits (picture->bitstream_bits) #define bit_ptr (picture->bitstream_ptr) - DMVtab * tab; + const DMVtab * tab; tab = DMV_2 + UBITS (bit_buf, 2); DUMPBITS (bit_buf, bits, tab->len); @@ -297,7 +297,7 @@ static inline int get_xvmc_coded_block_pattern (picture_t * picture) #define bits (picture->bitstream_bits) #define bit_ptr (picture->bitstream_ptr) - CBPtab * tab; + const CBPtab * tab; NEEDBITS (bit_buf, bits, bit_ptr); @@ -324,7 +324,7 @@ static inline int get_xvmc_luma_dc_dct_diff (picture_t * picture) #define bit_buf (picture->bitstream_buf) #define bits (picture->bitstream_bits) #define bit_ptr (picture->bitstream_ptr) - DCtab * tab; + const DCtab * tab; int size; int dc_diff; @@ -361,7 +361,7 @@ static inline int get_xvmc_chroma_dc_dct_diff (picture_t * picture) #define bit_buf (picture->bitstream_buf) #define bits (picture->bitstream_bits) #define bit_ptr (picture->bitstream_ptr) - DCtab * tab; + const DCtab * tab; int size; int dc_diff; @@ -405,12 +405,12 @@ static void get_xvmc_intra_block_B14 (picture_t * picture) int j; int l; int val; - uint8_t * scan = picture->scan; + const uint8_t * scan = picture->scan; uint8_t * scan_ptable = mpeg2_scan_orig_ptable; uint8_t * quant_matrix = picture->intra_quantizer_matrix; int quantizer_scale = picture->quantizer_scale; int mismatch; - DCTtab * tab; + const DCTtab * tab; uint32_t bit_buf; int bits; uint8_t * bit_ptr; @@ -534,12 +534,12 @@ static void get_xvmc_intra_block_B15 (picture_t * picture) int j; int l; int val; - uint8_t * scan = picture->scan; + const uint8_t * scan = picture->scan; uint8_t * scan_ptable = mpeg2_scan_orig_ptable; uint8_t * quant_matrix = picture->intra_quantizer_matrix; int quantizer_scale = picture->quantizer_scale; int mismatch; - DCTtab * tab; + const DCTtab * tab; uint32_t bit_buf; int bits; uint8_t * bit_ptr; @@ -661,12 +661,12 @@ static void get_xvmc_non_intra_block (picture_t * picture) int j; int l; int val; - uint8_t * scan = picture->scan; + const uint8_t * scan = picture->scan; uint8_t * scan_ptable = mpeg2_scan_orig_ptable; uint8_t * quant_matrix = picture->non_intra_quantizer_matrix; int quantizer_scale = picture->quantizer_scale; int mismatch; - DCTtab * tab; + const DCTtab * tab; uint32_t bit_buf; int bits; uint8_t * bit_ptr; @@ -797,11 +797,11 @@ static void get_xvmc_mpeg1_intra_block (picture_t * picture) int j; int l; int val; - uint8_t * scan = picture->scan; + const uint8_t * scan = picture->scan; uint8_t * scan_ptable = mpeg2_scan_orig_ptable; uint8_t * quant_matrix = picture->intra_quantizer_matrix; int quantizer_scale = picture->quantizer_scale; - DCTtab * tab; + const DCTtab * tab; uint32_t bit_buf; int bits; uint8_t * bit_ptr; @@ -929,11 +929,11 @@ static void get_xvmc_mpeg1_non_intra_block (picture_t * picture) int j; int l; int val; - uint8_t * scan = picture->scan; + const uint8_t * scan = picture->scan; uint8_t * scan_ptable = mpeg2_scan_orig_ptable; uint8_t * quant_matrix = picture->non_intra_quantizer_matrix; int quantizer_scale = picture->quantizer_scale; - DCTtab * tab; + const DCTtab * tab; uint32_t bit_buf; int bits; uint8_t * bit_ptr; @@ -1473,7 +1473,7 @@ static inline int slice_xvmc_init (picture_t * picture, int code) int offset, height; struct vo_frame_s * forward_reference_frame; struct vo_frame_s * backward_reference_frame; - MBAtab * mba; + const MBAtab * mba; offset = picture->picture_structure == BOTTOM_FIELD; picture->pitches[0] = picture->current_frame->pitches[0]; @@ -1664,7 +1664,7 @@ void mpeg2_xvmc_slice (mpeg2dec_accel_t *accel, picture_t * picture, int code, u while (1) { int macroblock_modes; int mba_inc; - MBAtab * mba; + const MBAtab * mba; NEEDBITS (bit_buf, bits, bit_ptr); diff --git a/src/libtheora/.cvsignore b/src/libmpeg2new/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libtheora/.cvsignore +++ b/src/libmpeg2new/.hgignore diff --git a/src/libmpeg2new/include/.cvsignore b/src/libmpeg2new/include/.hgignore index 282522db0..282522db0 100644 --- a/src/libmpeg2new/include/.cvsignore +++ b/src/libmpeg2new/include/.hgignore diff --git a/src/libvorbis/.cvsignore b/src/libmpeg2new/libmpeg2/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libvorbis/.cvsignore +++ b/src/libmpeg2new/libmpeg2/.hgignore diff --git a/src/libw32dll/.cvsignore b/src/libmusepack/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libw32dll/.cvsignore +++ b/src/libmusepack/.hgignore diff --git a/src/libmusepack/Makefile.am b/src/libmusepack/Makefile.am index 477dc31f9..021ec0985 100644 --- a/src/libmusepack/Makefile.am +++ b/src/libmusepack/Makefile.am @@ -6,11 +6,24 @@ EXTRA_DIST = diff_against_svn.patch libdir = $(XINE_PLUGINDIR) +if MUSEPACK lib_LTLIBRARIES = xineplug_decode_mpc.la +endif -xineplug_decode_mpc_la_SOURCES = huffsv46.c huffsv7.c idtag.c mpc_decoder.c \ - mpc_reader.c requant.c streaminfo.c synth_filter.c xine_decoder.c +if EXTERNAL_MPCDEC +internal_sources = +else +internal_sources = huffsv46.c huffsv7.c idtag.c mpc_decoder.c \ + mpc_reader.c requant.c streaminfo.c synth_filter.c +endif + +if EXTERNAL_MPCDEC +xineplug_decode_mpc_la_LIBADD = $(XINE_LIB) -lmpcdec +else xineplug_decode_mpc_la_LIBADD = $(XINE_LIB) +endif + +xineplug_decode_mpc_la_SOURCES = $(internal_sources) xine_decoder.c xineplug_decode_mpc_la_CFLAGS = $(VISIBILITY_FLAG) xineplug_decode_mpc_la_LDFLAGS = -avoid-version -module diff --git a/src/libmusepack/musepack/.cvsignore b/src/libmusepack/musepack/.hgignore index 282522db0..282522db0 100644 --- a/src/libmusepack/musepack/.cvsignore +++ b/src/libmusepack/musepack/.hgignore diff --git a/src/libmusepack/xine_decoder.c b/src/libmusepack/xine_decoder.c index 03d43fb63..26c2eddf5 100644 --- a/src/libmusepack/xine_decoder.c +++ b/src/libmusepack/xine_decoder.c @@ -23,7 +23,7 @@ * 32bit float output * Seeking?? * - * $Id: xine_decoder.c,v 1.9 2006/07/10 22:08:29 dgp85 Exp $ + * $Id: xine_decoder.c,v 1.10 2007/01/19 02:35:36 dgp85 Exp $ */ #include <stdio.h> @@ -43,7 +43,11 @@ #include "buffer.h" #include "xineutils.h" -#include "musepack/musepack.h" +#ifdef HAVE_MPCDEC_MPCDEC_H +# include <mpcdec/mpcdec.h> +#else +# include "musepack/musepack.h" +#endif #define MPC_DECODER_MEMSIZE 65536 #define MPC_DECODER_MEMSIZE2 (MPC_DECODER_MEMSIZE/2) diff --git a/src/libw32dll/DirectShow/.cvsignore b/src/libreal/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libw32dll/DirectShow/.cvsignore +++ b/src/libreal/.hgignore diff --git a/src/libreal/Makefile.am b/src/libreal/Makefile.am index 72dac45a1..114a473a7 100644 --- a/src/libreal/Makefile.am +++ b/src/libreal/Makefile.am @@ -1,15 +1,12 @@ include $(top_srcdir)/misc/Makefile.common -libdir = $(XINE_PLUGINDIR) +if ENABLE_REAL +xineplug_LTLIBRARIES = xineplug_decode_real.la +endif -lib_LTLIBRARIES = xineplug_decode_real.la xineplug_decode_real_audio.la - -xineplug_decode_real_la_SOURCES = xine_decoder.c +xineplug_decode_real_la_SOURCES = xine_decoder.c real_common.c audio_decoder.c xineplug_decode_real_la_LIBADD = $(XINE_LIB) $(DYNAMIC_LD_LIBS) xineplug_decode_real_la_CFLAGS = $(VISIBILITY_FLAG) -xineplug_decode_real_la_LDFLAGS = -avoid-version -module +xineplug_decode_real_la_LDFLAGS = $(xineplug_ldflags) -xineplug_decode_real_audio_la_SOURCES = audio_decoder.c -xineplug_decode_real_audio_la_LIBADD = $(XINE_LIB) $(DYNAMIC_LD_LIBS) -xineplug_decode_real_audio_la_CFLAGS = $(VISIBILITY_FLAG) -xineplug_decode_real_audio_la_LDFLAGS = -avoid-version -module +noinst_HEADERS = real_common.h diff --git a/src/libreal/audio_decoder.c b/src/libreal/audio_decoder.c index d5b2b2d26..d1bb94230 100644 --- a/src/libreal/audio_decoder.c +++ b/src/libreal/audio_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_decoder.c,v 1.49 2006/07/10 22:08:30 dgp85 Exp $ + * $Id: audio_decoder.c,v 1.59 2007/03/17 15:45:41 dgp85 Exp $ * * thin layer to use real binary-only codecs in xine * @@ -32,9 +32,6 @@ #include <fcntl.h> #include <unistd.h> #include <dlfcn.h> -#ifdef __x86_64__ - #include <elf.h> -#endif #define LOG_MODULE "real_audio_decoder" #define LOG_VERBOSE @@ -48,6 +45,8 @@ #include "buffer.h" #include "xineutils.h" +#include "real_common.h" + typedef struct { audio_decoder_class_t decoder_class; @@ -105,94 +104,14 @@ typedef struct { void *extras; } ra_init_t; -void *__builtin_new(unsigned long size); -void __builtin_delete (void *foo); -void *__builtin_vec_new(unsigned long size); -void __builtin_vec_delete(void *mem); -void __pure_virtual(void); - - -void *__builtin_new(unsigned long size) { - return malloc(size); -} - -void __builtin_delete (void *foo) { - /* printf ("libareal: __builtin_delete called\n"); */ - free (foo); -} - -#ifdef __x86_64__ -/* (gb) quick-n-dirty check to be run natively */ -static int is_x86_64_object_(FILE *f) -{ - Elf64_Ehdr *hdr = malloc(sizeof(Elf64_Ehdr)); - if (hdr == NULL) - return 0; - - if (fseek(f, 0, SEEK_SET) != 0) { - free(hdr); - return 0; - } - - if (fread(hdr, sizeof(Elf64_Ehdr), 1, f) != 1) { - free(hdr); - return 0; - } - - if (hdr->e_ident[EI_MAG0] != ELFMAG0 || - hdr->e_ident[EI_MAG1] != ELFMAG1 || - hdr->e_ident[EI_MAG2] != ELFMAG2 || - hdr->e_ident[EI_MAG3] != ELFMAG3) { - free(hdr); - return 0; - } - - return hdr->e_machine == EM_X86_64; -} - -static inline int is_x86_64_object(const char *filename) -{ - FILE *f; - int ret; - - if ((f = fopen(filename, "r")) == NULL) - return 0; - - ret = is_x86_64_object_(f); - fclose(f); - return ret; -} -#endif - -static int load_syms_linux (realdec_decoder_t *this, char *codec_name, - const char *alt_codec_name) { - - cfg_entry_t* entry = this->stream->xine->config->lookup_entry( - this->stream->xine->config, "decoder.external.real_codecs_path"); - char path[1024]; - struct stat sb; +static int load_syms_linux (realdec_decoder_t *this, const char *const codec_name, const char *const codec_alternate) { + cfg_entry_t* entry = + this->stream->xine->config->lookup_entry(this->stream->xine->config, + "decoder.external.real_codecs_path"); - snprintf (path, sizeof(path), "%s/%s", entry->str_value, codec_name); - if (stat(path, &sb)) - snprintf (path, sizeof(path), "%s/%s", entry->str_value, alt_codec_name); - -#ifdef __x86_64__ - /* check whether it's a real x86-64 library */ - if (!is_x86_64_object(path)) - return 0; -#endif - - lprintf ("(audio) opening shared obj '%s'\n", path); - - this->ra_handle = dlopen (path, RTLD_LAZY); - - if (!this->ra_handle) { - xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG, "libareal: error: %s\n", dlerror()); - _x_message(this->stream, XINE_MSG_LIBRARY_LOAD_ERROR, - codec_name, NULL); + if ( (this->ra_handle = _x_real_codec_open(this->stream, entry->str_value, codec_name, codec_alternate)) == NULL ) return 0; - } - + this->raCloseCodec = dlsym (this->ra_handle, "RACloseCodec"); this->raDecode = dlsym (this->ra_handle, "RADecode"); this->raFlush = dlsym (this->ra_handle, "RAFlush"); @@ -208,7 +127,7 @@ static int load_syms_linux (realdec_decoder_t *this, char *codec_name, !this->raGetFlavorProperty || !this->raOpenCodec2 || !this->raSetFlavor || /*!raSetDLLAccessPath ||*/ !this->raInitDecoder){ xprintf (this->stream->xine, XINE_VERBOSITY_LOG, - _("libareal: (audio) Cannot resolve symbols - incompatible dll: %s\n"), path); + _("libareal: (audio) Cannot resolve symbols - incompatible dll: %s\n"), codec_name); return 0; } @@ -443,7 +362,7 @@ static unsigned char sipr_swaps[38][2]={ static void realdec_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) { realdec_decoder_t *this = (realdec_decoder_t *) this_gen; - lprintf ("decode_data %d bytes, flags=0x%08x, pts=%lld ...\n", + lprintf ("decode_data %d bytes, flags=0x%08x, pts=%"PRId64" ...\n", buf->size, buf->decoder_flags, buf->pts); if (buf->decoder_flags & BUF_FLAG_PREVIEW) { @@ -678,35 +597,10 @@ static void dispose_class (audio_decoder_class_t *this) { free (this); } -/* - * some fake functions to make real codecs happy - */ -void *__builtin_vec_new(unsigned long size) EXPORTED; -void __builtin_vec_delete(void *mem) EXPORTED; -void __pure_virtual(void) EXPORTED; - -void *__builtin_vec_new(unsigned long size) { - return malloc(size); -} -void __builtin_vec_delete(void *mem) { - free(mem); -} -void __pure_virtual(void) { - lprintf("libareal: FATAL: __pure_virtual() called!\n"); - /* exit(1); */ -} - -/* - * real audio codec loader - */ - -static void *init_class (xine_t *xine, void *data) { +void *init_realadec (xine_t *xine, void *data) { real_class_t *this; config_values_t *config = xine->config; - char *real_codec_path; - char *default_real_codec_path = ""; - struct stat s; this = (real_class_t *) xine_xmalloc (sizeof (real_class_t)); @@ -715,44 +609,7 @@ static void *init_class (xine_t *xine, void *data) { this->decoder_class.get_description = get_description; this->decoder_class.dispose = dispose_class; - /* try some auto-detection */ - - if (!stat ("/usr/local/RealPlayer8/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/local/RealPlayer8/Codecs"; - if (!stat ("/usr/RealPlayer8/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/RealPlayer8/Codecs"; - if (!stat ("/usr/lib/RealPlayer8/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/lib/RealPlayer8/Codecs"; - if (!stat ("/opt/RealPlayer8/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/opt/RealPlayer8/Codecs"; - if (!stat ("/usr/lib/RealPlayer9/users/Real/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/lib/RealPlayer9/users/Real/Codecs"; - if (!stat ("/usr/lib/RealPlayer10/codecs/drvc.so", &s)) - default_real_codec_path = "/usr/lib/RealPlayer10/codecs"; - if (!stat ("/usr/lib64/RealPlayer8/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/lib64/RealPlayer8/Codecs"; - if (!stat ("/usr/lib64/RealPlayer9/users/Real/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/lib64/RealPlayer9/users/Real/Codecs"; - if (!stat ("/usr/lib64/RealPlayer10/codecs/drvc.so", &s)) - default_real_codec_path = "/usr/lib64/RealPlayer10/codecs"; - if (!stat ("/usr/lib/codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/lib/codecs"; - if (!stat ("/usr/lib/win32/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/lib/win32"; - - real_codec_path = config->register_string (config, "decoder.external.real_codecs_path", - default_real_codec_path, - _("path to RealPlayer codecs"), - _("If you have RealPlayer installed, specify the path " - "to its codec directory here. You can easily find " - "the codec directory by looking for a file named " - "\"drv3.so.6.0\" in it. If xine can find the RealPlayer " - "codecs, it will use them to decode RealPlayer content " - "for you. Consult the xine FAQ for more information on " - "how to install the codecs."), - 10, NULL, this); - - lprintf ("real codec path : %s\n", real_codec_path); + _x_real_codecs_init(xine); return this; } @@ -765,13 +622,7 @@ static uint32_t audio_types[] = { BUF_AUDIO_COOK, BUF_AUDIO_ATRK, /* BUF_AUDIO_14_4, BUF_AUDIO_28_8, */ BUF_AUDIO_SIPRO, 0 }; -static const decoder_info_t dec_info_audio = { +const decoder_info_t dec_info_realaudio = { audio_types, /* supported types */ - 5 /* priority */ -}; - -const plugin_info_t xine_plugin_info[] EXPORTED = { - /* type, API, "name", version, special_info, init_function */ - { PLUGIN_AUDIO_DECODER | PLUGIN_MUST_PRELOAD, 15, "realadec", XINE_VERSION_CODE, &dec_info_audio, init_class }, - { PLUGIN_NONE, 0, "", 0, NULL, NULL } + 7 /* priority */ }; diff --git a/src/libreal/real_common.c b/src/libreal/real_common.c new file mode 100644 index 000000000..925a5cc71 --- /dev/null +++ b/src/libreal/real_common.c @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2000-2007 the xine project + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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 + * + * $Id: real_common.c,v 1.12 2007/03/17 15:45:41 dgp85 Exp $ + * + * Common function for the thin layer to use Real binary-only codecs in xine + */ + +#define LOG_MODULE "real_common" +#define LOG_VERBOSE +/* +#define LOG +*/ + +#include "config.h" + +#include <sys/stat.h> +#include <string.h> +#include <dlfcn.h> + +#include "real_common.h" + +#ifdef __alpha__ + +void *__builtin_new(size_t size) { + return malloc(size); +} + +void __builtin_delete (void *foo) { + /* printf ("libareal: __builtin_delete called\n"); */ + free (foo); +} + +void *__builtin_vec_new(size_t size) { + return malloc(size); +} + +void __builtin_vec_delete(void *mem) { + free(mem); +} + +void __pure_virtual(void) { + lprintf("libreal: FATAL: __pure_virtual() called!\n"); + /* exit(1); */ +} + +#endif + +#ifndef HAVE____BRK_ADDR +void ___brk_addr(void) { exit(0); } +#endif + +#ifndef HAVE___CTYPE_B +void __ctype_b(void) { exit(0); } +#endif + +void _x_real_codecs_init(xine_t *const xine) { + const char *real_codecs_path = NULL; +#ifdef REAL_CODEC_PATH + const char *const default_real_codecs_path = REAL_CODEC_PATH; +#else + const char *default_real_codecs_path = ""; + struct stat s; + +#define try_real_path(path) \ + if (!stat (path "/dvrc.so", &s)) \ + default_real_codecs_path = path; +#define try_real_subpath(path) \ + try_real_path("/usr/" path) \ + else try_real_path("/usr/local" path) \ + else try_real_path("/opt" path) + + /* The priority is for the first found */ + try_real_subpath("lib/win32") + else try_real_subpath("lib/codecs") + else try_real_subpath("lib64/RealPlayer10/codecs") + else try_real_subpath("lib/RealPlayer10/codecs") + else try_real_subpath("lib64/RealPlayer9/users/Real/Codecs") + else try_real_subpath("lib/RealPlayer9/users/Real/Codecs") + else try_real_subpath("lib/RealPlayer8/Codecs") + else try_real_subpath("RealPlayer8/Codecs"); + +#undef try_real_path +#undef try_real_subpath +#endif + + real_codecs_path = + xine->config->register_filename (xine->config, "decoder.external.real_codecs_path", + default_real_codecs_path, + XINE_CONFIG_STRING_IS_DIRECTORY_NAME, + _("path to RealPlayer codecs"), + _("If you have RealPlayer installed, specify the path " + "to its codec directory here. You can easily find " + "the codec directory by looking for a file named " + "\"drvc.so\" in it. If xine can find the RealPlayer " + "codecs, it will use them to decode RealPlayer content " + "for you. Consult the xine FAQ for more information on " + "how to install the codecs."), + 10, NULL, NULL); + + lprintf ("real codecs path : %s\n", real_codec_path); +} + +void *_x_real_codec_open(xine_stream_t *const stream, const char *const path, + const char *const codec_name, + const char *const codec_alternate) { + char *codecpath = NULL; + void *codecmodule = NULL; + + asprintf(&codecpath, "%s/%s", path, codec_name); + if ( (codecmodule = dlopen(codecpath, RTLD_NOW)) ) { + free(codecpath); + return codecmodule; + } + + xprintf (stream->xine, XINE_VERBOSITY_DEBUG, + LOG_MODULE ": error loading %s: %s\n", codecpath, dlerror()); + + free(codecpath); + + if ( codec_alternate ) { + asprintf(&codecpath, "%s/%s", path, codec_alternate); + if ( (codecmodule = dlopen(codecpath, RTLD_NOW)) ) { + free(codecpath); + return codecmodule; + } + + xprintf (stream->xine, XINE_VERBOSITY_DEBUG, + LOG_MODULE ": error loading %s: %s\n", codecpath, dlerror()); + } + + _x_message(stream, XINE_MSG_LIBRARY_LOAD_ERROR, codec_name, NULL); + + return NULL; +} + +const plugin_info_t xine_plugin_info[] EXPORTED = { + /* type, API, "name", version, special_info, init_function */ + { PLUGIN_VIDEO_DECODER | PLUGIN_MUST_PRELOAD, 18, "realvdec", XINE_VERSION_CODE, &dec_info_realvideo, init_realvdec }, + { PLUGIN_AUDIO_DECODER | PLUGIN_MUST_PRELOAD, 15, "realadec", XINE_VERSION_CODE, &dec_info_realaudio, init_realadec }, + { PLUGIN_NONE, 0, "", 0, NULL, NULL } +}; diff --git a/src/libreal/real_common.h b/src/libreal/real_common.h new file mode 100644 index 000000000..232bf2a4d --- /dev/null +++ b/src/libreal/real_common.h @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2000-2007 the xine project + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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 + * + * $Id: real_common.h,v 1.7 2007/03/17 15:45:41 dgp85 Exp $ + * + * Common function for the thin layer to use Real binary-only codecs in xine + */ + +#ifndef __REAL_COMMON_H__ +#define __REAL_COMMON_H__ + +#include "xine_internal.h" + +/* + * some fake functions to make real codecs happy + * These are, on current date (20070316) needed only for Alpha + * codecs. + * As they are far from being proper replacements, define them only there + * until new codecs are available there too. + */ +#ifdef __alpha__ + +void *__builtin_new(size_t size); +void __builtin_delete (void *foo); +void *__builtin_vec_new(size_t size) EXPORTED; +void __builtin_vec_delete(void *mem) EXPORTED; +void __pure_virtual(void) EXPORTED; + +#endif + +#ifndef HAVE___ENVIRON +# ifdef HAVE__ENVIRON + char **__environ __attribute__((weak, alias("_environ"))); +# elif defined(HAVE_ENVIRON) + char **__environ __attribute__((weak, alias("environ"))); +# else + char **fake__environ = { NULL }; + char **__environ __attribute__((weak, alias("fake__environ"))); +# endif +#endif + +#ifndef HAVE_STDERR +# ifdef HAVE___STDERRP +# undef stderr +FILE *stderr __attribute__((weak, alias("__stderrp"))); +# else +# error Your stderr alias is not supported, please report to xine developers. +# endif +#endif + +#ifndef HAVE____BRK_ADDR +void ___brk_addr(void) EXPORTED; +#endif + +#ifndef HAVE___CTYPE_B +void __ctype_b(void) EXPORTED; +#endif + +void _x_real_codecs_init(xine_t *const xine); +void *_x_real_codec_open(xine_stream_t *const stream, const char *const path, + const char *const codec_name, + const char *const codec_alternate); + +const decoder_info_t dec_info_realvideo; +void *init_realvdec (xine_t *xine, void *data); + +const decoder_info_t dec_info_realaudio; +void *init_realadec (xine_t *xine, void *data); + +#endif diff --git a/src/libreal/xine_decoder.c b/src/libreal/xine_decoder.c index 0ed7f12d8..ea1fc8c54 100644 --- a/src/libreal/xine_decoder.c +++ b/src/libreal/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.83 2006/07/10 22:08:30 dgp85 Exp $ + * $Id: xine_decoder.c,v 1.93 2007/03/17 15:45:41 dgp85 Exp $ * * thin layer to use real binary-only codecs in xine * @@ -32,9 +32,6 @@ #include <fcntl.h> #include <unistd.h> #include <dlfcn.h> -#ifdef __x86_64__ - #include <elf.h> -#endif #define LOG_MODULE "real_decoder" #define LOG_VERBOSE @@ -47,6 +44,8 @@ #include "buffer.h" #include "xineutils.h" +#include "real_common.h" + typedef struct { video_decoder_class_t decoder_class; @@ -64,11 +63,11 @@ typedef struct realdec_decoder_s { void *rv_handle; - uint32_t (*rvyuv_custom_message)(uint32_t*, void*); + uint32_t (*rvyuv_custom_message)(void*, void*); uint32_t (*rvyuv_free)(void*); uint32_t (*rvyuv_hive_message)(uint32_t, uint32_t); uint32_t (*rvyuv_init)(void*, void*); /* initdata,context */ - uint32_t (*rvyuv_transform)(char*, char*, uint32_t*, uint32_t*,void*); + uint32_t (*rvyuv_transform)(char*, char*, void*, uint32_t*,void*); void *context; @@ -101,87 +100,40 @@ typedef struct { int32_t format; } rv_init_t; - -void *__builtin_vec_new(uint32_t size); -void __builtin_vec_delete(void *mem); -void __pure_virtual(void); - -#ifdef __x86_64__ -/* (gb) quick-n-dirty check to be run natively */ -static int is_x86_64_object_(FILE *f) -{ - Elf64_Ehdr *hdr = malloc(sizeof(Elf64_Ehdr)); - if (hdr == NULL) - return 0; - - if (fseek(f, 0, SEEK_SET) != 0) { - free(hdr); - return 0; - } - - if (fread(hdr, sizeof(Elf64_Ehdr), 1, f) != 1) { - free(hdr); - return 0; - } - - if (hdr->e_ident[EI_MAG0] != ELFMAG0 || - hdr->e_ident[EI_MAG1] != ELFMAG1 || - hdr->e_ident[EI_MAG2] != ELFMAG2 || - hdr->e_ident[EI_MAG3] != ELFMAG3) { - free(hdr); - return 0; - } - - return hdr->e_machine == EM_X86_64; -} - -static inline int is_x86_64_object(const char *filename) -{ - FILE *f; - int ret; - - if ((f = fopen(filename, "r")) == NULL) - return 0; - - ret = is_x86_64_object_(f); - fclose(f); - return ret; -} -#endif +/* + * Structures for data packets. These used to be tables of unsigned ints, but + * that does not work on 64 bit platforms (e.g. Alpha). The entries that are + * pointers get truncated. Pointers on 64 bit platforms are 8 byte longs. + * So we have to use structures so the compiler will assign the proper space + * for the pointer. + */ +typedef struct cmsg_data_s { + uint32_t data1; + uint32_t data2; + uint32_t* dimensions; +} cmsg_data_t; + +typedef struct transform_in_s { + uint32_t len; + uint32_t unknown1; + uint32_t chunks; + uint32_t* extra; + uint32_t unknown2; + uint32_t timestamp; +} transform_in_t; /* * real codec loader */ -static int load_syms_linux (realdec_decoder_t *this, char *codec_name, - const char *alt_codec_name) { - - cfg_entry_t* entry = this->stream->xine->config->lookup_entry( - this->stream->xine->config, "decoder.external.real_codecs_path"); - char path[1024]; - struct stat sb; - - snprintf (path, sizeof(path), "%s/%s", entry->str_value, codec_name); - if (stat(path, &sb)) - snprintf (path, sizeof(path), "%s/%s", entry->str_value, alt_codec_name); +static int load_syms_linux (realdec_decoder_t *this, const char *codec_name, const char *const codec_alternate) { + cfg_entry_t* entry = + this->stream->xine->config->lookup_entry(this->stream->xine->config, + "decoder.external.real_codecs_path"); -#ifdef __x86_64__ - /* check whether it's a real x86-64 library */ - if (!is_x86_64_object(path)) - return 0; -#endif - - lprintf ("opening shared obj '%s'\n", path); - - this->rv_handle = dlopen (path, RTLD_LAZY); - - if (!this->rv_handle) { - xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG, "libreal: error: %s\n", dlerror()); - _x_message(this->stream, XINE_MSG_LIBRARY_LOAD_ERROR, - codec_name, NULL); + if ( (this->rv_handle = _x_real_codec_open(this->stream, entry->str_value, codec_name, codec_alternate)) == NULL ) return 0; - } - + this->rvyuv_custom_message = dlsym (this->rv_handle, "RV20toYUV420CustomMessage"); this->rvyuv_free = dlsym (this->rv_handle, "RV20toYUV420Free"); this->rvyuv_hive_message = dlsym (this->rv_handle, "RV20toYUV420HiveMessage"); @@ -233,7 +185,7 @@ static int init_codec (realdec_decoder_t *this, buf_element_t *buf) { break; case BUF_VIDEO_RV40: _x_meta_info_set_utf8(this->stream, XINE_META_INFO_VIDEOCODEC, "Real Video 4.0"); - if (!load_syms_linux(this, "drvc.so", "drv4.so.6.0")) + if (!load_syms_linux(this, "drvc.so", "drv3.so.6.0")) return 0; break; default: @@ -262,7 +214,7 @@ static int init_codec (realdec_decoder_t *this, buf_element_t *buf) { this->duration = 90000.0 / this->fps; #endif - lprintf("this->ratio=%d\n", this->ratio); + lprintf("this->ratio=%f\n", this->ratio); lprintf ("init_data.w=%d(0x%x), init_data.h=%d(0x%x)," "this->width=%d(0x%x), this->height=%d(0x%x)\n", @@ -298,20 +250,14 @@ static int init_codec (realdec_decoder_t *this, buf_element_t *buf) { /* setup rv30 codec (codec sub-type and image dimensions): */ if ((init_data.format>=0x20200002) && (buf->type != BUF_VIDEO_RV40)) { int i, j; - uint32_t *cmsg24; - uint32_t cmsg_data[9]; + uint32_t cmsg24[(buf->size - 34 + 2) * sizeof(uint32_t)]; + cmsg_data_t cmsg_data = { 0x24, 1 + ((init_data.subformat >> 16) & 7), &cmsg24[0] }; - cmsg24 = xine_xmalloc((buf->size - 34 + 2) * sizeof(uint32_t)); - cmsg24[0] = this->width; cmsg24[1] = this->height; for(i = 2, j = 34; j < buf->size; i++, j++) cmsg24[i] = 4 * buf->content[j]; - cmsg_data[0] = 0x24; - cmsg_data[1] = 1 + ((init_data.subformat >> 16) & 7); - cmsg_data[2] = (uint32_t) cmsg24; - #ifdef LOG printf ("libreal: CustomMessage cmsg_data:\n"); xine_hexdump ((uint8_t *) cmsg_data, sizeof (cmsg_data)); @@ -319,9 +265,7 @@ static int init_codec (realdec_decoder_t *this, buf_element_t *buf) { xine_hexdump ((uint8_t *) cmsg24, (buf->size - 34 + 2) * sizeof(uint32_t)); #endif - this->rvyuv_custom_message (cmsg_data, this->context); - - free(cmsg24); + this->rvyuv_custom_message (&cmsg_data, this->context); } this->stream->video_out->open(this->stream->video_out, this->stream); @@ -338,7 +282,7 @@ static int init_codec (realdec_decoder_t *this, buf_element_t *buf) { static void realdec_decode_data (video_decoder_t *this_gen, buf_element_t *buf) { realdec_decoder_t *this = (realdec_decoder_t *) this_gen; - lprintf ("decode_data, flags=0x%08x, len=%d, pts=%lld ...\n", + lprintf ("decode_data, flags=0x%08x, len=%d, pts=%"PRId64" ...\n", buf->decoder_flags, buf->size, buf->pts); if (buf->decoder_flags & BUF_FLAG_PREVIEW) { @@ -374,7 +318,7 @@ static void realdec_decode_data (video_decoder_t *this_gen, buf_element_t *buf) this->chunk_buffer_size = 0; this->pts = buf->pts; - lprintf ("new frame starting, pts=%lld\n", this->pts); + lprintf ("new frame starting, pts=%"PRId64"\n", this->pts); } if ((this->chunk_buffer_size + buf->size) > this->chunk_buffer_max) { @@ -401,16 +345,23 @@ static void realdec_decode_data (video_decoder_t *this_gen, buf_element_t *buf) vo_frame_t *img; uint32_t transform_out[5]; - uint32_t transform_in[6]; + transform_in_t transform_in = { + this->chunk_buffer_size, + /* length of the packet (sub-packets appended) */ + 0, + /* unknown, seems to be unused */ + buf->decoder_info[2], + /* number of sub-packets - 1 */ + buf->decoder_info_ptr[2], + /* table of sub-packet offsets */ + 0, + /* unknown, seems to be unused */ + this->pts / 90 + /* timestamp (the integer value from the stream) */ + }; lprintf ("chunk table\n"); - transform_in[0] = this->chunk_buffer_size; /* length of the packet (sub-packets appended) */ - transform_in[1] = 0; /* unknown, seems to be unused */ - transform_in[2] = buf->decoder_info[2]; /* number of sub-packets - 1 */ - transform_in[3] = (uint32_t) buf->decoder_info_ptr[2]; /* table of sub-packet offsets */ - transform_in[4] = 0; /* unknown, seems to be unused */ - transform_in[5] = this->pts / 90; /* timestamp (the integer value from the stream) */ #ifdef LOG printf ("libreal: got %d chunks\n", @@ -429,7 +380,7 @@ static void realdec_decode_data (video_decoder_t *this_gen, buf_element_t *buf) result = this->rvyuv_transform (this->chunk_buffer, this->frame_buffer, - transform_in, + &transform_in, transform_out, this->context); @@ -574,32 +525,10 @@ static void dispose_class (video_decoder_class_t *this) { free (this); } -/* - * some fake functions to make real codecs happy - */ -void *__builtin_vec_new(uint32_t size) EXPORTED; -void __builtin_vec_delete(void *mem) EXPORTED; -void __pure_virtual(void) EXPORTED; - -void *__builtin_vec_new(uint32_t size) { - return malloc(size); -} -void __builtin_vec_delete(void *mem) { - free(mem); -} -void __pure_virtual(void) { - lprintf("libreal: FATAL: __pure_virtual() called!\n"); - /* exit(1); */ -} - - -static void *init_class (xine_t *xine, void *data) { +void *init_realvdec (xine_t *xine, void *data) { real_class_t *this; config_values_t *config = xine->config; - char *real_codec_path; - char *default_real_codec_path = ""; - struct stat s; this = (real_class_t *) xine_xmalloc (sizeof (real_class_t)); @@ -608,44 +537,7 @@ static void *init_class (xine_t *xine, void *data) { this->decoder_class.get_description = get_description; this->decoder_class.dispose = dispose_class; - /* try some auto-detection */ - - if (!stat ("/usr/local/RealPlayer8/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/local/RealPlayer8/Codecs"; - if (!stat ("/usr/RealPlayer8/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/RealPlayer8/Codecs"; - if (!stat ("/usr/lib/RealPlayer8/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/lib/RealPlayer8/Codecs"; - if (!stat ("/opt/RealPlayer8/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/opt/RealPlayer8/Codecs"; - if (!stat ("/usr/lib/RealPlayer9/users/Real/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/lib/RealPlayer9/users/Real/Codecs"; - if (!stat ("/usr/lib/RealPlayer10/codecs/drvc.so", &s)) - default_real_codec_path = "/usr/lib/RealPlayer10/codecs"; - if (!stat ("/usr/lib64/RealPlayer8/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/lib64/RealPlayer8/Codecs"; - if (!stat ("/usr/lib64/RealPlayer9/users/Real/Codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/lib64/RealPlayer9/users/Real/Codecs"; - if (!stat ("/usr/lib64/RealPlayer10/codecs/drvc.so", &s)) - default_real_codec_path = "/usr/lib64/RealPlayer10/codecs"; - if (!stat ("/usr/lib/codecs/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/lib/codecs"; - if (!stat ("/usr/lib/win32/drv3.so.6.0", &s)) - default_real_codec_path = "/usr/lib/win32"; - - real_codec_path = config->register_string (config, "decoder.external.real_codecs_path", - default_real_codec_path, - _("path to RealPlayer codecs"), - _("If you have RealPlayer installed, specify the path " - "to its codec directory here. You can easily find " - "the codec directory by looking for a file named " - "\"drv3.so.6.0\" in it. If xine can find the RealPlayer " - "codecs, it will use them to decode RealPlayer content " - "for you. Consult the xine FAQ for more information on " - "how to install the codecs."), - 10, NULL, this); - - lprintf ("real codec path : %s\n", real_codec_path); + _x_real_codecs_init(xine); return this; } @@ -659,13 +551,7 @@ static uint32_t supported_types[] = { BUF_VIDEO_RV20, BUF_VIDEO_RV40, 0 }; -static const decoder_info_t dec_info_real = { +const decoder_info_t dec_info_realvideo = { supported_types, /* supported types */ 7 /* priority */ }; - -const plugin_info_t xine_plugin_info[] EXPORTED = { - /* type, API, "name", version, special_info, init_function */ - { PLUGIN_VIDEO_DECODER | PLUGIN_MUST_PRELOAD, 18, "real", XINE_VERSION_CODE, &dec_info_real, init_class }, - { PLUGIN_NONE, 0, "", 0, NULL, NULL } -}; diff --git a/src/libw32dll/dmo/.cvsignore b/src/libspeex/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libw32dll/dmo/.cvsignore +++ b/src/libspeex/.hgignore diff --git a/src/libspeex/xine_decoder.c b/src/libspeex/xine_decoder.c index e324eb3ed..b729dc3bb 100644 --- a/src/libspeex/xine_decoder.c +++ b/src/libspeex/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.21 2006/09/14 02:07:01 dgp85 Exp $ + * $Id: xine_decoder.c,v 1.22 2007/01/19 01:48:05 dgp85 Exp $ * * (ogg/)speex audio decoder plugin (libspeex wrapper) for xine */ @@ -298,7 +298,7 @@ static void speex_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) { int bitrate; ogg_int16_t * ptr = audio_buffer->mem; - ret = speex_decode (this->st, &this->bits, (short *) this->output); + ret = speex_decode (this->st, &this->bits, this->output); if (ret==-1) break; @@ -312,7 +312,7 @@ static void speex_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) { } if (this->channels == 2) { - speex_decode_stereo ( (short *) this->output, this->frame_size, &this->stereo); + speex_decode_stereo (this->output, this->frame_size, &this->stereo); } speex_decoder_ctl (this->st, SPEEX_GET_BITRATE, &bitrate); diff --git a/src/libw32dll/wine/.cvsignore b/src/libspucc/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libw32dll/wine/.cvsignore +++ b/src/libspucc/.hgignore diff --git a/src/libspucc/cc_decoder.c b/src/libspucc/cc_decoder.c index 4acd2cf0e..ba688accf 100644 --- a/src/libspucc/cc_decoder.c +++ b/src/libspucc/cc_decoder.c @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: cc_decoder.c,v 1.27 2005/09/25 00:44:04 miguelfreitas Exp $ + * $Id: cc_decoder.c,v 1.28 2007/02/20 00:56:36 dgp85 Exp $ * * stuff needed to provide closed captioning decoding and display * @@ -213,13 +213,6 @@ static uint8_t *cc_alpha_palettes[NUM_CC_PALETTES] = { cc_text_solid_alpha }; - -char *cc_schemes[NUM_CC_PALETTES + 1] = { - "White/Gray/Translucent", - "White/Black/Solid", - NULL -}; - /* --------------------- misc. EIA 608 definitions -------------------*/ #define TRANSP_SPACE 0x19 /* code for transparent space, essentially diff --git a/src/libspucc/cc_decoder.h b/src/libspucc/cc_decoder.h index 1e298515e..0e7fb69a5 100644 --- a/src/libspucc/cc_decoder.h +++ b/src/libspucc/cc_decoder.h @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: cc_decoder.h,v 1.7 2004/05/05 17:36:48 mroi Exp $ + * $Id: cc_decoder.h,v 1.8 2007/02/20 00:56:36 dgp85 Exp $ * * stuff needed to provide closed captioning decoding and display * @@ -33,7 +33,11 @@ typedef struct cc_decoder_s cc_decoder_t; typedef struct cc_renderer_s cc_renderer_t; #define NUM_CC_PALETTES 2 -extern char *cc_schemes[NUM_CC_PALETTES + 1]; +static const char *cc_schemes[NUM_CC_PALETTES + 1] = { + "White/Gray/Translucent", + "White/Black/Solid", + NULL +}; #define CC_FONT_MAX 256 diff --git a/src/libxineadec/.cvsignore b/src/libspucmml/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libxineadec/.cvsignore +++ b/src/libspucmml/.hgignore diff --git a/src/libxineadec/gsm610/.cvsignore b/src/libspudec/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libxineadec/gsm610/.cvsignore +++ b/src/libspudec/.hgignore diff --git a/src/libspudec/Makefile.am b/src/libspudec/Makefile.am index aedfb2e71..d50c49ca6 100644 --- a/src/libspudec/Makefile.am +++ b/src/libspudec/Makefile.am @@ -9,7 +9,7 @@ if HAVE_DVDNAV xineplug_decode_spu_la_SOURCES = \ spu.c \ xine_decoder.c -xineplug_decode_spu_la_LIBADD = $(XINE_LIB) $(DVDNAV_LIBS) $(THREAD_LIBS) +xineplug_decode_spu_la_LIBADD = $(XINE_LIB) $(DVDNAV_LIBS) $(PTHREAD_LIBS) else @@ -18,7 +18,7 @@ xineplug_decode_spu_la_SOURCES = \ spu.c \ xine_decoder.c AM_CPPFLAGS = -I$(top_srcdir)/src/input/libdvdnav -xineplug_decode_spu_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) +xineplug_decode_spu_la_LIBADD = $(XINE_LIB) $(PTHREAD_LIBS) endif diff --git a/src/libxineadec/nosefart/.cvsignore b/src/libspudvb/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libxineadec/nosefart/.cvsignore +++ b/src/libspudvb/.hgignore diff --git a/src/libspudvb/Makefile.am b/src/libspudvb/Makefile.am index 704d085c5..1efc8252f 100644 --- a/src/libspudvb/Makefile.am +++ b/src/libspudvb/Makefile.am @@ -5,6 +5,6 @@ libdir = $(XINE_PLUGINDIR) lib_LTLIBRARIES = xineplug_decode_spudvb.la xineplug_decode_spudvb_la_SOURCES = xine_decoder.c -xineplug_decode_spudvb_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) +xineplug_decode_spudvb_la_LIBADD = $(XINE_LIB) $(PTHREAD_LIBS) xineplug_decode_spudvb_la_CFLAGS = $(VISIBILITY_FLAG) xineplug_decode_spudvb_la_LDFLAGS = -avoid-version -module diff --git a/src/libxinevdec/.cvsignore b/src/libsputext/.hgignore index 7d926a554..7d926a554 100644 --- a/src/libxinevdec/.cvsignore +++ b/src/libsputext/.hgignore diff --git a/src/libsputext/demux_sputext.c b/src/libsputext/demux_sputext.c index d5c591212..c17dde6c8 100644 --- a/src/libsputext/demux_sputext.c +++ b/src/libsputext/demux_sputext.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: demux_sputext.c,v 1.49 2006/07/10 22:08:30 dgp85 Exp $ + * $Id: demux_sputext.c,v 1.53 2007/01/19 01:05:25 dgp85 Exp $ * * code based on old libsputext/xine_decoder.c * @@ -727,7 +727,7 @@ static subtitle_t *sub_read_line_aqt (demux_sputext_t *this, subtitle_t *current sub_readtext((char *) &line,¤t->text[1]); current->lines = 2; - if ((current->text[0]=="") && (current->text[1]=="")) { + if ((current->text[0][0]==0) && (current->text[1][0]==0)) { return NULL; } @@ -915,7 +915,8 @@ static subtitle_t *sub_read_line_jacobsub(demux_sputext_t *this, subtitle_t *cur return NULL; trail_space(directive); strncat(line2, directive, - (LINE_LEN > 511) ? LINE_LEN : 511); + ((LINE_LEN > 511) ? LINE_LEN-1 : 511) + - strlen(line2)); break; } default: @@ -1403,10 +1404,8 @@ static demux_plugin_t *open_demux_plugin (demux_class_t *class_gen, xine_stream_ switch (stream->content_detection_method) { case METHOD_BY_EXTENSION: { - char *mrl, *ending; - - mrl = input->get_mrl(input); - ending = strrchr(mrl, '.'); + const char *const mrl = input->get_mrl(input); + const char *const ending = strrchr(mrl, '.'); if (!ending || ( (strncasecmp(ending, ".asc", 4) != 0) && @@ -1451,19 +1450,19 @@ static demux_plugin_t *open_demux_plugin (demux_class_t *class_gen, xine_stream_ return NULL; } -static char *get_demux_description (demux_class_t *this_gen) { +static const char *get_demux_description (demux_class_t *this_gen) { return "sputext demuxer plugin"; } -static char *get_demux_identifier (demux_class_t *this_gen) { +static const char *get_demux_identifier (demux_class_t *this_gen) { return "sputext"; } -static char *get_demux_extensions (demux_class_t *this_gen) { +static const char *get_demux_extensions (demux_class_t *this_gen) { return "asc txt sub srt smi ssa"; } -static char *get_demux_mimetypes (demux_class_t *this_gen) { +static const char *get_demux_mimetypes (demux_class_t *this_gen) { return NULL; /* do not report this mimetype, it might confuse browsers. */ diff --git a/src/libsputext/xine_decoder.c b/src/libsputext/xine_decoder.c index 851a9af93..e8ef631ca 100644 --- a/src/libsputext/xine_decoder.c +++ b/src/libsputext/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.96 2006/09/26 02:36:55 dgp85 Exp $ + * $Id: xine_decoder.c,v 1.99 2007/02/20 01:04:07 dgp85 Exp $ * */ @@ -64,6 +64,10 @@ typedef struct sputext_class_s { subtitle_size subtitle_size; /* size of subtitles */ int vertical_offset; char font[FONTNAME_SIZE]; /* subtitle font */ +#ifdef HAVE_FT2 + char font_ft[FILENAME_MAX]; /* subtitle font */ + int use_font_ft; /* use Freetype */ +#endif char *src_encoding; /* encoding of subtitle file */ int use_unscaled; /* use unscaled OSD if possible */ @@ -87,7 +91,7 @@ typedef struct sputext_decoder_s { */ subtitle_size subtitle_size; /* size of subtitles */ int vertical_offset; - char font[FONTNAME_SIZE]; /* subtitle font */ + char font[FILENAME_MAX]; /* subtitle font */ char *buf_encoding; /* encoding of subtitle buffer */ int width; /* frame width */ @@ -107,6 +111,14 @@ typedef struct sputext_decoder_s { int last_lines; /* number of lines of the previous subtitle */ } sputext_decoder_t; +static inline char *get_font (sputext_class_t *class) +{ +#ifdef HAVE_FT2 + return class->use_font_ft ? class->font_ft : class->font; +#else + return class->font; +#endif +} static void update_font_size (sputext_decoder_t *this, int force_update) { static int sizes[SUBTITLE_SIZE_NUM] = { 16, 20, 24, 32, 48, 64 }; @@ -138,7 +150,7 @@ static void update_font_size (sputext_decoder_t *this, int force_update) { this->width, SUB_MAX_TEXT * this->line_height); - this->renderer->set_font (this->osd, this->class->font, this->font_size); + this->renderer->set_font (this->osd, get_font (this->class), this->font_size); this->renderer->set_position (this->osd, 0, y); } } @@ -338,6 +350,7 @@ static void draw_subtitle(sputext_decoder_t *this, int64_t sub_start, int64_t su int line, y; int font_size; + char *font; _x_assert(this->renderer != NULL); if ( ! this->renderer ) @@ -345,10 +358,11 @@ static void draw_subtitle(sputext_decoder_t *this, int64_t sub_start, int64_t su update_font_size(this, 0); - if( strcmp(this->font, this->class->font) ) { - strncpy(this->font, this->class->font, FONTNAME_SIZE); - this->font[FONTNAME_SIZE - 1] = '\0'; - this->renderer->set_font (this->osd, this->class->font, this->font_size); + font = get_font (this->class); + if( strcmp(this->font, font) ) { + strncpy(this->font, font, FILENAME_MAX); + this->font[FILENAME_MAX - 1] = '\0'; + this->renderer->set_font (this->osd, font, this->font_size); } font_size = this->font_size; @@ -546,7 +560,7 @@ static void draw_subtitle(sputext_decoder_t *this, int64_t sub_start, int64_t su if( w > this->width && font_size > 16 ) { font_size -= 4; - this->renderer->set_font (this->osd, this->class->font, font_size); + this->renderer->set_font (this->osd, get_font (this->class), font_size); } else { break; } @@ -561,7 +575,7 @@ static void draw_subtitle(sputext_decoder_t *this, int64_t sub_start, int64_t su } if( font_size != this->font_size ) - this->renderer->set_font (this->osd, this->class->font, this->font_size); + this->renderer->set_font (this->osd, get_font (this->class), this->font_size); if( this->last_subtitle_end && sub_start < this->last_subtitle_end ) { sub_start = this->last_subtitle_end; @@ -577,7 +591,7 @@ static void draw_subtitle(sputext_decoder_t *this, int64_t sub_start, int64_t su this->renderer->hide (this->osd, sub_end); - lprintf ("scheduling subtitle >%s< at %lld until %lld, current time is %lld\n", + lprintf ("scheduling subtitle >%s< at %"PRId64" until %"PRId64", current time is %"PRId64"\n", this->text[0], sub_start, sub_end, this->stream->xine->clock->get_current_time (this->stream->xine->clock)); } @@ -824,6 +838,27 @@ static void update_osd_font(void *class_gen, xine_cfg_entry_t *entry) xprintf(class->xine, XINE_VERBOSITY_DEBUG, "libsputext: spu_font = %s\n", class->font ); } +#ifdef HAVE_FT2 +static void update_osd_font_ft(void *class_gen, xine_cfg_entry_t *entry) +{ + sputext_class_t *class = (sputext_class_t *)class_gen; + + strncpy(class->font_ft, entry->str_value, FILENAME_MAX); + class->font_ft[FILENAME_MAX - 1] = '\0'; + + xprintf(class->xine, XINE_VERBOSITY_DEBUG, "libsputext: spu_font_ft = %s\n", class->font_ft); +} + +static void update_osd_use_font_ft(void *class_gen, xine_cfg_entry_t *entry) +{ + sputext_class_t *class = (sputext_class_t *)class_gen; + + class->use_font_ft = entry->num_value; + + xprintf(class->xine, XINE_VERBOSITY_DEBUG, "libsputext: spu_use_font_ft = %d\n", class->use_font_ft); +} +#endif + static void update_subtitle_size(void *class_gen, xine_cfg_entry_t *entry) { sputext_class_t *class = (sputext_class_t *)class_gen; @@ -890,7 +925,7 @@ static void update_src_encoding(void *class_gen, xine_cfg_entry_t *entry) static void *init_spu_decoder_plugin (xine_t *xine, void *data) { - static char *subtitle_size_strings[] = { + static const char *subtitle_size_strings[] = { "tiny", "small", "normal", "large", "very large", "huge", NULL }; sputext_class_t *this ; @@ -929,6 +964,21 @@ static void *init_spu_decoder_plugin (xine_t *xine, void *data) { "subtitle text."), 10, update_osd_font, this), FONTNAME_SIZE); this->font[FONTNAME_SIZE - 1] = '\0'; +#ifdef HAVE_FT2 + strncpy(this->font_ft, xine->config->register_filename(xine->config, + "subtitles.separate.font_freetype", + "", XINE_CONFIG_STRING_IS_FILENAME, + _("font for subtitles"), + _("An outline font file (e.g. a .ttf) to be used for the subtitle text."), + 10, update_osd_font_ft, this), FILENAME_MAX); + this->font_ft[FILENAME_MAX - 1] = '\0'; + this->use_font_ft = xine->config->register_bool(xine->config, + "subtitles.separate.font_use_freetype", + 0, + _("whether to use a freetype font"), + NULL, + 10, update_osd_use_font_ft, this); +#endif this->src_encoding = xine->config->register_string(xine->config, "subtitles.separate.src_encoding", xine_guess_spu_encoding(), diff --git a/src/post/audio/.cvsignore b/src/libtheora/.hgignore index 7d926a554..7d926a554 100644 --- a/src/post/audio/.cvsignore +++ b/src/libtheora/.hgignore diff --git a/src/post/deinterlace/.cvsignore b/src/libvorbis/.hgignore index 7d926a554..7d926a554 100644 --- a/src/post/deinterlace/.cvsignore +++ b/src/libvorbis/.hgignore diff --git a/src/libvorbis/xine_decoder.c b/src/libvorbis/xine_decoder.c index 12d0a83f2..ef8575949 100644 --- a/src/libvorbis/xine_decoder.c +++ b/src/libvorbis/xine_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.47 2006/07/10 22:08:30 dgp85 Exp $ + * $Id: xine_decoder.c,v 1.48 2006/12/04 13:59:38 dgp85 Exp $ * * (ogg/)vorbis audio decoder plugin (libvorbis wrapper) for xine */ @@ -148,13 +148,16 @@ static void vorbis_decode_data (audio_decoder_t *this_gen, buf_element_t *buf) { lprintf ("%d headers to go\n", this->header_count); if (this->header_count) { + int res = 0; if (this->header_count == 3) this->op.b_o_s = 1; - if(vorbis_synthesis_headerin(&this->vi,&this->vc,&this->op)<0){ + + if( (res = vorbis_synthesis_headerin(&this->vi,&this->vc,&this->op)) < 0 ){ /* error case; not a vorbis header */ - printf("libvorbis: this bitstream does not contain vorbis audio data.\n"); + xine_log(this->stream->xine, XINE_LOG_MSG, "libvorbis: this bitstream does not contain vorbis audio data. Following first 64 bytes (return: %d).\n", res); + xine_hexdump(this->op.packet, this->op.bytes < 64 ? this->op.bytes : 64); return; } diff --git a/src/post/deinterlace/plugins/.cvsignore b/src/libw32dll/.hgignore index 7d926a554..7d926a554 100644 --- a/src/post/deinterlace/plugins/.cvsignore +++ b/src/libw32dll/.hgignore diff --git a/src/post/goom/.cvsignore b/src/libw32dll/DirectShow/.hgignore index 7d926a554..7d926a554 100644 --- a/src/post/goom/.cvsignore +++ b/src/libw32dll/DirectShow/.hgignore diff --git a/src/libw32dll/DirectShow/DS_VideoDecoder.c b/src/libw32dll/DirectShow/DS_VideoDecoder.c index e34659f91..44c6d26d7 100644 --- a/src/libw32dll/DirectShow/DS_VideoDecoder.c +++ b/src/libw32dll/DirectShow/DS_VideoDecoder.c @@ -110,6 +110,7 @@ DS_VideoDecoder * DS_VideoDecoder_Open(char* dllname, GUID* guid, BITMAPINFOHEAD this->iv.m_bh = (BITMAPINFOHEADER*)malloc(bihs); memcpy(this->iv.m_bh, format, bihs); + this->iv.m_bh->biSize = bihs; this->iv.m_State = STOP; //this->iv.m_pFrame = 0; diff --git a/src/libw32dll/Makefile.am b/src/libw32dll/Makefile.am index aa42cd8e3..46027d0f1 100644 --- a/src/libw32dll/Makefile.am +++ b/src/libw32dll/Makefile.am @@ -16,21 +16,23 @@ lib_LTLIBRARIES = $(w32dll_codec) $(qt_codec) EXTRA_DIST = common.c xineplug_decode_w32dll_la_SOURCES = w32codec.c -xineplug_decode_w32dll_la_LDFLAGS = -avoid-version -module \ - @IMPURE_TEXT_LDFLAGS@ +xineplug_decode_w32dll_la_LDFLAGS = -avoid-version -module xineplug_decode_w32dll_la_LIBADD = \ $(top_builddir)/src/libw32dll/wine/libwine.la \ $(XINE_LIB) \ + $(PTHREAD_LIBS) \ + -lm \ $(top_builddir)/src/libw32dll/DirectShow/libds_filter.la \ $(top_builddir)/src/libw32dll/dmo/libdmo_filter.la \ @KSTAT_LIBS@ xineplug_decode_qt_la_SOURCES = qt_decoder.c -xineplug_decode_qt_la_LDFLAGS = -avoid-version -module \ - IMPURE_TEXT_LDFLAGS@ +xineplug_decode_qt_la_LDFLAGS = -avoid-version -module xineplug_decode_qt_la_LIBADD = \ $(top_builddir)/src/libw32dll/wine/libwine.la \ $(XINE_LIB) \ + $(PTHREAD_LIBS) \ + -lm \ @KSTAT_LIBS@ noinst_HEADERS = libwin32.h w32codec.h diff --git a/src/libw32dll/common.c b/src/libw32dll/common.c index 1f42288c2..35fe41941 100644 --- a/src/libw32dll/common.c +++ b/src/libw32dll/common.c @@ -13,7 +13,7 @@ static char *get_win32_codecs_path(config_values_t *cfg) { NULL }; int i = 0; - cfgpath = cfg->register_string (cfg, "decoder.external.win32_codecs_path", WIN32_PATH, + cfgpath = cfg->register_filename (cfg, "decoder.external.win32_codecs_path", WIN32_PATH, XINE_CONFIG_STRING_IS_DIRECTORY_NAME, _("path to Win32 codecs"), _("If you have the Windows or Apple Quicktime codec packs " "installed, specify the path the codec directory here. " diff --git a/src/post/mosaico/.cvsignore b/src/libw32dll/dmo/.hgignore index 7d926a554..7d926a554 100644 --- a/src/post/mosaico/.cvsignore +++ b/src/libw32dll/dmo/.hgignore diff --git a/src/libw32dll/dmo/DMO_VideoDecoder.c b/src/libw32dll/dmo/DMO_VideoDecoder.c index 564c26ec8..3ad85645a 100644 --- a/src/libw32dll/dmo/DMO_VideoDecoder.c +++ b/src/libw32dll/dmo/DMO_VideoDecoder.c @@ -118,6 +118,7 @@ DMO_VideoDecoder * DMO_VideoDecoder_Open(char* dllname, GUID* guid, BITMAPINFOHE this->iv.m_bh = (BITMAPINFOHEADER*)malloc(bihs); memcpy(this->iv.m_bh, format, bihs); + this->iv.m_bh->biSize = bihs; this->iv.m_State = STOP; //this->iv.m_pFrame = 0; diff --git a/src/libw32dll/qtx/.cvsignore b/src/libw32dll/qtx/.hgignore index 22a4e7292..22a4e7292 100644 --- a/src/libw32dll/qtx/.cvsignore +++ b/src/libw32dll/qtx/.hgignore diff --git a/src/libw32dll/qtx/qtxsdk/.cvsignore b/src/libw32dll/qtx/qtxsdk/.hgignore index 282522db0..282522db0 100644 --- a/src/libw32dll/qtx/qtxsdk/.cvsignore +++ b/src/libw32dll/qtx/qtxsdk/.hgignore diff --git a/src/post/planar/.cvsignore b/src/libw32dll/wine/.hgignore index 7d926a554..7d926a554 100644 --- a/src/post/planar/.cvsignore +++ b/src/libw32dll/wine/.hgignore diff --git a/src/libw32dll/wine/ldt_keeper.c b/src/libw32dll/wine/ldt_keeper.c index 11711ce62..7f7169b86 100644 --- a/src/libw32dll/wine/ldt_keeper.c +++ b/src/libw32dll/wine/ldt_keeper.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: ldt_keeper.c,v 1.15 2006/05/07 09:31:57 valtri Exp $ + * $Id: ldt_keeper.c,v 1.16 2007/03/09 23:49:35 dgp85 Exp $ * * * contents: @@ -54,6 +54,7 @@ /* applied some modification to make make our xine friend more happy */ #include "ldt_keeper.h" +#include "config.h" #include <string.h> #include <stdlib.h> @@ -90,6 +91,7 @@ int modify_ldt(int func, void *ptr, unsigned long bytecount); #include <sys/sysi86.h> /* solaris x86: add missing prototype for sysi86() */ +#ifndef HAVE_SYSI86 #ifdef __cplusplus extern "C" { #endif @@ -97,6 +99,7 @@ int sysi86(int, void*); #ifdef __cplusplus } #endif +#endif #ifndef NUMSYSLDTS /* SunOS 2.5.1 does not define NUMSYSLDTS */ #define NUMSYSLDTS 6 /* Let's hope the SunOS 5.8 value is OK */ diff --git a/src/libw32dll/wine/module.c b/src/libw32dll/wine/module.c index 6e9235584..0331f141f 100644 --- a/src/libw32dll/wine/module.c +++ b/src/libw32dll/wine/module.c @@ -39,8 +39,8 @@ #ifdef EMU_QTX_API #include "wrapper.h" -static int report_func(void *stack_base, int stack_size, reg386_t *reg, u_int32_t *flags); -static int report_func_ret(void *stack_base, int stack_size, reg386_t *reg, u_int32_t *flags); +int report_func(void *stack_base, int stack_size, reg386_t *reg, u_int32_t *flags); +int report_func_ret(void *stack_base, int stack_size, reg386_t *reg, u_int32_t *flags); #endif //#undef TRACE @@ -389,9 +389,7 @@ HMODULE WINAPI LoadLibraryExA(LPCSTR libname, HANDLE hfile, DWORD flags) strncpy(path, libname, sizeof(path) - 1); } else { /* check default user path */ - strncpy(path, win32_def_path, sizeof(path) - 2); - strcat(path, "/"); - strncat(path, libname, sizeof(path) - strlen(libname)); + snprintf(path, sizeof(path), "%s/%s", win32_def_path, libname); } wm = MODULE_LoadLibraryExA( path, hfile, flags ); @@ -521,8 +519,6 @@ HMODULE WINAPI LoadLibraryExA(LPCSTR libname, HANDLE hfile, DWORD flags) printf ("wine/module: QuickTime.qts patched!!! old entry=%p\n",ptr[0]); #ifdef EMU_QTX_API - report_entry = report_func; - report_ret = report_func_ret; wrapper_target=ptr[0]; ptr[0]=wrapper; #endif @@ -685,7 +681,7 @@ static int dump_component(char* name,int type,void* _orig, ComponentParameters * static u_int32_t ret_array[4096]; static int ret_i=0; -static int report_func(void *stack_base, int stack_size, reg386_t *reg, u_int32_t *flags) +int report_func(void *stack_base, int stack_size, reg386_t *reg, u_int32_t *flags) { #ifdef DEBUG_QTX_API int i; @@ -884,7 +880,7 @@ static int report_func(void *stack_base, int stack_size, reg386_t *reg, u_int32_ return 0; } -static int report_func_ret(void *stack_base, int stack_size, reg386_t *reg, u_int32_t *flags) +int report_func_ret(void *stack_base, int stack_size, reg386_t *reg, u_int32_t *flags) { #ifdef DEBUG_QTX_API int i; @@ -999,8 +995,6 @@ FARPROC MODULE_GetProcAddress( // || !strcmp(function,"_CallComponent") ){ fprintf(stderr,"theQuickTimeDispatcher caught -> %p\n",retproc); - report_entry = report_func; - report_ret = report_func_ret; wrapper_target=(void *)retproc; retproc=(void *)wrapper; } diff --git a/src/libw32dll/wine/pe_image.c b/src/libw32dll/wine/pe_image.c index 92017f906..aa29098c1 100644 --- a/src/libw32dll/wine/pe_image.c +++ b/src/libw32dll/wine/pe_image.c @@ -47,6 +47,9 @@ #ifdef HAVE_SYS_MMAN_H #include <sys/mman.h> #endif +#ifdef HAVE_ALLOCA_H +#include <alloca.h> +#endif #include "windef.h" #include "winbase.h" #include "winerror.h" diff --git a/src/libw32dll/wine/pshpack1.h b/src/libw32dll/wine/pshpack1.h index 659b2ed67..15876039c 100644 --- a/src/libw32dll/wine/pshpack1.h +++ b/src/libw32dll/wine/pshpack1.h @@ -2,7 +2,7 @@ #define __WINE_PSHPACK_H 1 #if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) || defined(__ICC) -//#pragma pack(1) +#pragma pack(1) #elif !defined(RC_INVOKED) #error "1 as alignment isn't supported by the compiler" #endif /* defined(__GNUC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) ; !defined(RC_INVOKED) */ diff --git a/src/libw32dll/wine/pshpack2.h b/src/libw32dll/wine/pshpack2.h index a0830be0b..0145d8b13 100644 --- a/src/libw32dll/wine/pshpack2.h +++ b/src/libw32dll/wine/pshpack2.h @@ -2,7 +2,7 @@ #define __WINE_PSHPACK_H 2 #if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) || defined(__ICC) -//#pragma pack(2) +#pragma pack(2) #elif !defined(RC_INVOKED) #error "2 as alignment isn't supported by the compiler" #endif /* defined(__GNUC__) || defined(__SUNPRO_CC) ; !defined(RC_INVOKED) */ diff --git a/src/libw32dll/wine/stubs.s b/src/libw32dll/wine/stubs.s index 6aa90ee9d..2c6270616 100644 --- a/src/libw32dll/wine/stubs.s +++ b/src/libw32dll/wine/stubs.s @@ -33,3 +33,6 @@ exp_EH_prolog: leal 12(%esp), %ebp pushl %eax ret + +.section .note.GNU-stack,"",@progbits + diff --git a/src/libw32dll/wine/wrapper.S b/src/libw32dll/wine/wrapper.S index fe2d85619..72b4dfe8f 100644 --- a/src/libw32dll/wine/wrapper.S +++ b/src/libw32dll/wine/wrapper.S @@ -1,17 +1,19 @@ .section .data -.globl caller_return caller_return: .long 0 -.globl report_entry -report_entry: - .long null_call -.globl report_ret -report_ret: - .long null_call .global wrapper_target wrapper_target: .long null_call +#undef __i686 /* gcc define gets in our way */ + .section .gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits +.globl __i686.get_pc_thunk.bx + .hidden __i686.get_pc_thunk.bx + .type __i686.get_pc_thunk.bx,@function +__i686.get_pc_thunk.bx: + movl (%esp), %ebx + ret + .section .text .globl null_call .type null_call, @function @@ -22,46 +24,61 @@ null_call: .type wrapper, @function .balign 16,0x90 wrapper: + pushl $0 pusha # store registers (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) pushf # store flags push %ebp # set up a stack frame movl %esp, %ebp + call __i686.get_pc_thunk.bx + addl $_GLOBAL_OFFSET_TABLE_, %ebx + leal 4(%ebp), %eax # push flags addr push %eax leal 8(%ebp), %eax # push registers addr push %eax - leal 40(%ebp), %edx + leal 44(%ebp), %edx movl (%ebp), %eax subl %edx, %eax push %eax push %edx - call *report_entry # report entry + call report_func@PLT # report entry test %eax, %eax jnz .Ldone + movl 44(%ebp), %eax # switch return addresses + movl %eax, caller_return@GOTOFF(%ebx) + leal .Lwrapper_return@GOTOFF(%ebx), %eax + movl %eax, 40(%ebp) + + movl wrapper_target@GOT(%ebx), %eax + movl (%eax), %eax + mov %eax, 40(%ebp) # wrapper_target should return at .Lwrapper_return + leave # restore %esp, %ebp popf # restore flags popa # restore registers - - popl caller_return # switch return addresses - pushl $.Lwrapper_return - - jmp *wrapper_target # wrapper_target should return at .Lwrapper_return + + ret # fake 'return' to wrapper_target actually .balign 16, 0x90 .Lwrapper_return: - pushl caller_return # restore the original return address + pushl $0 pusha # more for reference sake here pushf push %ebp # set up a stack frame movl %esp, %ebp + call __i686.get_pc_thunk.bx + addl $_GLOBAL_OFFSET_TABLE_, %ebx + movl caller_return@GOTOFF(%ebx), %eax + movl %eax, 40(%ebp) # restore the original return address + leal 4(%ebp), %eax # push flags addr push %eax leal 8(%ebp), %eax # push registers addr @@ -73,11 +90,13 @@ wrapper: push %eax push %edx - call *report_ret # report the return information (same args) + call report_func_ret@PLT# report the return information (same args) .Ldone: leave popf popa ret - + +.section .note.GNU-stack,"",@progbits + diff --git a/src/libw32dll/wine/wrapper.h b/src/libw32dll/wine/wrapper.h index a9943ce78..5e2cf804e 100644 --- a/src/libw32dll/wine/wrapper.h +++ b/src/libw32dll/wine/wrapper.h @@ -11,10 +11,6 @@ typedef struct { u_int32_t edi, esi, ebp, esp, ebx, edx, ecx, eax; } reg386_t; -typedef int (*wrapper_func_t)(void *stack_base, int stack_size, reg386_t *reg, u_int32_t *flags); - -extern wrapper_func_t report_entry, report_ret; - extern void (*wrapper_target)(void); extern int wrapper(void); diff --git a/src/post/visualizations/.cvsignore b/src/libxineadec/.hgignore index 7d926a554..7d926a554 100644 --- a/src/post/visualizations/.cvsignore +++ b/src/libxineadec/.hgignore diff --git a/src/libxineadec/Makefile.am b/src/libxineadec/Makefile.am index edd259f8f..7f34b4bfd 100644 --- a/src/libxineadec/Makefile.am +++ b/src/libxineadec/Makefile.am @@ -20,7 +20,7 @@ xineplug_decode_gsm610_la_LIBADD = \ xineplug_decode_nsf_la_SOURCES = nsf.c xineplug_decode_nsf_la_CFLAGS = $(VISIBILITY_FLAG) -DNSF_PLAYER -fno-strict-aliasing xineplug_decode_nsf_la_LDFLAGS = -avoid-version -module -xineplug_decode_nsf_la_LIBADD = \ +xineplug_decode_nsf_la_LIBADD = -lm \ $(XINE_LIB) \ $(top_builddir)/src/libxineadec/nosefart/libnosefart.la diff --git a/src/video_out/.cvsignore b/src/libxineadec/gsm610/.hgignore index 7d926a554..7d926a554 100644 --- a/src/video_out/.cvsignore +++ b/src/libxineadec/gsm610/.hgignore diff --git a/src/video_out/libdha/bin/.cvsignore b/src/libxineadec/nosefart/.hgignore index 7d926a554..7d926a554 100644 --- a/src/video_out/libdha/bin/.cvsignore +++ b/src/libxineadec/nosefart/.hgignore diff --git a/src/libxineadec/nosefart/nsf.h b/src/libxineadec/nosefart/nsf.h index 61cc14f60..163e2f62f 100644 --- a/src/libxineadec/nosefart/nsf.h +++ b/src/libxineadec/nosefart/nsf.h @@ -20,7 +20,7 @@ ** nsf.h ** ** NSF loading/saving related defines / prototypes -** $Id: nsf.h,v 1.2 2003/12/05 15:55:01 f1rmb Exp $ +** $Id: nsf.h,v 1.3 2007/01/18 21:34:10 dgp85 Exp $ */ #ifndef _NSF_H_ @@ -66,22 +66,22 @@ enum typedef struct nsf_s { /* NESM header */ - uint8 id[5] __PACKED__; /* NESM\x1A */ - uint8 version __PACKED__; /* spec version */ - uint8 num_songs __PACKED__; /* total num songs */ - uint8 start_song __PACKED__; /* first song */ - uint16 load_addr __PACKED__; /* loc to load code */ - uint16 init_addr __PACKED__; /* init call address */ - uint16 play_addr __PACKED__; /* play call address */ - uint8 song_name[32] __PACKED__; /* name of song */ - uint8 artist_name[32] __PACKED__; /* artist name */ - uint8 copyright[32] __PACKED__; /* copyright info */ - uint16 ntsc_speed __PACKED__; /* playback speed (if NTSC) */ - uint8 bankswitch_info[8] __PACKED__; /* initial code banking */ - uint16 pal_speed __PACKED__; /* playback speed (if PAL) */ - uint8 pal_ntsc_bits __PACKED__; /* NTSC/PAL determination bits */ - uint8 ext_sound_type __PACKED__; /* type of external sound gen. */ - uint8 reserved[4] __PACKED__; /* reserved */ + uint8 id[5]; /* NESM\x1A */ + uint8 version; /* spec version */ + uint8 num_songs; /* total num songs */ + uint8 start_song; /* first song */ + uint16 load_addr; /* loc to load code */ + uint16 init_addr; /* init call address */ + uint16 play_addr; /* play call address */ + uint8 song_name[32]; /* name of song */ + uint8 artist_name[32]; /* artist name */ + uint8 copyright[32]; /* copyright info */ + uint16 ntsc_speed; /* playback speed (if NTSC) */ + uint8 bankswitch_info[8]; /* initial code banking */ + uint16 pal_speed; /* playback speed (if PAL) */ + uint8 pal_ntsc_bits; /* NTSC/PAL determination bits */ + uint8 ext_sound_type; /* type of external sound gen. */ + uint8 reserved[4]; /* reserved */ /* things that the NSF player needs */ uint8 *data; /* actual NSF data */ @@ -96,7 +96,7 @@ typedef struct nsf_s /* our main processing routine, calls all external mixing routines */ void (*process)(void *buffer, int num_samples); -} nsf_t; +} __PACKED__ nsf_t; /* Function prototypes */ extern void nsf_init(void); @@ -114,6 +114,9 @@ extern void nsf_setfilter(nsf_t *nsf, int filter_type); /* ** $Log: nsf.h,v $ +** Revision 1.3 2007/01/18 21:34:10 dgp85 +** __attribute__(packed) is used on the struct, not on its members. +** ** Revision 1.2 2003/12/05 15:55:01 f1rmb ** cleanup phase II. use xprintf when it's relevant, use xine_xmalloc when it's relevant too. Small other little fix (can't remember). Change few internal function prototype because it xine_t pointer need to be used if some xine's internal sections. NOTE: libdvd{nav,read} is still too noisy, i will take a look to made it quit, without invasive changes. To be continued... ** diff --git a/src/video_out/libdha/kernelhelper/.cvsignore b/src/libxinevdec/.hgignore index 7d926a554..7d926a554 100644 --- a/src/video_out/libdha/kernelhelper/.cvsignore +++ b/src/libxinevdec/.hgignore diff --git a/src/libxinevdec/Makefile.am b/src/libxinevdec/Makefile.am index 8783b6530..903399cbb 100644 --- a/src/libxinevdec/Makefile.am +++ b/src/libxinevdec/Makefile.am @@ -1,5 +1,8 @@ include $(top_srcdir)/misc/Makefile.common +AM_CFLAGS = $(VISIBILITY_FLAG) +AM_LDFLAGS = $(xineplug_ldflags) + EXTRA_DIST = foovideo.c if HAVE_WAND @@ -10,9 +13,7 @@ if HAVE_GDK_PIXBUF gdkpixbuf_module = xineplug_decode_gdk_pixbuf.la endif -libdir = $(XINE_PLUGINDIR) - -lib_LTLIBRARIES = $(image_module) \ +xineplug_LTLIBRARIES = $(image_module) \ $(gdkpixbuf_module) \ xineplug_decode_bitplane.la \ xineplug_decode_rgb.la \ @@ -20,23 +21,18 @@ lib_LTLIBRARIES = $(image_module) \ xineplug_decode_bitplane_la_SOURCES = bitplane.c xineplug_decode_bitplane_la_LIBADD = $(XINE_LIB) -xineplug_decode_bitplane_la_LDFLAGS = -avoid-version -module xineplug_decode_rgb_la_SOURCES = rgb.c xineplug_decode_rgb_la_LIBADD = $(XINE_LIB) -xineplug_decode_rgb_la_LDFLAGS = -avoid-version -module xineplug_decode_yuv_la_SOURCES = yuv.c xineplug_decode_yuv_la_LIBADD = $(XINE_LIB) -xineplug_decode_yuv_la_LDFLAGS = -avoid-version -module xineplug_decode_image_la_SOURCES = image.c -xineplug_decode_image_la_CFLAGS = $(WAND_CFLAGS) +xineplug_decode_image_la_CFLAGS = $(AM_CFLAGS) $(WAND_CFLAGS) xineplug_decode_image_la_LIBADD = $(XINE_LIB) $(DYNAMIC_LD_LIBS) $(WAND_LIBS) -xineplug_decode_image_la_LDFLAGS = -avoid-version -module xineplug_decode_gdk_pixbuf_la_SOURCES = gdkpixbuf.c -xineplug_decode_gdk_pixbuf_la_CFLAGS = $(GDK_PIXBUF_CFLAGS) +xineplug_decode_gdk_pixbuf_la_CFLAGS = $(AM_CFLAGS) $(GDK_PIXBUF_CFLAGS) xineplug_decode_gdk_pixbuf_la_LIBADD = $(XINE_LIB) $(DYNAMIC_LD_LIBS) $(GDK_PIXBUF_LIBS) -xineplug_decode_gdk_pixbuf_la_LDFLAGS = -avoid-version -module diff --git a/src/post/.cvsignore b/src/post/.hgignore index 282522db0..282522db0 100644 --- a/src/post/.cvsignore +++ b/src/post/.hgignore diff --git a/src/video_out/libdha/oth/.cvsignore b/src/post/audio/.hgignore index 7d926a554..7d926a554 100644 --- a/src/video_out/libdha/oth/.cvsignore +++ b/src/post/audio/.hgignore diff --git a/src/post/audio/Makefile.am b/src/post/audio/Makefile.am index 7ed37bc5b..9cb93dd5a 100644 --- a/src/post/audio/Makefile.am +++ b/src/post/audio/Makefile.am @@ -8,7 +8,7 @@ lib_LTLIBRARIES = xineplug_post_audio_filters.la xineplug_post_audio_filters_la_SOURCES = \ upmix.c upmix_mono.c filter.c window.c stretch.c volnorm.c audio_filters.c -xineplug_post_audio_filters_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) -lm +xineplug_post_audio_filters_la_LIBADD = $(XINE_LIB) $(PTHREAD_LIBS) -lm xineplug_post_audio_filters_la_CFLAGS = $(VISIBILITY_FLAG) xineplug_post_audio_filters_la_LDFLAGS = -avoid-version -module diff --git a/src/video_out/libdha/sysdep/.cvsignore b/src/post/deinterlace/.hgignore index 7d926a554..7d926a554 100644 --- a/src/video_out/libdha/sysdep/.cvsignore +++ b/src/post/deinterlace/.hgignore diff --git a/src/video_out/macosx/.cvsignore b/src/post/deinterlace/plugins/.hgignore index 7d926a554..7d926a554 100644 --- a/src/video_out/macosx/.cvsignore +++ b/src/post/deinterlace/plugins/.hgignore diff --git a/src/post/deinterlace/plugins/greedy2frame_template.c b/src/post/deinterlace/plugins/greedy2frame_template.c index 42c575f58..728bceed5 100644 --- a/src/post/deinterlace/plugins/greedy2frame_template.c +++ b/src/post/deinterlace/plugins/greedy2frame_template.c @@ -1,5 +1,5 @@ /***************************************************************************** -** $Id: greedy2frame_template.c,v 1.9 2006/02/04 14:06:29 miguelfreitas Exp $ +** $Id: greedy2frame_template.c,v 1.10 2006/12/21 09:54:45 dgp85 Exp $ ****************************************************************************** ** Copyright (c) 2000 John Adcock, Tom Barry, Steve Grimm All rights reserved. ** port copyright (c) 2003 Miguel Freitas @@ -19,6 +19,9 @@ ** CVS Log ** ** $Log: greedy2frame_template.c,v $ +** Revision 1.10 2006/12/21 09:54:45 dgp85 +** Apply the textrel patch from Gentoo, thanks to PaX team for providing it. The patch was applied and tested for a while in Gentoo and Pardus, and solves also Debian's problems with non-PIC code. If problems will arise, they'll be debugged. +** ** Revision 1.9 2006/02/04 14:06:29 miguelfreitas ** Enable AMD64 mmx/sse support in some plugins (tvtime, libmpeg2, goom...) ** patch by dani3l @@ -187,7 +190,7 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, * See above for a description of the algorithm. */ ".align 8 \n\t" - "movq "MANGLE(Mask)", %%mm6 \n\t" + "movq %4, %%mm6 \n\t" "movq %0, %%mm1 \n\t" // T1 "movq %1, %%mm0 \n\t" // M1 @@ -195,7 +198,7 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, "movq %3, %%mm2 \n\t" // M0 : /* no output */ : "m" (*T1), "m" (*M1), - "m" (*B1), "m" (*M0) ); + "m" (*B1), "m" (*M0), "m" (Mask) ); asm volatile( @@ -252,10 +255,10 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, #endif /* if |M1-M0| > Threshold we want dword worth of twos */ - "pcmpgtb "MANGLE(qwGreedyTwoFrameThreshold)", %%mm4 \n\t" - "pand "MANGLE(Mask)", %%mm4 \n\t" /* get rid of sign bit */ - "pcmpgtd "MANGLE(DwordOne)", %%mm4 \n\t" /* do we want to bob */ - "pandn "MANGLE(DwordTwo)", %%mm4 \n\t" + "pcmpgtb %3, %%mm4 \n\t" + "pand %4, %%mm4 \n\t" /* get rid of sign bit */ + "pcmpgtd %5, %%mm4 \n\t" /* do we want to bob */ + "pandn %6, %%mm4 \n\t" "movq %1, %%mm2 \n\t" /* mm2 = T0 */ @@ -268,11 +271,11 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, "pand %%mm6, %%mm5 \n\t" /* if |T1-T0| > Threshold we want dword worth of ones */ - "pcmpgtb "MANGLE(qwGreedyTwoFrameThreshold)", %%mm5 \n\t" + "pcmpgtb %3, %%mm5 \n\t" "pand %%mm6, %%mm5 \n\t" /* get rid of sign bit */ - "pcmpgtd "MANGLE(DwordOne)", %%mm5 \n\t" - "pandn "MANGLE(DwordOne)", %%mm5 \n\t" + "pcmpgtd %5, %%mm5 \n\t" + "pandn %5, %%mm5 \n\t" "paddd %%mm5, %%mm4 \n\t" "movq %2, %%mm2 \n\t" /* B0 */ @@ -286,13 +289,13 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, "pand %%mm6, %%mm5 \n\t" /* if |B1-B0| > Threshold we want dword worth of ones */ - "pcmpgtb "MANGLE(qwGreedyTwoFrameThreshold)", %%mm5 \n\t" + "pcmpgtb %3, %%mm5 \n\t" "pand %%mm6, %%mm5 \n\t" /* get rid of any sign bit */ - "pcmpgtd "MANGLE(DwordOne)", %%mm5 \n\t" - "pandn "MANGLE(DwordOne)", %%mm5 \n\t" + "pcmpgtd %5, %%mm5 \n\t" + "pandn %5, %%mm5 \n\t" "paddd %%mm5, %%mm4 \n\t" - "pcmpgtd "MANGLE(DwordTwo)", %%mm4 \n\t" + "pcmpgtd %6, %%mm4 \n\t" /* debugging feature * output the value of mm4 at this point which is pink where we will weave @@ -318,7 +321,7 @@ static void DeinterlaceGreedy2Frame_MMX(uint8_t *output, int outstride, #endif : "=m" (*Dest2) - : "m" (*T0), "m" (*B0) ); + : "m" (*T0), "m" (*B0), "m" (qwGreedyTwoFrameThreshold), "m" (Mask), "m" (DwordOne), "m" (DwordTwo) ); /* Advance to the next set of pixels. */ T1 += 8; diff --git a/src/post/deinterlace/plugins/greedyh.asm b/src/post/deinterlace/plugins/greedyh.asm index 0bbd745aa..11b28ca76 100644 --- a/src/post/deinterlace/plugins/greedyh.asm +++ b/src/post/deinterlace/plugins/greedyh.asm @@ -43,7 +43,6 @@ static void FUNCT_NAME(uint8_t *output, int outstride, int Line; long LoopCtr; - long oldbx; unsigned int Pitch = stride*2; int FieldHeight = height / 2; @@ -52,6 +51,7 @@ static void FUNCT_NAME(uint8_t *output, int outstride, unsigned char* L3; // ptr to Line3 unsigned char* L2P; // ptr to prev Line2 + unsigned char* temp; unsigned char* Dest = output; int64_t LastAvg=0; //interp value from left qword @@ -121,25 +121,21 @@ static void FUNCT_NAME(uint8_t *output, int outstride, #define asmLastAvg "%0" #define asmL1 "%1" #define asmL3 "%2" -#define asmL2P "%3" +#define asmtemp "%3" #define asmL2 "%4" #define asmDest "%5" #define asmLoopCtr "%6" -#define asmoldbx "%7" #endif // For ease of reading, the comments below assume that we're operating on an odd // field (i.e., that InfoIsOdd is true). Assume the obvious for even lines.. + temp = L2P; __asm__ __volatile__ ( - // save ebx (-fPIC) - MOVX" %%"XBX", "asmoldbx"\n\t" - MOVX" "asmL1", %%"XAX"\n\t" - LEAX" 8(%%"XAX"), %%"XBX"\n\t" // next qword needed by DJR + LEAX" 8(%%"XAX"), %%"XDX"\n\t" // next qword needed by DJR MOVX" "asmL3", %%"XCX"\n\t" SUBX" %%"XAX", %%"XCX"\n\t" // carry L3 addr as an offset - MOVX" "asmL2P", %%"XDX"\n\t" MOVX" "asmL2", %%"XSI"\n\t" MOVX" "asmDest", %%"XDI"\n\t" // DL1 if Odd or DL2 if Even @@ -148,11 +144,14 @@ static void FUNCT_NAME(uint8_t *output, int outstride, "movq (%%"XSI"), %%mm0\n\t" // L2 - the newest weave pixel value "movq (%%"XAX"), %%mm1\n\t" // L1 - the top pixel + PUSHX" %%"XDX "\n\t" + MOVX" "asmtemp", %%"XDX"\n\t" "movq (%%"XDX"), %%mm2\n\t" // L2P - the prev weave pixel + POPX" %%"XDX "\n\t" "movq (%%"XAX", %%"XCX"), %%mm3\n\t" // L3, next odd row "movq %%mm1, %%mm6\n\t" // L1 - get simple single pixel interp // pavgb mm6, mm3 // use macro below - V_PAVGB ("%%mm6", "%%mm3", "%%mm4", MANGLE(ShiftMask)) + V_PAVGB ("%%mm6", "%%mm3", "%%mm4", "%8") // DJR - Diagonal Jaggie Reduction // In the event that we are going to use an average (Bob) pixel we do not want a jagged @@ -166,24 +165,24 @@ static void FUNCT_NAME(uint8_t *output, int outstride, "psllq $16, %%mm7\n\t" // left justify 3 pixels "por %%mm7, %%mm4\n\t" // and combine - "movq (%%"XBX"), %%mm5\n\t" // next horiz qword from L1 + "movq (%%"XDX"), %%mm5\n\t" // next horiz qword from L1 // pavgb mm5, qword ptr[ebx+ecx] // next horiz qword from L3, use macro below - V_PAVGB ("%%mm5", "(%%"XBX",%%"XCX")", "%%mm7", MANGLE(ShiftMask)) + V_PAVGB ("%%mm5", "(%%"XDX",%%"XCX")", "%%mm7", "%8") "psllq $48, %%mm5\n\t" // left just 1 pixel "movq %%mm6, %%mm7\n\t" // another copy of simple bob pixel "psrlq $16, %%mm7\n\t" // right just 3 pixels "por %%mm7, %%mm5\n\t" // combine // pavgb mm4, mm5 // avg of forward and prev by 1 pixel, use macro - V_PAVGB ("%%mm4", "%%mm5", "%%mm5", MANGLE(ShiftMask)) // mm5 gets modified if MMX + V_PAVGB ("%%mm4", "%%mm5", "%%mm5", "%8") // mm5 gets modified if MMX // pavgb mm6, mm4 // avg of center and surround interp vals, use macro - V_PAVGB ("%%mm6", "%%mm4", "%%mm7", MANGLE(ShiftMask)) + V_PAVGB ("%%mm6", "%%mm4", "%%mm7", "%8") // Don't do any more averaging than needed for mmx. It hurts performance and causes rounding errors. #ifndef IS_MMX // pavgb mm4, mm6 // 1/4 center, 3/4 adjacent - V_PAVGB ("%%mm4", "%%mm6", "%%mm7", MANGLE(ShiftMask)) + V_PAVGB ("%%mm4", "%%mm6", "%%mm7", "%8") // pavgb mm6, mm4 // 3/8 center, 5/8 adjacent - V_PAVGB ("%%mm6", "%%mm4", "%%mm7", MANGLE(ShiftMask)) + V_PAVGB ("%%mm6", "%%mm4", "%%mm7", "%8") #endif // get abs value of possible L2 comb @@ -236,64 +235,71 @@ static void FUNCT_NAME(uint8_t *output, int outstride, // pminub mm5, mm3 // now = Min(L1,L3), use macro V_PMINUB ("%%mm5", "%%mm3", "%%mm7") // allow the value to be above the high or below the low by amt of MaxComb - "psubusb "MANGLE(MaxComb)", %%mm5\n\t" // lower min by diff - "paddusb "MANGLE(MaxComb)", %%mm2\n\t" // increase max by diff + "psubusb %9, %%mm5\n\t" // lower min by diff + "paddusb %9, %%mm2\n\t" // increase max by diff // pmaxub mm4, mm5 // now = Max(best,Min(L1,L3) use macro V_PMAXUB ("%%mm4", "%%mm5") // pminub mm4, mm2 // now = Min( Max(best, Min(L1,L3), L2 )=L2 clipped V_PMINUB ("%%mm4", "%%mm2", "%%mm7") // Blend weave pixel with bob pixel, depending on motion val in mm0 - "psubusb "MANGLE(MotionThreshold)", %%mm0\n\t"// test Threshold, clear chroma change >>>?? - "pmullw "MANGLE(MotionSense)", %%mm0\n\t" // mul by user factor, keep low 16 bits - "movq "MANGLE(QW256)", %%mm7\n\t" + "psubusb %10, %%mm0\n\t"// test Threshold, clear chroma change >>>?? + "pmullw %11, %%mm0\n\t" // mul by user factor, keep low 16 bits + "movq %12, %%mm7\n\t" #ifdef IS_SSE "pminsw %%mm7, %%mm0\n\t" // max = 256 #else - "paddusw "MANGLE(QW256B)", %%mm0\n\t" // add, may sat at fff.. - "psubusw "MANGLE(QW256B)", %%mm0\n\t" // now = Min(L1,256) + "paddusw %13, %%mm0\n\t" // add, may sat at fff.. + "psubusw %13, %%mm0\n\t" // now = Min(L1,256) #endif "psubusw %%mm0, %%mm7\n\t" // so the 2 sum to 256, weighted avg "movq %%mm4, %%mm2\n\t" // save weave chroma info before trashing - "pand "MANGLE(YMask)", %%mm4\n\t" // keep only luma from calc'd value + "pand %14, %%mm4\n\t" // keep only luma from calc'd value "pmullw %%mm7, %%mm4\n\t" // use more weave for less motion - "pand "MANGLE(YMask)", %%mm6\n\t" // keep only luma from calc'd value + "pand %14, %%mm6\n\t" // keep only luma from calc'd value "pmullw %%mm0, %%mm6\n\t" // use more bob for large motion "paddusw %%mm6, %%mm4\n\t" // combine "psrlw $8, %%mm4\n\t" // div by 256 to get weighted avg // chroma comes from weave pixel - "pand "MANGLE(UVMask)", %%mm2\n\t" // keep chroma + "pand %15, %%mm2\n\t" // keep chroma "por %%mm4, %%mm2\n\t" // and combine V_MOVNTQ ("(%%"XDI")", "%%mm2") // move in our clipped best, use macro // bump ptrs and loop LEAX" 8(%%"XAX"), %%"XAX"\n\t" - LEAX" 8(%%"XBX"), %%"XBX"\n\t" LEAX" 8(%%"XDX"), %%"XDX"\n\t" + ADDX" $8, "asmtemp"\n\t" LEAX" 8(%%"XDI"), %%"XDI"\n\t" LEAX" 8(%%"XSI"), %%"XSI"\n\t" DECX" "asmLoopCtr"\n\t" "jg 1b\n\t" // loop if not to last line // note P-III default assumes backward branches taken "jl 1f\n\t" // done - MOVX" %%"XAX", %%"XBX"\n\t" // sharpness lookahead 1 byte only, be wrong on 1 + MOVX" %%"XAX", %%"XDX"\n\t" // sharpness lookahead 1 byte only, be wrong on 1 "jmp 1b\n\t" "1:\n\t" - MOVX" "asmoldbx", %%"XBX"\n\t" : /* no outputs */ : "m"(LastAvg), "m"(L1), "m"(L3), - "m"(L2P), + "m"(temp), "m"(L2), "m"(Dest), "m"(LoopCtr), - "m"(oldbx) + "m"(temp), + "m"(ShiftMask), + "m"(MaxComb), + "m"(MotionThreshold), + "m"(MotionSense), + "m"(QW256), + "m"(QW256B), + "m"(YMask), + "m"(UVMask) : XAX, XCX, XDX, XSI, XDI, #ifdef ARCH_X86 diff --git a/src/post/deinterlace/plugins/tomsmocomp/tomsmocompmacros.h b/src/post/deinterlace/plugins/tomsmocomp/tomsmocompmacros.h index 3d7ae308e..a3b92a51c 100644 --- a/src/post/deinterlace/plugins/tomsmocomp/tomsmocompmacros.h +++ b/src/post/deinterlace/plugins/tomsmocomp/tomsmocompmacros.h @@ -1,8 +1,6 @@ #include <string.h> #include <math.h> -#ifdef HAVE_MALLOC_H -#include <malloc.h> -#endif +#include <stdlib.h> #define USE_FOR_DSCALER diff --git a/src/post/deinterlace/plugins/x86-64_macros.inc b/src/post/deinterlace/plugins/x86-64_macros.inc index 3dfd9b63a..b52227763 100644 --- a/src/post/deinterlace/plugins/x86-64_macros.inc +++ b/src/post/deinterlace/plugins/x86-64_macros.inc @@ -34,8 +34,7 @@ #ifndef XAX -#if defined (ARCH_X86) - +#if defined (ARCH_X86) && !defined (ARCH_X86_64) #define XAX "eax" #define XBX "ebx" #define XCX "ecx" @@ -55,7 +54,6 @@ #define SUBX "subl" #elif defined (ARCH_X86_64) - #define XAX "rax" #define XBX "rbx" #define XCX "rcx" diff --git a/src/video_out/vidix/.cvsignore b/src/post/goom/.hgignore index 7d926a554..7d926a554 100644 --- a/src/video_out/vidix/.cvsignore +++ b/src/post/goom/.hgignore diff --git a/src/post/goom/Makefile.am b/src/post/goom/Makefile.am index 5905c16cf..4aeda8f04 100644 --- a/src/post/goom/Makefile.am +++ b/src/post/goom/Makefile.am @@ -18,9 +18,8 @@ lib_LTLIBRARIES = xineplug_post_goom.la #AM_CPPFLAGS = -DCPU_POWERPC #endif -if HAVE_FFMMX +if HAVE_MMX extra_files = mmx.c xmmx.c -AM_CPPFLAGS = -DHAVE_MMX endif xineplug_post_goom_la_SOURCES = $(extra_files) xine_goom.c \ @@ -28,7 +27,7 @@ xineplug_post_goom_la_SOURCES = $(extra_files) xine_goom.c \ gfontlib.c goom_core.c goom_tools.c goomsl.c goomsl_hash.c goomsl_heap.c \ goomsl_lex.c goomsl_yacc.c graphic.c ifs.c lines.c \ plugin_info.c sound_tester.c surf3d.c tentacle3d.c v3d.c -xineplug_post_goom_la_LIBADD = $(XINE_LIB) $(GOOM_LIBS) $(THREAD_LIBS) +xineplug_post_goom_la_LIBADD = $(XINE_LIB) $(GOOM_LIBS) $(PTHREAD_LIBS) -lm xineplug_post_goom_la_CFLAGS = $(VISIBILITY_FLAG) xineplug_post_goom_la_LDFLAGS = -avoid-version -module diff --git a/src/post/goom/mmx.c b/src/post/goom/mmx.c index 5f887cf77..e2f25b47d 100644 --- a/src/post/goom/mmx.c +++ b/src/post/goom/mmx.c @@ -1,3 +1,5 @@ +#include "config.h" + #ifdef HAVE_MMX #define BUFFPOINTNB 16 diff --git a/src/post/goom/xine_goom.c b/src/post/goom/xine_goom.c index f879f1ebc..5871618e0 100644 --- a/src/post/goom/xine_goom.c +++ b/src/post/goom/xine_goom.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_goom.c,v 1.63 2006/10/23 21:13:44 hadess Exp $ + * $Id: xine_goom.c,v 1.65 2007/02/20 00:58:51 dgp85 Exp $ * * GOOM post plugin. * @@ -43,7 +43,7 @@ #include "goom.h" -#define NUMSAMPLES 512 +#define NUMSAMPLES 512 /* hardcoded into goom api */ #define FPS 14 #define GOOM_WIDTH 320 @@ -83,7 +83,7 @@ struct post_plugin_goom_s { PluginInfo *goom; int data_idx; - gint16 data [2][512]; + gint16 data [2][NUMSAMPLES]; audio_buffer_t buf; /* dummy buffer just to hold a copy of audio data */ int channels; @@ -218,7 +218,7 @@ static void *goom_init_plugin(xine_t *xine, void *data) cfg->register_enum (cfg, "effects.goom.csc_method", 0, - (char **)goom_csc_methods, + goom_csc_methods, _("colorspace conversion method"), _("You can choose the colorspace conversion method used by goom.\n" "The available selections should be self-explaining."), @@ -386,6 +386,7 @@ static int goom_port_open(xine_audio_port_t *port_gen, xine_stream_t *stream, this->sample_rate = rate; this->samples_per_frame = rate / this->fps; this->data_idx = 0; + this->sample_counter = 0; init_yuv_planes(&this->yuv, this->width, this->height); this->skip_frame = 0; @@ -445,7 +446,6 @@ static void goom_port_put_buffer (xine_audio_port_t *port_gen, buf = &this->buf; this->sample_counter += buf->num_frames; - j = (this->channels >= 2) ? 1 : 0; do { @@ -455,7 +455,7 @@ static void goom_port_put_buffer (xine_audio_port_t *port_gen, data8 += samples_used * this->channels; /* scale 8 bit data to 16 bits and convert to signed as well */ - for( i = 0; i < buf->num_frames && this->data_idx < NUMSAMPLES; + for( i = samples_used; i < buf->num_frames && this->data_idx < NUMSAMPLES; i++, this->data_idx++, data8 += this->channels ) { this->data[0][this->data_idx] = ((int16_t)data8[0] << 8) - 0x8000; this->data[1][this->data_idx] = ((int16_t)data8[j] << 8) - 0x8000; @@ -464,16 +464,15 @@ static void goom_port_put_buffer (xine_audio_port_t *port_gen, data = buf->mem; data += samples_used * this->channels; - for( i = 0; i < buf->num_frames && this->data_idx < NUMSAMPLES; + for( i = samples_used; i < buf->num_frames && this->data_idx < NUMSAMPLES; i++, this->data_idx++, data += this->channels ) { this->data[0][this->data_idx] = data[0]; this->data[1][this->data_idx] = data[j]; } } - if( this->sample_counter >= this->samples_per_frame && - this->data_idx == NUMSAMPLES ) { - this->data_idx = 0; + if( this->sample_counter >= this->samples_per_frame ) { + samples_used += this->samples_per_frame; frame = this->vo_port->get_frame (this->vo_port, this->width_back, this->height_back, @@ -481,14 +480,23 @@ static void goom_port_put_buffer (xine_audio_port_t *port_gen, VO_BOTH_FIELDS); frame->extra_info->invalid = 1; - frame->bad_frame = 0; + + /* frame is marked as bad if we don't have enough samples for + * updating the viz plugin (calculations may be skipped). + * we must keep the framerate though. */ + if( this->data_idx == NUMSAMPLES ) { + frame->bad_frame = 0; + this->data_idx = 0; + } else { + frame->bad_frame = 1; + } frame->duration = 90000 * this->samples_per_frame / this->sample_rate; frame->pts = pts; this->metronom->got_video_frame(this->metronom, frame); this->sample_counter -= this->samples_per_frame; - if (!this->skip_frame) { + if (!this->skip_frame && !frame->bad_frame) { /* Try to be fast */ goom_frame = (uint8_t *)goom_update (this->goom, this->data, 0, 0, NULL, NULL); diff --git a/src/post/goom/xmmx.c b/src/post/goom/xmmx.c index 7fc9acfc8..0048a20e8 100644 --- a/src/post/goom/xmmx.c +++ b/src/post/goom/xmmx.c @@ -1,3 +1,4 @@ +#include "config.h" #ifdef HAVE_MMX diff --git a/src/video_out/vidix/drivers/.cvsignore b/src/post/mosaico/.hgignore index 7d926a554..7d926a554 100644 --- a/src/video_out/vidix/drivers/.cvsignore +++ b/src/post/mosaico/.hgignore diff --git a/src/post/mosaico/Makefile.am b/src/post/mosaico/Makefile.am index aefb290c6..f5497b1af 100644 --- a/src/post/mosaico/Makefile.am +++ b/src/post/mosaico/Makefile.am @@ -5,11 +5,11 @@ libdir = $(XINE_PLUGINDIR)/post lib_LTLIBRARIES = xineplug_post_mosaico.la xineplug_post_switch.la xineplug_post_mosaico_la_SOURCES = mosaico.c -xineplug_post_mosaico_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) +xineplug_post_mosaico_la_LIBADD = $(XINE_LIB) $(PTHREAD_LIBS) xineplug_post_mosaico_la_CFLAGS = $(VISIBILITY_FLAG) xineplug_post_mosaico_la_LDFLAGS = -avoid-version -module xineplug_post_switch_la_SOURCES = switch.c -xineplug_post_switch_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) +xineplug_post_switch_la_LIBADD = $(XINE_LIB) $(PTHREAD_LIBS) xineplug_post_switch_la_CFLAGS = $(VISIBILITY_FLAG) xineplug_post_switch_la_LDFLAGS = -avoid-version -module diff --git a/src/xine-engine/.cvsignore b/src/post/planar/.hgignore index 7d926a554..7d926a554 100644 --- a/src/xine-engine/.cvsignore +++ b/src/post/planar/.hgignore diff --git a/src/post/planar/Makefile.am b/src/post/planar/Makefile.am index 9f8ffed45..cc0647808 100644 --- a/src/post/planar/Makefile.am +++ b/src/post/planar/Makefile.am @@ -23,7 +23,7 @@ lib_LTLIBRARIES = xineplug_post_planar.la xineplug_post_planar_la_SOURCES = planar.c invert.c expand.c fill.c boxblur.c \ denoise3d.c eq.c eq2.c unsharp.c pp.c noise.c -xineplug_post_planar_la_LIBADD = $(XINE_LIB) $(postproc_lib) -lm $(THREAD_LIBS) +xineplug_post_planar_la_LIBADD = $(XINE_LIB) $(postproc_lib) -lm $(PTHREAD_LIBS) xineplug_post_planar_la_LDFLAGS = -avoid-version -module \ @IMPURE_TEXT_LDFLAGS@ xineplug_post_planar_la_CFLAGS = $(VISIBILITY_FLAG) $(AM_CFLAGS) diff --git a/src/post/planar/eq.c b/src/post/planar/eq.c index 50fd03b7f..8c7b00e4b 100644 --- a/src/post/planar/eq.c +++ b/src/post/planar/eq.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: eq.c,v 1.14 2006/02/04 14:06:52 miguelfreitas Exp $ + * $Id: eq.c,v 1.15 2007/03/22 23:32:05 dgp85 Exp $ * * mplayer's eq (soft video equalizer) * Copyright (C) Richard Felker @@ -52,7 +52,7 @@ static void process_MMX(unsigned char *dest, int dstride, unsigned char *src, in "movq (%6), %%mm4 \n\t" "pxor %%mm0, %%mm0 \n\t" "movl %4, %%eax\n\t" - ".balign 16 \n\t" + ASMALIGN(4) "1: \n\t" "movq (%0), %%mm1 \n\t" "movq (%0), %%mm2 \n\t" diff --git a/src/post/planar/eq2.c b/src/post/planar/eq2.c index 806a4ea6c..38f9117db 100644 --- a/src/post/planar/eq2.c +++ b/src/post/planar/eq2.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: eq2.c,v 1.16 2006/03/26 14:45:41 valtri Exp $ + * $Id: eq2.c,v 1.18 2007/03/22 23:32:05 dgp85 Exp $ * * mplayer's eq2 (soft video equalizer) * Software equalizer (brightness, contrast, gamma, saturation) @@ -128,7 +128,7 @@ void affine_1d_MMX (eq2_param_t *par, unsigned char *dst, unsigned char *src, "movq (%6), %%mm4 \n\t" "pxor %%mm0, %%mm0 \n\t" "movl %4, %%eax\n\t" - ".balign 16 \n\t" + ASMALIGN(4) "1: \n\t" "movq (%0), %%mm1 \n\t" "movq (%0), %%mm2 \n\t" @@ -599,12 +599,12 @@ static int eq2_draw(vo_frame_t *frame, xine_stream_t *stream) pthread_mutex_lock (&this->lock); for (i = 0; i < 3; i++) { - int height; + int height, width; height = (i==0) ? frame->height : frame->height/2; - + width = (i==0) ? frame->width : frame->width/2; if (eq2->param[i].adjust != NULL) { eq2->param[i].adjust (&eq2->param[i], out_frame->base[i], yv12_frame->base[i], - frame->width, height, out_frame->pitches[i], yv12_frame->pitches[i]); + width, height, out_frame->pitches[i], yv12_frame->pitches[i]); } else { xine_fast_memcpy(out_frame->base[i],yv12_frame->base[i], diff --git a/src/post/planar/expand.c b/src/post/planar/expand.c index 51cc4eac2..cf288921f 100644 --- a/src/post/planar/expand.c +++ b/src/post/planar/expand.c @@ -21,7 +21,8 @@ * * expand video filter by James Stembridge 24/05/2003 * improved by Michael Roitzsch - * + * centre_crop_out_mode by Reinhard Nissl + * * based on invert.c * */ @@ -52,6 +53,11 @@ * This way, the decoder (or any other post plugin up the tree) will only * see the frame area between the black bars and by that modify the * enlarged version directly. No need for later copying. + * + * When centre_crop_out_mode is enabled, the plugin will detect the black + * bars to the left and right of the image and will then set up cropping + * to efficiently remove the black border around the 4:3 image, which the + * plugin would produce otherwise for this case. */ @@ -63,6 +69,7 @@ typedef struct expand_parameters_s { int enable_automatic_shift; int overlay_y_offset; double aspect; + int centre_cut_out_mode; } expand_parameters_t; START_PARAM_DESCR(expand_parameters_t) @@ -72,6 +79,8 @@ PARAM_ITEM(POST_PARAM_TYPE_INT, overlay_y_offset, NULL, -500, 500, 0, "manually shift the overlay vertically") PARAM_ITEM(POST_PARAM_TYPE_DOUBLE, aspect, NULL, 1.0, 3.5, 0, "target aspect ratio") +PARAM_ITEM(POST_PARAM_TYPE_BOOL, centre_cut_out_mode, NULL, 0, 1, 0, + "cut out centred 4:3 image contained in 16:9 frame") END_PARAM_DESCR(expand_param_descr) typedef struct post_expand_s { @@ -83,6 +92,8 @@ typedef struct post_expand_s { int overlay_y_offset; double aspect; int top_bar_height; + int centre_cut_out_mode; + int cropping_active; } post_expand_t; /* plugin class functions */ @@ -106,6 +117,8 @@ static char *expand_get_help (void); static vo_frame_t *expand_get_frame(xine_video_port_t *port_gen, uint32_t width, uint32_t height, double ratio, int format, int flags); + +/* replaced vo_frame functions */ static int expand_draw(vo_frame_t *frame, xine_stream_t *stream); /* overlay manager intercept check */ @@ -153,6 +166,8 @@ static post_plugin_t *expand_open_plugin(post_class_t *class_gen, int inputs, this->enable_automatic_shift = 0; this->overlay_y_offset = 0; this->aspect = 4.0 / 3.0; + this->centre_cut_out_mode = 0; + this->cropping_active = 0; port = _x_post_intercept_video_port(&this->post, video_target[0], &input, &output); port->new_port.get_frame = expand_get_frame; @@ -166,8 +181,8 @@ static post_plugin_t *expand_open_plugin(post_class_t *class_gen, int inputs, input_param->data = &post_api; xine_list_push_back(this->post.input, input_param); - input->xine_in.name = "video"; - output->xine_out.name = "expanded video"; + input->xine_in.name = "video"; + output->xine_out.name = "expanded video"; this->post.xine_post.video_input[0] = &port->new_port; @@ -214,6 +229,8 @@ static int expand_set_parameters(xine_post_t *this_gen, void *param_gen) this->enable_automatic_shift = param->enable_automatic_shift; this->overlay_y_offset = param->overlay_y_offset; this->aspect = param->aspect; + this->centre_cut_out_mode = param->centre_cut_out_mode; + return 1; } @@ -225,6 +242,8 @@ static int expand_get_parameters(xine_post_t *this_gen, void *param_gen) param->enable_automatic_shift = this->enable_automatic_shift; param->overlay_y_offset = this->overlay_y_offset; param->aspect = this->aspect; + param->centre_cut_out_mode = this->centre_cut_out_mode; + return 1; } @@ -238,22 +257,86 @@ static char *expand_get_help(void) { " Enable_automatic_shift: Enable automatic overlay shifting\n" " Overlay_y_offset: Manually shift the overlay vertically\n" " aspect: The target aspect ratio (default 4:3)\n" + " Centre_cut_out_mode: extracts 4:3 image contained in 16:9 frame\n" "\n" ); } +static int is_pixel_black(vo_frame_t *frame, int x, int y) +{ + int Y = 0x00, Cr = 0x00, Cb = 0x00; + + if (x < 0) x = 0; + if (x >= frame->width) x = frame->width - 1; + if (y < 0) y = 0; + if (y >= frame->height) y = frame->height - 1; + + switch (frame->format) + { + case XINE_IMGFMT_YV12: + Y = *(frame->base[ 0 ] + frame->pitches[ 0 ] * y + x); + Cr = *(frame->base[ 1 ] + frame->pitches[ 1 ] * y / 2 + x / 2); + Cb = *(frame->base[ 2 ] + frame->pitches[ 2 ] * y / 2 + x / 2); + break; + + case XINE_IMGFMT_YUY2: + Y = *(frame->base[ 0 ] + frame->pitches[ 0 ] * y + x * 2 + 0); + x &= ~1; + Cr = *(frame->base[ 0 ] + frame->pitches[ 0 ] * y + x * 2 + 1); + Cb = *(frame->base[ 0 ] + frame->pitches[ 0 ] * y + x * 2 + 3); + break; + } + + return (Y == 0x10 && Cr == 0x80 && Cb == 0x80); +} + + static int expand_draw(vo_frame_t *frame, xine_stream_t *stream) { - post_video_port_t *port = (post_video_port_t *)frame->port; - post_expand_t *this = (post_expand_t *)port->post; - int skip; - - frame->ratio = this->aspect; - _x_post_frame_copy_down(frame, frame->next); - skip = frame->next->draw(frame->next, stream); - _x_post_frame_copy_up(frame, frame->next); - return skip; + post_video_port_t *port = (post_video_port_t *)frame->port; + post_expand_t *this = (post_expand_t *)port->post; + int skip; + + if (this->centre_cut_out_mode && !frame->bad_frame) + { + /* expected area of inner 4:3 image */ + int centre_width = frame->width * (9 * 4) / (16 * 3); + int centre_left = (frame->width - centre_width ) / 2; + + /* centre point for detecting a black frame */ + int centre_x = frame->width / 2; + int centre_y = frame->height / 2; + + /* ignore a black frame as it could lead to wrong results */ + if (!is_pixel_black(frame, centre_x, centre_y)) + { + /* coordinates for testing black border near the centre area */ + int test_left = centre_left - 16; + int test_right = centre_left + 16 + centre_width; + + /* enable cropping when these pixels are black */ + this->cropping_active = is_pixel_black(frame, test_left, centre_y) + && is_pixel_black(frame, test_right, centre_y); + } + + /* crop frame */ + if (this->centre_cut_out_mode && this->cropping_active) { + frame->crop_left += centre_left; + frame->crop_right += centre_left; + + /* get_frame() allocated an extra high frame */ + frame->crop_top += (frame->next->height - frame->height) / 2; + frame->crop_bottom += (frame->next->height - frame->height) / 2; + } + } + + frame->ratio = this->aspect; + _x_post_frame_copy_down(frame, frame->next); + skip = frame->next->draw(frame->next, stream); + _x_post_frame_copy_up(frame, frame->next); + + return skip; } @@ -338,6 +421,10 @@ static vo_frame_t *expand_get_frame(xine_video_port_t *port_gen, uint32_t width, static int expand_intercept_ovl(post_video_port_t *port) { + post_expand_t *this = (post_expand_t *)port->post; + + if (this->centre_cut_out_mode && this->cropping_active) return 0; + /* we always intercept overlay manager */ return 1; } diff --git a/src/post/planar/noise.c b/src/post/planar/noise.c index 1b46825db..154d5f8cc 100644 --- a/src/post/planar/noise.c +++ b/src/post/planar/noise.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: noise.c,v 1.3 2006/03/26 14:45:41 valtri Exp $ + * $Id: noise.c,v 1.4 2007/03/22 23:32:05 dgp85 Exp $ * * mplayer's noise filter, ported by Jason Tackaberry. Original filter * is copyright 2002 Michael Niedermayer <michaelni@gmx.at> @@ -159,7 +159,7 @@ static inline void lineNoise_MMX(uint8_t *dst, uint8_t *src, int8_t *noise, int "pcmpeqb %%mm7, %%mm7 \n\t" "psllw $15, %%mm7 \n\t" "packsswb %%mm7, %%mm7 \n\t" - ".balign 16 \n\t" + ASMALIGN(4) "1: \n\t" "movq (%0, %%"REG_a"), %%mm0 \n\t" "movq (%1, %%"REG_a"), %%mm1 \n\t" @@ -186,7 +186,7 @@ static inline void lineNoise_MMX2(uint8_t *dst, uint8_t *src, int8_t *noise, int "pcmpeqb %%mm7, %%mm7 \n\t" "psllw $15, %%mm7 \n\t" "packsswb %%mm7, %%mm7 \n\t" - ".balign 16 \n\t" + ASMALIGN(4) "1: \n\t" "movq (%0, %%"REG_a"), %%mm0 \n\t" "movq (%1, %%"REG_a"), %%mm1 \n\t" @@ -225,7 +225,7 @@ static inline void lineNoiseAvg_MMX(uint8_t *dst, uint8_t *src, int len, int8_t asm volatile( "mov %5, %%"REG_a" \n\t" - ".balign 16 \n\t" + ASMALIGN(4) "1: \n\t" "movq (%1, %%"REG_a"), %%mm1 \n\t" "movq (%0, %%"REG_a"), %%mm0 \n\t" diff --git a/src/xine-utils/.cvsignore b/src/post/visualizations/.hgignore index 7d926a554..7d926a554 100644 --- a/src/xine-utils/.cvsignore +++ b/src/post/visualizations/.hgignore diff --git a/src/post/visualizations/Makefile.am b/src/post/visualizations/Makefile.am index 8891b1c53..dc7679103 100644 --- a/src/post/visualizations/Makefile.am +++ b/src/post/visualizations/Makefile.am @@ -8,7 +8,7 @@ lib_LTLIBRARIES = xineplug_post_visualizations.la xineplug_post_visualizations_la_SOURCES = \ visualizations.c fft.c fftscope.c oscope.c fftgraph.c -xineplug_post_visualizations_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) -lm +xineplug_post_visualizations_la_LIBADD = $(XINE_LIB) $(PTHREAD_LIBS) -lm xineplug_post_visualizations_la_CFLAGS = $(VISIBILITY_FLAG) xineplug_post_visualizations_la_LDFLAGS = -avoid-version -module diff --git a/src/post/visualizations/fftgraph.c b/src/post/visualizations/fftgraph.c index f9f8f0d4a..669a4bc94 100644 --- a/src/post/visualizations/fftgraph.c +++ b/src/post/visualizations/fftgraph.c @@ -20,7 +20,7 @@ * FftGraph Visualization Post Plugin For xine * by Thibaut Mattern (tmattern@noos.fr) * - * $Id: fftgraph.c,v 1.14 2006/01/27 07:46:14 tmattern Exp $ + * $Id: fftgraph.c,v 1.15 2006/12/02 22:35:18 miguelfreitas Exp $ * */ @@ -230,6 +230,7 @@ static int fftgraph_port_open(xine_audio_port_t *port_gen, xine_stream_t *stream this->lines_per_channel = FFTGRAPH_HEIGHT / this->channels; this->samples_per_frame = rate / FPS; this->data_idx = 0; + this->sample_counter = 0; this->vo_port->open(this->vo_port, XINE_ANON_STREAM); this->metronom->set_master(this->metronom, stream->metronom); @@ -342,7 +343,7 @@ static void fftgraph_port_put_buffer (xine_audio_port_t *port_gen, data8 += samples_used * this->channels; /* scale 8 bit data to 16 bits and convert to signed as well */ - for( i = 0; i < buf->num_frames && this->data_idx < NUMSAMPLES; + for( i = samples_used; i < buf->num_frames && this->data_idx < NUMSAMPLES; i++, this->data_idx++, data8 += this->channels ) { for( c = 0; c < this->channels; c++){ this->wave[c][this->data_idx].re = (double)(data8[c] << 8) - 0x8000; @@ -353,7 +354,7 @@ static void fftgraph_port_put_buffer (xine_audio_port_t *port_gen, data = buf->mem; data += samples_used * this->channels; - for( i = 0; i < buf->num_frames && this->data_idx < NUMSAMPLES; + for( i = samples_used; i < buf->num_frames && this->data_idx < NUMSAMPLES; i++, this->data_idx++, data += this->channels ) { for( c = 0; c < this->channels; c++){ this->wave[c][this->data_idx].re = (double)data[c]; @@ -362,17 +363,24 @@ static void fftgraph_port_put_buffer (xine_audio_port_t *port_gen, } } - if( this->sample_counter >= this->samples_per_frame && - this->data_idx == NUMSAMPLES ) { + if( this->sample_counter >= this->samples_per_frame ) { - this->data_idx = 0; samples_used += this->samples_per_frame; frame = this->vo_port->get_frame (this->vo_port, FFTGRAPH_WIDTH, FFTGRAPH_HEIGHT, this->ratio, XINE_IMGFMT_YUY2, VO_BOTH_FIELDS); frame->extra_info->invalid = 1; - frame->bad_frame = 0; + + /* frame is marked as bad if we don't have enough samples for + * updating the viz plugin (calculations may be skipped). + * we must keep the framerate though. */ + if( this->data_idx == NUMSAMPLES ) { + frame->bad_frame = 0; + this->data_idx = 0; + } else { + frame->bad_frame = 1; + } frame->duration = 90000 * this->samples_per_frame / port->rate; frame->pts = pts; this->metronom->got_video_frame(this->metronom, frame); diff --git a/src/post/visualizations/fftscope.c b/src/post/visualizations/fftscope.c index 8448f3a65..aef517c59 100644 --- a/src/post/visualizations/fftscope.c +++ b/src/post/visualizations/fftscope.c @@ -22,7 +22,7 @@ * * FFT code by Steve Haehnichen, originally licensed under GPL v1 * - * $Id: fftscope.c,v 1.29 2006/01/27 07:46:14 tmattern Exp $ + * $Id: fftscope.c,v 1.30 2006/12/02 22:35:18 miguelfreitas Exp $ * */ @@ -289,6 +289,7 @@ static int fftscope_port_open(xine_audio_port_t *port_gen, xine_stream_t *stream this->channels = MAXCHANNELS; this->samples_per_frame = rate / FPS; this->data_idx = 0; + this->sample_counter = 0; this->fft = fft_new(FFT_BITS); this->vo_port->open(this->vo_port, XINE_ANON_STREAM); @@ -363,7 +364,7 @@ static void fftscope_port_put_buffer (xine_audio_port_t *port_gen, data8 += samples_used * this->channels; /* scale 8 bit data to 16 bits and convert to signed as well */ - for( i = 0; i < buf->num_frames && this->data_idx < NUMSAMPLES; + for( i = samples_used; i < buf->num_frames && this->data_idx < NUMSAMPLES; i++, this->data_idx++, data8 += this->channels ) { for( c = 0; c < this->channels; c++){ this->wave[c][this->data_idx].re = (double)(data8[c] << 8) - 0x8000; @@ -374,7 +375,7 @@ static void fftscope_port_put_buffer (xine_audio_port_t *port_gen, data = buf->mem; data += samples_used * this->channels; - for( i = 0; i < buf->num_frames && this->data_idx < NUMSAMPLES; + for( i = samples_used; i < buf->num_frames && this->data_idx < NUMSAMPLES; i++, this->data_idx++, data += this->channels ) { for( c = 0; c < this->channels; c++){ this->wave[c][this->data_idx].re = (double)data[c]; @@ -383,17 +384,24 @@ static void fftscope_port_put_buffer (xine_audio_port_t *port_gen, } } - if( this->sample_counter >= this->samples_per_frame && - this->data_idx == NUMSAMPLES ) { + if( this->sample_counter >= this->samples_per_frame ) { - this->data_idx = 0; samples_used += this->samples_per_frame; frame = this->vo_port->get_frame (this->vo_port, FFT_WIDTH, FFT_HEIGHT, this->ratio, XINE_IMGFMT_YUY2, VO_BOTH_FIELDS); frame->extra_info->invalid = 1; - frame->bad_frame = 0; + + /* frame is marked as bad if we don't have enough samples for + * updating the viz plugin (calculations may be skipped). + * we must keep the framerate though. */ + if( this->data_idx == NUMSAMPLES ) { + frame->bad_frame = 0; + this->data_idx = 0; + } else { + frame->bad_frame = 1; + } frame->duration = 90000 * this->samples_per_frame / port->rate; frame->pts = pts; this->metronom->got_video_frame(this->metronom, frame); diff --git a/src/post/visualizations/fooviz.c b/src/post/visualizations/fooviz.c index 8d1e84150..9e69fefab 100644 --- a/src/post/visualizations/fooviz.c +++ b/src/post/visualizations/fooviz.c @@ -23,7 +23,7 @@ * process. It simply paints the screen a solid color and rotates through * colors on each iteration. * - * $Id: fooviz.c,v 1.27 2006/07/10 22:08:44 dgp85 Exp $ + * $Id: fooviz.c,v 1.28 2006/12/02 22:35:18 miguelfreitas Exp $ * */ @@ -118,6 +118,7 @@ static int fooviz_port_open(xine_audio_port_t *port_gen, xine_stream_t *stream, this->channels = _x_ao_mode2channels(mode); this->samples_per_frame = rate / FPS; this->data_idx = 0; + this->sample_counter = 0; this->vo_port->open(this->vo_port, XINE_ANON_STREAM); this->metronom->set_master(this->metronom, stream->metronom); @@ -180,7 +181,7 @@ static void fooviz_port_put_buffer (xine_audio_port_t *port_gen, data8 += samples_used * this->channels; /* scale 8 bit data to 16 bits and convert to signed as well */ - for( i = 0; i < buf->num_frames && this->data_idx < NUMSAMPLES; + for( i = samples_used; i < buf->num_frames && this->data_idx < NUMSAMPLES; i++, this->data_idx++, data8 += this->channels ) { this->data[0][this->data_idx] = ((int16_t)data8[0] << 8) - 0x8000; this->data[1][this->data_idx] = ((int16_t)data8[j] << 8) - 0x8000; @@ -189,24 +190,31 @@ static void fooviz_port_put_buffer (xine_audio_port_t *port_gen, data = buf->mem; data += samples_used * this->channels; - for( i = 0; i < buf->num_frames && this->data_idx < NUMSAMPLES; + for( i = samples_used; i < buf->num_frames && this->data_idx < NUMSAMPLES; i++, this->data_idx++, data += this->channels ) { this->data[0][this->data_idx] = data[0]; this->data[1][this->data_idx] = data[j]; } } - if( this->sample_counter >= this->samples_per_frame && - this->data_idx == NUMSAMPLES ) { + if( this->sample_counter >= this->samples_per_frame ) { - this->data_idx = 0; samples_used += this->samples_per_frame; frame = this->vo_port->get_frame (this->vo_port, FOO_WIDTH, FOO_HEIGHT, this->ratio, XINE_IMGFMT_YUY2, VO_BOTH_FIELDS); frame->extra_info->invalid = 1; - frame->bad_frame = 0; + + /* frame is marked as bad if we don't have enough samples for + * updating the viz plugin (calculations may be skipped). + * we must keep the framerate though. */ + if( this->data_idx == NUMSAMPLES ) { + frame->bad_frame = 0; + this->data_idx = 0; + } else { + frame->bad_frame = 1; + } frame->duration = 90000 * this->samples_per_frame / port->rate; frame->pts = pts; this->metronom->got_video_frame(this->metronom, frame); diff --git a/src/post/visualizations/oscope.c b/src/post/visualizations/oscope.c index 68ae0e054..483fc39ab 100644 --- a/src/post/visualizations/oscope.c +++ b/src/post/visualizations/oscope.c @@ -20,7 +20,7 @@ * Basic Oscilloscope Visualization Post Plugin For xine * by Mike Melanson (melanson@pcisys.net) * - * $Id: oscope.c,v 1.20 2006/01/27 07:46:14 tmattern Exp $ + * $Id: oscope.c,v 1.21 2006/12/02 22:35:18 miguelfreitas Exp $ * */ @@ -191,6 +191,7 @@ static int oscope_port_open(xine_audio_port_t *port_gen, xine_stream_t *stream, this->channels = MAXCHANNELS; this->samples_per_frame = rate / FPS; this->data_idx = 0; + this->sample_counter = 0; init_yuv_planes(&this->yuv, OSCOPE_WIDTH, OSCOPE_HEIGHT); this->vo_port->open(this->vo_port, XINE_ANON_STREAM); @@ -252,7 +253,7 @@ static void oscope_port_put_buffer (xine_audio_port_t *port_gen, data8 += samples_used * this->channels; /* scale 8 bit data to 16 bits and convert to signed as well */ - for( i = 0; i < buf->num_frames && this->data_idx < NUMSAMPLES; + for( i = samples_used; i < buf->num_frames && this->data_idx < NUMSAMPLES; i++, this->data_idx++, data8 += this->channels ) for( c = 0; c < this->channels; c++) this->data[c][this->data_idx] = ((int16_t)data8[c] << 8) - 0x8000; @@ -260,23 +261,30 @@ static void oscope_port_put_buffer (xine_audio_port_t *port_gen, data = buf->mem; data += samples_used * this->channels; - for( i = 0; i < buf->num_frames && this->data_idx < NUMSAMPLES; + for( i = samples_used; i < buf->num_frames && this->data_idx < NUMSAMPLES; i++, this->data_idx++, data += this->channels ) for( c = 0; c < this->channels; c++) this->data[c][this->data_idx] = data[c]; } - if( this->sample_counter >= this->samples_per_frame && - this->data_idx == NUMSAMPLES ) { + if( this->sample_counter >= this->samples_per_frame ) { - this->data_idx = 0; samples_used += this->samples_per_frame; frame = this->vo_port->get_frame (this->vo_port, OSCOPE_WIDTH, OSCOPE_HEIGHT, this->ratio, XINE_IMGFMT_YUY2, VO_BOTH_FIELDS); frame->extra_info->invalid = 1; - frame->bad_frame = 0; + + /* frame is marked as bad if we don't have enough samples for + * updating the viz plugin (calculations may be skipped). + * we must keep the framerate though. */ + if( this->data_idx == NUMSAMPLES ) { + frame->bad_frame = 0; + this->data_idx = 0; + } else { + frame->bad_frame = 1; + } frame->duration = 90000 * this->samples_per_frame / port->rate; frame->pts = pts; this->metronom->got_video_frame(this->metronom, frame); diff --git a/src/video_out/.hgignore b/src/video_out/.hgignore new file mode 100644 index 000000000..7d926a554 --- /dev/null +++ b/src/video_out/.hgignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +.libs +.deps +*.lo +*.la diff --git a/src/video_out/Makefile.am b/src/video_out/Makefile.am index 2121c009d..34971377c 100644 --- a/src/video_out/Makefile.am +++ b/src/video_out/Makefile.am @@ -1,6 +1,7 @@ include $(top_srcdir)/misc/Makefile.common AM_CPPFLAGS = -DXINE_COMPILE +AM_LDFLAGS = $(xineplug_ldflags) SUBDIRS = libdha vidix macosx @@ -9,8 +10,6 @@ EXTRA_DIST = video_out_directfb.c video_out_directx.c video_out_macosx.m VIDIX_CFLAGS = -I$(top_builddir)/src/video_out/vidix \ -I$(top_srcdir)/src/video_out/vidix -libdir = $(XINE_PLUGINDIR) - if HAVE_X11 X11OSD = x11osd.c xshm_module = xineplug_vo_out_xshm.la @@ -37,6 +36,16 @@ endif endif endif +if HAVE_XCB +XCBOSD = xcbosd.c +if HAVE_XCBSHM +xcbshm_module = xineplug_vo_out_xcbshm.la +endif +if HAVE_XCBXV +xcbxv_module = xineplug_vo_out_xcbxv.la +endif +endif + if HAVE_VIDIX vidix_module = xineplug_vo_out_vidix.la endif @@ -73,7 +82,7 @@ if HAVE_MACOSX_VIDEO macosx_module = xineplug_vo_out_macosx.la endif -lib_LTLIBRARIES = $(xshm_module) $(xv_module) $(xvmc_module) \ +xineplug_LTLIBRARIES = $(xshm_module) $(xv_module) $(xvmc_module) \ $(opengl_module) \ $(syncfb_module) \ $(pgx64_module) $(pgx32_module)\ @@ -86,111 +95,103 @@ lib_LTLIBRARIES = $(xshm_module) $(xv_module) $(xvmc_module) \ $(caca_module) \ $(macosx_module) \ $(xxmc_module) \ + $(xcbshm_module) \ + $(xcbxv_module) \ xineplug_vo_out_none.la +xineplug_vo_out_xcbshm_la_SOURCES = yuv2rgb.c yuv2rgb_mmx.c yuv2rgb_mlib.c video_out_xcbshm.c $(XCBOSD) +xineplug_vo_out_xcbshm_la_LIBADD = $(MLIB_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) $(XCB_LIBS) $(XCBSHM_LIBS) +xineplug_vo_out_xcbshm_la_CFLAGS = $(VISIBILITY_FLAG) $(MLIB_CFLAGS) $(XCB_CFLAGS) $(XCBSHM_CFLAGS) + +xineplug_vo_out_xcbxv_la_SOURCES = deinterlace.c video_out_xcbxv.c $(XCBOSD) +xineplug_vo_out_xcbxv_la_LIBADD = $(XINE_LIB) $(PTHREAD_LIBS) $(XCBXV_LIBS) $(XCB_LIBS) +xineplug_vo_out_xcbxv_la_CFLAGS = $(VISIBILITY_FLAG) $(XCB_CFLAGS) $(XCBXV_CFLAGS) + xineplug_vo_out_xshm_la_SOURCES = yuv2rgb.c yuv2rgb_mmx.c yuv2rgb_mlib.c \ video_out_xshm.c $(X11OSD) -xineplug_vo_out_xshm_la_LIBADD = $(MLIB_LIBS) $(X_LIBS) -lXext $(X_PRE_LIBS) -lX11 $(XINE_LIB) $(THREAD_LIBS) +xineplug_vo_out_xshm_la_LIBADD = $(MLIB_LIBS) $(X_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) xineplug_vo_out_xshm_la_CFLAGS = $(VISIBILITY_FLAG) $(X_CFLAGS) $(MLIB_CFLAGS) -fno-strict-aliasing -xineplug_vo_out_xshm_la_LDFLAGS = -avoid-version -module xineplug_vo_out_xv_la_SOURCES = $(X11OSD) deinterlace.c video_out_xv.c -xineplug_vo_out_xv_la_LIBADD = $(XV_LIBS) $(X_LIBS) -lXext $(X_PRE_LIBS) -lX11 $(XINE_LIB) $(THREAD_LIBS) -xineplug_vo_out_xv_la_CFLAGS = $(VISIBILITY_FLAG) $(X_CFLAGS) -fno-strict-aliasing -xineplug_vo_out_xv_la_LDFLAGS = -avoid-version -module +xineplug_vo_out_xv_la_LIBADD = $(XV_LIBS) $(X_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) +xineplug_vo_out_xv_la_CFLAGS = $(VISIBILITY_FLAG) $(X_CFLAGS) $(XV_CFLAGS) -fno-strict-aliasing xineplug_vo_out_xvmc_la_SOURCES = deinterlace.c video_out_xvmc.c -xineplug_vo_out_xvmc_la_LIBADD = $(XVMC_LIBS) $(XV_LIBS) $(X_LIBS) -lXext $(X_PRE_LIBS) -lX11 $(XINE_LIB) $(THREAD_LIBS) -xineplug_vo_out_xvmc_la_CFLAGS = $(VISIBILITY_FLAG) $(X_CFLAGS) -xineplug_vo_out_xvmc_la_LDFLAGS = -avoid-version -module +xineplug_vo_out_xvmc_la_LIBADD = $(XVMC_LIBS) $(XV_LIBS) $(X_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) +xineplug_vo_out_xvmc_la_CFLAGS = $(VISIBILITY_FLAG) $(X_CFLAGS) $(XV_CFLAGS) xineplug_vo_out_xxmc_la_SOURCES = $(X11OSD) deinterlace.c video_out_xxmc.c\ xvmc_mocomp.c xvmc_vld.c xxmc.h -xineplug_vo_out_xxmc_la_LIBADD = $(XXMC_LIBS) $(XV_LIBS) $(X_LIBS) -lXext $(X_PRE_LIBS) -lX11 $(XINE_LIB) $(THREAD_LIBS) -xineplug_vo_out_xxmc_la_CFLAGS = $(VISIBILITY_FLAG) $(X_CFLAGS) -fno-strict-aliasing -xineplug_vo_out_xxmc_la_LDFLAGS = -avoid-version -module +xineplug_vo_out_xxmc_la_LIBADD = $(XXMC_LIBS) $(XV_LIBS) $(X_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) +xineplug_vo_out_xxmc_la_CFLAGS = $(VISIBILITY_FLAG) $(X_CFLAGS) $(XV_CFLAGS) -fno-strict-aliasing xineplug_vo_out_opengl_la_SOURCES = yuv2rgb.c yuv2rgb_mmx.c yuv2rgb_mlib.c \ video_out_opengl.c myglext.h $(X11OSD) xineplug_vo_out_opengl_la_LIBADD = $(MLIB_LIBS) $(OPENGL_LIBS) $(GLUT_LIBS) \ - $(GLU_LIBS) $(X_LIBS) -lXext $(X_PRE_LIBS) -lX11 $(XINE_LIB) $(THREAD_LIBS) + $(GLU_LIBS) $(X_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) $(DYNAMIC_LD_LIBS) xineplug_vo_out_opengl_la_CFLAGS = $(VISIBILITY_FLAG) $(X_CFLAGS) $(MLIB_CFLAGS) -fno-strict-aliasing -xineplug_vo_out_opengl_la_LDFLAGS = -avoid-version -module xineplug_vo_out_syncfb_la_SOURCES = video_out_syncfb.c -xineplug_vo_out_syncfb_la_LIBADD = $(X_LIBS) $(XINE_LIB) $(THREAD_LIBS) +xineplug_vo_out_syncfb_la_LIBADD = $(X_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) xineplug_vo_out_syncfb_la_CFLAGS = $(VISIBILITY_FLAG) -xineplug_vo_out_syncfb_la_LDFLAGS = -avoid-version -module xineplug_vo_out_pgx64_la_SOURCES = video_out_pgx64.c -xineplug_vo_out_pgx64_la_LIBADD = $(X_LIBS) $(SUNDGA_LIBS) $(THREAD_LIBS) -xineplug_vo_out_pgx64_la_CFLAGS = $(VISIBILITY_FLAG) -xineplug_vo_out_pgx64_la_LDFLAGS = -avoid-version -module +xineplug_vo_out_pgx64_la_LIBADD = $(XINE_LIB) $(X_LIBS) $(SUNDGA_LIBS) $(PTHREAD_LIBS) +xineplug_vo_out_pgx64_la_CFLAGS = $(VISIBILITY_FLAG) $(X_CFLAGS) xineplug_vo_out_pgx32_la_SOURCES = video_out_pgx32.c -xineplug_vo_out_pgx32_la_LIBADD = $(X_LIBS) $(SUNDGA_LIBS) $(THREAD_LIBS) -xineplug_vo_out_pgx32_la_CFLAGS = $(VISIBILITY_FLAG) -xineplug_vo_out_pgx32_la_LDFLAGS = -avoid-version -module +xineplug_vo_out_pgx32_la_LIBADD = $(XINE_LIB) $(X_LIBS) $(SUNDGA_LIBS) $(PTHREAD_LIBS) +xineplug_vo_out_pgx32_la_CFLAGS = $(VISIBILITY_FLAG) $(X_CFLAGS) xineplug_vo_out_vidix_la_SOURCES = video_out_vidix.c $(X11OSD) -xineplug_vo_out_vidix_la_LIBADD = $(X_LIBS) \ - $(top_builddir)/src/video_out/vidix/libvidix.la \ - $(top_builddir)/src/video_out/libdha/libdha.la $(THREAD_LIBS) +xineplug_vo_out_vidix_la_LIBADD = $(XINE_LIB) $(X_LIBS) \ + $(top_builddir)/src/video_out/vidix/libvidix.la $(PTHREAD_LIBS) xineplug_vo_out_vidix_la_CFLAGS = $(VISIBILITY_FLAG) $(VIDIX_CFLAGS) $(X_CFLAGS) -fno-strict-aliasing -xineplug_vo_out_vidix_la_LDFLAGS = -avoid-version -module xineplug_vo_out_aa_la_SOURCES = video_out_aa.c -xineplug_vo_out_aa_la_LIBADD = $(AALIB_LIBS) $(THREAD_LIBS) +xineplug_vo_out_aa_la_LIBADD = $(AALIB_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) xineplug_vo_out_aa_la_CFLAGS = $(VISIBILITY_FLAG) $(AALIB_CFLAGS) -xineplug_vo_out_aa_la_LDFLAGS = -avoid-version -module xineplug_vo_out_caca_la_SOURCES = yuv2rgb.c yuv2rgb_mmx.c yuv2rgb_mlib.c \ video_out_caca.c -xineplug_vo_out_caca_la_LIBADD = $(CACA_LIBS) $(THREAD_LIBS) +xineplug_vo_out_caca_la_LIBADD = $(CACA_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) xineplug_vo_out_caca_la_CFLAGS = $(VISIBILITY_FLAG) $(CACA_CFLAGS) -xineplug_vo_out_caca_la_LDFLAGS = -avoid-version -module xineplug_vo_out_fb_la_SOURCES = yuv2rgb.c yuv2rgb_mmx.c yuv2rgb_mlib.c \ video_out_fb.c -xineplug_vo_out_fb_la_LIBADD = $(MLIB_LIBS) $(XINE_LIB) $(THREAD_LIBS) +xineplug_vo_out_fb_la_LIBADD = $(MLIB_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) xineplug_vo_out_fb_la_CFLAGS = $(VISIBILITY_FLAG) $(MLIB_CFLAGS) -xineplug_vo_out_fb_la_LDFLAGS = -avoid-version -module xineplug_vo_out_directfb_la_SOURCES = video_out_directfb.c $(X11OSD) -xineplug_vo_out_directfb_la_LIBADD = $(DIRECTFB_LIBS) $(X_LIBS) $(THREAD_LIBS) +xineplug_vo_out_directfb_la_LIBADD = $(XINE_LIB) $(DIRECTFB_LIBS) $(X_LIBS) $(PTHREAD_LIBS) xineplug_vo_out_directfb_la_CFLAGS = $(VISIBILITY_FLAG) $(DIRECTFB_CFLAGS) -fno-strict-aliasing -xineplug_vo_out_directfb_la_LDFLAGS = -avoid-version -module xineplug_vo_out_sdl_la_SOURCES = video_out_sdl.c -xineplug_vo_out_sdl_la_LIBADD = $(SDL_LIBS) $(XINE_LIB) $(THREAD_LIBS) +xineplug_vo_out_sdl_la_LIBADD = $(SDL_LIBS) $(X_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) xineplug_vo_out_sdl_la_CFLAGS = $(VISIBILITY_FLAG) $(X_CFLAGS) $(SDL_CFLAGS) -xineplug_vo_out_sdl_la_LDFLAGS = -avoid-version -module xineplug_vo_out_stk_la_SOURCES = video_out_stk.c -xineplug_vo_out_stk_la_LIBADD = $(LIBSTK_LIBS) $(THREAD_LIBS) +xineplug_vo_out_stk_la_LIBADD = $(XINE_LIB) $(LIBSTK_LIBS) $(PTHREAD_LIBS) xineplug_vo_out_stk_la_CFLAGS = $(VISIBILITY_FLAG) $(LIBSTK_CFLAGS) -xineplug_vo_out_stk_la_LDFLAGS = -avoid-version -module xineplug_vo_out_directx_la_SOURCES = yuv2rgb.c yuv2rgb_mmx.c video_out_directx.c -xineplug_vo_out_directx_la_CPPFLAGS = $(DIRECTX_CPPFLAGS) -xineplug_vo_out_directx_la_LIBADD = $(DIRECTX_VIDEO_LIBS) $(XINE_LIB) $(THREAD_LIBS) +xineplug_vo_out_directx_la_CPPFLAGS = $(AM_CPPFLAGS) $(DIRECTX_CPPFLAGS) +xineplug_vo_out_directx_la_LIBADD = $(DIRECTX_VIDEO_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) xineplug_vo_out_directx_la_CFLAGS = $(VISIBILITY_FLAG) -xineplug_vo_out_directx_la_LDFLAGS = -avoid-version -module xineplug_vo_out_none_la_SOURCES = video_out_none.c -xineplug_vo_out_none_la_LIBADD = $(XINE_LIB) $(THREAD_LIBS) +xineplug_vo_out_none_la_LIBADD = $(XINE_LIB) $(PTHREAD_LIBS) xineplug_vo_out_none_la_CFLAGS = $(VISIBILITY_FLAG) -xineplug_vo_out_none_la_LDFLAGS = -avoid-version -module xineplug_vo_out_macosx_la_SOURCES = video_out_macosx.m -xineplug_vo_out_macosx_la_CPPFLAGS = $(X_CFLAGS) $(MLIB_CFLAGS) -xineplug_vo_out_macosx_la_CFLAGS = $(VISIBILITY_FLAG) +xineplug_vo_out_macosx_la_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS) $(MLIB_CFLAGS) +xineplug_vo_out_macosx_la_OBJCFLAGS = $(VISIBILITY_FLAG) xineplug_vo_out_macosx_la_LIBADD = $(MLIB_LIBS) $(OPENGL_LIBS) $(GLUT_LIBS) \ - $(GLU_LIBS) $(X_LIBS) $(XINE_LIB) $(THREAD_LIBS) + $(GLU_LIBS) $(X_LIBS) $(XINE_LIB) $(PTHREAD_LIBS) # The "-Wl,-framework -Wl,Cocoa" is needed for libtool versions before # 1.5.x (1.257): the default version that ships with Mac OS X is 1.5 (1.1220) -xineplug_vo_out_macosx_la_LDFLAGS = -avoid-version -module \ +xineplug_vo_out_macosx_la_LDFLAGS = $(AM_LDFLAGS) \ -Wl,-framework -Wl,Cocoa -framework Cocoa -framework OpenGL noinst_HEADERS = deinterlace.h video_out_syncfb.h \ - yuv2rgb.h x11osd.h + yuv2rgb.h x11osd.h xcbosd.h diff --git a/src/video_out/deinterlace.c b/src/video_out/deinterlace.c index 347185b2f..1fda3d733 100644 --- a/src/video_out/deinterlace.c +++ b/src/video_out/deinterlace.c @@ -845,15 +845,3 @@ int deinterlace_yuv_supported ( int method ) return 0; } -char *deinterlace_methods[] = { - "none", - "bob", - "weave", - "greedy", - "onefield", - "onefield_xv", - "linearblend", - NULL -}; - - diff --git a/src/video_out/deinterlace.h b/src/video_out/deinterlace.h index e4a1329c3..a9904b42a 100644 --- a/src/video_out/deinterlace.h +++ b/src/video_out/deinterlace.h @@ -41,6 +41,15 @@ void deinterlace_yuv( uint8_t *pdst, uint8_t *psrc[], #define DEINTERLACE_ONEFIELDXV 5 #define DEINTERLACE_LINEARBLEND 6 -extern char *deinterlace_methods[]; +static const char *deinterlace_methods[] = { + "none", + "bob", + "weave", + "greedy", + "onefield", + "onefield_xv", + "linearblend", + NULL +}; #endif diff --git a/src/video_out/libdha/.cvsignore b/src/video_out/libdha/.hgignore index ac32e12c7..ac32e12c7 100644 --- a/src/video_out/libdha/.cvsignore +++ b/src/video_out/libdha/.hgignore diff --git a/src/video_out/libdha/bin/.hgignore b/src/video_out/libdha/bin/.hgignore new file mode 100644 index 000000000..7d926a554 --- /dev/null +++ b/src/video_out/libdha/bin/.hgignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +.libs +.deps +*.lo +*.la diff --git a/src/video_out/libdha/kernelhelper/.hgignore b/src/video_out/libdha/kernelhelper/.hgignore new file mode 100644 index 000000000..7d926a554 --- /dev/null +++ b/src/video_out/libdha/kernelhelper/.hgignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +.libs +.deps +*.lo +*.la diff --git a/src/video_out/libdha/oth/.hgignore b/src/video_out/libdha/oth/.hgignore new file mode 100644 index 000000000..7d926a554 --- /dev/null +++ b/src/video_out/libdha/oth/.hgignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +.libs +.deps +*.lo +*.la diff --git a/src/video_out/libdha/sysdep/.hgignore b/src/video_out/libdha/sysdep/.hgignore new file mode 100644 index 000000000..7d926a554 --- /dev/null +++ b/src/video_out/libdha/sysdep/.hgignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +.libs +.deps +*.lo +*.la diff --git a/src/video_out/macosx/.hgignore b/src/video_out/macosx/.hgignore new file mode 100644 index 000000000..7d926a554 --- /dev/null +++ b/src/video_out/macosx/.hgignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +.libs +.deps +*.lo +*.la diff --git a/src/video_out/macosx/Makefile.am b/src/video_out/macosx/Makefile.am index 76968ceab..a69f30dc5 100644 --- a/src/video_out/macosx/Makefile.am +++ b/src/video_out/macosx/Makefile.am @@ -1,5 +1,7 @@ include $(top_srcdir)/misc/Makefile.common +AM_CPPFLAGS = -DXINE_COMPILE + EXTRA_DIST = \ video_window.h \ XineOpenGLView.m \ @@ -18,9 +20,8 @@ libxineMacOSXVideo_la_LDFLAGS = -version-info \ $(XINE_LT_CURRENT):$(XINE_LT_REVISION):$(XINE_LT_AGE) \ -Wl,-framework -Wl,Cocoa -framework Cocoa \ -Wl,-framework -Wl,OpenGL -framework OpenGL -libxine_MacOSXVideo_la_OBJCFLAGS = $(OBJCFLAGS) -include_HEADERS = video_window.h XineOpenGLView.h XineVideoWindow.h +xineinclude_HEADERS = video_window.h XineOpenGLView.h XineVideoWindow.h endif diff --git a/src/video_out/video_out_directfb.c b/src/video_out/video_out_directfb.c index 960bcdbf4..a51940952 100644 --- a/src/video_out/video_out_directfb.c +++ b/src/video_out/video_out_directfb.c @@ -1444,7 +1444,14 @@ static void init_subpicture (directfb_driver_t *this) { config.flags = DLCONF_PIXELFORMAT | DLCONF_OPTIONS; config.pixelformat = DSPF_ARGB; config.options = DLOP_ALPHACHANNEL; + ret = this->underlay->SetConfiguration (this->underlay, &config); + if (ret) { + /* try AiRGB if the previous failed */ + config.pixelformat = DSPF_AiRGB; + ret = this->underlay->SetConfiguration (this->underlay, &config); + } + if (ret == DFB_OK) { this->underlay->AddRef (this->underlay); this->spic_layer = this->underlay; diff --git a/src/video_out/video_out_fb.c b/src/video_out/video_out_fb.c index 808092a03..e88def112 100644 --- a/src/video_out/video_out_fb.c +++ b/src/video_out/video_out_fb.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_fb.c,v 1.48 2006/07/10 22:08:44 dgp85 Exp $ + * $Id: video_out_fb.c,v 1.49 2006/12/19 19:10:51 dsalt Exp $ * * video_out_fb.c, frame buffer xine driver by Miguel Freitas * @@ -848,7 +848,7 @@ static int open_fb_device(config_values_t *config, xine_t *xine) /* This config entry is security critical, is it really necessary * or is a number enough? */ - device_name = config->register_string(config, devkey, "", + device_name = config->register_filename(config, devkey, "", XINE_CONFIG_STRING_IS_DEVICE_NAME, _("framebuffer device name"), _("Specifies the file name for the framebuffer device " "to be used.\nThis setting is security critical, " diff --git a/src/video_out/video_out_syncfb.c b/src/video_out/video_out_syncfb.c index 9760105c2..f03d0ea97 100644 --- a/src/video_out/video_out_syncfb.c +++ b/src/video_out/video_out_syncfb.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_syncfb.c,v 1.107 2006/09/02 01:10:46 dgp85 Exp $ + * $Id: video_out_syncfb.c,v 1.108 2006/12/19 19:10:51 dsalt Exp $ * * video_out_syncfb.c, SyncFB (for Matrox G200/G400 cards) interface for xine * @@ -1073,7 +1073,8 @@ static void *init_class (xine_t *xine, void *visual_gen) { char* device_name; int fd; - device_name = xine->config->register_string(xine->config, "video.device.syncfb_device", "/dev/syncfb", + device_name = xine->config->register_filename(xine->config, "video.device.syncfb_device", "/dev/syncfb", + XINE_CONFIG_STRING_IS_DEVICE_NAME, _("SyncFB device name"), _("Specifies the file name for the SyncFB (TeleTux) device " "to be used.\nThis setting is security critical, " diff --git a/src/video_out/video_out_vidix.c b/src/video_out/video_out_vidix.c index 188b5271a..b90a162ca 100644 --- a/src/video_out/video_out_vidix.c +++ b/src/video_out/video_out_vidix.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_vidix.c,v 1.74 2006/07/10 22:08:44 dgp85 Exp $ + * $Id: video_out_vidix.c,v 1.75 2006/12/19 19:10:51 dsalt Exp $ * * video_out_vidix.c * @@ -1235,7 +1235,7 @@ static vo_driver_t *vidixfb_open_plugin (video_driver_class_t *class_gen, const this->visual_type = XINE_VISUAL_TYPE_FB; /* Register config option for fb device */ - device = config->register_string(config, "video.device.vidixfb_device", "/dev/fb0", + device = config->register_filename(config, "video.device.vidixfb_device", "/dev/fb0", XINE_CONFIG_STRING_IS_DEVICE_NAME, _("framebuffer device name"), _("Specifies the file name for the framebuffer device to be used.\n" "This setting is security critical, because when changed to a different file, xine " diff --git a/src/video_out/video_out_xcbshm.c b/src/video_out/video_out_xcbshm.c new file mode 100644 index 000000000..5b4eb1fa3 --- /dev/null +++ b/src/video_out/video_out_xcbshm.c @@ -0,0 +1,1279 @@ +/* + * Copyright (C) 2000-2003, 2007 the xine project + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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 + * + * $Id: video_out_xcbshm.c,v 1.3 2007/03/25 23:13:53 dgp85 Exp $ + * + * video_out_xcbshm.c, X11 shared memory extension interface for xine + * + * based on mpeg2dec code from + * Aaron Holtzman <aholtzma@ess.engr.uvic.ca> + * + * xine-specific code by Guenter Bartsch <bartscgr@studbox.uni-stuttgart.de> + * + * ported to xcb by Christoph Pfister - Feb 2007 + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> + +#include "xine.h" +#include "video_out.h" + +#include <errno.h> + +#include <xcb/shm.h> + +#include <sys/ipc.h> +#include <sys/shm.h> +#include <sys/time.h> + +#include <pthread.h> +#include <netinet/in.h> + +#define LOG_MODULE "video_out_xcbshm" +#define LOG_VERBOSE +/* +#define LOG +*/ + +#include "xine_internal.h" +#include "yuv2rgb.h" +#include "xineutils.h" +#include "vo_scale.h" +#include "xcbosd.h" + +typedef struct { + vo_frame_t vo_frame; + + /* frame properties as delivered by the decoder: */ + /* obs: for width/height use vo_scale_t struct */ + int format; + int flags; + + vo_scale_t sc; + + uint8_t *image; + int bytes_per_line; + xcb_shm_seg_t shmseg; + + uint8_t *chunk[3]; /* mem alloc by xmalloc_aligned */ + + yuv2rgb_t *yuv2rgb; /* yuv2rgb converter set up for this frame */ + uint8_t *rgb_dst; + +} xshm_frame_t; + +typedef struct { + + vo_driver_t vo_driver; + + /* xcb / shm related stuff */ + xcb_connection_t *connection; + xcb_screen_t *screen; + xcb_window_t window; + xcb_gcontext_t gc; + int depth; + int bpp; + int scanline_pad; + int use_shm; + + int yuv2rgb_brightness; + int yuv2rgb_contrast; + int yuv2rgb_saturation; + uint8_t *yuv2rgb_cmap; + yuv2rgb_factory_t *yuv2rgb_factory; + + vo_scale_t sc; + + xshm_frame_t *cur_frame; + xcbosd *xoverlay; + int ovl_changed; + + xine_t *xine; + + alphablend_t alphablend_extra_data; + + pthread_mutex_t main_mutex; + +} xshm_driver_t; + +typedef struct { + video_driver_class_t driver_class; + + config_values_t *config; + xine_t *xine; +} xshm_class_t; + + +/* + * allocate an XImage, try XShm first but fall back to + * plain X11 if XShm should fail + */ +static void create_ximage(xshm_driver_t *this, xshm_frame_t *frame, int width, int height) +{ + if (width <= 0) + width = 1; + if (height <= 0) + height = 1; + + frame->bytes_per_line = ((this->bpp * width + this->scanline_pad - 1) & + (~(this->scanline_pad - 1))) >> 3; + + if (this->use_shm) { + int shmid; + xcb_void_cookie_t shm_attach_cookie; + xcb_generic_error_t *generic_error; + + /* + * try shm + */ + + shmid = shmget(IPC_PRIVATE, frame->bytes_per_line * height, IPC_CREAT | 0777); + + if (shmid < 0) { + xprintf(this->xine, XINE_VERBOSITY_LOG, + _("video_out_xcbshm: %s: allocating image\n" + "video_out_xcbshm: => not using MIT Shared Memory extension.\n"), strerror(errno)); + goto shm_fail1; + } + + frame->image = shmat(shmid, 0, 0); + + if (frame->image == ((void *) -1)) { + xprintf(this->xine, XINE_VERBOSITY_LOG, + _("video_out_xcbshm: shared memory error (address error) when allocating image \n" + "video_out_xcbshm: => not using MIT Shared Memory extension.\n")); + goto shm_fail2; + } + + frame->shmseg = xcb_generate_id(this->connection); + shm_attach_cookie = xcb_shm_attach_checked(this->connection, frame->shmseg, shmid, 0); + generic_error = xcb_request_check(this->connection, shm_attach_cookie); + + if (generic_error != NULL) { + xprintf(this->xine, XINE_VERBOSITY_LOG, + _("video_out_xcbshm: x11 error during shared memory XImage creation\n" + "video_out_xcbshm: => not using MIT Shared Memory extension.\n")); + free(generic_error); + goto shm_fail3; + } + + /* + * Now that the Xserver has learned about and attached to the + * shared memory segment, delete it. It's actually deleted by + * the kernel when all users of that segment have detached from + * it. Gives an automatic shared memory cleanup in case we crash. + */ + + shmctl(shmid, IPC_RMID, 0); + + return; + + shm_fail3: + frame->shmseg = 0; + shmdt(frame->image); + shm_fail2: + shmctl(shmid, IPC_RMID, 0); + shm_fail1: + this->use_shm = 0; + } + + /* + * fall back to plain X11 if necessary + */ + + frame->image = malloc(frame->bytes_per_line * height); +} + +static void dispose_ximage(xshm_driver_t *this, xshm_frame_t *frame) +{ + if (frame->shmseg) { + xcb_shm_detach(this->connection, frame->shmseg); + frame->shmseg = 0; + shmdt(frame->image); + } else + free(frame->image); + frame->image = NULL; +} + + +/* + * and now, the driver functions + */ + +static uint32_t xshm_get_capabilities (vo_driver_t *this_gen) { + xshm_driver_t *this = (xshm_driver_t *) this_gen; + uint32_t capabilities = VO_CAP_YV12 | VO_CAP_YUY2; + + if( this->xoverlay ) + capabilities |= VO_CAP_UNSCALED_OVERLAY; + + return capabilities; +} + +static void xshm_frame_proc_slice (vo_frame_t *vo_img, uint8_t **src) { + xshm_frame_t *frame = (xshm_frame_t *) vo_img ; + /*xshm_driver_t *this = (xshm_driver_t *) vo_img->driver; */ + + vo_img->proc_called = 1; + + if( frame->vo_frame.crop_left || frame->vo_frame.crop_top || + frame->vo_frame.crop_right || frame->vo_frame.crop_bottom ) + { + /* we don't support crop, so don't even waste cpu cycles. + * cropping will be performed by video_out.c + */ + return; + } + + lprintf ("copy... (format %d)\n", frame->format); + + if (frame->format == XINE_IMGFMT_YV12) + frame->yuv2rgb->yuv2rgb_fun (frame->yuv2rgb, frame->rgb_dst, + src[0], src[1], src[2]); + else + frame->yuv2rgb->yuy22rgb_fun (frame->yuv2rgb, frame->rgb_dst, + src[0]); + + lprintf ("copy...done\n"); +} + +static void xshm_frame_field (vo_frame_t *vo_img, int which_field) { + xshm_frame_t *frame = (xshm_frame_t *) vo_img ; + /* xshm_driver_t *this = (xshm_driver_t *) vo_img->driver; */ + + switch (which_field) { + case VO_TOP_FIELD: + frame->rgb_dst = frame->image; + break; + case VO_BOTTOM_FIELD: + frame->rgb_dst = frame->image + frame->bytes_per_line; + break; + case VO_BOTH_FIELDS: + frame->rgb_dst = frame->image; + break; + } + + frame->yuv2rgb->next_slice (frame->yuv2rgb, NULL); +} + +static void xshm_frame_dispose (vo_frame_t *vo_img) { + xshm_frame_t *frame = (xshm_frame_t *) vo_img ; + xshm_driver_t *this = (xshm_driver_t *) vo_img->driver; + + if (frame->image) { + pthread_mutex_lock(&this->main_mutex); + dispose_ximage(this, frame); + pthread_mutex_unlock(&this->main_mutex); + } + + frame->yuv2rgb->dispose (frame->yuv2rgb); + + free (frame->chunk[0]); + free (frame->chunk[1]); + free (frame->chunk[2]); + free (frame); +} + + +static vo_frame_t *xshm_alloc_frame (vo_driver_t *this_gen) { + xshm_frame_t *frame; + xshm_driver_t *this = (xshm_driver_t *) this_gen; + + frame = (xshm_frame_t *) xine_xmalloc (sizeof (xshm_frame_t)); + if (!frame) + return NULL; + + memcpy (&frame->sc, &this->sc, sizeof(vo_scale_t)); + + pthread_mutex_init (&frame->vo_frame.mutex, NULL); + + /* + * supply required functions/fields + */ + + frame->vo_frame.proc_slice = xshm_frame_proc_slice; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.field = xshm_frame_field; + frame->vo_frame.dispose = xshm_frame_dispose; + frame->vo_frame.driver = this_gen; + + /* + * colorspace converter for this frame + */ + + frame->yuv2rgb = this->yuv2rgb_factory->create_converter (this->yuv2rgb_factory); + + return (vo_frame_t *) frame; +} + +static void xshm_compute_ideal_size (xshm_driver_t *this, xshm_frame_t *frame) { + _x_vo_scale_compute_ideal_size( &frame->sc ); +} + +static void xshm_compute_rgb_size (xshm_driver_t *this, xshm_frame_t *frame) { + _x_vo_scale_compute_output_size( &frame->sc ); + + /* avoid problems in yuv2rgb */ + if (frame->sc.output_height < 1) + frame->sc.output_height = 1; + if (frame->sc.output_width < 8) + frame->sc.output_width = 8; + if (frame->sc.output_width & 1) /* yuv2rgb_mlib needs an even YUV2 width */ + frame->sc.output_width++; + + lprintf("frame source (%d) %d x %d => screen output %d x %d%s\n", + frame->vo_frame.id, + frame->sc.delivered_width, frame->sc.delivered_height, + frame->sc.output_width, frame->sc.output_height, + ( frame->sc.delivered_width != frame->sc.output_width + || frame->sc.delivered_height != frame->sc.output_height + ? ", software scaling" + : "" ) + ); +} + +static void xshm_update_frame_format (vo_driver_t *this_gen, + vo_frame_t *frame_gen, + uint32_t width, uint32_t height, + double ratio, int format, int flags) { + xshm_driver_t *this = (xshm_driver_t *) this_gen; + xshm_frame_t *frame = (xshm_frame_t *) frame_gen; + int do_adapt; + int gui_width; + int gui_height; + double gui_pixel_aspect; + + flags &= VO_BOTH_FIELDS; + + /* ask gui what output size we'll have for this frame */ + /* get the gui_pixel_aspect before calling xshm_compute_ideal_size() */ + /* note: gui_width and gui_height may be bogus because we may have not yet*/ + /* updated video_pixel_aspect (see _x_vo_scale_compute_ideal_size). */ + frame->sc.dest_size_cb (frame->sc.user_data, width, height, + frame->sc.video_pixel_aspect, + &gui_width, &gui_height, + &gui_pixel_aspect); + + /* find out if we need to adapt this frame */ + do_adapt = 0; + + if ((width != frame->sc.delivered_width) + || (height != frame->sc.delivered_height) + || (ratio != frame->sc.delivered_ratio) + || (flags != frame->flags) + || (format != frame->format) + || (gui_pixel_aspect != frame->sc.gui_pixel_aspect) + || (this->sc.user_ratio != frame->sc.user_ratio)) { + + do_adapt = 1; + + lprintf ("frame format (from decoder) has changed => adapt\n"); + + frame->sc.delivered_width = width; + frame->sc.delivered_height = height; + frame->sc.delivered_ratio = ratio; + frame->sc.gui_pixel_aspect = gui_pixel_aspect; + frame->flags = flags; + frame->format = format; + frame->sc.user_ratio = this->sc.user_ratio; + + xshm_compute_ideal_size (this, frame); + + /* now we have updated video_aspect_pixel we use the callback */ + /* again to obtain the correct gui_width and gui_height values. */ + frame->sc.dest_size_cb (frame->sc.user_data, width, height, + frame->sc.video_pixel_aspect, + &gui_width, &gui_height, + &gui_pixel_aspect); + } + + if ((frame->sc.gui_width != gui_width) || + (frame->sc.gui_height != gui_height) || + do_adapt) { + + do_adapt = 1; + frame->sc.gui_width = gui_width; + frame->sc.gui_height = gui_height; + + xshm_compute_rgb_size (this, frame); + + lprintf ("gui_size has changed => adapt\n"); + } + + + /* ok, now do what we have to do */ + + if (do_adapt) { + + lprintf ("updating frame to %d x %d\n", + frame->sc.output_width, frame->sc.output_height); + + pthread_mutex_lock(&this->main_mutex); + + /* + * (re-) allocate XImage + */ + + if (frame->image) { + + dispose_ximage(this, frame); + + if (frame->chunk[0]){ + free (frame->chunk[0]); + frame->chunk[0] = NULL; + } + if (frame->chunk[1]) { + free (frame->chunk[1]); + frame->chunk[1] = NULL; + } + if (frame->chunk[2]) { + free (frame->chunk[2]); + frame->chunk[2] = NULL; + } + } + + create_ximage(this, frame, frame->sc.output_width, frame->sc.output_height); + + pthread_mutex_unlock(&this->main_mutex); + + if (format == XINE_IMGFMT_YV12) { + frame->vo_frame.pitches[0] = 8*((width + 7) / 8); + frame->vo_frame.pitches[1] = 8*((width + 15) / 16); + frame->vo_frame.pitches[2] = 8*((width + 15) / 16); + frame->vo_frame.base[0] = xine_xmalloc_aligned (16, frame->vo_frame.pitches[0] * height, (void **) &frame->chunk[0]); + frame->vo_frame.base[1] = xine_xmalloc_aligned (16, frame->vo_frame.pitches[1] * ((height+1)/2), (void **) &frame->chunk[1]); + frame->vo_frame.base[2] = xine_xmalloc_aligned (16, frame->vo_frame.pitches[2] * ((height+1)/2), (void **) &frame->chunk[2]); + } else { + frame->vo_frame.pitches[0] = 8*((width + 3) / 4); + frame->vo_frame.base[0] = xine_xmalloc_aligned (16, frame->vo_frame.pitches[0] * height, (void **) &frame->chunk[0]); + frame->chunk[1] = NULL; + frame->chunk[2] = NULL; + } + + lprintf ("stripe out_ht=%i, deliv_ht=%i\n", + frame->sc.output_height, frame->sc.delivered_height); + + /* + * set up colorspace converter + */ + + switch (flags) { + case VO_TOP_FIELD: + case VO_BOTTOM_FIELD: + frame->yuv2rgb->configure (frame->yuv2rgb, + frame->sc.delivered_width, + frame->sc.delivered_height, + 2*frame->vo_frame.pitches[0], + 2*frame->vo_frame.pitches[1], + frame->sc.output_width, + frame->sc.output_height, + frame->bytes_per_line*2); + break; + case VO_BOTH_FIELDS: + frame->yuv2rgb->configure (frame->yuv2rgb, + frame->sc.delivered_width, + frame->sc.delivered_height, + frame->vo_frame.pitches[0], + frame->vo_frame.pitches[1], + frame->sc.output_width, + frame->sc.output_height, + frame->bytes_per_line); + break; + } + } + + xshm_frame_field ((vo_frame_t *)frame, flags); +} + +static void xshm_overlay_clut_yuv2rgb(xshm_driver_t *this, vo_overlay_t *overlay, + xshm_frame_t *frame) { + size_t i; + clut_t* clut = (clut_t*) overlay->color; + + if (!overlay->rgb_clut) { + for (i = 0; i < sizeof(overlay->color)/sizeof(overlay->color[0]); i++) { + *((uint32_t *)&clut[i]) = + frame->yuv2rgb->yuv2rgb_single_pixel_fun (frame->yuv2rgb, + clut[i].y, clut[i].cb, clut[i].cr); + } + overlay->rgb_clut++; + } + if (!overlay->hili_rgb_clut) { + clut = (clut_t*) overlay->hili_color; + for (i = 0; i < sizeof(overlay->color)/sizeof(overlay->color[0]); i++) { + *((uint32_t *)&clut[i]) = + frame->yuv2rgb->yuv2rgb_single_pixel_fun(frame->yuv2rgb, + clut[i].y, clut[i].cb, clut[i].cr); + } + overlay->hili_rgb_clut++; + } +} + +static void xshm_overlay_begin (vo_driver_t *this_gen, + vo_frame_t *frame_gen, int changed) { + xshm_driver_t *this = (xshm_driver_t *) this_gen; + + this->ovl_changed += changed; + + if( this->ovl_changed && this->xoverlay ) { + pthread_mutex_lock(&this->main_mutex); + xcbosd_clear(this->xoverlay); + pthread_mutex_unlock(&this->main_mutex); + } + + this->alphablend_extra_data.offset_x = frame_gen->overlay_offset_x; + this->alphablend_extra_data.offset_y = frame_gen->overlay_offset_y; +} + +static void xshm_overlay_end (vo_driver_t *this_gen, vo_frame_t *vo_img) { + xshm_driver_t *this = (xshm_driver_t *) this_gen; + + if( this->ovl_changed && this->xoverlay ) { + pthread_mutex_lock(&this->main_mutex); + xcbosd_expose(this->xoverlay); + pthread_mutex_unlock(&this->main_mutex); + } + + this->ovl_changed = 0; +} + +static void xshm_overlay_blend (vo_driver_t *this_gen, + vo_frame_t *frame_gen, vo_overlay_t *overlay) { + xshm_driver_t *this = (xshm_driver_t *) this_gen; + xshm_frame_t *frame = (xshm_frame_t *) frame_gen; + + /* Alpha Blend here */ + if (overlay->rle) { + if( overlay->unscaled ) { + if( this->ovl_changed && this->xoverlay ) { + pthread_mutex_lock(&this->main_mutex); + xcbosd_blend(this->xoverlay, overlay); + pthread_mutex_unlock(&this->main_mutex); + } + } else { + if (!overlay->rgb_clut || !overlay->hili_rgb_clut) + xshm_overlay_clut_yuv2rgb (this, overlay, frame); + + switch (this->bpp) { + case 16: + _x_blend_rgb16(frame->image, overlay, + frame->sc.output_width, frame->sc.output_height, + frame->sc.delivered_width, frame->sc.delivered_height, + &this->alphablend_extra_data); + break; + case 24: + _x_blend_rgb24(frame->image, overlay, + frame->sc.output_width, frame->sc.output_height, + frame->sc.delivered_width, frame->sc.delivered_height, + &this->alphablend_extra_data); + break; + case 32: + _x_blend_rgb32(frame->image, overlay, + frame->sc.output_width, frame->sc.output_height, + frame->sc.delivered_width, frame->sc.delivered_height, + &this->alphablend_extra_data); + break; + default: + xprintf(this->xine, XINE_VERBOSITY_DEBUG, + "xine-lib:video_out_xcbshm:xshm_overlay_blend: Cannot blend bpp:%i\n", this->bpp); + /* it should never get here, unless a user tries to play in bpp:8 */ + break; + } + } + } +} + +static void clean_output_area (xshm_driver_t *this, xshm_frame_t *frame) { + int i; + xcb_rectangle_t rects[4]; + int rects_count = 0; + + memcpy( this->sc.border, frame->sc.border, sizeof(this->sc.border) ); + + pthread_mutex_lock(&this->main_mutex); + + for( i = 0; i < 4; i++ ) { + if( this->sc.border[i].w && this->sc.border[i].h ) + rects[rects_count].x = this->sc.border[i].x; + rects[rects_count].y = this->sc.border[i].y; + rects[rects_count].width = this->sc.border[i].w; + rects[rects_count].height = this->sc.border[i].h; + rects_count++; + } + + if (rects_count > 0) + xcb_poly_fill_rectangle(this->connection, this->window, this->gc, rects_count, rects); + + if (this->xoverlay) { + xcbosd_resize(this->xoverlay, this->sc.gui_width, this->sc.gui_height); + this->ovl_changed = 1; + } + + pthread_mutex_unlock(&this->main_mutex); +} + +static int xshm_redraw_needed (vo_driver_t *this_gen) { + xshm_driver_t *this = (xshm_driver_t *) this_gen; + int ret = 0; + + if( this->cur_frame ) { + this->sc.delivered_height = this->cur_frame->sc.delivered_height; + this->sc.delivered_width = this->cur_frame->sc.delivered_width; + this->sc.video_pixel_aspect = this->cur_frame->sc.video_pixel_aspect; + if( _x_vo_scale_redraw_needed( &this->sc ) ) { + + clean_output_area (this, this->cur_frame); + ret = 1; + } + } + else + ret = 1; + + return ret; +} + +static void xshm_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) { + xshm_driver_t *this = (xshm_driver_t *) this_gen; + xshm_frame_t *frame = (xshm_frame_t *) frame_gen; + + lprintf ("display frame...\n"); + lprintf ("about to draw frame (%d) %d x %d...\n", + frame->vo_frame.id, + frame->sc.output_width, frame->sc.output_height); + + /* + * tell gui that we are about to display a frame, + * ask for offset + */ + + this->sc.delivered_height = frame->sc.delivered_height; + this->sc.delivered_width = frame->sc.delivered_width; + this->sc.video_pixel_aspect = frame->sc.video_pixel_aspect; + if( _x_vo_scale_redraw_needed( &this->sc ) ) { + + clean_output_area (this, frame); + } + + if (this->cur_frame) { + + if ( (this->cur_frame->sc.output_width != frame->sc.output_width) + || (this->cur_frame->sc.output_height != frame->sc.output_height) + || (this->cur_frame->sc.output_xoffset != frame->sc.output_xoffset) + || (this->cur_frame->sc.output_yoffset != frame->sc.output_yoffset) ) + clean_output_area (this, frame); + + this->cur_frame->vo_frame.free (&this->cur_frame->vo_frame); + } + + this->cur_frame = frame; + + pthread_mutex_lock(&this->main_mutex); + lprintf ("display locked...\n"); + + if (frame->shmseg) { + + lprintf ("put image (shm)\n"); + xcb_shm_put_image(this->connection, this->window, this->gc, this->cur_frame->sc.output_width, + this->cur_frame->sc.output_height, 0, 0, this->cur_frame->sc.output_width, + this->cur_frame->sc.output_height, this->cur_frame->sc.output_xoffset, + this->cur_frame->sc.output_yoffset, this->depth, XCB_IMAGE_FORMAT_Z_PIXMAP, + 0, this->cur_frame->shmseg, 0); + + } else { + + lprintf ("put image (plain/remote)\n"); + xcb_put_image(this->connection, XCB_IMAGE_FORMAT_Z_PIXMAP, this->window, this->gc, + frame->sc.output_width, frame->sc.output_height, frame->sc.output_xoffset, frame->sc.output_yoffset, + 0, this->depth, frame->bytes_per_line * frame->sc.output_height, frame->image); + + } + xcb_flush(this->connection); + pthread_mutex_unlock(&this->main_mutex); + + lprintf ("display frame done\n"); +} + +static int xshm_get_property (vo_driver_t *this_gen, int property) { + xshm_driver_t *this = (xshm_driver_t *) this_gen; + + switch (property) { + case VO_PROP_ASPECT_RATIO: + return this->sc.user_ratio; + case VO_PROP_MAX_NUM_FRAMES: + return 15; + case VO_PROP_BRIGHTNESS: + return this->yuv2rgb_brightness; + case VO_PROP_CONTRAST: + return this->yuv2rgb_contrast; + case VO_PROP_SATURATION: + return this->yuv2rgb_saturation; + case VO_PROP_WINDOW_WIDTH: + return this->sc.gui_width; + case VO_PROP_WINDOW_HEIGHT: + return this->sc.gui_height; + default: + xprintf(this->xine, XINE_VERBOSITY_DEBUG, + "video_out_xcbshm: tried to get unsupported property %d\n", property); + } + + return 0; +} + +static int xshm_set_property (vo_driver_t *this_gen, + int property, int value) { + xshm_driver_t *this = (xshm_driver_t *) this_gen; + + if ( property == VO_PROP_ASPECT_RATIO) { + + if (value>=XINE_VO_ASPECT_NUM_RATIOS) + value = XINE_VO_ASPECT_AUTO; + this->sc.user_ratio = value; + xprintf(this->xine, XINE_VERBOSITY_DEBUG, + "video_out_xcbshm: aspect ratio changed to %s\n", _x_vo_scale_aspect_ratio_name(value)); + + } else if (property == VO_PROP_BRIGHTNESS) { + + this->yuv2rgb_brightness = value; + this->yuv2rgb_factory->set_csc_levels (this->yuv2rgb_factory, + this->yuv2rgb_brightness, + this->yuv2rgb_contrast, + this->yuv2rgb_saturation); + + this->sc.force_redraw = 1; + + } else if (property == VO_PROP_CONTRAST) { + + this->yuv2rgb_contrast = value; + this->yuv2rgb_factory->set_csc_levels (this->yuv2rgb_factory, + this->yuv2rgb_brightness, + this->yuv2rgb_contrast, + this->yuv2rgb_saturation); + + this->sc.force_redraw = 1; + + } else if (property == VO_PROP_SATURATION) { + + this->yuv2rgb_saturation = value; + this->yuv2rgb_factory->set_csc_levels (this->yuv2rgb_factory, + this->yuv2rgb_brightness, + this->yuv2rgb_contrast, + this->yuv2rgb_saturation); + + this->sc.force_redraw = 1; + + } else { + xprintf (this->xine, XINE_VERBOSITY_DEBUG, + "video_out_xcbshm: tried to set unsupported property %d\n", property); + } + + return value; +} + +static void xshm_get_property_min_max (vo_driver_t *this_gen, + int property, int *min, int *max) { + /* xshm_driver_t *this = (xshm_driver_t *) this_gen; */ + + if (property == VO_PROP_BRIGHTNESS) { + *min = -128; + *max = +127; + } else if (property == VO_PROP_CONTRAST) { + *min = 0; + *max = 255; + } else if (property == VO_PROP_SATURATION) { + *min = 0; + *max = 255; + } else { + *min = 0; + *max = 0; + } +} + +static int xshm_gui_data_exchange (vo_driver_t *this_gen, + int data_type, void *data) { + xshm_driver_t *this = (xshm_driver_t *) this_gen; + + switch (data_type) { +#ifndef XINE_DISABLE_DEPRECATED_FEATURES + case XINE_GUI_SEND_COMPLETION_EVENT: + break; +#endif + + case XINE_GUI_SEND_EXPOSE_EVENT: + + lprintf ("expose event\n"); + + if (this->cur_frame) { + xcb_expose_event_t *xev = (xcb_expose_event_t *) data; + + if (xev && xev->count == 0) { + int i; + xcb_rectangle_t rects[4]; + int rects_count = 0; + + pthread_mutex_lock(&this->main_mutex); + if (this->cur_frame->shmseg) + xcb_shm_put_image(this->connection, this->window, this->gc, this->cur_frame->sc.output_width, + this->cur_frame->sc.output_height, 0, 0, this->cur_frame->sc.output_width, + this->cur_frame->sc.output_height, this->cur_frame->sc.output_xoffset, + this->cur_frame->sc.output_yoffset, this->depth, XCB_IMAGE_FORMAT_Z_PIXMAP, + 0, this->cur_frame->shmseg, 0); + else + xcb_put_image(this->connection, XCB_IMAGE_FORMAT_Z_PIXMAP, this->window, this->gc, + this->cur_frame->sc.output_width, this->cur_frame->sc.output_height, + this->cur_frame->sc.output_xoffset, this->cur_frame->sc.output_yoffset, + 0, this->depth, this->cur_frame->bytes_per_line * this->cur_frame->sc.output_height, + this->cur_frame->image); + + for( i = 0; i < 4; i++ ) { + if( this->sc.border[i].w && this->sc.border[i].h ) + rects[rects_count].x = this->sc.border[i].x; + rects[rects_count].y = this->sc.border[i].y; + rects[rects_count].width = this->sc.border[i].w; + rects[rects_count].height = this->sc.border[i].h; + rects_count++; + } + + if (rects_count > 0) + xcb_poly_fill_rectangle(this->connection, this->window, this->gc, rects_count, rects); + + if(this->xoverlay) + xcbosd_expose(this->xoverlay); + + xcb_flush(this->connection); + pthread_mutex_unlock(&this->main_mutex); + } + } + break; + + case XINE_GUI_SEND_DRAWABLE_CHANGED: + this->window = (xcb_window_t) data; + + pthread_mutex_lock(&this->main_mutex); + xcb_free_gc(this->connection, this->gc); + this->gc = xcb_generate_id(this->connection); + xcb_create_gc(this->connection, this->gc, this->window, XCB_GC_FOREGROUND, &this->screen->black_pixel); + if(this->xoverlay) + xcbosd_drawable_changed(this->xoverlay, this->window); + this->ovl_changed = 1; + pthread_mutex_unlock(&this->main_mutex); + break; + + case XINE_GUI_SEND_TRANSLATE_GUI_TO_VIDEO: + + if (this->cur_frame) { + x11_rectangle_t *rect = data; + int x1, y1, x2, y2; + + _x_vo_scale_translate_gui2video(&this->cur_frame->sc, + rect->x, rect->y, + &x1, &y1); + _x_vo_scale_translate_gui2video(&this->cur_frame->sc, + rect->x + rect->w, rect->y + rect->h, + &x2, &y2); + rect->x = x1; + rect->y = y1; + rect->w = x2-x1; + rect->h = y2-y1; + } + break; + + default: + return -1; + } + + return 0; +} + +static void xshm_dispose (vo_driver_t *this_gen) { + xshm_driver_t *this = (xshm_driver_t *) this_gen; + + if (this->cur_frame) + this->cur_frame->vo_frame.dispose (&this->cur_frame->vo_frame); + + this->yuv2rgb_factory->dispose (this->yuv2rgb_factory); + + pthread_mutex_lock(&this->main_mutex); + xcb_free_gc(this->connection, this->gc); + pthread_mutex_unlock(&this->main_mutex); + + if( this->xoverlay ) { + pthread_mutex_lock(&this->main_mutex); + xcbosd_destroy(this->xoverlay); + pthread_mutex_unlock(&this->main_mutex); + } + + pthread_mutex_destroy(&this->main_mutex); + + _x_alphablend_free(&this->alphablend_extra_data); + + free (this); +} + +static int ImlibPaletteLUTGet(xshm_driver_t *this) { + static const xcb_atom_t CARDINAL = 6; + + xcb_intern_atom_cookie_t atom_cookie; + xcb_intern_atom_reply_t *atom_reply; + + xcb_get_property_cookie_t prop_cookie; + xcb_get_property_reply_t *prop_reply; + + atom_cookie = xcb_intern_atom(this->connection, 0, sizeof("_IMLIB_COLORMAP"), "_IMLIB_COLORMAP"); + atom_reply = xcb_intern_atom_reply(this->connection, atom_cookie, NULL); + + if (atom_reply == NULL) + return 0; + + prop_cookie = xcb_get_property(this->connection, 0, this->window, atom_reply->atom, CARDINAL, 0, 0x7fffffff); + prop_reply = xcb_get_property_reply(this->connection, prop_cookie, NULL); + + free(atom_reply); + + if (prop_reply == NULL) + return 0; + + if (prop_reply->format == 8) { + unsigned int i; + unsigned long j; + int num_ret = xcb_get_property_value_length(prop_reply); + char *retval = xcb_get_property_value(prop_reply); + + j = 1 + retval[0]*4; + this->yuv2rgb_cmap = malloc(sizeof(uint8_t) * 32 * 32 * 32); + for (i = 0; i < 32 * 32 * 32 && j < num_ret; i++) + this->yuv2rgb_cmap[i] = retval[1+4*retval[j++]+3]; + + free(prop_reply); + return 1; + } + + free(prop_reply); + return 0; +} + + +static char *visual_class_name(xcb_visualtype_t *visual) { + + switch (visual->_class) { + case XCB_VISUAL_CLASS_STATIC_GRAY: + return "StaticGray"; + case XCB_VISUAL_CLASS_GRAY_SCALE: + return "GrayScale"; + case XCB_VISUAL_CLASS_STATIC_COLOR: + return "StaticColor"; + case XCB_VISUAL_CLASS_PSEUDO_COLOR: + return "PseudoColor"; + case XCB_VISUAL_CLASS_TRUE_COLOR: + return "TrueColor"; + case XCB_VISUAL_CLASS_DIRECT_COLOR: + return "DirectColor"; + default: + return "unknown visual class"; + } +} + +static vo_driver_t *xshm_open_plugin(video_driver_class_t *class_gen, const void *visual_gen) { + xshm_class_t *class = (xshm_class_t *) class_gen; + config_values_t *config = class->config; + xcb_visual_t *visual = (xcb_visual_t *) visual_gen; + xshm_driver_t *this; + xcb_visualtype_t *visualtype; + int mode; + int swapped; + int cpu_byte_order; + int image_byte_order; + + xcb_get_window_attributes_cookie_t window_attrs_cookie; + xcb_get_window_attributes_reply_t *window_attrs_reply; + + xcb_get_geometry_cookie_t geometry_cookie; + xcb_get_geometry_reply_t *geometry_reply; + + const xcb_query_extension_reply_t *query_extension_reply; + + this = (xshm_driver_t *) xine_xmalloc (sizeof (xshm_driver_t)); + + if (!this) + return NULL; + + pthread_mutex_init(&this->main_mutex, NULL); + + _x_alphablend_init(&this->alphablend_extra_data, class->xine); + + this->connection = visual->connection; + this->screen = visual->screen; + this->window = visual->window; + + _x_vo_scale_init( &this->sc, 0, 0, config ); + this->sc.frame_output_cb = visual->frame_output_cb; + this->sc.dest_size_cb = visual->dest_size_cb; + this->sc.user_data = visual->user_data; + + this->sc.user_ratio = XINE_VO_ASPECT_AUTO; + + this->cur_frame = NULL; + this->gc = xcb_generate_id(this->connection); + xcb_create_gc(this->connection, this->gc, this->window, XCB_GC_FOREGROUND, &this->screen->black_pixel); + this->xoverlay = NULL; + this->ovl_changed = 0; + + this->xine = class->xine; + + this->vo_driver.get_capabilities = xshm_get_capabilities; + this->vo_driver.alloc_frame = xshm_alloc_frame; + this->vo_driver.update_frame_format = xshm_update_frame_format; + this->vo_driver.overlay_begin = xshm_overlay_begin; + this->vo_driver.overlay_blend = xshm_overlay_blend; + this->vo_driver.overlay_end = xshm_overlay_end; + this->vo_driver.display_frame = xshm_display_frame; + this->vo_driver.get_property = xshm_get_property; + this->vo_driver.set_property = xshm_set_property; + this->vo_driver.get_property_min_max = xshm_get_property_min_max; + this->vo_driver.gui_data_exchange = xshm_gui_data_exchange; + this->vo_driver.dispose = xshm_dispose; + this->vo_driver.redraw_needed = xshm_redraw_needed; + + /* + * + * depth in X11 terminology land is the number of bits used to + * actually represent the colour. + * + * bpp in X11 land means how many bits in the frame buffer per + * pixel. + * + * ex. 15 bit color is 15 bit depth and 16 bpp. Also 24 bit + * color is 24 bit depth, but can be 24 bpp or 32 bpp. + */ + + window_attrs_cookie = xcb_get_window_attributes(this->connection, this->window); + geometry_cookie = xcb_get_geometry(this->connection, this->window); + xcb_prefetch_extension_data(this->connection, &xcb_shm_id); + + window_attrs_reply = xcb_get_window_attributes_reply(this->connection, window_attrs_cookie, NULL); + + visualtype = NULL; + { + xcb_depth_t *depth = xcb_screen_allowed_depths_iterator(this->screen).data; + xcb_visualtype_t *vis = xcb_depth_visuals(depth); + xcb_visualtype_t *vis_end = vis + xcb_depth_visuals_length(depth); + + for (; vis != vis_end; ++vis) + if (window_attrs_reply->visual == vis->visual_id) { + visualtype = vis; + break; + } + } + + free(window_attrs_reply); + + geometry_reply = xcb_get_geometry_reply(this->connection, geometry_cookie, NULL); + + this->depth = geometry_reply->depth; + + free(geometry_reply); + + if (this->depth>16) + xprintf(this->xine, XINE_VERBOSITY_LOG, + _("\n\nWARNING: current display depth is %d. For better performance\n" + "a depth of 16 bpp is recommended!\n\n"), this->depth); + + /* + * check for X shared memory support + */ + + query_extension_reply = xcb_get_extension_data(this->connection, &xcb_shm_id); + if (query_extension_reply && query_extension_reply->present) { + this->use_shm = 1; + } + else { + xprintf(this->xine, XINE_VERBOSITY_LOG, + _("video_out_xcbshm: MIT shared memory extension not present on display.\n")); + this->use_shm = 0; + } + + { + const xcb_setup_t *setup = xcb_get_setup(this->connection); + xcb_format_t *fmt = xcb_setup_pixmap_formats(setup); + xcb_format_t *fmt_end = fmt + xcb_setup_pixmap_formats_length(setup); + + for (; fmt != fmt_end; ++fmt) + if(fmt->depth == this->depth) { + this->bpp = fmt->bits_per_pixel; + this->scanline_pad = fmt->scanline_pad; + break; + } + + if (fmt == fmt_end) { + if (this->depth <= 4) + this->bpp = 4; + else if (this->depth <= 8) + this->bpp = 8; + else if (this->depth <= 16) + this->bpp = 16; + else + this->bpp = 32; + this->scanline_pad = setup->bitmap_format_scanline_pad; + } + + image_byte_order = setup->image_byte_order; + } + + /* + * Is the same byte order in use on the X11 client and server? + */ + cpu_byte_order = htonl(1) == 1 ? XCB_IMAGE_ORDER_MSB_FIRST : XCB_IMAGE_ORDER_LSB_FIRST; + swapped = cpu_byte_order != image_byte_order; + + xprintf(this->xine, XINE_VERBOSITY_DEBUG, + "video_out_xcbshm: video mode depth is %d (%d bpp), %s, %sswapped,\n" + "\tred: %08x, green: %08x, blue: %08x\n", + this->depth, this->bpp, + visual_class_name(visualtype), + swapped ? "" : "not ", + visualtype->red_mask, visualtype->green_mask, visualtype->blue_mask); + + mode = 0; + + switch (visualtype->_class) { + case XCB_VISUAL_CLASS_TRUE_COLOR: + switch (this->depth) { + case 24: + case 32: + if (this->bpp == 32) { + if (visualtype->red_mask == 0x00ff0000) + mode = MODE_32_RGB; + else + mode = MODE_32_BGR; + } else { + if (visualtype->red_mask == 0x00ff0000) + mode = MODE_24_RGB; + else + mode = MODE_24_BGR; + } + break; + case 16: + if (visualtype->red_mask == 0xf800) + mode = MODE_16_RGB; + else + mode = MODE_16_BGR; + break; + case 15: + if (visualtype->red_mask == 0x7C00) + mode = MODE_15_RGB; + else + mode = MODE_15_BGR; + break; + case 8: + if (visualtype->red_mask == 0xE0) + mode = MODE_8_RGB; /* Solaris x86: RGB332 */ + else + mode = MODE_8_BGR; /* XFree86: BGR233 */ + break; + } + break; + + case XCB_VISUAL_CLASS_STATIC_GRAY: + if (this->depth == 8) + mode = MODE_8_GRAY; + break; + + case XCB_VISUAL_CLASS_PSEUDO_COLOR: + case XCB_VISUAL_CLASS_GRAY_SCALE: + if (this->depth <= 8 && ImlibPaletteLUTGet(this)) + mode = MODE_PALETTE; + break; + } + + if (!mode) { + xprintf (this->xine, XINE_VERBOSITY_LOG, + _("video_out_xcbshm: your video mode was not recognized, sorry :-(\n")); + return NULL; + } + + this->yuv2rgb_brightness = 0; + this->yuv2rgb_contrast = 128; + this->yuv2rgb_saturation = 128; + + this->yuv2rgb_factory = yuv2rgb_factory_init (mode, swapped, + this->yuv2rgb_cmap); + this->yuv2rgb_factory->set_csc_levels (this->yuv2rgb_factory, + this->yuv2rgb_brightness, + this->yuv2rgb_contrast, + this->yuv2rgb_saturation); + + this->xoverlay = xcbosd_create(this->xine, this->connection, this->screen, + this->window, XCBOSD_SHAPED); + + return &this->vo_driver; +} + +/* + * class functions + */ + +static char* xshm_get_identifier (video_driver_class_t *this_gen) { + return "XShm"; +} + +static char* xshm_get_description (video_driver_class_t *this_gen) { + return _("xine video output plugin using the MIT X shared memory extension"); +} + +static void xshm_dispose_class (video_driver_class_t *this_gen) { + xshm_class_t *this = (xshm_class_t *) this_gen; + + free (this); +} + +static void *xshm_init_class (xine_t *xine, void *visual_gen) { + xshm_class_t *this = (xshm_class_t *) xine_xmalloc (sizeof (xshm_class_t)); + + this->driver_class.open_plugin = xshm_open_plugin; + this->driver_class.get_identifier = xshm_get_identifier; + this->driver_class.get_description = xshm_get_description; + this->driver_class.dispose = xshm_dispose_class; + this->config = xine->config; + this->xine = xine; + + return this; +} + + +static const vo_info_t vo_info_xshm = { + 6, /* priority */ + XINE_VISUAL_TYPE_XCB /* visual type */ +}; + + +/* + * exported plugin catalog entry + */ + +const plugin_info_t xine_plugin_info[] EXPORTED = { + /* type, API, "name", version, special_info, init_function */ + { PLUGIN_VIDEO_OUT, 21, "xshm", XINE_VERSION_CODE, &vo_info_xshm, xshm_init_class }, + { PLUGIN_NONE, 0, "", 0, NULL, NULL } +}; diff --git a/src/video_out/video_out_xcbxv.c b/src/video_out/video_out_xcbxv.c new file mode 100644 index 000000000..db4be14fa --- /dev/null +++ b/src/video_out/video_out_xcbxv.c @@ -0,0 +1,1622 @@ +/* + * Copyright (C) 2000-2004, 2007 the xine project + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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 + * + * $Id: video_out_xcbxv.c,v 1.6 2007/03/29 18:58:21 dgp85 Exp $ + * + * video_out_xcbxv.c, X11 video extension interface for xine + * + * based on mpeg2dec code from + * Aaron Holtzman <aholtzma@ess.engr.uvic.ca> + * + * Xv image support by Gerd Knorr <kraxel@goldbach.in-berlin.de> + * + * xine-specific code by Guenter Bartsch <bartscgr@studbox.uni-stuttgart.de> + * + * overlay support by James Courtier-Dutton <James@superbug.demon.co.uk> - July 2001 + * X11 unscaled overlay support by Miguel Freitas - Nov 2003 + * ported to xcb by Christoph Pfister - Feb 2007 + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_XV + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <math.h> + +#include <sys/types.h> +#if defined(__FreeBSD__) +#include <machine/param.h> +#endif +#include <sys/ipc.h> +#include <sys/shm.h> +#include <sys/time.h> + +#include <xcb/xv.h> + +#define LOG_MODULE "video_out_xcbxv" +#define LOG_VERBOSE +/* +#define LOG +*/ + +#include "xine.h" +#include "video_out.h" +#include "xine_internal.h" +/* #include "overlay.h" */ +#include "deinterlace.h" +#include "xineutils.h" +#include "vo_scale.h" +#include "xcbosd.h" + +typedef struct xv_driver_s xv_driver_t; + +typedef struct { + int value; + int min; + int max; + xcb_atom_t atom; + + cfg_entry_t *entry; + + xv_driver_t *this; +} xv_property_t; + +typedef struct { + char *name; + int value; +} xv_portattribute_t; + +typedef struct { + vo_frame_t vo_frame; + + int width, height, format; + double ratio; + + uint8_t *image; + xcb_shm_seg_t shmseg; + unsigned int xv_format; + unsigned int xv_data_size; + unsigned int xv_width; + unsigned int xv_height; + unsigned int xv_pitches[3]; + unsigned int xv_offsets[3]; + +} xv_frame_t; + + +struct xv_driver_s { + + vo_driver_t vo_driver; + + config_values_t *config; + + /* xcb / xv related stuff */ + xcb_connection_t *connection; + xcb_screen_t *screen; + xcb_window_t window; + unsigned int xv_format_yv12; + unsigned int xv_format_yuy2; + xcb_gc_t gc; + xcb_xv_port_t xv_port; + + int use_shm; + int use_pitch_alignment; + uint32_t capabilities; + xv_property_t props[VO_NUM_PROPERTIES]; + + xv_frame_t *recent_frames[VO_NUM_RECENT_FRAMES]; + xv_frame_t *cur_frame; + xcbosd *xoverlay; + int ovl_changed; + + /* all scaling information goes here */ + vo_scale_t sc; + + xv_frame_t deinterlace_frame; + int deinterlace_method; + int deinterlace_enabled; + + int use_colorkey; + uint32_t colorkey; + + /* hold initial port attributes values to restore on exit */ + xine_list_t *port_attributes; + + xine_t *xine; + + alphablend_t alphablend_extra_data; + + pthread_mutex_t main_mutex; + +}; + +typedef struct { + video_driver_class_t driver_class; + + config_values_t *config; + xine_t *xine; +} xv_class_t; + +static uint32_t xv_get_capabilities (vo_driver_t *this_gen) { + xv_driver_t *this = (xv_driver_t *) this_gen; + + return this->capabilities; +} + +static void xv_frame_field (vo_frame_t *vo_img, int which_field) { + /* not needed for Xv */ +} + +static void xv_frame_dispose (vo_frame_t *vo_img) { + xv_frame_t *frame = (xv_frame_t *) vo_img ; + xv_driver_t *this = (xv_driver_t *) vo_img->driver; + + if (frame->shmseg) { + pthread_mutex_lock(&this->main_mutex); + xcb_shm_detach(this->connection, frame->shmseg); + frame->shmseg = 0; + pthread_mutex_unlock(&this->main_mutex); + shmdt(frame->image); + } + else + free(frame->image); + + free (frame); +} + +static vo_frame_t *xv_alloc_frame (vo_driver_t *this_gen) { + /* xv_driver_t *this = (xv_driver_t *) this_gen; */ + xv_frame_t *frame ; + + frame = (xv_frame_t *) xine_xmalloc (sizeof (xv_frame_t)); + if (!frame) + return NULL; + + pthread_mutex_init (&frame->vo_frame.mutex, NULL); + + /* + * supply required functions + */ + frame->vo_frame.proc_slice = NULL; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.field = xv_frame_field; + frame->vo_frame.dispose = xv_frame_dispose; + frame->vo_frame.driver = this_gen; + + return (vo_frame_t *) frame; +} + +static void create_ximage(xv_driver_t *this, xv_frame_t *frame, int width, int height, int format) +{ + xcb_xv_query_image_attributes_cookie_t query_attributes_cookie; + xcb_xv_query_image_attributes_reply_t *query_attributes_reply; + + unsigned int length; + + if (width <= 0) + width = 1; + if (height <= 0) + height = 1; + + if (this->use_pitch_alignment) { + width = (width + 7) & ~0x7; + } + + switch (format) { + case XINE_IMGFMT_YV12: + frame->xv_format = this->xv_format_yv12; + break; + case XINE_IMGFMT_YUY2: + frame->xv_format = this->xv_format_yuy2; + break; + default: + xprintf (this->xine, XINE_VERBOSITY_DEBUG, "create_ximage: unknown format %08x\n",format); + _x_abort(); + } + + query_attributes_cookie = xcb_xv_query_image_attributes(this->connection, this->xv_port, frame->xv_format, width, height); + query_attributes_reply = xcb_xv_query_image_attributes_reply(this->connection, query_attributes_cookie, NULL); + + if (query_attributes_reply == NULL) + return; + + frame->xv_data_size = query_attributes_reply->data_size; + frame->xv_width = query_attributes_reply->width; + frame->xv_height = query_attributes_reply->height; + + length = xcb_xv_query_image_attributes_pitches_length(query_attributes_reply); + if (length > 3) + length = 3; + memcpy(frame->xv_pitches, xcb_xv_query_image_attributes_pitches(query_attributes_reply), length * sizeof(frame->xv_pitches[0])); + + length = xcb_xv_query_image_attributes_offsets_length(query_attributes_reply); + if (length > 3) + length = 3; + memcpy(frame->xv_offsets, xcb_xv_query_image_attributes_offsets(query_attributes_reply), length * sizeof(frame->xv_offsets[0])); + + free(query_attributes_reply); + + if (this->use_shm) { + int shmid; + xcb_void_cookie_t shm_attach_cookie; + xcb_generic_error_t *generic_error; + + /* + * try shm + */ + + if (frame->xv_data_size == 0) { + xprintf(this->xine, XINE_VERBOSITY_LOG, + _("video_out_xcbxv: XvShmCreateImage returned a zero size\n" + "video_out_xcbxv: => not using MIT Shared Memory extension.\n")); + goto shm_fail1; + } + + shmid = shmget(IPC_PRIVATE, frame->xv_data_size, IPC_CREAT | 0777); + + if (shmid < 0 ) { + xprintf(this->xine, XINE_VERBOSITY_LOG, + _("video_out_xcbxv: shared memory error in shmget: %s\n" + "video_out_xcbxv: => not using MIT Shared Memory extension.\n"), strerror(errno)); + goto shm_fail1; + } + + frame->image = shmat(shmid, 0, 0); + + if (frame->image == ((void *) -1)) { + xprintf(this->xine, XINE_VERBOSITY_DEBUG, + "video_out_xcbxv: shared memory error (address error)\n"); + goto shm_fail2; + } + + frame->shmseg = xcb_generate_id(this->connection); + shm_attach_cookie = xcb_shm_attach_checked(this->connection, frame->shmseg, shmid, 0); + generic_error = xcb_request_check(this->connection, shm_attach_cookie); + + if (generic_error != NULL) { + xprintf(this->xine, XINE_VERBOSITY_LOG, + _("video_out_xcbxv: x11 error during shared memory XImage creation\n" + "video_out_xcbxv: => not using MIT Shared Memory extension.\n")); + free(generic_error); + goto shm_fail3; + } + + /* + * Now that the Xserver has learned about and attached to the + * shared memory segment, delete it. It's actually deleted by + * the kernel when all users of that segment have detached from + * it. Gives an automatic shared memory cleanup in case we crash. + */ + + shmctl(shmid, IPC_RMID, 0); + + return; + + shm_fail3: + frame->shmseg = 0; + shmdt(frame->image); + shm_fail2: + shmctl(shmid, IPC_RMID, 0); + shm_fail1: + this->use_shm = 0; + } + + /* + * fall back to plain Xv if necessary + */ + + switch (format) { + case XINE_IMGFMT_YV12: + frame->image = malloc(width * height * 3/2); + break; + case XINE_IMGFMT_YUY2: + frame->image = malloc(width * height * 2); + break; + default: + xprintf (this->xine, XINE_VERBOSITY_DEBUG, "create_ximage: unknown format %08x\n",format); + _x_abort(); + } +} + +static void dispose_ximage(xv_driver_t *this, xv_frame_t *frame) +{ + if (frame->shmseg) { + xcb_shm_detach(this->connection, frame->shmseg); + frame->shmseg = 0; + shmdt(frame->image); + } else + free(frame->image); + frame->image = NULL; +} + +static void xv_update_frame_format (vo_driver_t *this_gen, + vo_frame_t *frame_gen, + uint32_t width, uint32_t height, + double ratio, int format, int flags) { + xv_driver_t *this = (xv_driver_t *) this_gen; + xv_frame_t *frame = (xv_frame_t *) frame_gen; + + if (this->use_pitch_alignment) { + width = (width + 7) & ~0x7; + } + + if ((frame->width != width) + || (frame->height != height) + || (frame->format != format)) { + + /* printf ("video_out_xcbxv: updating frame to %d x %d (ratio=%d, format=%08x)\n",width,height,ratio_code,format); */ + + pthread_mutex_lock(&this->main_mutex); + + /* + * (re-) allocate xvimage + */ + + if (frame->image) + dispose_ximage(this, frame); + + create_ximage(this, frame, width, height, format); + + if(format == XINE_IMGFMT_YUY2) { + frame->vo_frame.pitches[0] = frame->xv_pitches[0]; + frame->vo_frame.base[0] = frame->image + frame->xv_offsets[0]; + } + else { + frame->vo_frame.pitches[0] = frame->xv_pitches[0]; + frame->vo_frame.pitches[1] = frame->xv_pitches[2]; + frame->vo_frame.pitches[2] = frame->xv_pitches[1]; + frame->vo_frame.base[0] = frame->image + frame->xv_offsets[0]; + frame->vo_frame.base[1] = frame->image + frame->xv_offsets[2]; + frame->vo_frame.base[2] = frame->image + frame->xv_offsets[1]; + } + + frame->width = width; + frame->height = height; + frame->format = format; + + pthread_mutex_unlock(&this->main_mutex); + } + + frame->ratio = ratio; +} + +#define DEINTERLACE_CROMA +static void xv_deinterlace_frame (xv_driver_t *this) { + uint8_t *recent_bitmaps[VO_NUM_RECENT_FRAMES]; + xv_frame_t *frame = this->recent_frames[0]; + int i; + int xvscaling; + + xvscaling = (this->deinterlace_method == DEINTERLACE_ONEFIELDXV) ? 2 : 1; + + if (!this->deinterlace_frame.image + || (frame->width != this->deinterlace_frame.width) + || (frame->height != this->deinterlace_frame.height ) + || (frame->format != this->deinterlace_frame.format) + || (frame->ratio != this->deinterlace_frame.ratio)) { + pthread_mutex_lock(&this->main_mutex); + + if(this->deinterlace_frame.image) + dispose_ximage(this, &this->deinterlace_frame); + + create_ximage(this, &this->deinterlace_frame, frame->width, frame->height / xvscaling, frame->format); + this->deinterlace_frame.width = frame->width; + this->deinterlace_frame.height = frame->height; + this->deinterlace_frame.format = frame->format; + this->deinterlace_frame.ratio = frame->ratio; + + pthread_mutex_unlock(&this->main_mutex); + } + + + if ( this->deinterlace_method != DEINTERLACE_ONEFIELDXV ) { +#ifdef DEINTERLACE_CROMA + + /* I don't think this is the right way to do it (deinterlacing croma by croma info). + DScaler deinterlaces croma together with luma, but it's easier for them because + they have that components 1:1 at the same table. + */ + for( i = 0; i < VO_NUM_RECENT_FRAMES; i++ ) + if( this->recent_frames[i] && this->recent_frames[i]->width == frame->width && + this->recent_frames[i]->height == frame->height ) + recent_bitmaps[i] = this->recent_frames[i]->image + frame->width*frame->height; + else + recent_bitmaps[i] = NULL; + + deinterlace_yuv( this->deinterlace_frame.image+frame->width*frame->height, + recent_bitmaps, frame->width/2, frame->height/2, this->deinterlace_method ); + for( i = 0; i < VO_NUM_RECENT_FRAMES; i++ ) + if( this->recent_frames[i] && this->recent_frames[i]->width == frame->width && + this->recent_frames[i]->height == frame->height ) + recent_bitmaps[i] = this->recent_frames[i]->image + frame->width*frame->height*5/4; + else + recent_bitmaps[i] = NULL; + + deinterlace_yuv( this->deinterlace_frame.image+frame->width*frame->height*5/4, + recent_bitmaps, frame->width/2, frame->height/2, this->deinterlace_method ); + +#else + + /* know bug: we are not deinterlacing Cb and Cr */ + xine_fast_memcpy(this->deinterlace_frame.image + frame->width*frame->height, + frame->image + frame->width*frame->height, + frame->width*frame->height*1/2); + +#endif + + for( i = 0; i < VO_NUM_RECENT_FRAMES; i++ ) + if( this->recent_frames[i] && this->recent_frames[i]->width == frame->width && + this->recent_frames[i]->height == frame->height ) + recent_bitmaps[i] = this->recent_frames[i]->image; + else + recent_bitmaps[i] = NULL; + + deinterlace_yuv( this->deinterlace_frame.image, recent_bitmaps, + frame->width, frame->height, this->deinterlace_method ); + } + else { + /* + dirty and cheap deinterlace method: we give half of the lines to xv + driver and let it scale for us. + note that memcpy's below don't seem to impact much on performance, + specially when fast memcpys are available. + */ + uint8_t *dst, *src; + + dst = this->deinterlace_frame.image; + src = this->recent_frames[0]->image; + for( i = 0; i < frame->height; i+=2 ) { + xine_fast_memcpy(dst,src,frame->width); + dst += frame->width; + src += 2 * frame->width; + } + + dst = this->deinterlace_frame.image + frame->width * frame->height / 2; + src = this->recent_frames[0]->image + frame->width * frame->height; + for( i = 0; i < frame->height; i+=4 ) { + xine_fast_memcpy(dst,src,frame->width / 2); + dst += frame->width / 2; + src += frame->width; + } + + dst = this->deinterlace_frame.image + frame->width * frame->height * 5 / 8; + src = this->recent_frames[0]->image + frame->width * frame->height * 5 / 4; + for( i = 0; i < frame->height; i+=4 ) { + xine_fast_memcpy(dst,src,frame->width / 2); + dst += frame->width / 2; + src += frame->width; + } + } + + this->cur_frame = &this->deinterlace_frame; +} + +static void xv_clean_output_area (xv_driver_t *this) { + int i; + xcb_rectangle_t rects[4]; + int rects_count = 0; + + pthread_mutex_lock(&this->main_mutex); + + xcb_change_gc(this->connection, this->gc, XCB_GC_FOREGROUND, &this->screen->black_pixel); + + for( i = 0; i < 4; i++ ) { + if( this->sc.border[i].w && this->sc.border[i].h ) { + rects[rects_count].x = this->sc.border[i].x; + rects[rects_count].y = this->sc.border[i].y; + rects[rects_count].width = this->sc.border[i].w; + rects[rects_count].height = this->sc.border[i].h; + rects_count++; + } + } + + if (rects_count > 0) + xcb_poly_fill_rectangle(this->connection, this->window, this->gc, rects_count, rects); + + if (this->use_colorkey) { + xcb_change_gc(this->connection, this->gc, XCB_GC_FOREGROUND, &this->colorkey); + xcb_rectangle_t rectangle = { this->sc.output_xoffset, this->sc.output_yoffset, + this->sc.output_width, this->sc.output_height }; + xcb_poly_fill_rectangle(this->connection, this->window, this->gc, 1, &rectangle); + } + + if (this->xoverlay) { + xcbosd_resize(this->xoverlay, this->sc.gui_width, this->sc.gui_height); + this->ovl_changed = 1; + } + + pthread_mutex_unlock(&this->main_mutex); +} + +/* + * convert delivered height/width to ideal width/height + * taking into account aspect ratio and zoom factor + */ + +static void xv_compute_ideal_size (xv_driver_t *this) { + _x_vo_scale_compute_ideal_size( &this->sc ); +} + + +/* + * make ideal width/height "fit" into the gui + */ + +static void xv_compute_output_size (xv_driver_t *this) { + + _x_vo_scale_compute_output_size( &this->sc ); + + /* onefield_xv divide by 2 the number of lines */ + if (this->deinterlace_enabled + && (this->deinterlace_method == DEINTERLACE_ONEFIELDXV) + && this->cur_frame && (this->cur_frame->format == XINE_IMGFMT_YV12)) { + this->sc.displayed_height = this->sc.displayed_height / 2 - 1; + this->sc.displayed_yoffset = this->sc.displayed_yoffset / 2; + } +} + +static void xv_overlay_begin (vo_driver_t *this_gen, + vo_frame_t *frame_gen, int changed) { + xv_driver_t *this = (xv_driver_t *) this_gen; + + this->ovl_changed += changed; + + if( this->ovl_changed && this->xoverlay ) { + pthread_mutex_lock(&this->main_mutex); + xcbosd_clear(this->xoverlay); + pthread_mutex_unlock(&this->main_mutex); + } + + this->alphablend_extra_data.offset_x = frame_gen->overlay_offset_x; + this->alphablend_extra_data.offset_y = frame_gen->overlay_offset_y; +} + +static void xv_overlay_end (vo_driver_t *this_gen, vo_frame_t *vo_img) { + xv_driver_t *this = (xv_driver_t *) this_gen; + + if( this->ovl_changed && this->xoverlay ) { + pthread_mutex_lock(&this->main_mutex); + xcbosd_expose(this->xoverlay); + pthread_mutex_unlock(&this->main_mutex); + } + + this->ovl_changed = 0; +} + +static void xv_overlay_blend (vo_driver_t *this_gen, + vo_frame_t *frame_gen, vo_overlay_t *overlay) { + xv_driver_t *this = (xv_driver_t *) this_gen; + xv_frame_t *frame = (xv_frame_t *) frame_gen; + + if (overlay->rle) { + if( overlay->unscaled ) { + if( this->ovl_changed && this->xoverlay ) { + pthread_mutex_lock(&this->main_mutex); + xcbosd_blend(this->xoverlay, overlay); + pthread_mutex_unlock(&this->main_mutex); + } + } else { + if (frame->format == XINE_IMGFMT_YV12) + _x_blend_yuv(frame->vo_frame.base, overlay, + frame->width, frame->height, frame->vo_frame.pitches, + &this->alphablend_extra_data); + else + _x_blend_yuy2(frame->vo_frame.base[0], overlay, + frame->width, frame->height, frame->vo_frame.pitches[0], + &this->alphablend_extra_data); + } + } +} + +static void xv_add_recent_frame (xv_driver_t *this, xv_frame_t *frame) { + int i; + + i = VO_NUM_RECENT_FRAMES-1; + if( this->recent_frames[i] ) + this->recent_frames[i]->vo_frame.free + (&this->recent_frames[i]->vo_frame); + + for( ; i ; i-- ) + this->recent_frames[i] = this->recent_frames[i-1]; + + this->recent_frames[0] = frame; +} + +/* currently not used - we could have a method to call this from video loop */ +#if 0 +static void xv_flush_recent_frames (xv_driver_t *this) { + int i; + + for( i=0; i < VO_NUM_RECENT_FRAMES; i++ ) { + if( this->recent_frames[i] ) + this->recent_frames[i]->vo_frame.free + (&this->recent_frames[i]->vo_frame); + this->recent_frames[i] = NULL; + } +} +#endif + +static int xv_redraw_needed (vo_driver_t *this_gen) { + xv_driver_t *this = (xv_driver_t *) this_gen; + int ret = 0; + + if( this->cur_frame ) { + + this->sc.delivered_height = this->cur_frame->height; + this->sc.delivered_width = this->cur_frame->width; + this->sc.delivered_ratio = this->cur_frame->ratio; + + this->sc.crop_left = this->cur_frame->vo_frame.crop_left; + this->sc.crop_right = this->cur_frame->vo_frame.crop_right; + this->sc.crop_top = this->cur_frame->vo_frame.crop_top; + this->sc.crop_bottom = this->cur_frame->vo_frame.crop_bottom; + + xv_compute_ideal_size(this); + + if( _x_vo_scale_redraw_needed( &this->sc ) ) { + + xv_compute_output_size (this); + + xv_clean_output_area (this); + + ret = 1; + } + } + else + ret = 1; + + return ret; +} + +static void xv_display_frame (vo_driver_t *this_gen, vo_frame_t *frame_gen) { + xv_driver_t *this = (xv_driver_t *) this_gen; + xv_frame_t *frame = (xv_frame_t *) frame_gen; + /* + printf ("video_out_xcbxv: xv_display_frame...\n"); + */ + + /* + * queue frames (deinterlacing) + * free old frames + */ + + xv_add_recent_frame (this, frame); /* deinterlacing */ + + this->cur_frame = frame; + + /* + * let's see if this frame is different in size / aspect + * ratio from the previous one + */ + if ( (frame->width != this->sc.delivered_width) + || (frame->height != this->sc.delivered_height) + || (frame->ratio != this->sc.delivered_ratio) ) { + lprintf("frame format changed\n"); + this->sc.force_redraw = 1; /* trigger re-calc of output size */ + } + + /* + * deinterlace frame if necessary + * (currently only working for YUV images) + */ + + if (this->deinterlace_enabled && this->deinterlace_method + && frame->format == XINE_IMGFMT_YV12 + && (deinterlace_yuv_supported( this->deinterlace_method ) == 1 + || this->deinterlace_method == DEINTERLACE_ONEFIELDXV)) + xv_deinterlace_frame (this); + + /* + * tell gui that we are about to display a frame, + * ask for offset and output size + */ + xv_redraw_needed (this_gen); + + pthread_mutex_lock(&this->main_mutex); + + if (this->cur_frame->shmseg) { + xcb_xv_shm_put_image(this->connection, this->xv_port, this->window, this->gc, + this->cur_frame->shmseg, this->cur_frame->xv_format, 0, + this->sc.displayed_xoffset, this->sc.displayed_yoffset, + this->sc.displayed_width, this->sc.displayed_height, + this->sc.output_xoffset, this->sc.output_yoffset, + this->sc.output_width, this->sc.output_height, + this->cur_frame->xv_width, this->cur_frame->xv_height, 0); + + } else { + xcb_xv_put_image(this->connection, this->xv_port, this->window, this->gc, + this->cur_frame->xv_format, + this->sc.displayed_xoffset, this->sc.displayed_yoffset, + this->sc.displayed_width, this->sc.displayed_height, + this->sc.output_xoffset, this->sc.output_yoffset, + this->sc.output_width, this->sc.output_height, + this->cur_frame->xv_width, this->cur_frame->xv_height, + this->cur_frame->xv_data_size, this->cur_frame->image); + } + + xcb_flush(this->connection); + + pthread_mutex_unlock(&this->main_mutex); + + /* + printf ("video_out_xcbxv: xv_display_frame... done\n"); + */ +} + +static int xv_get_property (vo_driver_t *this_gen, int property) { + xv_driver_t *this = (xv_driver_t *) this_gen; + + switch (property) { + case VO_PROP_WINDOW_WIDTH: + this->props[property].value = this->sc.gui_width; + break; + case VO_PROP_WINDOW_HEIGHT: + this->props[property].value = this->sc.gui_height; + break; + } + + lprintf("video_out_xcbxv: property #%d = %d\n", property, this->props[property].value); + + return this->props[property].value; +} + +static void xv_property_callback (void *property_gen, xine_cfg_entry_t *entry) { + xv_property_t *property = (xv_property_t *) property_gen; + xv_driver_t *this = property->this; + + pthread_mutex_lock(&this->main_mutex); + xcb_xv_set_port_attribute(this->connection, this->xv_port, + property->atom, entry->num_value); + pthread_mutex_unlock(&this->main_mutex); +} + +static int xv_set_property (vo_driver_t *this_gen, + int property, int value) { + xv_driver_t *this = (xv_driver_t *) this_gen; + + if (this->props[property].atom != XCB_NONE) { + xcb_xv_get_port_attribute_cookie_t get_attribute_cookie; + xcb_xv_get_port_attribute_reply_t *get_attribute_reply; + + /* value is out of bound */ + if((value < this->props[property].min) || (value > this->props[property].max)) + value = (this->props[property].min + this->props[property].max) >> 1; + + pthread_mutex_lock(&this->main_mutex); + xcb_xv_set_port_attribute(this->connection, this->xv_port, + this->props[property].atom, value); + + get_attribute_cookie = xcb_xv_get_port_attribute(this->connection, this->xv_port, this->props[property].atom); + get_attribute_reply = xcb_xv_get_port_attribute_reply(this->connection, get_attribute_cookie, NULL); + this->props[property].value = get_attribute_reply->value; + free(get_attribute_reply); + + pthread_mutex_unlock(&this->main_mutex); + + if (this->props[property].entry) + this->props[property].entry->num_value = this->props[property].value; + + return this->props[property].value; + } + else { + switch (property) { + + case VO_PROP_INTERLACED: + this->props[property].value = value; + xprintf(this->xine, XINE_VERBOSITY_LOG, + "video_out_xcbxv: VO_PROP_INTERLACED(%d)\n", this->props[property].value); + this->deinterlace_enabled = value; + if (this->deinterlace_method == DEINTERLACE_ONEFIELDXV) { + xv_compute_ideal_size (this); + xv_compute_output_size (this); + } + break; + + case VO_PROP_ASPECT_RATIO: + if (value>=XINE_VO_ASPECT_NUM_RATIOS) + value = XINE_VO_ASPECT_AUTO; + + this->props[property].value = value; + xprintf(this->xine, XINE_VERBOSITY_LOG, + "video_out_xcbxv: VO_PROP_ASPECT_RATIO(%d)\n", this->props[property].value); + this->sc.user_ratio = value; + + xv_compute_ideal_size (this); + + this->sc.force_redraw = 1; /* trigger re-calc of output size */ + break; + + case VO_PROP_ZOOM_X: + if ((value >= XINE_VO_ZOOM_MIN) && (value <= XINE_VO_ZOOM_MAX)) { + this->props[property].value = value; + xprintf(this->xine, XINE_VERBOSITY_LOG, + "video_out_xcbxv: VO_PROP_ZOOM_X = %d\n", this->props[property].value); + + this->sc.zoom_factor_x = (double)value / (double)XINE_VO_ZOOM_STEP; + + xv_compute_ideal_size (this); + + this->sc.force_redraw = 1; /* trigger re-calc of output size */ + } + break; + + case VO_PROP_ZOOM_Y: + if ((value >= XINE_VO_ZOOM_MIN) && (value <= XINE_VO_ZOOM_MAX)) { + this->props[property].value = value; + xprintf(this->xine, XINE_VERBOSITY_LOG, + "video_out_xcbxv: VO_PROP_ZOOM_Y = %d\n", this->props[property].value); + + this->sc.zoom_factor_y = (double)value / (double)XINE_VO_ZOOM_STEP; + + xv_compute_ideal_size (this); + + this->sc.force_redraw = 1; /* trigger re-calc of output size */ + } + break; + } + } + + return value; +} + +static void xv_get_property_min_max (vo_driver_t *this_gen, + int property, int *min, int *max) { + xv_driver_t *this = (xv_driver_t *) this_gen; + + *min = this->props[property].min; + *max = this->props[property].max; +} + +static int xv_gui_data_exchange (vo_driver_t *this_gen, + int data_type, void *data) { + xv_driver_t *this = (xv_driver_t *) this_gen; + + switch (data_type) { +#ifndef XINE_DISABLE_DEPRECATED_FEATURES + case XINE_GUI_SEND_COMPLETION_EVENT: + break; +#endif + + case XINE_GUI_SEND_EXPOSE_EVENT: { + /* XExposeEvent * xev = (XExposeEvent *) data; */ + + if (this->cur_frame) { + int i; + xcb_rectangle_t rects[4]; + int rects_count = 0; + + pthread_mutex_lock(&this->main_mutex); + + if (this->cur_frame->shmseg) { + xcb_xv_shm_put_image(this->connection, this->xv_port, this->window, this->gc, + this->cur_frame->shmseg, this->cur_frame->xv_format, 0, + this->sc.displayed_xoffset, this->sc.displayed_yoffset, + this->sc.displayed_width, this->sc.displayed_height, + this->sc.output_xoffset, this->sc.output_yoffset, + this->sc.output_width, this->sc.output_height, + this->cur_frame->xv_width, this->cur_frame->xv_height, 0); + } else { + xcb_xv_put_image(this->connection, this->xv_port, this->window, this->gc, + this->cur_frame->xv_format, + this->sc.displayed_xoffset, this->sc.displayed_yoffset, + this->sc.displayed_width, this->sc.displayed_height, + this->sc.output_xoffset, this->sc.output_yoffset, + this->sc.output_width, this->sc.output_height, + this->cur_frame->xv_width, this->cur_frame->xv_height, + this->cur_frame->xv_data_size, this->cur_frame->image); + } + + xcb_change_gc(this->connection, this->gc, XCB_GC_FOREGROUND, &this->screen->black_pixel); + + for( i = 0; i < 4; i++ ) { + if( this->sc.border[i].w && this->sc.border[i].h ) { + rects[rects_count].x = this->sc.border[i].x; + rects[rects_count].y = this->sc.border[i].y; + rects[rects_count].width = this->sc.border[i].w; + rects[rects_count].height = this->sc.border[i].h; + rects_count++; + } + } + + if (rects_count > 0) + xcb_poly_fill_rectangle(this->connection, this->window, this->gc, rects_count, rects); + + if(this->xoverlay) + xcbosd_expose(this->xoverlay); + + xcb_flush(this->connection); + pthread_mutex_unlock(&this->main_mutex); + } + } + break; + + case XINE_GUI_SEND_DRAWABLE_CHANGED: + pthread_mutex_lock(&this->main_mutex); + this->window = (xcb_window_t) data; + xcb_free_gc(this->connection, this->gc); + this->gc = xcb_generate_id(this->connection); + xcb_create_gc(this->connection, this->gc, this->window, 0, NULL); + if(this->xoverlay) + xcbosd_drawable_changed(this->xoverlay, this->window); + this->ovl_changed = 1; + pthread_mutex_unlock(&this->main_mutex); + this->sc.force_redraw = 1; + break; + + case XINE_GUI_SEND_TRANSLATE_GUI_TO_VIDEO: + { + int x1, y1, x2, y2; + x11_rectangle_t *rect = data; + + _x_vo_scale_translate_gui2video(&this->sc, rect->x, rect->y, + &x1, &y1); + _x_vo_scale_translate_gui2video(&this->sc, rect->x + rect->w, rect->y + rect->h, + &x2, &y2); + rect->x = x1; + rect->y = y1; + rect->w = x2-x1; + rect->h = y2-y1; + + /* onefield_xv divide by 2 the number of lines */ + if (this->deinterlace_enabled + && (this->deinterlace_method == DEINTERLACE_ONEFIELDXV) + && (this->cur_frame->format == XINE_IMGFMT_YV12)) { + rect->y = rect->y * 2; + rect->h = rect->h * 2; + } + + } + break; + + default: + return -1; + } + + return 0; +} + +static void xv_store_port_attribute(xv_driver_t *this, char *name) { + xv_portattribute_t *attr; + + xcb_intern_atom_cookie_t atom_cookie; + xcb_intern_atom_reply_t *atom_reply; + + xcb_xv_get_port_attribute_cookie_t get_attribute_cookie; + xcb_xv_get_port_attribute_reply_t *get_attribute_reply; + + attr = (xv_portattribute_t *)malloc( sizeof(xv_portattribute_t) ); + attr->name = strdup(name); + + pthread_mutex_lock(&this->main_mutex); + atom_cookie = xcb_intern_atom(this->connection, 0, strlen(attr->name), attr->name); + atom_reply = xcb_intern_atom_reply(this->connection, atom_cookie, NULL); + get_attribute_cookie = xcb_xv_get_port_attribute(this->connection, this->xv_port, atom_reply->atom); + get_attribute_reply = xcb_xv_get_port_attribute_reply(this->connection, get_attribute_cookie, NULL); + attr->value = get_attribute_reply->value; + free(atom_reply); + free(get_attribute_reply); + pthread_mutex_unlock(&this->main_mutex); + + xine_list_push_back (this->port_attributes, attr); +} + +static void xv_restore_port_attributes(xv_driver_t *this) { + xine_list_iterator_t ite; + + xcb_intern_atom_cookie_t atom_cookie; + xcb_intern_atom_reply_t *atom_reply; + + while ((ite = xine_list_front(this->port_attributes)) != NULL) { + xv_portattribute_t *attr = xine_list_get_value(this->port_attributes, ite); + xine_list_remove (this->port_attributes, ite); + + pthread_mutex_lock(&this->main_mutex); + atom_cookie = xcb_intern_atom(this->connection, 0, strlen(attr->name), attr->name); + atom_reply = xcb_intern_atom_reply(this->connection, atom_cookie, NULL); + xcb_xv_set_port_attribute(this->connection, this->xv_port, atom_reply->atom, attr->value); + free(atom_reply); + pthread_mutex_unlock(&this->main_mutex); + + free( attr->name ); + free( attr ); + } + + pthread_mutex_lock(&this->main_mutex); + xcb_flush(this->connection); + pthread_mutex_unlock(&this->main_mutex); + + xine_list_delete( this->port_attributes ); +} + +static void xv_dispose (vo_driver_t *this_gen) { + xv_driver_t *this = (xv_driver_t *) this_gen; + int i; + + /* restore port attributes to their initial values */ + xv_restore_port_attributes(this); + + if (this->deinterlace_frame.image) { + pthread_mutex_lock(&this->main_mutex); + dispose_ximage(this, &this->deinterlace_frame); + pthread_mutex_unlock(&this->main_mutex); + } + + pthread_mutex_lock(&this->main_mutex); + xcb_xv_ungrab_port(this->connection, this->xv_port, XCB_CURRENT_TIME); + xcb_free_gc(this->connection, this->gc); + pthread_mutex_unlock(&this->main_mutex); + + for( i=0; i < VO_NUM_RECENT_FRAMES; i++ ) { + if( this->recent_frames[i] ) + this->recent_frames[i]->vo_frame.dispose + (&this->recent_frames[i]->vo_frame); + this->recent_frames[i] = NULL; + } + + if( this->xoverlay ) { + pthread_mutex_lock(&this->main_mutex); + xcbosd_destroy(this->xoverlay); + pthread_mutex_unlock(&this->main_mutex); + } + + pthread_mutex_destroy(&this->main_mutex); + + _x_alphablend_free(&this->alphablend_extra_data); + + free (this); +} + +static int xv_check_yv12(xcb_connection_t *connection, xcb_xv_port_t port) { + xcb_xv_list_image_formats_cookie_t list_formats_cookie; + xcb_xv_list_image_formats_reply_t *list_formats_reply; + + xcb_xv_image_format_info_iterator_t format_it; + + list_formats_cookie = xcb_xv_list_image_formats(connection, port); + list_formats_reply = xcb_xv_list_image_formats_reply(connection, list_formats_cookie, NULL); + format_it = xcb_xv_list_image_formats_format_iterator(list_formats_reply); + + for (; format_it.rem; xcb_xv_image_format_info_next(&format_it)) + if ((format_it.data->id == XINE_IMGFMT_YV12) && + (! (strcmp ((char *) format_it.data->guid, "YV12")))) { + free(list_formats_reply); + return 0; + } + + free(list_formats_reply); + return 1; +} + +static void xv_check_capability (xv_driver_t *this, + int property, xcb_xv_attribute_info_t *attr, + int base_id, + char *config_name, + char *config_desc, + char *config_help) { + int int_default; + cfg_entry_t *entry; + char *str_prop = xcb_xv_attribute_info_name(attr); + + xcb_xv_get_port_attribute_cookie_t get_attribute_cookie; + xcb_xv_get_port_attribute_reply_t *get_attribute_reply; + + xcb_intern_atom_cookie_t atom_cookie; + xcb_intern_atom_reply_t *atom_reply; + + /* + * some Xv drivers (Gatos ATI) report some ~0 as max values, this is confusing. + */ + if (VO_PROP_COLORKEY && (attr->max == ~0)) + attr->max = 2147483615; + + atom_cookie = xcb_intern_atom(this->connection, 0, strlen(str_prop), str_prop); + atom_reply = xcb_intern_atom_reply(this->connection, atom_cookie, NULL); + + this->props[property].min = attr->min; + this->props[property].max = attr->max; + this->props[property].atom = atom_reply->atom; + + free(atom_reply); + + get_attribute_cookie = xcb_xv_get_port_attribute(this->connection, this->xv_port, this->props[property].atom); + get_attribute_reply = xcb_xv_get_port_attribute_reply(this->connection, get_attribute_cookie, NULL); + + int_default = get_attribute_reply->value; + + free(get_attribute_reply); + + xprintf(this->xine, XINE_VERBOSITY_DEBUG, + "video_out_xcbxv: port attribute %s (%d) value is %d\n", str_prop, property, int_default); + + /* disable autopaint colorkey by default */ + /* might be overridden using config entry */ + if(strcmp(str_prop, "XV_AUTOPAINT_COLORKEY") == 0) + int_default = 0; + + if (config_name) { + /* is this a boolean property ? */ + if ((attr->min == 0) && (attr->max == 1)) { + this->config->register_bool (this->config, config_name, int_default, + config_desc, + config_help, 20, xv_property_callback, &this->props[property]); + + } else { + this->config->register_range (this->config, config_name, int_default, + this->props[property].min, this->props[property].max, + config_desc, + config_help, 20, xv_property_callback, &this->props[property]); + } + + entry = this->config->lookup_entry (this->config, config_name); + + if((entry->num_value < this->props[property].min) || + (entry->num_value > this->props[property].max)) { + + this->config->update_num(this->config, config_name, + ((this->props[property].min + this->props[property].max) >> 1)); + + entry = this->config->lookup_entry (this->config, config_name); + } + + this->props[property].entry = entry; + + xv_set_property (&this->vo_driver, property, entry->num_value); + + if (strcmp(str_prop, "XV_COLORKEY") == 0) { + this->use_colorkey |= 1; + this->colorkey = entry->num_value; + } else if(strcmp(str_prop, "XV_AUTOPAINT_COLORKEY") == 0) { + if(entry->num_value==1) + this->use_colorkey |= 2; /* colorkey is autopainted */ + } + } else + this->props[property].value = int_default; + +} + +static void xv_update_deinterlace(void *this_gen, xine_cfg_entry_t *entry) { + xv_driver_t *this = (xv_driver_t *) this_gen; + + this->deinterlace_method = entry->num_value; +} + +static void xv_update_XV_FILTER(void *this_gen, xine_cfg_entry_t *entry) { + xv_driver_t *this = (xv_driver_t *) this_gen; + int xv_filter; + + xcb_intern_atom_cookie_t atom_cookie; + xcb_intern_atom_reply_t *atom_reply; + + xv_filter = entry->num_value; + + pthread_mutex_lock(&this->main_mutex); + atom_cookie = xcb_intern_atom(this->connection, 0, sizeof("XV_FILTER"), "XV_FILTER"); + atom_reply = xcb_intern_atom_reply(this->connection, atom_cookie, NULL); + xcb_xv_set_port_attribute(this->connection, this->xv_port, atom_reply->atom, xv_filter); + free(atom_reply); + pthread_mutex_unlock(&this->main_mutex); + + xprintf(this->xine, XINE_VERBOSITY_DEBUG, + "video_out_xcbxv: bilinear scaling mode (XV_FILTER) = %d\n",xv_filter); +} + +static void xv_update_XV_DOUBLE_BUFFER(void *this_gen, xine_cfg_entry_t *entry) { + xv_driver_t *this = (xv_driver_t *) this_gen; + int xv_double_buffer; + + xcb_intern_atom_cookie_t atom_cookie; + xcb_intern_atom_reply_t *atom_reply; + + xv_double_buffer = entry->num_value; + + pthread_mutex_lock(&this->main_mutex); + atom_cookie = xcb_intern_atom(this->connection, 0, sizeof("XV_DOUBLE_BUFFER"), "XV_DOUBLE_BUFFER"); + atom_reply = xcb_intern_atom_reply(this->connection, atom_cookie, NULL); + xcb_xv_set_port_attribute(this->connection, this->xv_port, atom_reply->atom, xv_double_buffer); + free(atom_reply); + pthread_mutex_unlock(&this->main_mutex); + + xprintf(this->xine, XINE_VERBOSITY_DEBUG, + "video_out_xcbxv: double buffering mode = %d\n", xv_double_buffer); +} + +static void xv_update_xv_pitch_alignment(void *this_gen, xine_cfg_entry_t *entry) { + xv_driver_t *this = (xv_driver_t *) this_gen; + + this->use_pitch_alignment = entry->num_value; +} + +static vo_driver_t *open_plugin(video_driver_class_t *class_gen, const void *visual_gen) { + xv_class_t *class = (xv_class_t *) class_gen; + config_values_t *config = class->config; + xv_driver_t *this; + int i; + xcb_visual_t *visual = (xcb_visual_t *) visual_gen; + unsigned int j; + xcb_xv_port_t xv_port; + + const xcb_query_extension_reply_t *query_extension_reply; + + xcb_xv_query_adaptors_cookie_t query_adaptors_cookie; + xcb_xv_query_adaptors_reply_t *query_adaptors_reply; + xcb_xv_query_port_attributes_cookie_t query_attributes_cookie; + xcb_xv_query_port_attributes_reply_t *query_attributes_reply; + xcb_xv_list_image_formats_cookie_t list_formats_cookie; + xcb_xv_list_image_formats_reply_t *list_formats_reply; + + xcb_xv_adaptor_info_iterator_t adaptor_it; + xcb_xv_image_format_info_iterator_t format_it; + + this = (xv_driver_t *) xine_xmalloc (sizeof (xv_driver_t)); + if (!this) + return NULL; + + pthread_mutex_init(&this->main_mutex, NULL); + + _x_alphablend_init(&this->alphablend_extra_data, class->xine); + + this->connection = visual->connection; + this->screen = visual->screen; + this->window = visual->window; + this->config = config; + + /* + * check for Xvideo support + */ + + query_extension_reply = xcb_get_extension_data(this->connection, &xcb_xv_id); + if (!query_extension_reply || !query_extension_reply->present) { + xprintf (class->xine, XINE_VERBOSITY_LOG, _("video_out_xcbxv: Xv extension not present.\n")); + return NULL; + } + + /* + * check adaptors, search for one that supports (at least) yuv12 + */ + + query_adaptors_cookie = xcb_xv_query_adaptors(this->connection, this->window); + query_adaptors_reply = xcb_xv_query_adaptors_reply(this->connection, query_adaptors_cookie, NULL); + + if (!query_adaptors_reply) { + xprintf(class->xine, XINE_VERBOSITY_DEBUG, "video_out_xcbxv: XvQueryAdaptors failed.\n"); + return NULL; + } + + adaptor_it = xcb_xv_query_adaptors_info_iterator(query_adaptors_reply); + + xv_port = 0; + + for (; adaptor_it.rem && !xv_port; xcb_xv_adaptor_info_next(&adaptor_it)) { + + if (adaptor_it.data->type & XCB_XV_TYPE_IMAGE_MASK) { + + for (j = 0; j < adaptor_it.data->num_ports; j++) + if (!xv_check_yv12(this->connection, adaptor_it.data->base_id + j)) { + xcb_xv_grab_port_cookie_t grab_port_cookie; + xcb_xv_grab_port_reply_t *grab_port_reply; + grab_port_cookie = xcb_xv_grab_port(this->connection, adaptor_it.data->base_id + j, XCB_CURRENT_TIME); + grab_port_reply = xcb_xv_grab_port_reply(this->connection, grab_port_cookie, NULL); + if (grab_port_reply && (grab_port_reply->result == XCB_GRAB_STATUS_SUCCESS)) { + free(grab_port_reply); + xv_port = adaptor_it.data->base_id + j; + break; + } + free(grab_port_reply); + } + } + } + + if (!xv_port) { + xprintf(class->xine, XINE_VERBOSITY_LOG, + _("video_out_xcbxv: Xv extension is present but I couldn't find a usable yuv12 port.\n" + " Looks like your graphics hardware driver doesn't support Xv?!\n")); + + /* XvFreeAdaptorInfo (adaptor_info); this crashed on me (gb)*/ + return NULL; + } + else + xprintf(class->xine, XINE_VERBOSITY_LOG, + _("video_out_xcbxv: using Xv port %d from adaptor %s for hardware " + "colorspace conversion and scaling.\n"), xv_port, + xcb_xv_adaptor_info_name(adaptor_it.data)); + + this->xv_port = xv_port; + + _x_vo_scale_init (&this->sc, 1, 0, config ); + this->sc.frame_output_cb = visual->frame_output_cb; + this->sc.user_data = visual->user_data; + + this->gc = xcb_generate_id(this->connection); + xcb_create_gc(this->connection, this->gc, this->window, 0, NULL); + this->capabilities = VO_CAP_CROP; + this->use_shm = 1; + this->deinterlace_method = 0; + this->deinterlace_frame.image = NULL; + this->use_colorkey = 0; + this->colorkey = 0; + this->xoverlay = NULL; + this->ovl_changed = 0; + this->xine = class->xine; + + this->vo_driver.get_capabilities = xv_get_capabilities; + this->vo_driver.alloc_frame = xv_alloc_frame; + this->vo_driver.update_frame_format = xv_update_frame_format; + this->vo_driver.overlay_begin = xv_overlay_begin; + this->vo_driver.overlay_blend = xv_overlay_blend; + this->vo_driver.overlay_end = xv_overlay_end; + this->vo_driver.display_frame = xv_display_frame; + this->vo_driver.get_property = xv_get_property; + this->vo_driver.set_property = xv_set_property; + this->vo_driver.get_property_min_max = xv_get_property_min_max; + this->vo_driver.gui_data_exchange = xv_gui_data_exchange; + this->vo_driver.dispose = xv_dispose; + this->vo_driver.redraw_needed = xv_redraw_needed; + + /* + * init properties + */ + + for (i = 0; i < VO_NUM_PROPERTIES; i++) { + this->props[i].value = 0; + this->props[i].min = 0; + this->props[i].max = 0; + this->props[i].atom = XCB_NONE; + this->props[i].entry = NULL; + this->props[i].this = this; + } + + this->props[VO_PROP_INTERLACED].value = 0; + this->sc.user_ratio = + this->props[VO_PROP_ASPECT_RATIO].value = XINE_VO_ASPECT_AUTO; + this->props[VO_PROP_ZOOM_X].value = 100; + this->props[VO_PROP_ZOOM_Y].value = 100; + + /* + * check this adaptor's capabilities + */ + this->port_attributes = xine_list_new(); + + query_attributes_cookie = xcb_xv_query_port_attributes(this->connection, xv_port); + query_attributes_reply = xcb_xv_query_port_attributes_reply(this->connection, query_attributes_cookie, NULL); + if(query_attributes_reply) { + xcb_xv_attribute_info_iterator_t attribute_it; + attribute_it = xcb_xv_query_port_attributes_attributes_iterator(query_attributes_reply); + + for (; attribute_it.rem; xcb_xv_attribute_info_next(&attribute_it)) { + if ((attribute_it.data->flags & XCB_XV_ATTRIBUTE_FLAG_SETTABLE) && (attribute_it.data->flags & XCB_XV_ATTRIBUTE_FLAG_GETTABLE)) { + /* store initial port attribute value */ + xv_store_port_attribute(this, xcb_xv_attribute_info_name(attribute_it.data)); + + if(!strcmp(xcb_xv_attribute_info_name(attribute_it.data), "XV_HUE")) { + if (!strncmp(xcb_xv_adaptor_info_name(adaptor_it.data), "NV", 2)) { + xprintf (this->xine, XINE_VERBOSITY_NONE, "video_out_xcbxv: ignoring broken XV_HUE settings on NVidia cards"); + } else { + xv_check_capability (this, VO_PROP_HUE, attribute_it.data, + adaptor_it.data->base_id, + NULL, NULL, NULL); + } + } else if(!strcmp(xcb_xv_attribute_info_name(attribute_it.data), "XV_SATURATION")) { + xv_check_capability (this, VO_PROP_SATURATION, attribute_it.data, + adaptor_it.data->base_id, + NULL, NULL, NULL); + + } else if(!strcmp(xcb_xv_attribute_info_name(attribute_it.data), "XV_BRIGHTNESS")) { + xv_check_capability (this, VO_PROP_BRIGHTNESS, attribute_it.data, + adaptor_it.data->base_id, + NULL, NULL, NULL); + + } else if(!strcmp(xcb_xv_attribute_info_name(attribute_it.data), "XV_CONTRAST")) { + xv_check_capability (this, VO_PROP_CONTRAST, attribute_it.data, + adaptor_it.data->base_id, + NULL, NULL, NULL); + + } else if(!strcmp(xcb_xv_attribute_info_name(attribute_it.data), "XV_COLORKEY")) { + xv_check_capability (this, VO_PROP_COLORKEY, attribute_it.data, + adaptor_it.data->base_id, + "video.device.xv_colorkey", + _("video overlay colour key"), + _("The colour key is used to tell the graphics card where to " + "overlay the video image. Try different values, if you experience " + "windows becoming transparent.")); + + } else if(!strcmp(xcb_xv_attribute_info_name(attribute_it.data), "XV_AUTOPAINT_COLORKEY")) { + xv_check_capability (this, VO_PROP_AUTOPAINT_COLORKEY, attribute_it.data, + adaptor_it.data->base_id, + "video.device.xv_autopaint_colorkey", + _("autopaint colour key"), + _("Make Xv autopaint its colorkey.")); + + } else if(!strcmp(xcb_xv_attribute_info_name(attribute_it.data), "XV_FILTER")) { + int xv_filter; + /* This setting is specific to Permedia 2/3 cards. */ + xv_filter = config->register_range (config, "video.device.xv_filter", 0, + attribute_it.data->min, attribute_it.data->max, + _("bilinear scaling mode"), + _("Selects the bilinear scaling mode for Permedia cards. " + "The individual values are:\n\n" + "Permedia 2\n" + "0 - disable bilinear filtering\n" + "1 - enable bilinear filtering\n\n" + "Permedia 3\n" + "0 - disable bilinear filtering\n" + "1 - horizontal linear filtering\n" + "2 - enable full bilinear filtering"), + 20, xv_update_XV_FILTER, this); + config->update_num(config,"video.device.xv_filter",xv_filter); + } else if(!strcmp(xcb_xv_attribute_info_name(attribute_it.data), "XV_DOUBLE_BUFFER")) { + int xv_double_buffer; + xv_double_buffer = + config->register_bool (config, "video.device.xv_double_buffer", 1, + _("enable double buffering"), + _("Double buffering will synchronize the update of the video image to the " + "repainting of the entire screen (\"vertical retrace\"). This eliminates " + "flickering and tearing artifacts, but will use more graphics memory."), + 20, xv_update_XV_DOUBLE_BUFFER, this); + config->update_num(config,"video.device.xv_double_buffer",xv_double_buffer); + } + } + } + free(query_attributes_reply); + } + else + xprintf(this->xine, XINE_VERBOSITY_DEBUG, "video_out_xcbxv: no port attributes defined.\n"); + free(query_adaptors_reply); + + /* + * check supported image formats + */ + + list_formats_cookie = xcb_xv_list_image_formats(this->connection, xv_port); + list_formats_reply = xcb_xv_list_image_formats_reply(this->connection, list_formats_cookie, NULL); + + format_it = xcb_xv_list_image_formats_format_iterator(list_formats_reply); + + this->xv_format_yv12 = 0; + this->xv_format_yuy2 = 0; + + for (; format_it.rem; xcb_xv_image_format_info_next(&format_it)) { + lprintf ("Xv image format: 0x%x (%4.4s) %s\n", + format_it.data->id, (char*)&format_it.data->id, + (format_it.data->format == XCB_XV_IMAGE_FORMAT_INFO_FORMAT_PACKED) + ? "packed" : "planar"); + + if (format_it.data->id == XINE_IMGFMT_YV12) { + this->xv_format_yv12 = format_it.data->id; + this->capabilities |= VO_CAP_YV12; + xprintf(this->xine, XINE_VERBOSITY_LOG, + _("video_out_xcbxv: this adaptor supports the yv12 format.\n")); + } else if (format_it.data->id == XINE_IMGFMT_YUY2) { + this->xv_format_yuy2 = format_it.data->id; + this->capabilities |= VO_CAP_YUY2; + xprintf(this->xine, XINE_VERBOSITY_LOG, + _("video_out_xcbxv: this adaptor supports the yuy2 format.\n")); + } + } + + free(list_formats_reply); + + this->use_pitch_alignment = + config->register_bool (config, "video.device.xv_pitch_alignment", 0, + _("pitch alignment workaround"), + _("Some buggy video drivers need a workaround to function properly."), + 10, xv_update_xv_pitch_alignment, this); + + this->deinterlace_method = + config->register_enum (config, "video.output.xv_deinterlace_method", 4, + deinterlace_methods, + _("deinterlace method (deprecated)"), + _("This config setting is deprecated. You should use the new deinterlacing " + "post processing settings instead.\n\n" + "From the old days of analog television, where the even and odd numbered " + "lines of a video frame would be displayed at different times comes the " + "idea to increase motion smoothness by also recording the lines at " + "different times. This is called \"interlacing\". But unfortunately, " + "todays displays show the even and odd numbered lines as one complete frame " + "all at the same time (called \"progressive display\"), which results in " + "ugly frame errors known as comb artifacts. Software deinterlacing is an " + "approach to reduce these artifacts. The individual values are:\n\n" + "none\n" + "Disables software deinterlacing.\n\n" + "bob\n" + "Interpolates between the lines for moving parts of the image.\n\n" + "weave\n" + "Similar to bob, but with a tendency to preserve the full resolution, " + "better for high detail in low movement scenes.\n\n" + "greedy\n" + "Very good adaptive deinterlacer, but needs a lot of CPU power.\n\n" + "onefield\n" + "Always interpolates and reduces vertical resolution.\n\n" + "onefieldxv\n" + "Same as onefield, but does the interpolation in hardware.\n\n" + "linearblend\n" + "Applies a slight vertical blur to remove the comb artifacts. Good results " + "with medium CPU usage."), + 10, xv_update_deinterlace, this); + this->deinterlace_enabled = 0; + + if(this->use_colorkey==1) { + this->xoverlay = xcbosd_create(this->xine, this->connection, this->screen, + this->window, XCBOSD_COLORKEY); + if(this->xoverlay) + xcbosd_colorkey(this->xoverlay, this->colorkey, &this->sc); + } else { + this->xoverlay = xcbosd_create(this->xine, this->connection, this->screen, + this->window, XCBOSD_SHAPED); + } + + if( this->xoverlay ) + this->capabilities |= VO_CAP_UNSCALED_OVERLAY; + + return &this->vo_driver; +} + +/* + * class functions + */ + +static char* get_identifier (video_driver_class_t *this_gen) { + return "Xv"; +} + +static char* get_description (video_driver_class_t *this_gen) { + return _("xine video output plugin using the MIT X video extension"); +} + +static void dispose_class (video_driver_class_t *this_gen) { + xv_class_t *this = (xv_class_t *) this_gen; + + free (this); +} + +static void *init_class (xine_t *xine, void *visual_gen) { + xv_class_t *this = (xv_class_t *) xine_xmalloc (sizeof (xv_class_t)); + + this->driver_class.open_plugin = open_plugin; + this->driver_class.get_identifier = get_identifier; + this->driver_class.get_description = get_description; + this->driver_class.dispose = dispose_class; + + this->config = xine->config; + this->xine = xine; + + return this; +} + +static const vo_info_t vo_info_xv = { + 9, /* priority */ + XINE_VISUAL_TYPE_XCB /* visual type */ +}; + +/* + * exported plugin catalog entry + */ + +const plugin_info_t xine_plugin_info[] EXPORTED = { + /* type, API, "name", version, special_info, init_function */ + { PLUGIN_VIDEO_OUT, 21, "xv", XINE_VERSION_CODE, &vo_info_xv, init_class }, + { PLUGIN_NONE, 0, "", 0, NULL, NULL } +}; + +#endif diff --git a/src/video_out/video_out_xshm.c b/src/video_out/video_out_xshm.c index d109fb455..00d3bee1c 100644 --- a/src/video_out/video_out_xshm.c +++ b/src/video_out/video_out_xshm.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_xshm.c,v 1.148 2006/10/28 18:51:08 miguelfreitas Exp $ + * $Id: video_out_xshm.c,v 1.150 2007/03/25 23:13:53 dgp85 Exp $ * * video_out_xshm.c, X11 shared memory extension interface for xine * @@ -87,7 +87,6 @@ typedef struct { yuv2rgb_t *yuv2rgb; /* yuv2rgb converter set up for this frame */ uint8_t *rgb_dst; - int yuv_stride; } xshm_frame_t; @@ -105,8 +104,6 @@ typedef struct { int use_shm; XColor black; - int yuv2rgb_mode; - int yuv2rgb_swap; int yuv2rgb_brightness; int yuv2rgb_contrast; int yuv2rgb_saturation; @@ -178,6 +175,11 @@ static XImage *create_ximage (xshm_driver_t *this, XShmSegmentInfo *shminfo, int width, int height) { XImage *myimage = NULL; + if (width <= 0) + width = 1; + if (height <= 0) + height = 1; + if (this->use_shm) { /* @@ -585,7 +587,6 @@ static void xshm_update_frame_format (vo_driver_t *this_gen, frame->sc.output_width, frame->sc.output_height, frame->image->bytes_per_line*2); - frame->yuv_stride = frame->image->bytes_per_line*2; break; case VO_BOTH_FIELDS: frame->yuv2rgb->configure (frame->yuv2rgb, @@ -596,7 +597,6 @@ static void xshm_update_frame_format (vo_driver_t *this_gen, frame->sc.output_width, frame->sc.output_height, frame->image->bytes_per_line); - frame->yuv_stride = frame->image->bytes_per_line; break; } } @@ -1255,8 +1255,6 @@ static vo_driver_t *xshm_open_plugin_2 (video_driver_class_t *class_gen, const v return NULL; } - this->yuv2rgb_mode = mode; - this->yuv2rgb_swap = swapped; this->yuv2rgb_brightness = 0; this->yuv2rgb_contrast = 128; this->yuv2rgb_saturation = 128; diff --git a/src/video_out/video_out_xv.c b/src/video_out/video_out_xv.c index 64533a88f..55340a9e7 100644 --- a/src/video_out/video_out_xv.c +++ b/src/video_out/video_out_xv.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_xv.c,v 1.220 2006/10/28 18:51:08 miguelfreitas Exp $ + * $Id: video_out_xv.c,v 1.224 2007/03/29 19:01:03 dgp85 Exp $ * * video_out_xv.c, X11 video extension interface for xine * @@ -130,10 +130,10 @@ struct xv_driver_s { xv_property_t props[VO_NUM_PROPERTIES]; uint32_t capabilities; + int ovl_changed; xv_frame_t *recent_frames[VO_NUM_RECENT_FRAMES]; xv_frame_t *cur_frame; x11osd *xoverlay; - int ovl_changed; /* all scaling information goes here */ vo_scale_t sc; @@ -187,7 +187,7 @@ static void xv_frame_dispose (vo_frame_t *vo_img) { if (frame->image) { - if (this->use_shm) { + if (frame->shminfo.shmaddr) { LOCK_DISPLAY(this); XShmDetach (this->display, &frame->shminfo); XFree (frame->image); @@ -258,6 +258,11 @@ static XvImage *create_ximage (xv_driver_t *this, XShmSegmentInfo *shminfo, unsigned int xv_format; XvImage *image = NULL; + if (width <= 0) + width = 1; + if (height <= 0) + height = 1; + if (this->use_pitch_alignment) { width = (width + 7) & ~0x7; } @@ -382,6 +387,7 @@ static XvImage *create_ximage (xv_driver_t *this, XShmSegmentInfo *shminfo, image = XvCreateImage (this->display, this->xv_port, xv_format, data, width, height); + shminfo->shmaddr = 0; } return image; } @@ -391,7 +397,7 @@ static void dispose_ximage (xv_driver_t *this, XShmSegmentInfo *shminfo, XvImage *myimage) { - if (this->use_shm) { + if (shminfo->shmaddr) { XShmDetach (this->display, shminfo); XFree (myimage); @@ -952,6 +958,7 @@ static int xv_gui_data_exchange (vo_driver_t *this_gen, /* XExposeEvent * xev = (XExposeEvent *) data; */ if (this->cur_frame) { + int i; LOCK_DISPLAY(this); @@ -971,6 +978,16 @@ static int xv_gui_data_exchange (vo_driver_t *this_gen, this->sc.output_width, this->sc.output_height); } + XSetForeground (this->display, this->gc, this->black.pixel); + + for( i = 0; i < 4; i++ ) { + if( this->sc.border[i].w && this->sc.border[i].h ) { + XFillRectangle(this->display, this->drawable, this->gc, + this->sc.border[i].x, this->sc.border[i].y, + this->sc.border[i].w, this->sc.border[i].h); + } + } + if(this->xoverlay) x11osd_expose(this->xoverlay); diff --git a/src/video_out/video_out_xvmc.c b/src/video_out/video_out_xvmc.c index fd0299435..53d09b7d5 100644 --- a/src/video_out/video_out_xvmc.c +++ b/src/video_out/video_out_xvmc.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_xvmc.c,v 1.28 2006/07/10 22:08:44 dgp85 Exp $ + * $Id: video_out_xvmc.c,v 1.29 2007/03/25 23:07:23 dgp85 Exp $ * * video_out_xvmc.c, X11 video motion compensation extension interface for xine * @@ -1074,7 +1074,7 @@ static int xvmc_set_property (vo_driver_t *this_gen, if ((value >= XINE_VO_ZOOM_MIN) && (value <= XINE_VO_ZOOM_MAX)) { this->props[property].value = value; xprintf (this->xine, XINE_VERBOSITY_DEBUG, - "video_out_xv: VO_PROP_ZOOM_X = %d\n", this->props[property].value); + "video_out_xvmc: VO_PROP_ZOOM_X = %d\n", this->props[property].value); this->sc.zoom_factor_x = (double)value / (double)XINE_VO_ZOOM_STEP; xvmc_compute_ideal_size (this); @@ -1086,7 +1086,7 @@ static int xvmc_set_property (vo_driver_t *this_gen, if ((value >= XINE_VO_ZOOM_MIN) && (value <= XINE_VO_ZOOM_MAX)) { this->props[property].value = value; xprintf (this->xine, XINE_VERBOSITY_DEBUG, - "video_out_xv: VO_PROP_ZOOM_Y = %d\n", this->props[property].value); + "video_out_xvmc: VO_PROP_ZOOM_Y = %d\n", this->props[property].value); this->sc.zoom_factor_y = (double)value / (double)XINE_VO_ZOOM_STEP; xvmc_compute_ideal_size (this); diff --git a/src/video_out/video_out_xxmc.c b/src/video_out/video_out_xxmc.c index 4292ca0b6..0abe2f0fc 100644 --- a/src/video_out/video_out_xxmc.c +++ b/src/video_out/video_out_xxmc.c @@ -18,7 +18,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out_xxmc.c,v 1.22 2006/07/10 22:08:44 dgp85 Exp $ + * $Id: video_out_xxmc.c,v 1.23 2007/03/25 23:13:53 dgp85 Exp $ * * video_out_xxmc.c, X11 decoding accelerated video extension interface for xine * @@ -608,6 +608,11 @@ static XvImage *create_ximage (xxmc_driver_t *this, XShmSegmentInfo *shminfo, unsigned int xv_format; XvImage *image = NULL; + if (width <= 0) + width = 1; + if (height <= 0) + height = 1; + if (this->use_pitch_alignment) { width = (width + 7) & ~0x7; } diff --git a/src/video_out/vidix/.hgignore b/src/video_out/vidix/.hgignore new file mode 100644 index 000000000..7d926a554 --- /dev/null +++ b/src/video_out/vidix/.hgignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +.libs +.deps +*.lo +*.la diff --git a/src/video_out/vidix/Makefile.am b/src/video_out/vidix/Makefile.am index e2f8665be..2ca8f168a 100644 --- a/src/video_out/vidix/Makefile.am +++ b/src/video_out/vidix/Makefile.am @@ -13,7 +13,7 @@ endif noinst_LTLIBRARIES = $(vidix_lib) libvidix_la_SOURCES = vidixlib.c -libvidix_la_LIBADD = $(DYNAMIC_LD_LIBS) +libvidix_la_LIBADD = $(DYNAMIC_LD_LIBS) $(top_builddir)/src/video_out/libdha/libdha.la noinst_HEADERS = fourcc.h vidix.h vidixlib.h diff --git a/src/video_out/vidix/drivers/.hgignore b/src/video_out/vidix/drivers/.hgignore new file mode 100644 index 000000000..7d926a554 --- /dev/null +++ b/src/video_out/vidix/drivers/.hgignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +.libs +.deps +*.lo +*.la diff --git a/src/video_out/vidix/drivers/Makefile.am b/src/video_out/vidix/drivers/Makefile.am index 9e31be6cb..3c0369af7 100644 --- a/src/video_out/vidix/drivers/Makefile.am +++ b/src/video_out/vidix/drivers/Makefile.am @@ -23,11 +23,10 @@ endif lib_LTLIBRARIES = $(vidix_drivers) radeon_vid_la_SOURCES = radeon_vid.c -radeon_vid_la_LIBADD = -lm -radeon_vid_la_LDFLAGS = -avoid-version -module +radeon_vid_la_LDFLAGS = -avoid-version -module -lm rage128_vid_la_SOURCES = radeon_vid.c -rage128_vid_la_LDFLAGS = -avoid-version -module +rage128_vid_la_LDFLAGS = -avoid-version -module -lm rage128_vid_la_CFLAGS = -DRAGE128 $(AM_CFLAGS) pm2_vid_la_SOURCES = pm2_vid.c @@ -40,12 +39,10 @@ mach64_vid_la_SOURCES = mach64_vid.c mach64_vid_la_LDFLAGS = -avoid-version -module mga_vid_la_SOURCES = mga_vid.c -mga_vid_la_LIBADD = -lm -mga_vid_la_LDFLAGS = -avoid-version -module +mga_vid_la_LDFLAGS = -avoid-version -module -lm mga_crtc2_vid_la_SOURCES = mga_vid.c -mga_crtc2_vid_la_LIBADD = -lm -mga_crtc2_vid_la_LDFLAGS = -avoid-version -module +mga_crtc2_vid_la_LDFLAGS = -avoid-version -module -lm mga_crtc2_vid_la_CFLAGS = -DCRTC2 $(AM_CFLAGS) cyberblade_vid_la_SOURCES = cyberblade_vid.c @@ -61,8 +58,7 @@ sis_vid_la_SOURCES = sis_vid.c sis_bridge.c sis_vid_la_LDFLAGS = -avoid-version -module savage_vid_la_SOURCES = savage_vid.c -savage_vid_la_LIBADD = -lm -savage_vid_la_LDFLAGS = -avoid-version -module +savage_vid_la_LDFLAGS = -avoid-version -module -lm noinst_HEADERS = mach64.h glint_regs.h pm3_regs.h radeon.h savage_regs.h \ cyberblade_regs.h unichrome_regs.h sis_defs.h sis_regs.h diff --git a/src/video_out/xcbosd.c b/src/video_out/xcbosd.c new file mode 100644 index 000000000..9013bab10 --- /dev/null +++ b/src/video_out/xcbosd.c @@ -0,0 +1,546 @@ +/* + * Copyright (C) 2003, 2007 the xine project + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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 + * + * $Id: xcbosd.c,v 1.1 2007/02/15 15:19:33 dgp85 Exp $ + * + * xcbosd.c, use X11 Nonrectangular Window Shape Extension to draw xine OSD + * + * Nov 2003 - Miguel Freitas + * Feb 2007 - ported to xcb by Christoph Pfister + * + * based on ideas and code of + * xosd Copyright (c) 2000 Andre Renaud (andre@ignavus.net) + * + * colorkey support by Yann Vernier + */ + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <signal.h> +#include <time.h> + +#include <assert.h> + +#include <netinet/in.h> + +#include <xcb/shape.h> + +#define LOG_MODULE "xcbosd" +#define LOG_VERBOSE + +/* +#define LOG +*/ + +#include "xine_internal.h" +#include "xcbosd.h" + +struct xcbosd +{ + xcb_connection_t *connection; + xcb_screen_t *screen; + enum xcbosd_mode mode; + + union { + struct { + xcb_window_t window; + xcb_pixmap_t mask_bitmap; + xcb_gc_t mask_gc; + xcb_gc_t mask_gc_back; + int mapped; + } shaped; + struct { + uint32_t colorkey; + vo_scale_t *sc; + } colorkey; + } u; + xcb_window_t window; + unsigned int depth; + xcb_pixmap_t bitmap; + xcb_visualid_t visual; + xcb_colormap_t cmap; + + xcb_gc_t gc; + + int width; + int height; + int x; + int y; + enum {DRAWN, WIPED, UNDEFINED} clean; + xine_t *xine; +}; + + +void xcbosd_expose(xcbosd *osd) +{ + assert (osd); + + lprintf("expose (state:%d)\n", osd->clean ); + + switch (osd->mode) { + case XCBOSD_SHAPED: + xcb_shape_mask(osd->connection, XCB_SHAPE_SO_SET, XCB_SHAPE_SK_BOUNDING, + osd->u.shaped.window, 0, 0, osd->u.shaped.mask_bitmap); + if( osd->clean==DRAWN ) { + + if( !osd->u.shaped.mapped ) { + unsigned int stack_mode = XCB_STACK_MODE_ABOVE; + xcb_configure_window(osd->connection, osd->u.shaped.window, XCB_CONFIG_WINDOW_STACK_MODE, &stack_mode); + xcb_map_window(osd->connection, osd->u.shaped.window); + } + osd->u.shaped.mapped = 1; + + xcb_copy_area(osd->connection, osd->bitmap, osd->u.shaped.window, + osd->gc, 0, 0, 0, 0, osd->width, osd->height); + } else { + if( osd->u.shaped.mapped ) + xcb_unmap_window(osd->connection, osd->u.shaped.window); + osd->u.shaped.mapped = 0; + } + break; + case XCBOSD_COLORKEY: + if( osd->clean!=UNDEFINED ) + xcb_copy_area(osd->connection, osd->bitmap, osd->window, osd->gc, 0, 0, + 0, 0, osd->width, osd->height); + } +} + + +void xcbosd_resize(xcbosd *osd, int width, int height) +{ + assert (osd); + assert (width); + assert (height); + + lprintf("resize old:%dx%d new:%dx%d\n", osd->width, osd->height, width, height ); + + osd->width = width; + osd->height = height; + + xcb_free_pixmap(osd->connection, osd->bitmap); + switch(osd->mode) { + case XCBOSD_SHAPED: { + unsigned int window_config[] = { osd->width, osd->height }; + xcb_configure_window(osd->connection, osd->u.shaped.window, XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT, window_config); + xcb_free_pixmap(osd->connection, osd->u.shaped.mask_bitmap); + osd->u.shaped.mask_bitmap = xcb_generate_id(osd->connection); + xcb_create_pixmap(osd->connection, 1, osd->u.shaped.mask_bitmap, osd->u.shaped.window, osd->width, osd->height); + osd->bitmap = xcb_generate_id(osd->connection); + xcb_create_pixmap(osd->connection, osd->depth, osd->bitmap, osd->u.shaped.window, osd->width, osd->height); + break; + } + case XCBOSD_COLORKEY: + osd->bitmap = xcb_generate_id(osd->connection); + xcb_create_pixmap(osd->connection, osd->depth, osd->bitmap, osd->window, osd->width, osd->height); + break; + } + + osd->clean = UNDEFINED; + xcbosd_clear(osd); +} + +void xcbosd_drawable_changed(xcbosd *osd, xcb_window_t window) +{ + xcb_get_geometry_cookie_t get_geometry_cookie; + xcb_get_geometry_reply_t *get_geometry_reply; + + assert (osd); + + lprintf("drawable changed\n"); + +/* + Do I need to recreate the GC's?? + + XFreeGC (osd->display, osd->gc); + XFreeGC (osd->display, osd->mask_gc); + XFreeGC (osd->display, osd->mask_gc_back); +*/ + xcb_free_pixmap(osd->connection, osd->bitmap); + xcb_free_colormap(osd->connection, osd->cmap); + + /* we need to call XSync(), because otherwise, calling XDestroyWindow() + on the parent window could destroy our OSD window twice !! */ + /* XSync (osd->display, False); FIXME don't think that we need that --pfister */ + + osd->window = window; + + get_geometry_cookie = xcb_get_geometry(osd->connection, osd->window); + get_geometry_reply = xcb_get_geometry_reply(osd->connection, get_geometry_cookie, NULL); + osd->depth = get_geometry_reply->depth; + osd->width = get_geometry_reply->width; + osd->height = get_geometry_reply->height; + free(get_geometry_reply); + + assert(osd->width); + assert(osd->height); + + switch(osd->mode) { + case XCBOSD_SHAPED: { + xcb_free_pixmap(osd->connection, osd->u.shaped.mask_bitmap); + xcb_destroy_window(osd->connection, osd->u.shaped.window); + + unsigned int window_params[] = { osd->screen->black_pixel, 1, XCB_EVENT_MASK_EXPOSURE }; + osd->u.shaped.window = xcb_generate_id(osd->connection); + xcb_create_window(osd->connection, XCB_COPY_FROM_PARENT, osd->u.shaped.window, + osd->window, 0, 0, osd->width, osd->height, 0, XCB_COPY_FROM_PARENT, + XCB_COPY_FROM_PARENT, XCB_CW_BACK_PIXEL | XCB_CW_OVERRIDE_REDIRECT | XCB_CW_EVENT_MASK, + window_params); + + osd->u.shaped.mapped = 0; + + osd->u.shaped.mask_bitmap = xcb_generate_id(osd->connection); + xcb_create_pixmap(osd->connection, 1, osd->u.shaped.mask_bitmap, osd->u.shaped.window, osd->width, osd->height); + + osd->bitmap = xcb_generate_id(osd->connection); + xcb_create_pixmap(osd->connection, osd->depth, osd->bitmap, osd->u.shaped.window, osd->width, osd->height); + + osd->cmap = xcb_generate_id(osd->connection); + xcb_create_colormap(osd->connection, XCB_COLORMAP_ALLOC_NONE, osd->cmap, osd->u.shaped.window, osd->visual); + break; + } + case XCBOSD_COLORKEY: + osd->bitmap = xcb_generate_id(osd->connection); + xcb_create_pixmap(osd->connection, osd->depth, osd->bitmap, osd->window, osd->width, osd->height); + osd->cmap = xcb_generate_id(osd->connection); + xcb_create_colormap(osd->connection, XCB_COLORMAP_ALLOC_NONE, osd->cmap, osd->window, osd->visual); + + break; + } + + osd->clean = UNDEFINED; + /* do not xcbosd_clear() here: osd->u.colorkey.sc has not being updated yet */ +} + +xcbosd *xcbosd_create(xine_t *xine, xcb_connection_t *connection, xcb_screen_t *screen, xcb_window_t window, enum xcbosd_mode mode) +{ + xcbosd *osd; + + xcb_get_geometry_cookie_t get_geometry_cookie; + xcb_get_geometry_reply_t *get_geometry_reply; + + xcb_void_cookie_t generic_cookie; + xcb_generic_error_t *generic_error; + + osd = xine_xmalloc (sizeof (xcbosd)); + if (!osd) + return NULL; + + osd->mode = mode; + osd->xine = xine; + osd->connection = connection; + osd->screen = screen; + osd->window = window; + + osd->visual = osd->screen->root_visual; + + get_geometry_cookie = xcb_get_geometry(osd->connection, osd->window); + get_geometry_reply = xcb_get_geometry_reply(osd->connection, get_geometry_cookie, NULL); + osd->depth = get_geometry_reply->depth; + osd->width = get_geometry_reply->width; + osd->height = get_geometry_reply->height; + free(get_geometry_reply); + + assert(osd->width); + assert(osd->height); + + switch (mode) { + case XCBOSD_SHAPED: { + const xcb_query_extension_reply_t *query_extension_reply = xcb_get_extension_data(osd->connection, &xcb_shape_id); + + if (!query_extension_reply || !query_extension_reply->present) { + xprintf(osd->xine, XINE_VERBOSITY_LOG, _("x11osd: XShape extension not available. unscaled overlay disabled.\n")); + goto error2; + } + + unsigned int window_params[] = { osd->screen->black_pixel, 1, XCB_EVENT_MASK_EXPOSURE }; + osd->u.shaped.window = xcb_generate_id(osd->connection); + generic_cookie = xcb_create_window_checked(osd->connection, XCB_COPY_FROM_PARENT, osd->u.shaped.window, + osd->window, 0, 0, osd->width, osd->height, 0, XCB_COPY_FROM_PARENT, + XCB_COPY_FROM_PARENT, XCB_CW_BACK_PIXEL | XCB_CW_OVERRIDE_REDIRECT | XCB_CW_EVENT_MASK, + window_params); + generic_error = xcb_request_check(osd->connection, generic_cookie); + + if (generic_error != NULL) { + xprintf(osd->xine, XINE_VERBOSITY_LOG, _("x11osd: error creating window. unscaled overlay disabled.\n")); + free(generic_error); + goto error_window; + } + + osd->u.shaped.mask_bitmap = xcb_generate_id(osd->connection); + generic_cookie = xcb_create_pixmap_checked(osd->connection, 1, osd->u.shaped.mask_bitmap, osd->u.shaped.window, osd->width, osd->height); + generic_error = xcb_request_check(osd->connection, generic_cookie); + + if (generic_error != NULL) { + xprintf(osd->xine, XINE_VERBOSITY_LOG, _("x11osd: error creating pixmap. unscaled overlay disabled.\n")); + free(generic_error); + goto error_aftermaskbitmap; + } + + osd->bitmap = xcb_generate_id(osd->connection); + xcb_create_pixmap(osd->connection, osd->depth, osd->bitmap, osd->u.shaped.window, osd->width, osd->height); + osd->gc = xcb_generate_id(osd->connection); + xcb_create_gc(osd->connection, osd->gc, osd->u.shaped.window, 0, NULL); + + osd->u.shaped.mask_gc = xcb_generate_id(osd->connection); + xcb_create_gc(osd->connection, osd->u.shaped.mask_gc, osd->u.shaped.mask_bitmap, XCB_GC_FOREGROUND, &osd->screen->white_pixel); + + osd->u.shaped.mask_gc_back = xcb_generate_id(osd->connection); + xcb_create_gc(osd->connection, osd->u.shaped.mask_gc_back, osd->u.shaped.mask_bitmap, XCB_GC_FOREGROUND, &osd->screen->black_pixel); + + osd->u.shaped.mapped = 0; + osd->cmap = xcb_generate_id(osd->connection); + xcb_create_colormap(osd->connection, XCB_COLORMAP_ALLOC_NONE, osd->cmap, osd->u.shaped.window, osd->visual); + break; + } + case XCBOSD_COLORKEY: + osd->bitmap = xcb_generate_id(osd->connection); + xcb_create_pixmap(osd->connection, osd->depth, osd->bitmap, osd->window, osd->width, osd->height); + osd->gc = xcb_generate_id(osd->connection); + xcb_create_gc(osd->connection, osd->gc, osd->window, 0, NULL); + osd->cmap = xcb_generate_id(osd->connection); + xcb_create_colormap(osd->connection, XCB_COLORMAP_ALLOC_NONE, osd->cmap, osd->window, osd->visual); + /* FIXME: the expose event doesn't seem to happen? */ + /*XSelectInput (osd->display, osd->window, ExposureMask);*/ + break; + default: + goto error2; + } + + osd->clean = UNDEFINED; + xcbosd_expose(osd); + + xprintf(osd->xine, XINE_VERBOSITY_DEBUG, + _("x11osd: unscaled overlay created (%s mode).\n"), + (mode==XCBOSD_SHAPED) ? "XShape" : "Colorkey" ); + + return osd; + +/* + XFreeGC (osd->display, osd->gc); + XFreeGC (osd->display, osd->mask_gc); + XFreeGC (osd->display, osd->mask_gc_back); +*/ + +error_aftermaskbitmap: + if(mode==XCBOSD_SHAPED) + xcb_free_pixmap(osd->connection, osd->u.shaped.mask_bitmap); +error_window: + if(mode==XCBOSD_SHAPED) + xcb_destroy_window(osd->connection, osd->u.shaped.window); +error2: + free (osd); + return NULL; +} + +void xcbosd_colorkey(xcbosd *osd, uint32_t colorkey, vo_scale_t *scaling) +{ + assert (osd); + assert (osd->mode==XCBOSD_COLORKEY); + + osd->u.colorkey.colorkey=colorkey; + osd->u.colorkey.sc=scaling; + osd->clean = UNDEFINED; + xcbosd_clear(osd); + xcbosd_expose(osd); +} + +void xcbosd_destroy(xcbosd *osd) +{ + + assert (osd); + + xcb_free_gc(osd->connection, osd->gc); + xcb_free_pixmap(osd->connection, osd->bitmap); + xcb_free_colormap(osd->connection, osd->cmap); + if(osd->mode==XCBOSD_SHAPED) { + xcb_free_gc(osd->connection, osd->u.shaped.mask_gc); + xcb_free_gc(osd->connection, osd->u.shaped.mask_gc_back); + xcb_free_pixmap(osd->connection, osd->u.shaped.mask_bitmap); + xcb_destroy_window(osd->connection, osd->u.shaped.window); + } + + free (osd); +} + +void xcbosd_clear(xcbosd *osd) +{ + int i; + + lprintf("clear (state:%d)\n", osd->clean ); + + if( osd->clean != WIPED ) + switch (osd->mode) { + case XCBOSD_SHAPED: { + xcb_rectangle_t rectangle = { 0, 0, osd->width, osd->height }; + xcb_poly_fill_rectangle(osd->connection, osd->u.shaped.mask_bitmap, osd->u.shaped.mask_gc_back, 1, &rectangle); + break; + } + case XCBOSD_COLORKEY: + xcb_change_gc(osd->connection, osd->gc, XCB_GC_FOREGROUND, &osd->u.colorkey.colorkey); + if(osd->u.colorkey.sc) { + xcb_rectangle_t rectangle = { osd->u.colorkey.sc->output_xoffset, osd->u.colorkey.sc->output_yoffset, + osd->u.colorkey.sc->output_width, osd->u.colorkey.sc->output_height }; + xcb_poly_fill_rectangle(osd->connection, osd->bitmap, osd->gc, 1, &rectangle); + xcb_change_gc(osd->connection, osd->gc, XCB_GC_FOREGROUND, &osd->screen->black_pixel); + + xcb_rectangle_t rects[4]; + int rects_count = 0; + + for( i = 0; i < 4; i++ ) { + if( osd->u.colorkey.sc->border[i].w && osd->u.colorkey.sc->border[i].h ) { + rects[rects_count].x = osd->u.colorkey.sc->border[i].x; + rects[rects_count].y = osd->u.colorkey.sc->border[i].y; + rects[rects_count].width = osd->u.colorkey.sc->border[i].w; + rects[rects_count].height = osd->u.colorkey.sc->border[i].h; + rects_count++; + } + + if (rects_count > 0) + xcb_poly_fill_rectangle(osd->connection, osd->bitmap, osd->gc, rects_count, rects); + } + } else { + xcb_rectangle_t rectangle = { 0, 0, osd->width, osd->height }; + xcb_poly_fill_rectangle(osd->connection, osd->bitmap, osd->gc, 1, &rectangle); + } + break; + } + osd->clean = WIPED; +} + +#define TRANSPARENT 0xffffffff + +#define saturate(n, l, u) ((n) < (l) ? (l) : ((n) > (u) ? (u) : (n))) + +void xcbosd_blend(xcbosd *osd, vo_overlay_t *overlay) +{ + xcb_alloc_color_cookie_t alloc_color_cookie; + xcb_alloc_color_reply_t *alloc_color_reply; + + if (osd->clean==UNDEFINED) + xcbosd_clear(osd); /* Workaround. Colorkey mode needs sc data before the clear. */ + + if (overlay->rle) { + int i, x, y, len, width; + int use_clip_palette, max_palette_colour[2]; + uint32_t palette[2][OVL_PALETTE_SIZE]; + + max_palette_colour[0] = -1; + max_palette_colour[1] = -1; + + for (i=0, x=0, y=0; i<overlay->num_rle; i++) { + len = overlay->rle[i].len; + + while (len > 0) { + use_clip_palette = 0; + if (len > overlay->width) { + width = overlay->width; + len -= overlay->width; + } + else { + width = len; + len = 0; + } + if ((y >= overlay->hili_top) && (y <= overlay->hili_bottom) && (x <= overlay->hili_right)) { + if ((x < overlay->hili_left) && (x + width - 1 >= overlay->hili_left)) { + width -= overlay->hili_left - x; + len += overlay->hili_left - x; + } + else if (x > overlay->hili_left) { + use_clip_palette = 1; + if (x + width - 1 > overlay->hili_right) { + width -= overlay->hili_right - x; + len += overlay->hili_right - x; + } + } + } + + if (overlay->rle[i].color > max_palette_colour[use_clip_palette]) { + int j; + clut_t *src_clut; + uint8_t *src_trans; + + if (use_clip_palette) { + src_clut = (clut_t *)&overlay->hili_color; + src_trans = (uint8_t *)&overlay->hili_trans; + } + else { + src_clut = (clut_t *)&overlay->color; + src_trans = (uint8_t *)&overlay->trans; + } + for (j=max_palette_colour[use_clip_palette]+1; j<=overlay->rle[i].color; j++) { + if (src_trans[j]) { + if (1) { + int red, green, blue; + int y, u, v, r, g, b; + + y = saturate(src_clut[j].y, 16, 235); + u = saturate(src_clut[j].cb, 16, 240); + v = saturate(src_clut[j].cr, 16, 240); + y = (9 * y) / 8; + r = y + (25 * v) / 16 - 218; + red = (65536 * saturate(r, 0, 255)) / 256; + g = y + (-13 * v) / 16 + (-25 * u) / 64 + 136; + green = (65536 * saturate(g, 0, 255)) / 256; + b = y + 2 * u - 274; + blue = (65536 * saturate(b, 0, 255)) / 256; + + alloc_color_cookie = xcb_alloc_color(osd->connection, osd->cmap, red, green, blue); + alloc_color_reply = xcb_alloc_color_reply(osd->connection, alloc_color_cookie, NULL); + + palette[use_clip_palette][j] = alloc_color_reply->pixel; + free(alloc_color_reply); + } + else { + if (src_clut[j].y > 127) { + palette[use_clip_palette][j] = osd->screen->white_pixel; + } + else { + palette[use_clip_palette][j] = osd->screen->black_pixel; + } + } + } + else { + palette[use_clip_palette][j] = TRANSPARENT; + } + } + max_palette_colour[use_clip_palette] = overlay->rle[i].color; + } + + if(palette[use_clip_palette][overlay->rle[i].color] != TRANSPARENT) { + xcb_change_gc(osd->connection, osd->gc, XCB_GC_FOREGROUND, &palette[use_clip_palette][overlay->rle[i].color]); + xcb_rectangle_t rectangle = { overlay->x + x, overlay->y + y, width, 1 }; + xcb_poly_fill_rectangle(osd->connection, osd->bitmap, osd->gc, 1, &rectangle); + if(osd->mode==XCBOSD_SHAPED) + xcb_poly_fill_rectangle(osd->connection, osd->u.shaped.mask_bitmap, osd->u.shaped.mask_gc, 1, &rectangle); + } + + x += width; + if (x == overlay->width) { + x = 0; + y++; + } + } + } + osd->clean = DRAWN; + } +} + diff --git a/src/video_out/xcbosd.h b/src/video_out/xcbosd.h new file mode 100644 index 000000000..f948c9baf --- /dev/null +++ b/src/video_out/xcbosd.h @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2003, 2007 the xine project + * + * This file is part of xine, a free video player. + * + * xine 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. + * + * xine 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 + * + * $Id: xcbosd.h,v 1.1 2007/02/15 15:19:33 dgp85 Exp $ + * + * xcbosd.h, use X11 Nonrectangular Window Shape Extension to draw xine OSD + * + * Nov 2003 - Miguel Freitas + * Feb 2007 - ported to xcb by Christoph Pfister + * + * based on ideas and code of + * xosd Copyright (c) 2000 Andre Renaud (andre@ignavus.net) + */ + +#ifndef XCBOSD_H +#define XCBOSD_H + +#include "vo_scale.h" + +typedef struct xcbosd xcbosd; +enum xcbosd_mode {XCBOSD_SHAPED, XCBOSD_COLORKEY}; + +xcbosd *xcbosd_create(xine_t *xine, xcb_connection_t *connection, xcb_screen_t *screen, xcb_window_t window, enum xcbosd_mode mode); + +void xcbosd_colorkey(xcbosd *osd, uint32_t colorkey, vo_scale_t *scaling); + +void xcbosd_destroy(xcbosd *osd); + +void xcbosd_expose(xcbosd *osd); + +void xcbosd_resize(xcbosd *osd, int width, int height); + +void xcbosd_drawable_changed(xcbosd *osd, xcb_window_t window); + +void xcbosd_clear(xcbosd *osd); + +void xcbosd_blend(xcbosd *osd, vo_overlay_t *overlay); + +#endif diff --git a/src/xine-engine/.hgignore b/src/xine-engine/.hgignore new file mode 100644 index 000000000..7d926a554 --- /dev/null +++ b/src/xine-engine/.hgignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +.libs +.deps +*.lo +*.la diff --git a/src/xine-engine/Makefile.am b/src/xine-engine/Makefile.am index 2b317d2aa..ecd1968f2 100644 --- a/src/xine-engine/Makefile.am +++ b/src/xine-engine/Makefile.am @@ -26,16 +26,16 @@ EXTRA_DIST = lrb.c lrb.h accel_xvmc.h libxine_la_DEPENDENCIES = $(XINEUTILS_LIB) \ $(pthread_dep) $(LIBXINEPOSIX) -libxine_la_LIBADD = $(THREAD_LIBS) $(DYNAMIC_LD_LIBS) $(LTLIBINTL) $(ZLIB_LIBS) \ +libxine_la_LIBADD = $(PTHREAD_LIBS) $(DYNAMIC_LD_LIBS) $(LTLIBINTL) $(ZLIB_LIBS) \ -lm $(XINEUTILS_LIB) $(LIBICONV) $(FT2_LIBS) $(FONTCONFIG_LIBS) \ - $(LIBXINEPOSIX) $(RT_LIBS) + $(LIBXINEPOSIX) $(RT_LIBS) $(NET_LIBS) libxine_la_LDFLAGS = \ -version-info $(XINE_LT_CURRENT):$(XINE_LT_REVISION):$(XINE_LT_AGE) \ $(def_ldflags) -include_HEADERS = buffer.h metronom.h configfile.h vo_scale.h \ +xineinclude_HEADERS = buffer.h metronom.h configfile.h vo_scale.h \ audio_out.h resample.h video_out.h xine_internal.h spu_decoder.h \ video_overlay.h osd.h scratch.h xine_plugin.h xineintl.h \ plugin_catalog.h audio_decoder.h video_decoder.h post.h \ diff --git a/src/xine-engine/alphablend.c b/src/xine-engine/alphablend.c index a0ff6ccf3..9947da365 100644 --- a/src/xine-engine/alphablend.c +++ b/src/xine-engine/alphablend.c @@ -66,7 +66,7 @@ static void mem_blend24(uint8_t *mem, uint8_t r, uint8_t g, uint8_t b, } } -static void mem_blend32(uint8_t *mem, uint8_t *src, uint8_t o, int len) { +static void mem_blend32(uint8_t *mem, const uint8_t *src, uint8_t o, int len) { uint8_t *limit = mem + len*4; while (mem < limit) { *mem = BLEND_BYTE(*mem, src[0], o); diff --git a/src/xine-engine/audio_decoder.c b/src/xine-engine/audio_decoder.c index d504d9511..549c19b02 100644 --- a/src/xine-engine/audio_decoder.c +++ b/src/xine-engine/audio_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_decoder.c,v 1.138 2006/09/08 21:11:29 miguelfreitas Exp $ + * $Id: audio_decoder.c,v 1.139 2007/02/20 00:34:57 dgp85 Exp $ * * * functions that implement audio decoding @@ -67,7 +67,7 @@ static void *audio_decoder_loop (void *stream_gen) { if( !replaying_headers ) buf = stream->audio_fifo->get (stream->audio_fifo); - lprintf ("audio_loop: got package pts = %lld, type = %08x\n", buf->pts, buf->type); + lprintf ("audio_loop: got package pts = %"PRId64", type = %08x\n", buf->pts, buf->type); _x_extra_info_merge( stream->audio_decoder_extra_info, buf->extra_info ); stream->audio_decoder_extra_info->seek_count = stream->video_seek_count; diff --git a/src/xine-engine/audio_out.c b/src/xine-engine/audio_out.c index ce8cbe536..cd87c2947 100644 --- a/src/xine-engine/audio_out.c +++ b/src/xine-engine/audio_out.c @@ -17,7 +17,7 @@ * along with self program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_out.c,v 1.207 2006/11/04 23:30:14 dsalt Exp $ + * $Id: audio_out.c,v 1.210 2007/04/01 00:52:36 dgp85 Exp $ * * 22-8-2001 James imported some useful AC3 sections from the previous alsa driver. * (c) 2001 Andy Lo A Foe <andy@alsaplayer.org> @@ -204,36 +204,45 @@ typedef struct { /* private stuff */ ao_driver_t *driver; pthread_mutex_t driver_lock; - int driver_open; - pthread_mutex_t driver_action_lock; /* protects num_driver_actions */ + + uint32_t driver_open:1; + uint32_t audio_loop_running:1; + uint32_t audio_thread_created:1; + uint32_t grab_only:1; /* => do not start thread, frontend will consume samples */ + uint32_t do_resample:1; + uint32_t do_compress:1; + uint32_t do_amp:1; + uint32_t amp_mute:1; + uint32_t do_equ:1; + int num_driver_actions; /* number of threads, that wish to call * functions needing driver_lock */ + pthread_mutex_t driver_action_lock; /* protects num_driver_actions */ + metronom_clock_t *clock; xine_t *xine; xine_list_t *streams; pthread_mutex_t streams_lock; - int audio_loop_running; - int grab_only; /* => do not start thread, frontend will consume samples */ pthread_t audio_thread; - int audio_thread_created; int64_t audio_step; /* pts per 32 768 samples (sample = #bytes/2) */ int32_t frames_per_kpts; /* frames per 1024/90000 sec */ - ao_format_t input, output; /* format conversion done at audio_out.c */ - double frame_rate_factor; - double output_frame_excess; /* used to keep track of 'half' frames */ - int av_sync_method_conf; resample_sync_t resample_sync_info; - int resample_sync_method; /* fix sound card clock drift by resampling */ double resample_sync_factor; /* correct buffer length by this factor * to sync audio hardware to (dxr3) clock */ + int resample_sync_method; /* fix sound card clock drift by resampling */ + + int gap_tolerance; + + ao_format_t input, output; /* format conversion done at audio_out.c */ + double frame_rate_factor; + double output_frame_excess; /* used to keep track of 'half' frames */ + int resample_conf; uint32_t force_rate; /* force audio output rate to this value if non-zero */ - int do_resample; - int gap_tolerance; audio_fifo_t *free_fifo; audio_fifo_t *out_fifo; int64_t last_audio_vpts; @@ -247,22 +256,18 @@ typedef struct { int64_t passthrough_offset; int flush_audio_driver; + int discard_buffers; pthread_mutex_t flush_audio_driver_lock; pthread_cond_t flush_audio_driver_reached; - int discard_buffers; /* some built-in audio filters */ - int do_compress; double compression_factor; /* current compression */ double compression_factor_max; /* user limit on compression */ - int do_amp; - int amp_mute; double amp_factor; /* 10-band equalizer */ - int do_equ; int eq_gain[EQ_BANDS]; int eq_preamp; int eq_i; @@ -1055,9 +1060,7 @@ static void *ao_loop (void *this_gen) { delay = this->driver->delay(this->driver); while (delay < 0 && this->audio_loop_running) { /* Get the audio card into RUNNING state. */ - pthread_mutex_unlock( &this->driver_lock ); ao_fill_gap (this, 10000); /* FIXME, this PTS of 1000 should == period size */ - pthread_mutex_lock( &this->driver_lock ); delay = this->driver->delay(this->driver); } pthread_mutex_unlock( &this->driver_lock ); @@ -1200,7 +1203,7 @@ static void *ao_loop (void *this_gen) { if (this->driver_open) { pthread_mutex_lock( &this->driver_lock ); - result = this->driver->write (this->driver, out_buf->mem, out_buf->num_frames ); + result = this->driver_open ? this->driver->write (this->driver, out_buf->mem, out_buf->num_frames ) : 0; pthread_mutex_unlock( &this->driver_lock ); } else { result = 0; @@ -1762,13 +1765,15 @@ static int ao_set_property (xine_audio_port_t *this_gen, int property, int value this->amp_factor = (double) value / 100.0; - this->do_amp = (this->amp_factor != 1.0); + this->do_amp = (this->amp_factor != 1.0 || this->amp_mute); ret = this->amp_factor*100; break; case AO_PROP_AMP_MUTE: ret = this->amp_mute = value; + + this->do_amp = (this->amp_factor != 1.0 || this->amp_mute); break; case AO_PROP_EQ_30HZ: @@ -1984,6 +1989,7 @@ xine_audio_port_t *_x_ao_new_port (xine_t *xine, ao_driver_t *driver, aos_t *this; int i, err; pthread_attr_t pth_attrs; + pthread_mutexattr_t attr; static const char* resample_modes[] = {"auto", "off", "on", NULL}; static const char* av_sync_methods[] = {"metronom feedback", "resample", NULL}; @@ -1994,8 +2000,14 @@ xine_audio_port_t *_x_ao_new_port (xine_t *xine, ao_driver_t *driver, this->clock = xine->clock; this->streams = xine_list_new(); + /* warning: driver_lock is a recursive mutex. it must NOT be + * used with neither pthread_cond_wait() or pthread_cond_timedwait() + */ + pthread_mutexattr_init( &attr ); + pthread_mutexattr_settype( &attr, PTHREAD_MUTEX_RECURSIVE ); + pthread_mutex_init( &this->streams_lock, NULL ); - pthread_mutex_init( &this->driver_lock, NULL ); + pthread_mutex_init( &this->driver_lock, &attr ); pthread_mutex_init( &this->driver_action_lock, NULL ); this->ao.open = ao_open; diff --git a/src/xine-engine/broadcaster.c b/src/xine-engine/broadcaster.c index edf52e474..3beacb226 100644 --- a/src/xine-engine/broadcaster.c +++ b/src/xine-engine/broadcaster.c @@ -19,7 +19,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: broadcaster.c,v 1.12 2006/06/20 00:18:44 dgp85 Exp $ + * $Id: broadcaster.c,v 1.15 2007/01/19 01:23:06 dgp85 Exp $ * * broadcaster.c - xine network broadcaster * @@ -305,7 +305,10 @@ static void audio_put_cb (fifo_buffer_t *fifo, buf_element_t *buf, void *this_ge broadcaster_t *_x_init_broadcaster(xine_stream_t *stream, int port) { broadcaster_t *this; - struct sockaddr_in servAddr; + union { + struct sockaddr_in in; + struct sockaddr sa; + } servAddr; int msock, err; msock = socket(PF_INET, SOCK_STREAM, 0); @@ -314,11 +317,11 @@ broadcaster_t *_x_init_broadcaster(xine_stream_t *stream, int port) xprintf(stream->xine, XINE_VERBOSITY_DEBUG, "broadcaster: error opening master socket.\n"); return NULL; } - servAddr.sin_family = AF_INET; - servAddr.sin_addr.s_addr = htonl(INADDR_ANY); - servAddr.sin_port = htons(port); + servAddr.in.sin_family = AF_INET; + servAddr.in.sin_addr.s_addr = htonl(INADDR_ANY); + servAddr.in.sin_port = htons(port); - if(bind(msock, (struct sockaddr *) &servAddr, sizeof(servAddr))<0) + if(bind(msock, &servAddr.sa, sizeof(servAddr.in))<0) { xprintf(stream->xine, XINE_VERBOSITY_DEBUG, "broadcaster: error binding to port %d\n", port); return NULL; diff --git a/src/xine-engine/buffer.c b/src/xine-engine/buffer.c index c36e97877..389146dcb 100644 --- a/src/xine-engine/buffer.c +++ b/src/xine-engine/buffer.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: buffer.c,v 1.36 2006/06/20 00:35:07 dgp85 Exp $ + * $Id: buffer.c,v 1.37 2006/12/25 21:59:32 dgp85 Exp $ * * * contents: @@ -64,7 +64,7 @@ static void buffer_pool_free (buf_element_t *element) { this->buffer_pool_num_free++; if (this->buffer_pool_num_free > this->buffer_pool_capacity) { - printf("xine-lib:buffer: Their has been a fatal error: TOO MANY FREE's\n"); + fprintf(stderr, _("xine-lib: buffer.c: There has been a fatal error: TOO MANY FREE's\n")); _x_abort(); } diff --git a/src/xine-engine/buffer.h b/src/xine-engine/buffer.h index fa8d96388..64fe52a20 100644 --- a/src/xine-engine/buffer.h +++ b/src/xine-engine/buffer.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: buffer.h,v 1.159 2006/11/14 14:11:59 dgp85 Exp $ + * $Id: buffer.h,v 1.162 2007/01/14 16:53:37 klan Exp $ * * * contents: @@ -190,6 +190,7 @@ extern "C" { #define BUF_VIDEO_KMVC 0x02600000 #define BUF_VIDEO_FLASHSV 0x02610000 #define BUF_VIDEO_CAVS 0x02620000 +#define BUF_VIDEO_VP6F 0x02630000 /* audio buffer types: (please keep in sync with buffer_types.c) */ @@ -255,6 +256,8 @@ extern "C" { #define BUF_AUDIO_TRUESPEECH 0x03390000 #define BUF_AUDIO_TTA 0x033A0000 #define BUF_AUDIO_SMACKER 0x033B0000 +#define BUF_AUDIO_FLVADPCM 0x033C0000 +#define BUF_AUDIO_WAVPACK 0x033D0000 /* spu buffer types: */ diff --git a/src/xine-engine/buffer_types.c b/src/xine-engine/buffer_types.c index ea8d58842..161ec70a9 100644 --- a/src/xine-engine/buffer_types.c +++ b/src/xine-engine/buffer_types.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: buffer_types.c,v 1.106 2006/10/02 15:56:06 valtri Exp $ + * $Id: buffer_types.c,v 1.107 2006/12/26 03:18:56 dgp85 Exp $ * * * contents: @@ -1114,6 +1114,13 @@ static audio_db_t audio_db[] = { BUF_AUDIO_MPC, "Musepack" }, +{ + { + 0 + }, + BUF_AUDIO_WAVPACK, + "Wavpack" +}, { { 0 }, 0, "last entry" } }; diff --git a/src/xine-engine/configfile.c b/src/xine-engine/configfile.c index 21ebfd5be..28b44fd51 100644 --- a/src/xine-engine/configfile.c +++ b/src/xine-engine/configfile.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: configfile.c,v 1.81 2006/09/26 21:51:11 dgp85 Exp $ + * $Id: configfile.c,v 1.85 2007/02/22 15:49:16 dgp85 Exp $ * * config object (was: file) management - implementation * @@ -491,14 +491,15 @@ static cfg_entry_t *config_register_key (config_values_t *this, return entry; } -static char *config_register_string (config_values_t *this, - const char *key, - const char *def_value, - const char *description, - const char *help, - int exp_level, - xine_config_cb_t changed_cb, - void *cb_data) { +static cfg_entry_t *config_register_string_internal (config_values_t *this, + const char *key, + const char *def_value, + int num_value, + const char *description, + const char *help, + int exp_level, + xine_config_cb_t changed_cb, + void *cb_data) { cfg_entry_t *entry; _x_assert(this); @@ -512,7 +513,7 @@ static char *config_register_string (config_values_t *this, if (entry->type != XINE_CONFIG_TYPE_UNKNOWN) { lprintf("config entry already registered: %s\n", key); pthread_mutex_unlock(&this->config_lock); - return entry->str_value; + return entry; } config_reset_value(entry); @@ -525,13 +526,40 @@ static char *config_register_string (config_values_t *this, else entry->str_value = strdup(def_value); + entry->num_value = num_value; + /* fill out rest of struct */ entry->str_default = strdup(def_value); entry->description = (description) ? strdup(description) : NULL; entry->help = (help) ? strdup(help) : NULL; pthread_mutex_unlock(&this->config_lock); - return entry->str_value; + return entry; +} + +static char *config_register_string (config_values_t *this, + const char *key, + const char *def_value, + const char *description, + const char *help, + int exp_level, + xine_config_cb_t changed_cb, + void *cb_data) { + return config_register_string_internal (this, key, def_value, 0, description, + help, exp_level, changed_cb, cb_data)->str_value; +} + +static char *config_register_filename (config_values_t *this, + const char *key, + const char *def_value, + int req_type, + const char *description, + const char *help, + int exp_level, + xine_config_cb_t changed_cb, + void *cb_data) { + return config_register_string_internal (this, key, def_value, req_type, description, + help, exp_level, changed_cb, cb_data)->str_value; } static int config_register_num (config_values_t *this, @@ -661,9 +689,9 @@ static int config_register_range (config_values_t *this, return entry->num_value; } -static int config_parse_enum (const char *str, char **values) { +static int config_parse_enum (const char *str, const char **values) { - char **value; + const char **value; int i; @@ -697,7 +725,8 @@ static int config_register_enum (config_values_t *this, void *cb_data) { cfg_entry_t *entry; - char **value_src, **value_dest; + const char **value_src; + char **value_dest; int value_count; @@ -1184,6 +1213,7 @@ config_values_t *_x_config_init (void) { pthread_mutex_init(&this->config_lock, &attr); this->register_string = config_register_string; + this->register_filename = config_register_filename; this->register_range = config_register_range; this->register_enum = config_register_enum; this->register_num = config_register_num; diff --git a/src/xine-engine/configfile.h b/src/xine-engine/configfile.h index 2a98be9f1..859214d1c 100644 --- a/src/xine-engine/configfile.h +++ b/src/xine-engine/configfile.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: configfile.h,v 1.38 2006/09/26 05:19:48 dgp85 Exp $ + * $Id: configfile.h,v 1.42 2007/02/22 15:49:16 dgp85 Exp $ * * config file management * @@ -108,6 +108,16 @@ struct config_values_s { xine_config_cb_t changed_cb, void *cb_data); + char* (*register_filename) (config_values_t *self, + const char *key, + const char *def_value, + int req_type, + const char *description, + const char *help, + int exp_level, + xine_config_cb_t changed_cb, + void *cb_data); + int (*register_range) (config_values_t *self, const char *key, int def_value, @@ -153,7 +163,7 @@ struct config_values_s { void (*update_string) (config_values_t *self, const char *key, const char *value); /* small utility function for enum handling */ - int (*parse_enum) (const char *str, char **values); + int (*parse_enum) (const char *str, const char **values); /* * lookup config entries diff --git a/src/xine-engine/demux.c b/src/xine-engine/demux.c index c6a234ae5..d1bd2bc1d 100644 --- a/src/xine-engine/demux.c +++ b/src/xine-engine/demux.c @@ -20,7 +20,7 @@ * Demuxer helper functions * hide some xine engine details from demuxers and reduce code duplication * - * $Id: demux.c,v 1.64 2006/08/13 23:51:34 miguelfreitas Exp $ + * $Id: demux.c,v 1.66 2007/01/18 23:28:46 dgp85 Exp $ */ @@ -336,7 +336,7 @@ static void *demux_loop (void *stream_gen) { finished_count_video = stream->finished_count_video + 1; pthread_mutex_unlock (&stream->counter_lock); - /* demux_thread_running is zero if demux loop has being stopped by user */ + /* demux_thread_running is zero if demux loop has been stopped by user */ non_user = stream->demux_thread_running; stream->demux_thread_running = 0; @@ -448,7 +448,7 @@ int _x_demux_read_header( input_plugin_t *input, unsigned char *buffer, off_t si return read_size; } -int _x_demux_check_extension (char *mrl, char *extensions){ +int _x_demux_check_extension (const char *mrl, const char *extensions){ char *last_dot, *e, *ext_copy, *ext_work; ext_copy = strdup(extensions); diff --git a/src/xine-engine/input_cache.c b/src/xine-engine/input_cache.c index 33b8b47da..a566e1f84 100644 --- a/src/xine-engine/input_cache.c +++ b/src/xine-engine/input_cache.c @@ -22,7 +22,7 @@ * The goal of this input plugin is to reduce * the number of calls to the real input plugin. * - * $Id: input_cache.c,v 1.12 2006/09/08 06:20:37 tmattern Exp $ + * $Id: input_cache.c,v 1.14 2007/02/20 00:34:57 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -67,7 +67,7 @@ static off_t cache_plugin_read(input_plugin_t *this_gen, char *buf, off_t len) { off_t read_len = 0; off_t main_read; - lprintf("cache_plugin_read: len=%lld\n", len); + lprintf("cache_plugin_read: len=%"PRId64"\n", len); this->read_call++; /* optimized for common cases */ @@ -205,7 +205,7 @@ static off_t cache_plugin_seek(input_plugin_t *this_gen, off_t offset, int origi off_t rel_offset; off_t new_buf_pos; - lprintf("offset: %lld, origin: %d\n", offset, origin); + lprintf("offset: %"PRId64", origin: %d\n", offset, origin); this->seek_call++; if( !this->buf_len ) { @@ -236,7 +236,7 @@ static off_t cache_plugin_seek(input_plugin_t *this_gen, off_t offset, int origi } new_buf_pos = (off_t)this->buf_pos + rel_offset; - lprintf("buf_len: %d, rel_offset=%lld, new_buf_pos=%lld\n", + lprintf("buf_len: %d, rel_offset=%"PRId64", new_buf_pos=%"PRId64"\n", this->buf_len, rel_offset, new_buf_pos); if ((new_buf_pos < 0) || (new_buf_pos >= this->buf_len)) { @@ -304,7 +304,7 @@ static uint32_t cache_plugin_get_blocksize(input_plugin_t *this_gen) { return this->main_input_plugin->get_blocksize(this->main_input_plugin); } -static char* cache_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* cache_plugin_get_mrl (input_plugin_t *this_gen) { cache_input_plugin_t *this = (cache_input_plugin_t *)this_gen; return this->main_input_plugin->get_mrl(this->main_input_plugin); diff --git a/src/xine-engine/input_rip.c b/src/xine-engine/input_rip.c index bb6548bc2..d8715fb85 100644 --- a/src/xine-engine/input_rip.c +++ b/src/xine-engine/input_rip.c @@ -29,7 +29,7 @@ * - it's possible speeder saving streams in the xine without playing: * xine stream_mrl#save:file.raw\;noaudio\;novideo * - * $Id: input_rip.c,v 1.31 2006/06/20 00:35:07 dgp85 Exp $ + * $Id: input_rip.c,v 1.34 2007/02/20 00:34:57 dgp85 Exp $ */ /* TODO: @@ -103,7 +103,7 @@ static off_t rip_plugin_read(input_plugin_t *this_gen, char *buf, off_t len) { rip_input_plugin_t *this = (rip_input_plugin_t *)this_gen; off_t retlen, npreview, nread, nwrite, nread_orig, nread_file; - lprintf("reading %lld bytes (curpos = %lld, savepos = %lld)\n", len, this->curpos, this->savepos); + lprintf("reading %"PRId64" bytes (curpos = %"PRId64", savepos = %"PRId64")\n", len, this->curpos, this->savepos); if (len < 0) return -1; @@ -117,7 +117,7 @@ static off_t rip_plugin_read(input_plugin_t *this_gen, char *buf, off_t len) { nread = min_off(this->savepos - this->preview_size, len - npreview); } - lprintf(" => get %lld bytes from preview (%lld bytes)\n", npreview, this->preview_size); + lprintf(" => get %"PRId64" bytes from preview (%"PRId64" bytes)\n", npreview, this->preview_size); memcpy(buf, &this->preview[this->curpos], npreview); } else { @@ -134,7 +134,7 @@ static off_t rip_plugin_read(input_plugin_t *this_gen, char *buf, off_t len) { /* re-reading from file */ if (nread_file) { - lprintf(" => read %lld bytes from file\n", nread_file); + lprintf(" => read %"PRId64" bytes from file\n", nread_file); if (fread(&buf[npreview], nread_file, 1, this->file) != 1) { xine_log(this->stream->xine, XINE_LOG_MSG, _("input_rip: reading of saved data failed: %s\n"), strerror(errno)); return -1; @@ -143,11 +143,11 @@ static off_t rip_plugin_read(input_plugin_t *this_gen, char *buf, off_t len) { /* really to read/catch */ if (nread_orig + nwrite) { - lprintf(" => read %lld bytes from input plugin\n", nread_orig + nwrite); + lprintf(" => read %"PRId64" bytes from input plugin\n", nread_orig + nwrite); /* read from main input plugin */ retlen = this->main_input_plugin->read(this->main_input_plugin, &buf[npreview + nread_file], nread_orig + nwrite); - lprintf("%s => returned %lld" CLR_RST "\n", retlen == nread_orig + nwrite ? "" : CLR_FAIL, retlen); + lprintf("%s => returned %"PRId64"" CLR_RST "\n", retlen == nread_orig + nwrite ? "" : CLR_FAIL, retlen); if (retlen < 0) { xine_log(this->stream->xine, XINE_LOG_MSG, @@ -163,7 +163,7 @@ static off_t rip_plugin_read(input_plugin_t *this_gen, char *buf, off_t len) { return -1; } this->savepos += nwrite; - lprintf(" => saved %lld bytes\n", nwrite); + lprintf(" => saved %"PRId64" bytes\n", nwrite); } else nwrite = 0; } @@ -212,7 +212,7 @@ static buf_element_t *rip_plugin_read_block(input_plugin_t *this_gen, fifo_buffe buf_element_t *buf = NULL; off_t retlen, npreview, nread, nwrite, nread_orig, nread_file; - lprintf("reading %lld bytes (curpos = %lld, savepos = %lld) (block)\n", todo, this->curpos, this->savepos); + lprintf("reading %"PRId64" bytes (curpos = %"PRId64", savepos = %"PRId64") (block)\n", todo, this->curpos, this->savepos); if (todo <= 0) return NULL; @@ -226,7 +226,7 @@ static buf_element_t *rip_plugin_read_block(input_plugin_t *this_gen, fifo_buffe nread = min_off(this->savepos - this->preview_size, todo - npreview); } - lprintf(" => get %lld bytes from preview (%lld bytes) (block)\n", npreview, this->preview_size); + lprintf(" => get %"PRId64" bytes from preview (%"PRId64" bytes) (block)\n", npreview, this->preview_size); } else { npreview = 0; nread = min_off(this->savepos - this->curpos, todo); @@ -247,13 +247,13 @@ static buf_element_t *rip_plugin_read_block(input_plugin_t *this_gen, fifo_buffe /* get data from preview */ if (npreview) { - lprintf(" => get %lld bytes from the preview (block)\n", npreview); + lprintf(" => get %"PRId64" bytes from the preview (block)\n", npreview); memcpy(buf->content, &this->preview[this->curpos], npreview); } /* re-reading from the file */ if (nread_file) { - lprintf(" => read %lld bytes from the file (block)\n", nread_file); + lprintf(" => read %"PRId64" bytes from the file (block)\n", nread_file); if (fread(&buf->content[npreview], nread_file, 1, this->file) != 1) { xine_log(this->stream->xine, XINE_LOG_MSG, _("input_rip: reading of saved data failed: %s\n"), @@ -267,10 +267,10 @@ static buf_element_t *rip_plugin_read_block(input_plugin_t *this_gen, fifo_buffe if (nread_orig + nwrite) { /* read from main input plugin */ if (buf) { - lprintf(" => read %lld bytes from input plugin (block)\n", nread_orig + nwrite); + lprintf(" => read %"PRId64" bytes from input plugin (block)\n", nread_orig + nwrite); retlen = this->main_input_plugin->read(this->main_input_plugin, &buf->content[npreview + nread_file], nread_orig + nwrite); } else { - lprintf(" => read block of %lld bytes from input plugin (block)\n", nread_orig + nwrite); + lprintf(" => read block of %"PRId64" bytes from input plugin (block)\n", nread_orig + nwrite); buf = this->main_input_plugin->read_block(this->main_input_plugin, fifo, nread_orig + nwrite); if (buf) retlen = buf->size; else { @@ -279,7 +279,7 @@ static buf_element_t *rip_plugin_read_block(input_plugin_t *this_gen, fifo_buffe } } if (retlen != nread_orig + nwrite) { - lprintf(CLR_FAIL " => returned %lld" CLR_RST "\n", retlen); + lprintf(CLR_FAIL " => returned %"PRId64"" CLR_RST "\n", retlen); return NULL; } @@ -293,7 +293,7 @@ static buf_element_t *rip_plugin_read_block(input_plugin_t *this_gen, fifo_buffe return NULL; } this->savepos += nwrite; - lprintf(" => saved %lld bytes\n", nwrite); + lprintf(" => saved %"PRId64" bytes\n", nwrite); } else nwrite = 0; } @@ -307,7 +307,7 @@ static buf_element_t *rip_plugin_read_block(input_plugin_t *this_gen, fifo_buffe static off_t rip_seek_original(rip_input_plugin_t *this, off_t reqpos) { off_t pos; - lprintf(" => seeking original input plugin to %lld\n", reqpos); + lprintf(" => seeking original input plugin to %"PRId64"\n", reqpos); pos = this->main_input_plugin->seek(this->main_input_plugin, reqpos, SEEK_SET); if (pos == -1) { @@ -316,7 +316,7 @@ static off_t rip_seek_original(rip_input_plugin_t *this, off_t reqpos) { } #ifdef LOG if (pos != reqpos) { - lprintf(CLR_FAIL " => reqested position %lld differs from result position %lld" CLR_RST "\n", reqpos, pos); + lprintf(CLR_FAIL " => reqested position %"PRId64" differs from result position %"PRId64"" CLR_RST "\n", reqpos, pos); } #endif @@ -339,7 +339,7 @@ static off_t rip_plugin_seek(input_plugin_t *this_gen, off_t offset, int origin) struct timeval time1, time2; double interval = 0; - lprintf("seek, offset %lld, origin %d (curpos %lld, savepos %lld)\n", offset, origin, this->curpos, this->savepos); + lprintf("seek, offset %"PRId64", origin %d (curpos %"PRId64", savepos %"PRId64")\n", offset, origin, this->curpos, this->savepos); switch (origin) { case SEEK_SET: newpos = offset; break; @@ -355,7 +355,7 @@ static off_t rip_plugin_seek(input_plugin_t *this_gen, off_t offset, int origin) blocksize = 0; if (newpos < this->savepos) { - lprintf(" => virtual seeking from %lld to %lld\n", this->curpos, newpos); + lprintf(" => virtual seeking from %"PRId64" to %"PRId64"\n", this->curpos, newpos); /* don't seek into preview area */ if (this->preview && newpos < this->preview_size) { @@ -366,7 +366,7 @@ static off_t rip_plugin_seek(input_plugin_t *this_gen, off_t offset, int origin) if (this->regular) { if (reqpos != this->savepos) { - lprintf(" => seeking file to %lld\n", reqpos); + lprintf(" => seeking file to %"PRId64"\n", reqpos); if (fseeko(this->file, reqpos, SEEK_SET) != 0) { xine_log(this->stream->xine, XINE_LOG_MSG, _("input_rip: seeking failed: %s\n"), strerror(errno)); return -1; @@ -382,9 +382,9 @@ static off_t rip_plugin_seek(input_plugin_t *this_gen, off_t offset, int origin) } if (this->curpos < this->savepos) { - lprintf(" => seeking to end: %lld\n", this->savepos); + lprintf(" => seeking to end: %"PRId64"\n", this->savepos); if (this->regular) { - lprintf(" => seeking file to end: %lld\n", this->savepos); + lprintf(" => seeking file to end: %"PRId64"\n", this->savepos); if (fseeko(this->file, this->savepos, SEEK_SET) != 0) { xine_log(this->stream->xine, XINE_LOG_MSG, _("input_rip: seeking failed: %s\n"), strerror(errno)); return -1; @@ -425,11 +425,19 @@ static off_t rip_plugin_seek(input_plugin_t *this_gen, off_t offset, int origin) + (double)(time2.tv_usec - time1.tv_usec) / 1000000; } - lprintf(" => new position %lld\n", this->curpos); + lprintf(" => new position %"PRId64"\n", this->curpos); return this->curpos; } +static off_t rip_plugin_seek_time(input_plugin_t *this_gen, int time_offset, int origin) { + rip_input_plugin_t *this = (rip_input_plugin_t *)this_gen; + + lprintf("seek_time, time_offset: %d, origin: %d\n", time_offset, origin); + + return this->main_input_plugin->seek_time(this->main_input_plugin, time_offset, origin); +} + /* * return current position, * check values for debug build @@ -441,13 +449,19 @@ static off_t rip_plugin_get_current_pos(input_plugin_t *this_gen) { pos = this->main_input_plugin->get_current_pos(this->main_input_plugin); if (pos != this->curpos) { - lprintf(CLR_FAIL "position: computed = %lld, input plugin = %lld" CLR_RST "\n", this->curpos, pos); + lprintf(CLR_FAIL "position: computed = %"PRId64", input plugin = %"PRId64"" CLR_RST "\n", this->curpos, pos); } #endif return this->curpos; } +static int rip_plugin_get_current_time(input_plugin_t *this_gen) { + rip_input_plugin_t *this = (rip_input_plugin_t *)this_gen; + + return this->main_input_plugin->get_current_time(this->main_input_plugin); +} + static off_t rip_plugin_get_length (input_plugin_t *this_gen) { rip_input_plugin_t *this = (rip_input_plugin_t *)this_gen; off_t length; @@ -465,7 +479,7 @@ static uint32_t rip_plugin_get_blocksize(input_plugin_t *this_gen) { return this->main_input_plugin->get_blocksize(this->main_input_plugin); } -static char* rip_plugin_get_mrl (input_plugin_t *this_gen) { +static const char* rip_plugin_get_mrl (input_plugin_t *this_gen) { rip_input_plugin_t *this = (rip_input_plugin_t *)this_gen; return this->main_input_plugin->get_mrl(this->main_input_plugin); @@ -646,7 +660,7 @@ input_plugin_t *_x_rip_plugin_get_instance (xine_stream_t *stream, const char *f free(this); return NULL; } - lprintf(" => saved %lld bytes (preview)\n", this->preview_size); + lprintf(" => saved %"PRId64" bytes (preview)\n", this->preview_size); this->savepos = this->preview_size; } @@ -655,7 +669,11 @@ input_plugin_t *_x_rip_plugin_get_instance (xine_stream_t *stream, const char *f this->input_plugin.read = rip_plugin_read; this->input_plugin.read_block = rip_plugin_read_block; this->input_plugin.seek = rip_plugin_seek; + if(this->main_input_plugin->seek_time) + this->input_plugin.seek_time = rip_plugin_seek_time; this->input_plugin.get_current_pos = rip_plugin_get_current_pos; + if(this->main_input_plugin->get_current_time) + this->input_plugin.get_current_time = rip_plugin_get_current_time; this->input_plugin.get_length = rip_plugin_get_length; this->input_plugin.get_blocksize = rip_plugin_get_blocksize; this->input_plugin.get_mrl = rip_plugin_get_mrl; diff --git a/src/xine-engine/load_plugins.c b/src/xine-engine/load_plugins.c index 62f4705fa..d35eba736 100644 --- a/src/xine-engine/load_plugins.c +++ b/src/xine-engine/load_plugins.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: load_plugins.c,v 1.228 2006/11/23 21:05:31 klan Exp $ + * $Id: load_plugins.c,v 1.230 2007/02/19 23:33:33 dgp85 Exp $ * * * Load input/demux/audio_out/video_out/codec plugins @@ -1989,18 +1989,19 @@ int _x_decoder_available (xine_t *xine, uint32_t buftype) return 0; } - #ifdef LOG static void _display_file_plugin_list (xine_list_t *list, plugin_file_t *file) { - plugin_node_t *node; + xine_list_iterator_t ite = xine_list_front(list); + + while (ite) { + plugin_node_t *node = xine_list_get_value(list, ite); - node = xine_list_first_content(list); - while (node) { if ((node->file == file) && (node->ref)) { printf(" plugin: %s, class: %p , %d instance(s)\n", node->info->id, node->plugin_class, node->ref); } - node = xine_list_next_content(list); + + ite = xine_list_next(list, ite); } } #endif @@ -2375,14 +2376,14 @@ char *xine_get_file_extensions (xine_t *self) { list_size = xine_sarray_size (catalog->plugin_lists[PLUGIN_DEMUX - 1]); for (list_id = 0; list_id < list_size; list_id++) { demux_class_t *cls; - char *exts; + const char *exts; node = xine_sarray_get (catalog->plugin_lists[PLUGIN_DEMUX - 1], list_id); if (node->plugin_class || _load_plugin_class(self, node, NULL)) { cls = (demux_class_t *)node->plugin_class; - if((exts = cls->get_extensions(cls)) && strlen(exts)) + if((exts = cls->get_extensions(cls)) && *exts) len += strlen(exts) + 1; } } @@ -2394,7 +2395,7 @@ char *xine_get_file_extensions (xine_t *self) { list_size = xine_sarray_size (catalog->plugin_lists[PLUGIN_DEMUX - 1]); for (list_id = 0; list_id < list_size; list_id++) { demux_class_t *cls; - char *e; + const char *e; int l; node = xine_sarray_get (catalog->plugin_lists[PLUGIN_DEMUX - 1], list_id); @@ -2402,7 +2403,7 @@ char *xine_get_file_extensions (xine_t *self) { cls = (demux_class_t *)node->plugin_class; - if((e = cls->get_extensions (cls)) && strlen(e)) { + if((e = cls->get_extensions (cls)) && *e) { l = strlen(e); memcpy (&str[pos], e, l); @@ -2444,7 +2445,7 @@ char *xine_get_mime_types (xine_t *self) { for (list_id = 0; list_id < list_size; list_id++) { demux_class_t *cls; - char *s; + const char *s; node = xine_sarray_get (catalog->plugin_lists[PLUGIN_DEMUX - 1], list_id); if (node->plugin_class || _load_plugin_class(self, node, NULL)) { @@ -2466,7 +2467,7 @@ char *xine_get_mime_types (xine_t *self) { for (list_id = 0; list_id < list_size; list_id++) { demux_class_t *cls; - char *s; + const char *s; int l; node = xine_sarray_get (catalog->plugin_lists[PLUGIN_DEMUX - 1], list_id); @@ -2503,6 +2504,7 @@ char *xine_get_demux_for_mime_type (xine_t *self, const char *mime_type) { char *id = NULL; char *mime_arg, *mime_demux; char *s; + const char *mt; int list_id, list_size; /* create a copy and convert to lower case */ @@ -2522,9 +2524,9 @@ char *xine_get_demux_for_mime_type (xine_t *self, const char *mime_type) { cls = (demux_class_t *)node->plugin_class; - s = cls->get_mimetypes (cls); - if (s) { - mime_demux = strdup(s); + mt = cls->get_mimetypes (cls); + if (mt) { + mime_demux = strdup(mt); for(s=mime_demux; *s; s++) *s = tolower(*s); diff --git a/src/xine-engine/metronom.c b/src/xine-engine/metronom.c index 809204af9..fa33da9e1 100644 --- a/src/xine-engine/metronom.c +++ b/src/xine-engine/metronom.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: metronom.c,v 1.143 2006/01/27 22:35:07 dsalt Exp $ + * $Id: metronom.c,v 1.144 2007/02/20 00:34:57 dgp85 Exp $ */ #ifdef HAVE_CONFIG_H @@ -524,7 +524,7 @@ static void metronom_got_video_frame (metronom_t *this, vo_frame_t *img) { img->vpts = this->video_vpts + this->av_offset; if (this->video_mode == VIDEO_PREDICTION_MODE) { - lprintf("video vpts for %10lld : %10lld (duration:%d drift:%" PRId64 " step:%" PRId64 ")\n", + lprintf("video vpts for %10"PRId64" : %10"PRId64" (duration:%d drift:%" PRId64 " step:%" PRId64 ")\n", pts, this->video_vpts, img->duration, this->video_drift, this->video_drift_step ); if (this->video_drift * this->video_drift_step > 0) { @@ -681,7 +681,7 @@ static int64_t metronom_got_audio_samples (metronom_t *this, int64_t pts, this->audio_samples += nsamples; this->vpts_offset += nsamples * this->audio_drift_step / AUDIO_SAMPLE_NUM; - lprintf("audio vpts for %10lld : %10lld\n", pts, vpts); + lprintf("audio vpts for %10"PRId64" : %10"PRId64"\n", pts, vpts); pthread_mutex_unlock (&this->lock); diff --git a/src/xine-engine/osd.c b/src/xine-engine/osd.c index b5f45d0af..b33d81f6e 100644 --- a/src/xine-engine/osd.c +++ b/src/xine-engine/osd.c @@ -102,6 +102,12 @@ # define KERNING_DEFAULT ft_kerning_default #endif +#ifdef ENABLE_ANTIALIASING +# define FT_LOAD_FLAGS FT_LOAD_DEFAULT +#else +# define FT_LOAD_FLAGS (FT_LOAD_DEFAULT | FT_LOAD_NO_HINTING) +#endif + typedef struct osd_fontchar_s { uint16_t code; uint16_t width; @@ -194,7 +200,7 @@ static int _osd_show (osd_object_t *osd, int64_t vpts, int unscaled ) { int x, y, required; uint8_t *c; - lprintf("osd=%p vpts=%lld\n", osd, vpts); + lprintf("osd=%p vpts=%"PRId64"\n", osd, vpts); this->stream->xine->port_ticket->acquire(this->stream->xine->port_ticket, 1); @@ -341,7 +347,7 @@ static int _osd_hide (osd_object_t *osd, int64_t vpts) { osd_renderer_t *this = osd->renderer; video_overlay_manager_t *ovl_manager; - lprintf("osd=%p vpts=%lld\n",osd, vpts); + lprintf("osd=%p vpts=%"PRId64"\n",osd, vpts); if( osd->handle < 0 ) return 0; @@ -1171,7 +1177,7 @@ static int osd_render_text (osd_object_t *osd, int x1, int y1, } previous = i; - if (FT_Load_Glyph(osd->ft2->face, i, FT_LOAD_DEFAULT)) { + if (FT_Load_Glyph(osd->ft2->face, i, FT_LOAD_FLAGS)) { xprintf(this->stream->xine, XINE_VERBOSITY_LOG, _("osd: error loading glyph\n")); continue; } @@ -1475,7 +1481,16 @@ static void osd_free_object (osd_object_t *osd_to_close) { while( osd ) { if ( osd == osd_to_close ) { free( osd->area ); - if( osd->ft2 ) free( osd->ft2 ); + +#ifdef HAVE_FT2 + if( osd->ft2 ) { + if ( osd->ft2->library ) + FT_Done_FreeType(osd->ft2->library); + + free( osd->ft2 ); + } +#endif + osd_free_encoding(osd); if( last ) diff --git a/src/xine-engine/post.h b/src/xine-engine/post.h index f8aba5cef..bcdc3c54b 100644 --- a/src/xine-engine/post.h +++ b/src/xine-engine/post.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: post.h,v 1.23 2006/09/26 05:19:49 dgp85 Exp $ + * $Id: post.h,v 1.26 2007/02/20 01:13:08 dgp85 Exp $ * * post plugin definitions * @@ -259,7 +259,7 @@ void _x_post_frame_copy_up(vo_frame_t *to, vo_frame_t *from) XINE_PROTECTED; /* when you shortcut a frames usual draw() travel so that it will never reach * the draw() function of the original issuer, you still have to do some * housekeeping on the frame, before returning control up the pipe */ -void _x_post_frame_u_turn(vo_frame_t *frame, xine_stream_t *stream); +void _x_post_frame_u_turn(vo_frame_t *frame, xine_stream_t *stream) XINE_PROTECTED; /* use this to create a new, trivially decorated overlay manager in which * port functions can be replaced with own implementations */ @@ -380,7 +380,7 @@ static xine_post_api_parameter_t temp_p[] = { #define PARAM_ITEM( param_type, var, enumv, min, max, readonly, descr ) \ { param_type, #var, sizeof(temp_s.var), \ - (char *)&temp_s.var-(char *)&temp_s, enumv, min, max, readonly, descr }, + (char*)&temp_s.var-(char*)&temp_s, enumv, min, max, readonly, descr }, #define END_PARAM_DESCR( name ) \ { POST_PARAM_TYPE_LAST, NULL, 0, 0, NULL, 0, 0, 1, NULL } \ diff --git a/src/xine-engine/scratch.c b/src/xine-engine/scratch.c index eac5eee63..67281b041 100644 --- a/src/xine-engine/scratch.c +++ b/src/xine-engine/scratch.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: scratch.c,v 1.22 2006/10/18 18:46:17 hadess Exp $ + * $Id: scratch.c,v 1.24 2007/01/19 00:12:22 dgp85 Exp $ * * top-level xine functions * @@ -47,6 +47,8 @@ static void __attribute__((__format__(__printf__, 2, 0))) struct tm tm; size_t l; + pthread_mutex_lock (&this->lock); + time (&t); localtime_r (&t, &tm); @@ -61,37 +63,46 @@ static void __attribute__((__format__(__printf__, 2, 0))) lprintf ("printing format %s to line %d\n", format, this->cur); this->cur = (this->cur + 1) % this->num_lines; + + pthread_mutex_unlock (&this->lock); } -static const char **scratch_get_content (scratch_buffer_t *this) { +static char **scratch_get_content (scratch_buffer_t *this) { int i, j; + pthread_mutex_lock (&this->lock); + for(i = 0, j = (this->cur - 1); i < this->num_lines; i++, j--) { if(j < 0) j = (this->num_lines - 1); - this->ordered[i] = this->lines[j]; + free (this->ordered[i]); + this->ordered[i] = this->lines[j] ? strdup (this->lines[j]) : NULL; lprintf ("line %d contains >%s<\n", i , this->lines[j]); } + pthread_mutex_unlock (&this->lock); return this->ordered; } static void scratch_dispose (scratch_buffer_t *this) { - char *mem; int i; - mem = (char *) this->lines[0]; - + pthread_mutex_lock (&this->lock); + for(i = 0; i < this->num_lines; i++ ) { + free(this->ordered[i]); free(this->lines[i]); - this->lines[i] = NULL; } free (this->lines); free (this->ordered); + + pthread_mutex_unlock (&this->lock); + pthread_mutex_destroy (&this->lock); + free (this); } @@ -104,16 +115,15 @@ scratch_buffer_t *_x_new_scratch_buffer (int num_lines) { this->lines = xine_xmalloc (sizeof (char *) * (num_lines + 1)); this->ordered = xine_xmalloc (sizeof (char *) * (num_lines + 1)); - for (i = 0; i < num_lines; i++) - this->lines[i] = NULL; + for (i = 0; i <= num_lines; i++) + this->lines[i] = this->ordered[i] = NULL; - this->ordered[i] = NULL; - this->lines[i] = NULL; this->scratch_printf = scratch_printf; this->get_content = scratch_get_content; this->dispose = scratch_dispose; this->num_lines = num_lines; this->cur = 0; + pthread_mutex_init (&this->lock, NULL); return this; } diff --git a/src/xine-engine/scratch.h b/src/xine-engine/scratch.h index d23d68503..bcfe815c3 100644 --- a/src/xine-engine/scratch.h +++ b/src/xine-engine/scratch.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: scratch.h,v 1.11 2006/09/26 05:19:49 dgp85 Exp $ + * $Id: scratch.h,v 1.13 2007/01/19 00:12:22 dgp85 Exp $ * * scratch buffer for log output * @@ -27,6 +27,7 @@ #define HAVE_SCRATCH_H #include <stdarg.h> +#include <pthread.h> typedef struct scratch_buffer_s scratch_buffer_t; @@ -40,16 +41,17 @@ struct scratch_buffer_s { #endif (*scratch_printf) (scratch_buffer_t *this, const char *format, va_list ap); - const char **(*get_content) (scratch_buffer_t *this); + char **(*get_content) (scratch_buffer_t *this); void (*dispose) (scratch_buffer_t *this); char **lines; - const char **ordered; + char **ordered; int num_lines; int cur; + pthread_mutex_t lock; }; scratch_buffer_t *_x_new_scratch_buffer (int num_lines) XINE_PROTECTED; diff --git a/src/xine-engine/video_decoder.c b/src/xine-engine/video_decoder.c index 16ebb61b2..fee75ec76 100644 --- a/src/xine-engine/video_decoder.c +++ b/src/xine-engine/video_decoder.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_decoder.c,v 1.161 2006/09/08 21:11:29 miguelfreitas Exp $ + * $Id: video_decoder.c,v 1.163 2007/02/20 00:34:58 dgp85 Exp $ * */ @@ -193,8 +193,13 @@ static void *video_decoder_loop (void *stream_gen) { /* * wait the output fifos to run dry before sending the notification event - * to the frontend. this test is only valid if there is only a single - * stream attached to the current output port. + * to the frontend. exceptions: + * 1) don't wait if there is more than one stream attached to the current + * output port (the other stream might be sending data so we would be + * here forever) + * 2) early_finish_event: send notification asap to allow gapless switch + * 3) slave stream: don't wait. get into an unblocked state asap to allow + * new master actions. */ while(1) { int num_bufs, num_streams; @@ -204,7 +209,8 @@ static void *video_decoder_loop (void *stream_gen) { num_streams = stream->video_out->get_property(stream->video_out, VO_PROP_NUM_STREAMS); running_ticket->release(running_ticket, 0); - if( num_bufs > 0 && num_streams == 1 && !stream->early_finish_event ) + if( num_bufs > 0 && num_streams == 1 && !stream->early_finish_event && + stream->master == stream ) xine_usec_sleep (10000); else break; @@ -302,7 +308,7 @@ static void *video_decoder_loop (void *stream_gen) { break; case BUF_CONTROL_NEWPTS: - lprintf ("new pts %lld\n", buf->disc_off); + lprintf ("new pts %"PRId64"\n", buf->disc_off); if (stream->video_decoder_plugin) { running_ticket->acquire(running_ticket, 0); diff --git a/src/xine-engine/video_out.c b/src/xine-engine/video_out.c index 19d635d76..2a3ee1980 100644 --- a/src/xine-engine/video_out.c +++ b/src/xine-engine/video_out.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_out.c,v 1.225 2006/03/25 01:26:34 dsalt Exp $ + * $Id: video_out.c,v 1.228 2007/04/01 01:03:06 dgp85 Exp $ * * frame allocation / queuing / scheduling / output functions */ @@ -93,11 +93,20 @@ typedef struct { vo_frame_t *last_frame; vo_frame_t *img_backup; - int redraw_needed; + + uint32_t video_loop_running:1; + uint32_t video_opened:1; + + uint32_t overlay_enabled:1; + + uint32_t warn_threshold_event_sent:1; + + /* do we true real-time output or is this a grab only instance ? */ + uint32_t grab_only:1; + + uint32_t redraw_needed:3; int discard_frames; - int video_loop_running; - int video_opened; pthread_t video_thread; int num_frames_delivered; @@ -108,17 +117,12 @@ typedef struct { int warn_skipped_threshold; int warn_discarded_threshold; int warn_threshold_exceeded; - int warn_threshold_event_sent; /* pts value when decoder delivered last video frame */ int64_t last_delivery_pts; video_overlay_manager_t *overlay_source; - int overlay_enabled; - - /* do we true real-time output or is this a grab only instance ? */ - int grab_only; extra_info_t *extra_info_base; /* used to free mem chunk */ @@ -600,7 +604,7 @@ static int vo_frame_draw (vo_frame_t *img, xine_stream_t *stream) { */ send_event = (this->warn_threshold_exceeded == 5 && !this->warn_threshold_event_sent); - this->warn_threshold_event_sent += send_event; + this->warn_threshold_event_sent = send_event; pthread_mutex_lock(&this->streams_lock); for (ite = xine_list_front(this->streams); ite; @@ -1195,7 +1199,7 @@ static void *video_out_loop (void *this_gen) { if (this->clock->speed == XINE_SPEED_PAUSE) paused_loop (this, vpts); - if (next_frame_vpts) { + if (next_frame_vpts && this->clock->speed > 0) { usec_to_sleep = (next_frame_vpts - vpts) * 100 * XINE_FINE_SPEED_NORMAL / (9 * this->clock->speed); } else { /* we don't know when the next frame is due, only wait a little */ @@ -1783,11 +1787,23 @@ xine_video_port_t *_x_vo_new_port (xine_t *xine, vo_driver_t *driver, int grabon this->frame_drop_limit = 3; this->frame_drop_cpt = 0; - num_frame_buffers = driver->get_property (driver, VO_PROP_MAX_NUM_FRAMES); - - if (!num_frame_buffers) - num_frame_buffers = NUM_FRAME_BUFFERS; /* default */ - else if (num_frame_buffers<5) + /* default number of video frames from config */ + num_frame_buffers = xine->config->register_num (xine->config, + "engine.buffers.video_num_frames", + NUM_FRAME_BUFFERS, /* default */ + _("default number of video frames"), + _("The default number of video frames to request " + "from xine video out driver. Some drivers will " + "override this setting with their own values."), + 20, NULL, NULL); + + /* check driver's limit and use the smaller value */ + i = driver->get_property (driver, VO_PROP_MAX_NUM_FRAMES); + if (i && i < num_frame_buffers) + num_frame_buffers = i; + + /* we need at least 5 frames */ + if (num_frame_buffers<5) num_frame_buffers = 5; this->extra_info_base = calloc (num_frame_buffers, diff --git a/src/xine-engine/xine.c b/src/xine-engine/xine.c index 78476a768..f49a988c9 100644 --- a/src/xine-engine/xine.c +++ b/src/xine-engine/xine.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine.c,v 1.335 2006/10/16 22:18:24 valtri Exp $ + * $Id: xine.c,v 1.342 2007/02/20 00:37:02 dgp85 Exp $ */ /* @@ -78,6 +78,10 @@ #endif /* WIN32 */ +static void mutex_cleanup (void *mutex) { + pthread_mutex_unlock ((pthread_mutex_t *) mutex); +} + void _x_handle_stream_end (xine_stream_t *stream, int non_user) { if (stream->status == XINE_STATUS_QUIT) @@ -294,6 +298,7 @@ static void stop_internal (xine_stream_t *stream) { void xine_stop (xine_stream_t *stream) { pthread_mutex_lock (&stream->frontend_lock); + pthread_cleanup_push (mutex_cleanup, (void *) &stream->frontend_lock); /* make sure that other threads cannot change the speed, especially pauseing the stream */ pthread_mutex_lock(&stream->speed_change_lock); @@ -320,6 +325,7 @@ void xine_stop (xine_stream_t *stream) { stream->xine->port_ticket->release(stream->xine->port_ticket, 1); stream->ignore_speed_change = 0; + pthread_cleanup_pop (0); pthread_mutex_unlock (&stream->frontend_lock); } @@ -395,6 +401,7 @@ static void close_internal (xine_stream_t *stream) { void xine_close (xine_stream_t *stream) { pthread_mutex_lock (&stream->frontend_lock); + pthread_cleanup_push (mutex_cleanup, (void *) &stream->frontend_lock); close_internal (stream); @@ -408,6 +415,7 @@ void xine_close (xine_stream_t *stream) { if (stream->status != XINE_STATUS_QUIT) stream->status = XINE_STATUS_IDLE; + pthread_cleanup_pop (0); pthread_mutex_unlock (&stream->frontend_lock); } @@ -1131,11 +1139,13 @@ int xine_open (xine_stream_t *stream, const char *mrl) { int ret; pthread_mutex_lock (&stream->frontend_lock); + pthread_cleanup_push (mutex_cleanup, (void *) &stream->frontend_lock); lprintf ("open MRL:%s\n", mrl); ret = open_internal (stream, mrl); + pthread_cleanup_pop (0); pthread_mutex_unlock (&stream->frontend_lock); return ret; @@ -1263,6 +1273,7 @@ int xine_play (xine_stream_t *stream, int start_pos, int start_time) { int ret; pthread_mutex_lock (&stream->frontend_lock); + pthread_cleanup_push (mutex_cleanup, (void *) &stream->frontend_lock); stream->delay_finish_event = 0; @@ -1272,6 +1283,7 @@ int xine_play (xine_stream_t *stream, int start_pos, int start_time) { stream->gapless_switch = 0; + pthread_cleanup_pop (0); pthread_mutex_unlock (&stream->frontend_lock); return ret; @@ -1285,6 +1297,7 @@ int xine_eject (xine_stream_t *stream) { return 0; pthread_mutex_lock (&stream->frontend_lock); + pthread_cleanup_push (mutex_cleanup, (void *) &stream->frontend_lock); status = 0; /* only eject, if we are stopped OR a different input plugin is playing */ @@ -1295,7 +1308,9 @@ int xine_eject (xine_stream_t *stream) { status = stream->eject_class->eject_media (stream->eject_class); } + pthread_cleanup_pop (0); pthread_mutex_unlock (&stream->frontend_lock); + return status; } @@ -1520,8 +1535,8 @@ static void config_save_cb (void *this_gen, xine_cfg_entry_t *entry) { } void xine_init (xine_t *this) { - static char *demux_strategies[] = {"default", "reverse", "content", - "extension", NULL}; + static const char *demux_strategies[] = {"default", "reverse", "content", + "extension", NULL}; /* initialize color conversion tables and functions */ init_yuv_conversion(); @@ -1561,9 +1576,9 @@ void xine_init (xine_t *this) { /* * save directory */ - this->save_path = this->config->register_string ( + this->save_path = this->config->register_filename ( this->config, - "media.capture.save_dir", "", + "media.capture.save_dir", "", XINE_CONFIG_STRING_IS_DIRECTORY_NAME, _("directory for saving streams"), _("When using the stream save feature, files will be written only into this directory.\n" "This setting is security critical, because when changed to a different directory, xine " @@ -1604,9 +1619,10 @@ void xine_init (xine_t *this) { this->streams = xine_list_new(); /* - * streams lock + * locks */ pthread_mutex_init (&this->streams_lock, NULL); + pthread_mutex_init (&this->log_lock, NULL); /* * start metronom clock @@ -1951,12 +1967,21 @@ const char *const *xine_get_log_names (xine_t *this) { return log_sections; } +static inline void check_log_alloc (xine_t *this, int buf) +{ + pthread_mutex_lock (&this->log_lock); + + if ( ! this->log_buffers[buf] ) + this->log_buffers[buf] = _x_new_scratch_buffer(150); + + pthread_mutex_unlock (&this->log_lock); +} + void xine_log (xine_t *this, int buf, const char *format, ...) { va_list argp; char buffer[SCRATCH_LINE_LEN_MAX]; - if ( ! this->log_buffers[buf] ) - this->log_buffers[buf] = _x_new_scratch_buffer(150); + check_log_alloc (this, buf); va_start (argp, format); this->log_buffers[buf]->scratch_printf (this->log_buffers[buf], format, argp); @@ -1973,13 +1998,12 @@ void xine_log (xine_t *this, int buf, const char *format, ...) { void xine_vlog(xine_t *this, int buf, const char *format, va_list args) { - if ( ! this->log_buffers[buf] ) - this->log_buffers[buf] = _x_new_scratch_buffer(150); + check_log_alloc (this, buf); this->log_buffers[buf]->scratch_printf(this->log_buffers[buf], format, args); } -const char *const *xine_get_log (xine_t *this, int buf) { +char *const *xine_get_log (xine_t *this, int buf) { if(buf >= XINE_LOG_NUM) return NULL; diff --git a/src/xine-engine/xine_interface.c b/src/xine-engine/xine_interface.c index d0dc0e4a5..e58d9ed61 100644 --- a/src/xine-engine/xine_interface.c +++ b/src/xine-engine/xine_interface.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_interface.c,v 1.99 2006/10/16 06:29:38 dgp85 Exp $ + * $Id: xine_interface.c,v 1.104 2007/03/26 11:48:01 dgp85 Exp $ * * convenience/abstraction layer, functions to implement * libxine's public interface @@ -100,7 +100,23 @@ const char* xine_config_register_string (xine_t *self, cb_data); } + +const char* xine_config_register_filename (xine_t *self, + const char *key, + const char *def_value, + int req_type, + const char *description, + const char *help, + int exp_level, + xine_config_cb_t changed_cb, + void *cb_data) { + return self->config->register_filename (self->config, + key, def_value, req_type, + description, help, exp_level, + changed_cb, cb_data); +} + int xine_config_register_range (xine_t *self, const char *key, int def_value, @@ -325,6 +341,24 @@ int xine_port_send_gui_data (xine_video_port_t *vo, type, data); } +static void send_audio_amp_event_internal(xine_stream_t *stream) +{ + xine_event_t event; + xine_audio_level_data_t data; + + data.left + = data.right + = stream->audio_out->get_property (stream->audio_out, AO_PROP_AMP); + data.mute + = stream->audio_out->get_property (stream->audio_out, AO_PROP_AMP_MUTE); + + event.type = XINE_EVENT_AUDIO_AMP_LEVEL; + event.data = &data; + event.data_length = sizeof (data); + + xine_event_send(stream, &event); +} + void xine_set_param (xine_stream_t *stream, int param, int value) { /* Avoid crashing */ if ( ! stream ) { @@ -396,15 +430,21 @@ void xine_set_param (xine_stream_t *stream, int param, int value) { case XINE_PARAM_AUDIO_AMP_LEVEL: stream->xine->port_ticket->acquire(stream->xine->port_ticket, 0); - if (stream->audio_out) - stream->audio_out->set_property (stream->audio_out, AO_PROP_AMP, value); + if (stream->audio_out) { + int old_value = stream->audio_out->get_property (stream->audio_out, AO_PROP_AMP); + if (old_value != stream->audio_out->set_property (stream->audio_out, AO_PROP_AMP, value)) + send_audio_amp_event_internal(stream); + } stream->xine->port_ticket->release(stream->xine->port_ticket, 0); break; case XINE_PARAM_AUDIO_AMP_MUTE: stream->xine->port_ticket->acquire(stream->xine->port_ticket, 0); - if (stream->audio_out) - stream->audio_out->set_property (stream->audio_out, AO_PROP_AMP_MUTE, value); + if (stream->audio_out) { + int old_value = stream->audio_out->get_property (stream->audio_out, AO_PROP_AMP_MUTE); + if (old_value != stream->audio_out->set_property (stream->audio_out, AO_PROP_AMP_MUTE, value)) + send_audio_amp_event_internal(stream); + } stream->xine->port_ticket->release(stream->xine->port_ticket, 0); break; @@ -913,7 +953,7 @@ int _x_message(xine_stream_t *stream, int type, ...) { va_list ap; char *s, *params; char *args[1025]; - static char *std_explanation[] = { + static const char *std_explanation[] = { "", N_("Warning:"), N_("Unknown host:"), diff --git a/src/xine-engine/xine_internal.h b/src/xine-engine/xine_internal.h index 8ee5d8219..30899a4b3 100644 --- a/src/xine-engine/xine_internal.h +++ b/src/xine-engine/xine_internal.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_internal.h,v 1.179 2006/10/02 15:56:06 valtri Exp $ + * $Id: xine_internal.h,v 1.181 2007/01/18 23:28:46 dgp85 Exp $ * */ @@ -118,6 +118,7 @@ struct xine_s { #ifdef XINE_ENGINE_INTERNAL xine_ticket_t *port_ticket; + pthread_mutex_t log_lock; #endif }; @@ -415,7 +416,7 @@ void _x_demux_control_end (xine_stream_t *stream, uint32_t flags) XINE_ int _x_demux_start_thread (xine_stream_t *stream) XINE_PROTECTED; int _x_demux_stop_thread (xine_stream_t *stream) XINE_PROTECTED; int _x_demux_read_header (input_plugin_t *input, unsigned char *buffer, off_t size) XINE_PROTECTED; -int _x_demux_check_extension (char *mrl, char *extensions) XINE_PROTECTED; +int _x_demux_check_extension (const char *mrl, const char *extensions) XINE_PROTECTED; off_t _x_read_abort (xine_stream_t *stream, int fd, char *buf, off_t todo) XINE_PROTECTED; diff --git a/src/xine-engine/xine_plugin.h b/src/xine-engine/xine_plugin.h index f55c5be63..4ddb65eda 100644 --- a/src/xine-engine/xine_plugin.h +++ b/src/xine-engine/xine_plugin.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_plugin.h,v 1.21 2006/09/26 05:19:49 dgp85 Exp $ + * $Id: xine_plugin.h,v 1.23 2007/01/19 02:49:31 dgp85 Exp $ * * generic plugin definitions * @@ -73,7 +73,7 @@ typedef struct { /* special_info for a decoder plugin */ typedef struct { - uint32_t *supported_types; /* streamtypes this decoder can handle */ + uint32_t *supported_types; /* streamtypes this decoder can handle */ int priority; } decoder_info_t; diff --git a/src/xine-utils/.hgignore b/src/xine-utils/.hgignore new file mode 100644 index 000000000..7d926a554 --- /dev/null +++ b/src/xine-utils/.hgignore @@ -0,0 +1,6 @@ +Makefile +Makefile.in +.libs +.deps +*.lo +*.la diff --git a/src/xine-utils/Makefile.am b/src/xine-utils/Makefile.am index 7406abf86..95de06b9e 100644 --- a/src/xine-utils/Makefile.am +++ b/src/xine-utils/Makefile.am @@ -32,7 +32,7 @@ libxineutils_la_SOURCES = $(pppc_files) \ pool.c \ ring_buffer.c -include_HEADERS = \ +xineinclude_HEADERS = \ attributes.h \ compat.h \ xine_buffer.h \ diff --git a/src/xine-utils/array.c b/src/xine-utils/array.c index 4fcecbb4b..ed529515b 100644 --- a/src/xine-utils/array.c +++ b/src/xine-utils/array.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: array.c,v 1.3 2006/09/26 05:19:49 dgp85 Exp $ + * $Id: array.c,v 1.4 2007/02/03 16:31:55 dsalt Exp $ * */ #ifdef HAVE_CONFIG_H @@ -78,7 +78,7 @@ void xine_array_delete(xine_array_t *array) { free(array); } -size_t xine_array_size(xine_array_t *array) { +size_t xine_array_size(const xine_array_t *array) { return array->size; } @@ -116,7 +116,7 @@ void xine_array_remove(xine_array_t *array, unsigned int position) { } } -void *xine_array_get(xine_array_t *array, unsigned int position) { +void *xine_array_get(const xine_array_t *array, unsigned int position) { if (position < array->size) return array->chunk[position]; else diff --git a/src/xine-utils/array.h b/src/xine-utils/array.h index 45fc7b137..80b7d3c9b 100644 --- a/src/xine-utils/array.h +++ b/src/xine-utils/array.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: array.h,v 1.2 2006/09/26 05:19:49 dgp85 Exp $ + * $Id: array.h,v 1.3 2007/02/03 16:31:55 dsalt Exp $ * * Array that can grow automatically when you add elements. * Inserting an element in the middle of the array implies memory moves. @@ -35,7 +35,7 @@ xine_array_t *xine_array_new(size_t initial_size) XINE_PROTECTED; void xine_array_delete(xine_array_t *array) XINE_PROTECTED; /* Returns the number of element stored in the array */ -size_t xine_array_size(xine_array_t *array) XINE_PROTECTED; +size_t xine_array_size(const xine_array_t *array) XINE_PROTECTED; /* Removes all elements from an array */ void xine_array_clear(xine_array_t *array) XINE_PROTECTED; @@ -50,7 +50,7 @@ void xine_array_insert(xine_array_t *array, unsigned int position, void *value) void xine_array_remove(xine_array_t *array, unsigned int position) XINE_PROTECTED; /* Get the element at the position specified */ -void *xine_array_get(xine_array_t *array, unsigned int position) XINE_PROTECTED; +void *xine_array_get(const xine_array_t *array, unsigned int position) XINE_PROTECTED; /* Set the element at the position specified */ void xine_array_set(xine_array_t *array, unsigned int position, void *value) XINE_PROTECTED; diff --git a/src/xine-utils/attributes.h b/src/xine-utils/attributes.h index dd70d4309..4d22226ac 100644 --- a/src/xine-utils/attributes.h +++ b/src/xine-utils/attributes.h @@ -47,8 +47,10 @@ #endif /* Export protected only for libxine functions */ -#if defined(XINE_LIBRARY_COMPILE) && defined(SUPPORT_ATTRIBUTE_VISIBILITY) +#if defined(XINE_LIBRARY_COMPILE) && defined(SUPPORT_ATTRIBUTE_VISIBILITY_PROTECTED) # define XINE_PROTECTED __attribute__((visibility("protected"))) +#elif defined(XINE_LIBRARY_COMPILE) && defined(SUPPORT_ATTRIBUTE_VISIBILITY_DEFAULT) +# define XINE_PROTECTED __attribute__((visibility("default"))) #else # define XINE_PROTECTED #endif @@ -59,4 +61,12 @@ # define XINE_SENTINEL #endif +#ifndef __attr_unused +# ifdef SUPPORT_ATTRIBUTE_UNUSED +# define __attr_unused __attribute__((unused)) +# else +# define __attr_unused +# endif +#endif + #endif /* ATTRIBUTE_H_ */ diff --git a/src/xine-utils/list.h b/src/xine-utils/list.h index 9b9506a84..8273d30f1 100644 --- a/src/xine-utils/list.h +++ b/src/xine-utils/list.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: list.h,v 1.4 2006/09/26 05:19:49 dgp85 Exp $ + * $Id: list.h,v 1.5 2007/02/19 23:34:32 dgp85 Exp $ * * Doubly-linked linked list. * @@ -33,7 +33,7 @@ * xine_list_iterator_t ite = xine_list_front(list); * while (ite) { * _useful code here_ - * ite = xine_list_iterator_next(ite); + * ite = xine_list_next(list, ite); * } * * The list elements are managed using memory chunks and a free list. The first diff --git a/src/xine-utils/memcpy.c b/src/xine-utils/memcpy.c index 15301f108..539f4c8dd 100644 --- a/src/xine-utils/memcpy.c +++ b/src/xine-utils/memcpy.c @@ -461,7 +461,7 @@ void xine_probe_fast_memcpy(xine_t *xine) char *buf1, *buf2; int i, j, best; int config_flags = -1; - static char *memcpy_methods[] = { + static const char *memcpy_methods[] = { "probe", "libc", #if (defined(ARCH_X86) || defined(ARCH_X86_64)) && !defined(_MSC_VER) "kernel", "mmx", "mmxext", "sse", diff --git a/src/xine-utils/xineutils.h b/src/xine-utils/xineutils.h index 15f771da0..03c5f689a 100644 --- a/src/xine-utils/xineutils.h +++ b/src/xine-utils/xineutils.h @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xineutils.h,v 1.105 2006/10/16 22:18:24 valtri Exp $ + * $Id: xineutils.h,v 1.107 2006/12/25 15:16:33 dgp85 Exp $ * */ #ifndef XINEUTILS_H @@ -847,6 +847,7 @@ void xine_hexdump (const char *buf, int length) XINE_PROTECTED; do { \ LONG_LOG_MODULE_STRING \ printf(fmt, ##args); \ + fflush(stdout); \ } while(0) #else /* __GNUC__ */ #ifdef _MSC_VER @@ -854,12 +855,14 @@ void xine_hexdump (const char *buf, int length) XINE_PROTECTED; do { \ LONG_LOG_MODULE_STRING \ printf("%s", fmtargs); \ + fflush(stdout); \ } while(0) #else /* _MSC_VER */ - #define lprintf(fmt, ...) \ + #define lprintf(...) \ do { \ LONG_LOG_MODULE_STRING \ printf(__VA_ARGS__); \ + fflush(stdout); \ } while(0) #endif /* _MSC_VER */ #endif /* __GNUC__ */ diff --git a/src/xine-utils/xmllexer.c b/src/xine-utils/xmllexer.c index cc112b64a..575c37611 100644 --- a/src/xine-utils/xmllexer.c +++ b/src/xine-utils/xmllexer.c @@ -1,23 +1,24 @@ /* - * Copyright (C) 2002-2003 the xine project + * Copyright (C) 2002-2003,2007 the xine project * * This file is part of xine, a free video player. * - * xine 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. - * - * xine 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. + * The xine-lib XML parser 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. * - * 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 + * The xine-lib XML parser 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. * - * $Id: xmllexer.c,v 1.12 2006/06/20 00:35:08 dgp85 Exp $ + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If not, + * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * $Id: xmllexer.c,v 1.13 2007/03/04 16:19:12 hadess Exp $ * */ @@ -27,11 +28,17 @@ #define LOG */ +#ifdef XINE_COMPILE #include "xineutils.h" +#else +#define lprintf(...) +#define xine_xmalloc malloc +#endif #include "xmllexer.h" #include <stdio.h> #include <ctype.h> #include <string.h> +#include <stdlib.h> /* private constants*/ #define NORMAL 0 /* normal lex mode */ diff --git a/src/xine-utils/xmllexer.h b/src/xine-utils/xmllexer.h index bd69204ff..5a217fcd8 100644 --- a/src/xine-utils/xmllexer.h +++ b/src/xine-utils/xmllexer.h @@ -1,23 +1,24 @@ /* - * Copyright (C) 2002-2003 the xine project + * Copyright (C) 2002-2003,2007 the xine project * * This file is part of xine, a free video player. * - * xine 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. + * The xine-lib XML parser 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. * - * xine 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. + * The xine-lib XML parser 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 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 + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If not, + * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. * - * $Id: xmllexer.h,v 1.7 2006/09/26 05:19:49 dgp85 Exp $ + * $Id: xmllexer.h,v 1.8 2007/03/04 16:19:12 hadess Exp $ * */ @@ -25,6 +26,10 @@ #ifndef XML_LEXER_H #define XML_LEXER_H +#ifndef XINE_PROTECTED +#define XINE_PROTECTED +#endif + /* public constants */ #define T_ERROR -1 /* lexer error */ #define T_EOF 0 /* end of file */ diff --git a/src/xine-utils/xmlparser.c b/src/xine-utils/xmlparser.c index 2e8c84ae0..47096705a 100644 --- a/src/xine-utils/xmlparser.c +++ b/src/xine-utils/xmlparser.c @@ -1,24 +1,24 @@ /* - * Copyright (C) 2002-2003 the xine project + * Copyright (C) 2002-2003,2007 the xine project * * This file is part of xine, a free video player. - * This file is part of gxine, a free video player. * - * xine 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. + * The xine-lib XML parser 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. * - * xine 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. + * The xine-lib XML parser 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 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 + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If not, + * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. * - * $Id: xmlparser.c,v 1.15 2006/02/14 02:25:01 dsalt Exp $ + * $Id: xmlparser.c,v 1.16 2007/03/04 16:19:12 hadess Exp $ * */ @@ -35,7 +35,12 @@ #define LOG */ +#ifdef XINE_COMPILE #include "xineutils.h" +#else +#define lprintf(...) +#define xine_xmalloc malloc +#endif #include "xmllexer.h" #include "xmlparser.h" @@ -466,7 +471,7 @@ int xml_parser_build_tree(xml_node_t **root_node) { return res; } -char *xml_parser_get_property (const xml_node_t *node, const char *name) { +const char *xml_parser_get_property (const xml_node_t *node, const char *name) { xml_property_t *prop; @@ -489,8 +494,8 @@ char *xml_parser_get_property (const xml_node_t *node, const char *name) { int xml_parser_get_property_int (const xml_node_t *node, const char *name, int def_value) { - char *v; - int ret; + const char *v; + int ret; v = xml_parser_get_property (node, name); @@ -506,7 +511,7 @@ int xml_parser_get_property_int (const xml_node_t *node, const char *name, int xml_parser_get_property_bool (const xml_node_t *node, const char *name, int def_value) { - char *v; + const char *v; v = xml_parser_get_property (node, name); diff --git a/src/xine-utils/xmlparser.h b/src/xine-utils/xmlparser.h index a19c81ec3..f202ca28d 100644 --- a/src/xine-utils/xmlparser.h +++ b/src/xine-utils/xmlparser.h @@ -1,28 +1,34 @@ /* - * Copyright (C) 2002-2003 the xine project + * Copyright (C) 2002-2003,2007 the xine project * * This file is part of xine, a free video player. * - * xine 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. + * The xine-lib XML parser 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. * - * xine 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. + * The xine-lib XML parser 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 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 + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Library; see the file COPYING.LIB. If not, + * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. * - * $Id: xmlparser.h,v 1.5 2006/09/26 05:19:49 dgp85 Exp $ + * $Id: xmlparser.h,v 1.6 2007/03/04 16:19:12 hadess Exp $ * */ + #ifndef XML_PARSER_H #define XML_PARSER_H +#ifndef XINE_PROTECTED +#define XINE_PROTECTED +#endif + /* parser modes */ #define XML_PARSER_CASE_INSENSITIVE 0 #define XML_PARSER_CASE_SENSITIVE 1 @@ -54,7 +60,7 @@ int xml_parser_build_tree(xml_node_t **root_node) XINE_PROTECTED; void xml_parser_free_tree(xml_node_t *root_node) XINE_PROTECTED; -char *xml_parser_get_property (const xml_node_t *node, const char *name) XINE_PROTECTED; +const char *xml_parser_get_property (const xml_node_t *node, const char *name) XINE_PROTECTED; int xml_parser_get_property_int (const xml_node_t *node, const char *name, int def_value) XINE_PROTECTED; int xml_parser_get_property_bool (const xml_node_t *node, const char *name, diff --git a/win32/.cvsignore b/win32/.hgignore index 33987bccc..33987bccc 100644 --- a/win32/.cvsignore +++ b/win32/.hgignore diff --git a/win32/include/.cvsignore b/win32/include/.hgignore index 282522db0..282522db0 100644 --- a/win32/include/.cvsignore +++ b/win32/include/.hgignore diff --git a/win32/libxine.def b/win32/libxine.def index 47ecf7301..4711e7758 100644 --- a/win32/libxine.def +++ b/win32/libxine.def @@ -26,13 +26,6 @@ xine_hexdump xine_list_new
xine_list_free
xine_list_is_empty
-xine_list_first_content
-xine_list_next_content
-xine_list_last_content
-xine_list_prev_content
-xine_list_append_content
-xine_list_insert_content
-xine_list_delete_current
xine_buffer_init
_xine_buffer_free
|