summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-02-17 00:54:13 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-02-17 00:54:13 +0000
commit092be7678b67552cb3161fe162242bf8d3aeed2f (patch)
treebe0693f45b101252c370e40f6e84da2cd7a52f75
downloadkmplayer-092be767.tar.gz
kmplayer-092be767.zip
Added old abandoned KDE3 version of kmplayer
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kmplayer@1091557 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
-rw-r--r--AUTHORS1
-rw-r--r--COPYING280
-rw-r--r--COPYING-DOCS397
-rw-r--r--COPYING.LIB486
-rw-r--r--ChangeLog655
-rw-r--r--INSTALL167
-rw-r--r--Makefile.am16
-rw-r--r--NEWS0
-rw-r--r--README53
-rw-r--r--TODO8
-rw-r--r--acinclude.m411862
-rw-r--r--aclocal.m41050
-rw-r--r--conf.diff48
-rw-r--r--config.h.in261
-rw-r--r--configure.files2
-rw-r--r--configure.in396
-rw-r--r--configure.in.in262
-rw-r--r--doc/Makefile.am1
-rw-r--r--doc/da/Makefile.am5
-rw-r--r--doc/da/index.docbook571
-rw-r--r--doc/de/Makefile.am5
-rw-r--r--doc/de/index.docbook400
-rw-r--r--doc/en/Makefile.am5
-rw-r--r--doc/en/index.docbook513
-rw-r--r--doc/es/Makefile.am5
-rw-r--r--doc/es/index.docbook225
-rw-r--r--doc/et/Makefile.am5
-rw-r--r--doc/et/index.docbook227
-rw-r--r--doc/fr/Makefile.am5
-rw-r--r--doc/fr/index.docbook213
-rw-r--r--doc/it/Makefile.am5
-rw-r--r--doc/it/index.docbook593
-rw-r--r--doc/nl/Makefile.am5
-rw-r--r--doc/nl/index.docbook386
-rw-r--r--doc/pt/Makefile.am5
-rw-r--r--doc/pt/index.docbook593
-rw-r--r--doc/ru/Makefile.am5
-rw-r--r--doc/ru/index.docbook227
-rw-r--r--doc/sv/Makefile.am5
-rw-r--r--doc/sv/index.docbook660
-rw-r--r--icons/Makefile.am3
-rw-r--r--icons/hi128-app-kmplayer.pngbin0 -> 13203 bytes
-rw-r--r--icons/hi16-app-kmplayer.pngbin0 -> 931 bytes
-rw-r--r--icons/hi22-app-kmplayer.pngbin0 -> 1483 bytes
-rw-r--r--icons/hi32-app-kmplayer.pngbin0 -> 2285 bytes
-rw-r--r--icons/hi48-app-kmplayer.pngbin0 -> 4016 bytes
-rw-r--r--icons/hi64-app-kmplayer.pngbin0 -> 5557 bytes
-rw-r--r--icons/hisc-app-kmplayer.svgzbin0 -> 2333 bytes
-rw-r--r--kmplayer.lsm14
-rwxr-xr-xlibtool7037
-rw-r--r--mimetypes/Makefile.am5
-rw-r--r--mimetypes/application/Makefile.am4
-rw-r--r--mimetypes/application/x-kmplayer.desktop47
-rw-r--r--mimetypes/application/x-mplayer2.desktop46
-rw-r--r--mimetypes/audio/Makefile.am4
-rw-r--r--mimetypes/audio/x-ms-wma.desktop36
-rw-r--r--mimetypes/video/Makefile.am9
-rw-r--r--mimetypes/video/kde31/Makefile.am4
-rw-r--r--mimetypes/video/kde31/x-ms-wmv.desktop44
-rw-r--r--mimetypes/video/x-ms-wmp.desktop44
-rw-r--r--mplayer_vo_x11.diff28
-rw-r--r--po/Makefile.am1
-rw-r--r--po/ar.po1674
-rw-r--r--po/be.po1628
-rw-r--r--po/br.po1644
-rw-r--r--po/bs.po1842
-rw-r--r--po/ca.po1679
-rw-r--r--po/cs.po1665
-rw-r--r--po/csb.po1666
-rw-r--r--po/cy.po1694
-rw-r--r--po/da.po1682
-rw-r--r--po/de.po1696
-rw-r--r--po/el.po1687
-rw-r--r--po/en_GB.po1685
-rw-r--r--po/es.po1715
-rw-r--r--po/et.po1666
-rw-r--r--po/fi.po1678
-rw-r--r--po/fr.po1691
-rw-r--r--po/ga.po1667
-rw-r--r--po/gl.po1692
-rw-r--r--po/he.po1688
-rw-r--r--po/hi.po1735
-rw-r--r--po/hu.po1680
-rw-r--r--po/is.po1622
-rw-r--r--po/it.po1802
-rw-r--r--po/ja.po1657
-rw-r--r--po/ka.po1710
-rw-r--r--po/lt.po2228
-rw-r--r--po/mt.po1685
-rw-r--r--po/nb.po1670
-rw-r--r--po/nl.po1689
-rw-r--r--po/nn.po1722
-rw-r--r--po/pa.po1650
-rw-r--r--po/pl.po1695
-rw-r--r--po/pt.po1685
-rw-r--r--po/pt_BR.po1724
-rw-r--r--po/ro.po1631
-rw-r--r--po/ru.po1686
-rw-r--r--po/rw.po1945
-rw-r--r--po/sk.po1657
-rw-r--r--po/sr.po1688
-rw-r--r--po/sr@Latn.po1689
-rw-r--r--po/sv.po1673
-rw-r--r--po/ta.po1754
-rw-r--r--po/tr.po1687
-rw-r--r--po/uk.po1679
-rw-r--r--po/xx.po1670
-rw-r--r--po/zh_CN.po1662
-rw-r--r--protocols/Makefile.am2
-rw-r--r--protocols/mms.protocol50
-rw-r--r--protocols/pnm.protocol15
-rw-r--r--protocols/rtsp.protocol15
-rw-r--r--src/DESIGN.txt38
-rw-r--r--src/Makefile.am80
-rw-r--r--src/bookmarks.xml670
-rw-r--r--src/example_kjsembed.js38
-rw-r--r--src/example_smil.html59
-rw-r--r--src/gstplayer.cpp1027
-rw-r--r--src/gstplayer.h64
-rw-r--r--src/kmplayer.desktop100
-rw-r--r--src/kmplayer.h204
-rw-r--r--src/kmplayer_asx.cpp146
-rw-r--r--src/kmplayer_asx.h101
-rw-r--r--src/kmplayer_atom.cpp107
-rw-r--r--src/kmplayer_atom.h82
-rw-r--r--src/kmplayer_backend.h58
-rw-r--r--src/kmplayer_callback.h51
-rw-r--r--src/kmplayer_def.h69
-rw-r--r--src/kmplayer_koffice.desktop15
-rw-r--r--src/kmplayer_koffice_part.cpp168
-rw-r--r--src/kmplayer_koffice_part.h85
-rw-r--r--src/kmplayer_part.cpp1197
-rw-r--r--src/kmplayer_part.desktop88
-rw-r--r--src/kmplayer_part.h176
-rw-r--r--src/kmplayer_rp.cpp497
-rw-r--r--src/kmplayer_rp.h193
-rw-r--r--src/kmplayer_rss.cpp130
-rw-r--r--src/kmplayer_rss.h88
-rw-r--r--src/kmplayer_smil.cpp3604
-rw-r--r--src/kmplayer_smil.h898
-rw-r--r--src/kmplayer_xspf.cpp151
-rw-r--r--src/kmplayer_xspf.h94
-rw-r--r--src/kmplayerapp.cpp2296
-rw-r--r--src/kmplayerappsource.h205
-rw-r--r--src/kmplayerbroadcast.cpp670
-rw-r--r--src/kmplayerbroadcast.h194
-rw-r--r--src/kmplayerconfig.cpp749
-rw-r--r--src/kmplayerconfig.h204
-rw-r--r--src/kmplayercontrolpanel.cpp703
-rw-r--r--src/kmplayercontrolpanel.h181
-rw-r--r--src/kmplayerpartbase.cpp2047
-rw-r--r--src/kmplayerpartbase.h298
-rw-r--r--src/kmplayerpartui.rc19
-rw-r--r--src/kmplayerplaylist.cpp1842
-rw-r--r--src/kmplayerplaylist.h979
-rw-r--r--src/kmplayerprocess.cpp2567
-rw-r--r--src/kmplayerprocess.h500
-rw-r--r--src/kmplayerrc55
-rw-r--r--src/kmplayershared.h264
-rw-r--r--src/kmplayersource.h176
-rw-r--r--src/kmplayertvsource.cpp737
-rw-r--r--src/kmplayertvsource.h218
-rw-r--r--src/kmplayertypes.h300
-rw-r--r--src/kmplayerui.rc99
-rw-r--r--src/kmplayervdr.cpp780
-rw-r--r--src/kmplayervdr.h169
-rw-r--r--src/kmplayerview.cpp831
-rw-r--r--src/kmplayerview.h243
-rw-r--r--src/main.cpp90
-rw-r--r--src/moz-sdk/jni.h1810
-rw-r--r--src/moz-sdk/jni_md.h199
-rw-r--r--src/moz-sdk/jri.h689
-rw-r--r--src/moz-sdk/jri_md.h565
-rw-r--r--src/moz-sdk/jritypes.h243
-rw-r--r--src/moz-sdk/npapi.h726
-rw-r--r--src/moz-sdk/npruntime.h397
-rw-r--r--src/moz-sdk/nptypes.h105
-rw-r--r--src/moz-sdk/npupp.h1889
-rw-r--r--src/moz-sdk/obsolete/protypes.h252
-rw-r--r--src/moz-sdk/prcpucfg.h716
-rw-r--r--src/moz-sdk/prtypes.h544
-rw-r--r--src/noise.gifbin0 -> 8850 bytes
-rw-r--r--src/npplayer.c1545
-rw-r--r--src/playlistview.cpp720
-rw-r--r--src/playlistview.h174
-rw-r--r--src/pluginsinfo31
-rw-r--r--src/pref.cpp866
-rw-r--r--src/pref.h320
-rw-r--r--src/subtrans.txt19
-rw-r--r--src/transitions.txt29
-rw-r--r--src/triestring.cpp516
-rw-r--r--src/triestring.h103
-rw-r--r--src/viewarea.cpp1691
-rw-r--r--src/viewarea.h89
-rw-r--r--src/xineplayer.cpp1239
-rw-r--r--src/xineplayer.h79
-rw-r--r--src/xvplayer.cpp704
-rw-r--r--src/xvplayer.h56
-rw-r--r--stamp-h.in0
-rw-r--r--subdirs6
-rw-r--r--tests/animate.smil107
-rw-r--r--tests/controls.html29
-rw-r--r--tests/excl_timings.smil84
-rw-r--r--tests/fade.rp8
-rw-r--r--tests/img_scale.smil27
-rw-r--r--tests/img_scale_rep.smil27
-rw-r--r--tests/img_video_text.smil32
-rw-r--r--tests/nested_smil.smil25
-rw-r--r--tests/par_timings.smil37
-rw-r--r--tests/region_animate.smil40
-rw-r--r--tests/region_mouse_events.smil115
-rw-r--r--tests/regpoint.smil53
-rw-r--r--tests/rp.smil13
-rw-r--r--tests/smil_files.m3u6
-rw-r--r--tests/some_text.html6
-rw-r--r--tests/text.smil40
-rw-r--r--tests/timings.smil57
-rw-r--r--tests/transition.smil181
218 files changed, 151333 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..099affe
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1 @@
+Koos Vriezen <koos dot vriezen at gmail dot com>
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..9fe1a71
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,280 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Steet, Fifth Floor, Cambridge, MA 02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
diff --git a/COPYING-DOCS b/COPYING-DOCS
new file mode 100644
index 0000000..4a0fe1c
--- /dev/null
+++ b/COPYING-DOCS
@@ -0,0 +1,397 @@
+ GNU Free Documentation License
+ Version 1.2, November 2002
+
+
+ Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The "Document", below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as "you". You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (Thus, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification. Examples of
+transparent image formats include PNG, XCF and JPG. Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section "Entitled XYZ" means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as "Acknowledgements",
+"Dedications", "Endorsements", or "History".) To "Preserve the Title"
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section Entitled "History", Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+N. Do not retitle any existing section to be Entitled "Endorsements"
+ or to conflict in title with any Invariant Section.
+O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications". You must delete all sections
+Entitled "Endorsements".
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document 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.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation 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. See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
diff --git a/COPYING.LIB b/COPYING.LIB
new file mode 100644
index 0000000..b6a30b6
--- /dev/null
+++ b/COPYING.LIB
@@ -0,0 +1,486 @@
+NOTE! The LGPL below is copyrighted by the Free Software Foundation, but
+the instance of code that it refers to (the kde libraries) are copyrighted
+by the authors who actually wrote it.
+
+---------------------------------------------------------------------------
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 51 Franklin Steet, Fifth Floor
+ Boston, MA 02110-1301, 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
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301 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!
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..a207dac
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,655 @@
+Changes since version 0.10.0b
+- Use html page baseurl for resolving urls from the knpplayer backend
+- Initialize thread support for knpplayer, makes knpplayer crashes go away
+- Second part of set viewarea background to part's parent background
+Changes since version 0.10.0a
+- Fix some flash wanting full Url out of a relative Url before streaming data
+- Hardcode flash mimetypes in pluginsinfo
+- Fix kpart not reading the system global kmplayerrc
+- Set viewarea background to part's parent background for the plugin
+- Fix kxineplayer crash when sending the configurations
+Changes since version 0.10.0
+- Fix npp streams with javascript urls, that never reached the finish state
+- Fix memory leak in SMIL image
+- Get rid of nspr dependency
+Changes since version 0.10.0-pre3
+- Fix double scaling of video in a region
+- Use XPLAIN again for npp's GtkPlug embedded in QXEmbed, makes reproducable
+ mouse grab go away
+Changes since version 0.10.0-pre2
+- Fix unpausing with multi items from playlist
+- Compile fix for gcc >= 4.2
+- Cairo painting speedups, always round to screen pixel values
+- Adjust for timer drifting in SMIL files
+- SMIL additions, add AnimateMotion, more transition types, transOut support,
+ region background image and 'showBackground' attribute among others
+- Replace -vop with -vf for MPlayer
+Changes since version 0.9.4a
+- Allow per mimetype preferred player backend
+- Add npp backend that plays xembed style browser plugins
+Changes since version 0.9.4
+- Crash fix in playlist change while still playing
+- Support for mouse events on 'area' elements in SMIL
+- Clear the 'Connecting' status message when we got the data
+- Fix regression in 0.9.4, xine added reference links weren't auto played
+- Fix painting gifs that where larger than qmovie default buffer size
+- Support SMIL 'fillDefault' attribute
+- Globally share XML attribute names, reducing memory pressure
+- Fix region painting regression to limit updating only the region rectangle
+- Add audio/x-ms* to list of possible playlists
+Changes since version 0.9.3a
+- Support for MPlayer ICY stream info
+- Fix flashing/resizing infowindow between two items having info
+- Podcast item w/o an enclose but having a description now keep them self
+ active for a calculated time
+- Fix easy breaking reading CDATA sections
+- Changed intro animation, making it slightly shorter and using fade transition
+- Add support for SMIL linknodes a and area, brush and transiton (only fade)
+- RealPix's fades now realy fades in or out
+- Moved SMIL/RealPix painting to libcairo
+- Fix auto hiding controlpanel disappeared after switching to console view
+- Fix autohiding controlpanel when there is also a statusbar
+Changes since version 0.9.3
+- Reading RAM playlists should stop on '--stop--' stop lines
+- Make playlist occuring on top less likely
+- Support for 'repeatCount="indefinite"' in SMIL
+- Fix uninitialized member in GenericMrl, eg. reopening saved playlist crashed
+- "quot" entity fix in XML parser
+- Also show content of cdata sections in infoview w/ RSS and XSPF
+- Fix konqueror wheel spinning when HTML object has an 'autostart=0' set
+- Fix possible hang in RemoteObject for SMIL or RealPix
+- Don't play exit animation when KDE terminates
+- Nested playlist fix for RSS and XSPF
+- Item 'Playlist', of panel's popup menu, didn't work in fullscreen/minimal view
+- Allow Xine as player for TV using v4l:/Tuner/frequency mrls
+Changes since version 0.9.3-rc1
+- Fix audio/video CD w/ MPlayer adding more and more nodes on restart
+- MPlayer movie length detection fix for URLs in lists
+- Fix playlistview accessing root node w/o checking (crash fix)
+- XML Shareable Playlist Format (aka spiff) support
+- Fixed editing in place tree of URL, they were modified by KURL::prettyURL()
+- Fixed missing 'NotRunning' state change notification in some cases
+- Window title for playlists fix, either group name or item URL
+- Catergory items should not be editable
+Changes since version 0.9.3-pre2
+- Patch from bero, add more output audio and video drivers
+- Frequencies for Xv TV watching should now be in MHz (like with MPlayer)
+- Add more help in the handbook about the backends and the playlist format
+- Support MPLAYEROPTS argument for group/item nodes to add extra settings
+- Add option to set path/application name for mplayer backend
+- Fix possible crash when updating the playlist tree from QListView click events
+- Add 'Delete item' and MoveUp/Down for persistent playlists context menu and TV
+- Delay loading of recent XML file to first item played or category opened
+- Defaults to not show progress slider instead of having a disabled slider,
+ this greatly improves channel switching with Xv and the bttv driver
+- Properly stop kmplayer when 'hanging' in the resolving state, also add
+ 'Connecting' when starting resolving
+Changes since version 0.9.3-pre1
+- Support for audio cdrom
+- Fixes for 'Persistent Playlists' tree; drop position didn't account for
+ scrollbar position, painting fixes, popup menu position and dropping an item
+ in a not-yet-loaded tree created a temporary ghost tree
+Changes since version 0.9.2a
+- Painting of root items in playlist view as 'Window Background'
+- Add a 'Persistent Playlists' sub tree to playlist view, editing by D&D,
+ in-place node editing or changing the XML directly using the 'Edit Mode'
+- Add a 'Most Recent' sub tree to playlist view, when having more than 10
+ items, automatic create a sub tree 'More ..'
+- Merge TV input and device name to make tree one step less deep
+- Add Television as persistent sub tree to playlist view
+- Add 'Optical Disks' with VCD/DVD as persistent sub tree to playlist view
+- Make playlist tree less deep and remove the branches paintings
+- Plugin fix for http://www.orbital.pt/ for Konqueror >= 3.5.4 users
+Changes since version 0.9.2
+- Fix realvideo on tagesschau.de, support control lists as well
+- Toolbar can now be changed using KDE's default KEditToolbar dialog
+- Support 'ref' media tags and 'meta' head tags for Smil
+- TV source channel switching using Xv player now lowers volume for a short time
+- Fix passing playlist files at the commandline, were directly fed to backends
+- Fix ASX in case entries point to other playlist files, these weren't resolved
+- With plugin, undo infowindow or controlpanel only view if video output
+ is detected (basically undo (mis)detection which controls to show)
+- Fix set Edit mode window to plain text, it interpretered HTML tags
+Changes since version 0.9.2-rc1
+- Added a DCOP call 'isPlaying()' that returns true when backend is running
+ and a DCOP call 'isPlaying()' on the backends, other than MPlayer, that
+ returns true when not paused
+- Fix having to press 'pause' twice for unpause and pausing not working with
+ playlists (likely regression since 0.9.2-pre1)
+- Compile fix for when not using Xine (regression in 0.9.2-rc1)
+- Crash fix when restarting certain SMIL files, eg when having an RealPix img
+Changes since version 0.9.2-pre3
+- Recorder added using Xine's mrl setup (see xine-ui-ver/doc/README.en.15.MRLs)
+- Seeking support for gstreamer backend
+- Ported gstreamer backend from 0.8 to 0.10
+- Fix length parsing for MPlayer current CVS version (by Jonas Hurrelmann)
+Changes since version 0.9.2-pre2
+- Update with 0.9.1c
+- SMIL files can be part of other SMIL files
+- y-coordinate fix for images in RealPix
+Changes since version 0.9.2-pre1
+- Update with 0.9.1b
+- Added RealPix support for SMIL animations
+Changes since version 0.9.1c
+- Option added to disable color setting on movie start
+- Simple playlist edit mode, edit (sub)tree in raw XML
+- SMIL animations can be paused now
+Changes since version 0.9.1b
+- WMP's showdisplay object argument interpretation fix, it's about clip info
+- Fix current playlist item not visual selected and plugin's playlist not
+ showing HTML object's arguments (regression in 0.9.1b compared to 0.9.1a)
+- Fix KHTML setting palette on controlpanel, buttons weren't updated
+- Double click on video widget for Xine/Gst/Xv or background toggles fullscreen
+Changes since version 0.9.1a
+- WMP plugin fix for not showing video widget when 'controls' is
+ specified
+- Fix for audio only plugin group for real
+- Fix media:// url's
+- Crash fix for SMIL when resolving multible url's simultaneously
+- Don't play exit animation if started with an url
+- Fix for plugin w/ floating statusbar,wrong parent was set
+- Real plugin fix for 'controls=All', shouldn't show video widget
+- Support for uimode/nolabels/nocontrols/showdisplay/showcontrols/showstatusbar
+ attributes for WMP's embedded object emulation
+- Autohide controlpanel w/ 'Click to play' and support for TARGET attribute
+ for QT embedded object emulation
+Changes since version 0.9.1
+- Fix that switching channels w/ VDR sometimes stopped the backend
+- Fix saving playlist looses cdata sections (if any) and don't normalize them
+- Fix application window stays hidden when fullscreen window closed with ALT_F4
+- Fix parser closing root's parent object when reading a XML file in an
+ existing playlist (ie. a playlist item points to a broken XML playlist file)
+- Fix small chance of crashing by the intro movie when choosing another
+ source very fast (eg. when having, and using, a shortcut for VDR directly)
+- Remove hardcode Esc shortcut to escape fullscreen mode, it clashes with
+ canceling playlist editing
+- Workaround bug in KListView when clearing the playlist while it's editing
+ an item, by clearing Focus on any child widget. Also move focus back to
+ ViewArea when an item is executed
+Changes since version 0.9.1-rc1
+- Added Find/FindNext in playlist's context menu
+- Intro-movie's background will finish when clicked on its background
+- Fix possible crash w/ plugin if javascript did a 'put' on an unknown property
+- Support reading playlist files from media:// or remote:// protocols, movie
+ files that resolve to these, still doesn't work though
+- Support SMIL's 'begin' attribute on group tags (seq/par/excl) as well
+- Fix not honouring MPlayer's aspects detection in case it's not width:height
+- Fix MPlayer with the X11Shm video driver not scaling correctly when
+ 'keep aspects' is set
+- Fix Xine not resuming on 'pause' when pressing the 'pause' button again
+- Fix to not let the session manager restore a backend application as well
+- Support for CONTROLS="StatusBar" for plugin, having the same statusbar
+ as application. See tests/controls.html, after installing KMPlayer-plugin,
+ with konqueror (also used on many sites when choosing for real format)
+Changes since version 0.9.1-pre3
+- Show backend's status in application's statusbar and show the play time
+ left as well.
+- Add OBJECT's attributes coming from khtml to the document of urlsource, that
+ might be helpful for web developers (using the 'Show all' feature of playlist)
+- Add KAction for showing the control or language popup menu
+- Put colors and font settings on a separate tab, reducing total config
+ dialog dimensions
+- Fix restoring playlist causing flashing on screen after intro animation
+- Also remember window location for window->minimal mode->window
+- Integrate MPlayer's languague/subtitles menus for DVD with new languague
+ popup menu and seek to current position when changing languague/subtitles
+ with MPlayer
+- Support for audio/subtitles within a stream. A language button will be added
+ when detected which has submenus for the languages. GStreamer only subtitles
+ with an external url ATM.
+Changes since version 0.9.1-pre2
+- Support for CONTROLS="Playlist" for plugin
+- Support for <base HREF='...'/> tags for ASX
+- Network bandwidth setting added, this is used in SMIL's <switch> element
+ when <video> or <audio> elements have a system-bitrate attribute
+- Unpushing the playbutton now actually stops playing
+- Fix kxineplayer crashing on exit due to double deletion
+- Keep playlist entry in popupmenu, controlpanel button might be gone
+- Remember window location so window->fullscreen->window is at same place again
+- Option to not resize on opening new source added
+- Fix ASX Entry's having more than one Ref child nodes, current wasn't set
+ right in playlist (did play though)
+Changes since version 0.9.1-pre1
+- Playlist button of controlpanel has no use when in fullscreen or minimal
+ mode, so reuse if for a back-to-normal-window button
+- Fixed bug in plugin, 0.9.1-pre1 only, that messed up all attributes passed
+ to KMPlayer from KHTML and likely breaking lots of webpages having
+ audio/video and also omitting KMPlayer's checks for local access.
+- Shorten intro/exit animations and also animate the icon rise and fall
+- SMIL's regPoint/regAlign support
+- Don't resize kpart if 'intrinsic' size is 0x0
+- Don't resize for intro/exit animations
+- XML export, or regenerate in case of XML playlist, of loaded playlist.
+- Fix possible crash when changing source from the TV source to another one.
+Changes since version 0.9.0c
+- Font settings for playlist and infowindow added.
+- Color settings for infowindow added.
+- Added some docu about intro/exit movies and kmplayer:// urls in handbook.
+- Added minimal mode option that hides playlist, status- and menubar and
+ autohides the controlpanel.
+- Moved playlist option from popupmenu to controlpanel and a configure option
+ whether to show this button
+Changes since version 0.9.0b
+- Fix 1+ movies become black&white with Xine backend playing the playlist
+- Fix the 'Remember window size on exit' setting and make the 'Always start
+ with fixed size' setting use the last remembered size.
+- Fix XML parser if two or more entities follow each other and block a
+ possible stack overflow
+- Check for local file access on playlist items too
+- Hide more XML nodes in playlist if they don't have a title
+- Fix displaying jpeg pictures in SMIL's <img> elements
+- Make sure to reset view after playing
+- Add js binding to DoPlayPause for real plugin
+- Try to restore playlist to previous position
+- Fix creating default region in SMIL (if no <layout> is found)
+- Show inner text in infowindow if clicked on an element that isn't a mrl
+- Support for Atom type podcast playlists, plays <link rel="enclosure" src=../>
+- Add a scale slider to popup menu when in fullscreen. This is particular
+ useful if watching a 4:3 movie on a widescreen display.
+- Allow for custom intro/exit movies when exists {intro,exit}.xml in either
+ $KDEDIR/share/apps/kmplayer/ or an user's .kde/share/apps/kmplayer/
+Changes since version 0.9.0a
+- Removed decoration (+ and - for tree) from root item in playlist, saving
+ 16px horizontal. Also set icon for this item to an url.
+- Removed extra text/html mimetype check for playlist detection. Seems some
+ sites use this mimetype for ASX too.
+- Fixed random navigating in ASX playlists.
+- Don't show a folder icon when playlist item has no childeren and isn't a
+ multi-media link either.
+- Make playlist menu/toolbar item a toggle for show and hide.
+- Combine console/video toolbar buttons and menu items as one toggle and get
+ rid of 'View' submenu in popup menu. Fill gap on toolbar with zoom100%
+- Clear history didn't clear 'Recent files' permanently.
+Changes since version 0.9.0
+- Fixed last minute change that broke almost all Podcast RSS support
+Changes since version 0.9.0-rc1
+- Fix the broken recording from rc1 and possible some pre's too
+- start and end with a simple smil document if started with no url.
+ Can be turned off in rc file with option "No Intro=1" in section
+ "[General Options]".
+- support Podcast rss urls, list chanel/item/enclosure tags and play url
+ arguments of enclosure elements and display inner text from description
+ in info window
+- Added an info panel that is now implemented as a dockable view, this should
+ become the infopanel for Real plugin's CONTROLS attribute possibility. Put
+ messages from Xine backend in this window.
+Changes since version 0.9.0-pre4
+- In place renaming of TV channel/input names in playlist
+- Added help sections for TV and VDR in handbook.
+- TV settings are now stored in ~/.kde/share/apps/kmplayer/tv.xml. There is an
+ automatic conversion. Should make manual changes more easy, see handbook for
+ the format. Now also XVideo port and encoding can be configured, although
+ manually only.
+- More work on SMIL. Allow playing mediatype elements w/o having a region
+ assigned, fixes audio only streams (eg. with the <audio> tag).
+- Optionally use the expat SAX parser (instead of kmplayer's own one) when
+ configured with --enable-expat. Note, the expat parser is more strict and
+ therefor can misread some ASX files.
+Changes since version 0.9.0-pre3
+- Fix for DVD submenus for MPlayer and update regexp for audio/subtitle
+ languages
+- More work on SMIL. Show active SMIL element in playlist using the color
+ settings. Like mediatypes, if set/animate elements have a duration than it
+ should not deactivate itself immediately.
+- Undo 'First jump to URL source page when opening an URL' from 0.8.1. Now the
+ 'Configure KMPlayer' option jumps to that page. File open, opens a file
+ dialog again (and can select multible files)
+- Allow opening multible files
+- Support for gif movies in SMIL's 'img' element
+- Regression fix plugin; when split over multible objects, the base url could
+ be opened instead of the SRC url.
+Changes since version 0.9.0-pre2
+- Support javascript properties FileName and Volume
+- Internal redesign of DOM classes
+- Store current url in KDE's session config
+- Added a 'Clear History' action, that will clear recent files and URL source
+ history
+- Delayed mouse hiding in fullscreen, patch from Ben Laenen
+- Option for docking in system tray
+- Smarter painting when moving regions in SMIL document
+- More work on SMIL support. Implemented animate's 'values' attribute and
+ 'calcMode="discrete"'. Added 'fit' attribute for mediatypes (only used
+ for images now, and value 'scroll' is not implemented). Group
+ 'excl' is now supported. Text elements are rendered by QTextEdit, so it
+ supports html now too. Updated applications in tests/ directory
+Changes since version 0.9.0-pre1
+- Include tests directory
+Changes since version 0.8.4b
+- Build fix for compiling with -fvisibility=hidden
+- More work on SMIL, support for layout/root-layout/region tags so one can
+ position a mediatype in a rectangle, other than video/audio also support
+ for text/img mediatypes and flow control with begin/dur/end attribute that
+ can be time values but also (mouse) events or clip ends and set/animate can
+ be used to alter arguments on-the-fly.
+- Added option to adjust the colors of playlist and viewing area
+- Added an option in playlist context menu to show all nodes in case of XML
+ based playlists (ASX or SMIL)
+- Added option whether backends should set volume on start
+- Original gcc-2.95 compile fixes (Leo Savernik)
+Changes since version 0.8.4a
+- gcc-2.95 compile fixes (Leo Savernik) hopefully correctly backported
+- Read playlist from audio/m3u mimetypes
+- Don't print log to stdout but to stderr instead (BR100422)
+- Don't set volume on starting MPlayer because MPlayer sets volume relative
+ to current volume (BR99953)
+Changes since version 0.8.4
+- Fix keyboard shortcuts for increase/decrease volume for fullscreen
+- Better 100% zoom calculation
+- Prevents ways to crash KMPlayer via DCOP when just started
+- Fix MPlayer's command queue after manually stop a movie
+Changes since version 0.8.4-rc5
+- Debian builds now a kmplayer-i18n package too
+- Controlpanel uses paletteForegroundColor for drawing
+- Added a volume control to controlpanel that let backends control the volume
+ (unlike the slider in menu, which uses kmix) + two actions for shortcut
+ possibility in 'Configure Shortcuts' dialog
+- Bookmarking a VDR channel now bookmarks it as kmplayer://vdrsource/channel
+- When controlpanel is in autohide mode, move it over the video instead of
+ shifting the video up causing annoying flickering (bug 96861)
+- up/down/ok/back/menu for VDR are added to the toolbar as well when connected
+- Unmute DVB card when VDR reports volume of zero, restore on exit
+- Auto scroll playlist when current is outside the viewing area
+Changes since version 0.8.4-rc4
+- Recording now stops movie playing after hitting 'Start Recording'
+- Be less strict with parsing ASX (and SMIL) play list files
+- Internals: merge code from backends, with the 'never reaching' goal to add
+ a new backend just by configuration (plus a backend player of course)
+- Internals: move playlist handling to Partbase, instead of each process have
+ their own tricks. Also kxineplayer accepts '-vo x11' now, kgstreamer eats
+ local url's w/o file:// prefix.
+- Internals: re-implement backend XML config and TV config data using own
+ DOM-like classes for no less reason than increasing the code coolness :-)
+- Added view video/playlist/console to toolbar
+- Playlist will default appear on top if there are only a few items
+- TV inputs/channels are now displayed inside the playlist, instead of a menu
+- kxvplayer also accounts for frequency setting when guessing the xvideo port,
+ more usable for TV viewing
+- Move all library classes to the KMPlayer namespace and strip the KMPlayer
+ prefix in the name. Rename class KMPlayer itself to PartBase.
+- Binary data detection when reading a playlist that turns out to be
+ video/audio stream (instead of creating a playlist w/ wierd names)
+Changes since version 0.8.4-rc3
+- Look for title entries in ASX and .pls files for playlist items
+- DemiBold font for playlist and console log window for readability
+- Begin of GStreamer backend support, local file only
+- Allow disconnect/connect for VDR while still playing, allows other apps to
+ access the VDR port
+- Actively determine mime-type for playlist detection (was guess on extension
+ or use the one the plugin got from konqueror)
+- VCD tracks are, for MPlayer only, displayed in playlist and not in menu
+- Added custom command for VDR, output to console view
+- Made command interaction with VDR much more reliable
+Changes since version 0.8.4-rc2
+- Added a XVideo player (kxvplayer) process. Used now for viewing VDR
+- Fixed various crash cases with the playlist
+- Playlist view is dockable now
+Changes since version 0.8.4-rc1
+- Oops, left an ugly hack in the icon loading for the playlist tree, can crash
+ konqueror.
+- Some playlist tree visualization ordering fixes
+Changes since version 0.8.3a
+- Nice icons from Marcel Dierkes, thanks!!!
+- Replaced internal playlist structure from std::list to DOM
+- Removed the 'Show Console' option, now one can always switch to the console
+ output window
+- Visualization of internal playlist, becomes one of the
+ video/playlist/console views of the data
+- More icons in the menus and some context menus added
+Changes since version 0.8.3
+- Auto hiding in fullscreen fix
+- Mencoder recording fix for URLs
+- Yet another spurious seek locking Xine when playing a playlist
+- Comment out NoExpose debug line with kxineplayer
+Changes since version 0.8.3-rc5
+- Two more regression fixes in show cache progress, get rid of spurious seek
+ command caused by switching progress slider usage and don't update playing
+ position if there is no position change (might fill cache instead).
+- Xinerama fix, fullscreen on display where video widget is on.
+Changes since version 0.8.3-rc4
+- Fix regression in show cache progress in 0.8.3-rc2, which made the xine
+ backend hang on some web movies
+- Ripped out the arts volume slider. Now you only get a volume slider if you
+ run kmix standalone or as an applet in kicker.
+- Try to limit symbols in the shared objects by using KDE_NO_EXPORT. Although
+ hard to measure, hopefully speed up loading the plugin
+- New recorder (mplayer -dumpstream) from Stefan Siegel
+Changes since version 0.8.3-rc3a
+- Downloading of .m3u/.pls also eats .asx, so try to read this one too. This
+ fixes also MPlayer-1.0pre not been able to read .asx files.
+- Make sure if we're downloading a playlist file, it isn't bigger than 50k
+- More or less revert the alsa5/alsa9 change to just alsa. Seems latest
+ MPlayer doesn't work with alsa5/alsa9. Although they are still available.
+Changes since version 0.8.3-rc3
+- add AM_MAINTAINER_MODE in configure.in.in, no recheck/automake/autoconf
+ version mismatch
+Changes since version 0.8.3-rc2
+- All QtoolTips to QWhatsThis and help from Xine for whatsthis by xine options
+- Store xine settings in ~/.kde/share/apps/kmplayer/xine_config and not in
+ ~/.xine/config2. Save the first time if file does not exist (Automaticly
+ sets the misc.memcpy_method).
+- Added a debian build directory, builds a kmplayer-lib, kmplayer-plugin and a
+ kmplayer-app package. Eg. install only kmplayer-lib and kmplayer-plugin if
+ you prefer another player but do want the plugin for konqueror.
+- Added protocol files for mms://, rtsp:// and pnm://
+- Position slider now also shows progress of the cache fill
+Changes since version 0.8.3-rc1
+- Remove configure options for control buttons. Simply always autohide for
+ fullscreen and embedded part and show them otherwise
+- Fix another case of video widget stays black cause in kxineplayer
+- If position slider is hidden, make buttons small again (like <= 0.8.2)
+- Support for AUTOSTART attribute
+- Support for FULLSCREENMODE attribute
+- Seeking while sliding :-)
+- Local .pls and .m3u playlist files support. Works too if autodownloaded, eg
+ pls' on http://www.shoutcast.com should work now
+Changes since version 0.8.2
+- fix for the "video window stays (sometimes/often) black" bug, which seems to
+ occur more with the latest Qt versions. KMPlayer uses a XSimpleWindow now
+ that is managed by QXEmbed
+- Support for Real's CONTROLS/CONSOLE attributes. This makes it possible
+ multible plugins cooperate with imagewindow/controlpanel
+- Combine control buttons and position slider to one control panel
+Changes since version 0.8.2-rc5
+- Don't show ffserver setting when no v4l devices are configured
+- Stream detection fix for MPlayer-1.0prex (needed for recording)
+Changes since version 0.8.2-rc4
+- Locale fixes for Xine
+- Let Xine play all URLs in playlist
+- Change alsa to alsa5/alsa9 audio driver for MPlayer
+Changes since version 0.8.2-rc3
+- Compile fix for Qt-3.1
+- Compile fix for xine-lib-1-rc2
+Changes since version 0.8.2-rc2
+- Add audio/x-pn-realaudio to supported mimetypes
+- Fix for filenames containing a #
+- Build fix for KDE-3.1.x
+- Add audio.visualization property for Xine (very nice for eg. web radio)
+Changes since version 0.8.2-rc1
+- Don't fill X log with ffmpeg output
+- Jump to broadcast config page first when clicking broadcast button
+- 'Start' button on broadcast config page and two leds for ffserver and ffmpeg
+- dvd/vcd fix (regression from '-frames 0' removal
+- put mplayer's output patterns in a QTable
+- default to asf for ffserver
+Changes since version 0.8.1a
+- MPlayer-1.0-pre is default now ([MPlayer] Post MPlayer 0.90=true in
+ kmplayerrc)
+- Removed the '-frames 0' switch for MPlayer-1.0-pre, now identifying is done
+ in one stroke with playback (faster playing, less sensible to failures)
+- Xine configuration tab for convenient editing of ~/.xine/config2
+- Made config dialog somewhat flexible, and TV/broadcast settings are now
+ not available when launched from the plugin
+- Change dir of mplayer/kxineplayer process if playing a local file. Hopefully
+ fixes relative links in supported playlist files.
+- Profiles for broadcasting
+- Fixed always having a left/right black border with Xine
+- Sub title support (although MPlayer-1.0-pre3 crashes with '-sub' option)
+Changes since version 0.8.1
+- Fix for Web object having HREF attributes and not 'Click to Play' enabled
+- Allow opening 'vcd://' and 'dvd://' URLs (useful for Xine VCD Nav)
+- Pass vcd/dvd device setting to kxineplayer
+Changes since version 0.8.1-rc1
+- Delay arts volume initialization for faster startup when not build with
+ --disable-arts-volume
+- First jump to URL source page when opening an URL
+- Added history combo for URL on URL source page
+- Replaced tree for icons with tabs in settings dialog
+Changes since version 0.8b
+- First jump to recording page when pressing the record button
+- Optionally use ffmpeg for recording (URL or v4l sources)
+- Fix mplayer v4l device scanning for mplayer > 0.91
+- Bookmarks added
+- Beginning of more configurable mencoder options
+- Fix signaling of backend player play (regression from 0.8b)
+Changes since version 0.8a
+- Layout fixes in configuration dialog
+- Fix loading percentage feedback
+- Fix console output for kxineplayer
+- Fix tv channel switching
+Changes since version 0.8
+- Fix forward/backward/position seek for mplayer and implemented for kxineplayer
+- Hide zoom sub menu when in fullscreen
+Changes since version 0.7.97
+- Locale fix for filenames
+- Added audio/x-ms-wma mimetype
+Changes since version 0.7.96
+- Build changes, kdeinit wasn't used (speeds up loading) and an option for
+ disabling arts volume slider (eg. if you use kmix already)
+ use --disable-arts-volume with configure and it prevents linking agains the
+ arts libs (speeds up loading of kmplayer too)
+- Moved color sliders to a sub menu, fix it for mplayer
+Changes since version 0.7.95
+- Support for mplayer/mencoder from CVS. Set 'Post MPlayer 0.90=true' in
+ .kde/share/config/kmplayer.rc under group [MPlayer] to use it.
+- Also enable DVD playing using kxineplayer (dvdnav, yeah!)
+Changes since version 0.7.4c
+- Added a simple Xine player backend (kxineplayer). Basically a finger practice
+ for the upcoming MPlayer-G2 lib, but now quite useful for rtsp/real playback.
+ Works only for URLs
+- Added the javascript bindings to mimic a realplay plugin (only some are
+ really doing something). You must set KMPlayer as default viewer for
+ audio/x-pn-realaudio to use it.
+- Support for 'Click to play' start images as found on
+ http://www.apple.com/switch/ads/
+- Broadcast, http streaming, for video devices (needs ffmpeg/ffserver)
+ "Say hi to a friend", if you have a webcam.
+Changes since version 0.7.4b
+- Fix postprocessing checkbox
+- Fix proxy setting for mplayer process
+Changes since version 0.7.4a
+- Height calculation fix when position slider is visible
+- Q&D fix for mplayer compiled with locale output (,->. for aspect)
+- Aspect fix for fullscreen when embedded in khtml
+- Position slider fix VCD, re-determine length for each track
+Changes since version 0.7.4
+- Fix VCD playing
+Changes since version 0.7.3
+- Re-added the main application toolbar
+- Re-identify dvd if another title is selected, because they have different
+ chapters/subtitles/languagues/length
+- Added a record button. Currently only configurable in kmplayerrc, see the
+ mencoder options in mplayer man page. Doesn't work for audio only streams.
+- New config dialog from Joonas Koivunen
+- Support for MPlayer's experimental TV capturing (use with care, I need to
+ rmmod bttv, tvaudio and msp3400 to get xawtv working again afterwards)
+ No audio capturing for now
+- Added a position slider
+- Fixed two cases of double deletes found by valgrind
+Changes since version 0.7.2
+- Make using of arts optional, now that the volume slider automatic starts
+ artsd
+- Patch from Rainer Blessing; show/hide menubar. Enhanced it a bit for
+ people, like me, who forget how to get it back again.
+Changes since version 0.7.1
+- Check for an onFinished handler before emiting it
+- Great patch from Joonas Koivunen, add postprocessing filter configuration
+Changes since version 0.7a
+- Added a 'Open Pipe' item to 'Source' menu for mplayer reading from stdin.
+ Of course slave commands doesn't work here (forward/backward/pause/...)
+ And I had some hard time killing mplayer this way (make 'stop' work).
+ Not available for the embedded part.
+- Add tearoff handle to 'DVD'/'VCD' menus
+- Changed 'File' menu to 'Source' menu and move 'DVD'/'VCD' to it
+- Use KProtocolManager::proxyForURL to determine if http_proxy should be set.
+ Copied some code from KProtocolManager::slaveProtocol for the exceptions.
+ MPlayer seems to only support http protocol proxies.
+- End fullscreen mode when movie ends when embedded
+- Zoom fix when embedded, 100% resets original movie size
+- Move config button to front, makes it accessable for very small movies
+- Also delay hiding of control buttons a bit
+Changes since version 0.7
+- Arts::Dispatcher -> KArtsDispatcher, fix multiple use crash
+Changes since version 0.6.5b
+- Zoom sub menu added in popup menu
+- Arts volume slider added in popup menu
+- Fullscreen mode for part (when embedded)
+- Small config button shows a popup menu now
+- Set environment variable http_proxy in mplayer's process when defined
+- Use LiveConnect for automatic resizing to movie size when embedded in khtml
+ fixes movie sizes at http://wwwa.accuweather.com, needs KDE-3.1 from cvs
+- Typo in application/x-mplayer2 mimetype
+Changes since version 0.6.5a
+- Remove -mpentium4 from admin/acinclude.m4.in (build fix)
+Changes since version 0.6.5
+- Changed regexp in wrong string fix
+Changes since version 0.6.4
+- Don't set a subtitle automatically
+- Put some basic install instructions in README
+- Get rid of the compiler warnings
+- Added ; at end of Patterns in mimetypes. Lets hope this fixes the mimetype
+ install
+- Changed regexp; mplayer rc3 changed "Start playing" to "Starting playback"
+- Fix uncheck of subtitle/language DVD menu
+Changes since version 0.6.3a
+- View Arts Control menu option (kdemultimedia)
+- disable screensaver in fullscreen mode
+- more user feedback; BrowserExtension::infoMessage for cache fill
+- start hiding buttons when the movie starts, not when mplayer is executed
+- do a lowercase match on HREF, fixes more on http://www.apple.com/switch/ads/
+Changes since version 0.6.3
+- compile fix for KDE-3.1 'kdDebug () << KURL' works only in HEAD
+Changes since version 0.6.2
+- Play HREF's if given, fixes movies at http://www.apple.com/trailers
+Changes since version 0.6.1
+- added auto hide buttons option
+- drop -alang and -slang in favor of -aid and -sid (fix duplicate languages)
+= synchronious killing of mplayer in KMPlayer's part dtor, fix possible crash
+- implemented some BrowserExtension functions,
+ loadingProgress, better progress feedback in konqueror of cache fill
+ save/restoreState, backward/forward works now in konqueror
+ setLocationBarURL when url changes in config dialog, updates locationbar
+- added video/x-ms-asf mimetype, now I can watch webtv from www.dsltv.nl :-)
+- sync config after each Ok/Apply
+- fix url argument (was broken by fix file argument)
+- fix crash, ConfigDialog already destoyed by view
+Changes since version 0.6
+- fix kmplayer file argument without path
+- fix some memory leaks
+- fix ratio settings when setting a new URL from the configure dialog
+- make loop non default (MPlayer bug workaround)
+- drop quoteURL, use KProcess:quote
+- add VCD menu
+- --enable-final fix
+- gcc-2.95.x compile fix
+Changes since version 0.5
+- Made colors of console output window darker
+- Fix for not restoring main window size
+- Don't have an useless toolbar
+- Make DVD menu optional
+- Make buttonbar optional
+- Add loop option
+- Config dialog added
+- Quick fix for File|Quit hang
+- Fix escaping bug
+- Make keep width/height ratio default
+Changes since version 0.4
+- Make small control buttons even smaller and flat
+- Play and Stop buttons are toggles
+- Try even harder to kill mplayer
+- Make console output window optional
+- More config options, eg. mplayer output patterns
+ (use vi .kde/share/config/kmplayerrc for now)
+- Added an extra mimetype application/x-mplayer2 (how many are ther for wmf?)
+ I hope someone can tell me why these mimetypes doesn't show up in file
+ associatives.
+- a patch for mplayer x11 video driver, for those that don't have xv
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..02a4a07
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,167 @@
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+ The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes a while. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 4. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory. After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+ CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+ If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made.
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..a784449
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,16 @@
+if need_kde33_compatibility
+ KDE33PROTOCOLS = protocols
+endif
+
+SUBDIRS = mimetypes $(KDE33PROTOCOLS) src icons doc po
+
+EXTRA_DIST = AUTHORS COPYING ChangeLog INSTALL README TODO kmplayer.lsm
+
+$(top_srcdir)/configure.in: configure.in.in $(top_srcdir)/subdirs
+ cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common configure.in ;
+
+$(top_srcdir)/subdirs:
+ cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common subdirs
+
+$(top_srcdir)/acinclude.m4: $(top_srcdir)/admin/acinclude.m4.in $(top_srcdir)/admin/libtool.m4.in
+ @cd $(top_srcdir) && cat admin/acinclude.m4.in admin/libtool.m4.in > acinclude.m4
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/NEWS
diff --git a/README b/README
new file mode 100644
index 0000000..3d2acd3
--- /dev/null
+++ b/README
@@ -0,0 +1,53 @@
+KMPlayer, a simple frontend for MPlayer/FFMpeg/Xine.
+It can play DVD/VCD movies, from file or url and from a video device.
+If setup right, KMPlayer can embed inside konqueror. Which means if you click
+on a movie file, the movie is played inside konqueror.
+It can also embed inside khtml, enabling movie playback inside a html page.
+Movie recording using mencoder (part of the mplayer package). No video during recording, but you can always open a new window and play it there.
+Broadcasting, http streaming, by using ffserver/ffmpeg. For TV sources, you need v4lctl (part of the xawtv package).
+
+KMPlayer needs KDE3.1 and a working mplayer/mencoder somewhere in you PATH.
+Additonally, for broadcasting, ffserver/ffmpeg/v4lctl also.
+For DVD navigation Xine is used. MPlayer has broken dvdnav support. DVDNav is included in libxine and works fine.
+Unless you reconfigure kmplayer, both mplayer and ffmpeg should be compiled with liblame for mp3.
+
+Quickly installing MPlayer
+Download the sources from http://www.mplayerhq.hu/homepage/.
+If you want quicktime support, also download the quicktime dll's
+(http://www.mplayerhq.hu/MPlayer/releases/codecs/qt6dlls.tar.bz2) and unpack
+them and copy the files to /usr/lib/win32 (make this dir if it doesn't exist).
+Or download the 'All in one' package and have even more codecs.
+Untar the mplayer source package (tar xfj MPlayer-0.90.tar.bz2), change to
+that directory. Make sure $KDEDIR/bin is in you path (check if you can run
+'artsplay').
+Now run configure (./configure) and make ('make'). Install it as root ('su -c "make install"').
+Finally you must setup the config files in ~/.mplayer ('mkdir ~/.mplayer').
+Copy the files, from the mplayer sources, etc/codecs.conf and etc/example.conf as codecs.conf and config resp
+('cp etc/codecs.conf ~/.mplayer; cp etc/example.conf ~/.mplayer/config').
+Next change ~/.mplayer/config with an editor and change the video driver (vo=xv) and audio driver (ao=arts) and remove the last line.
+
+Quickly installing Xine
+Download the sources for libxine (xine-lib-1-beta12.tar.gz) from http://xinehq.de. Unpack it (tar xfz xine-lib-1-beta12.tar.gz) and change to this directory (cd xine-lib-1-beta12). Now run configure (./configure) and make ('make'). Install it as root ('su -c "make install"').
+Recommended, for encrypted DVDs, install libdvdcss from http://developers.videolan.org/libdvdcss too.
+Xine can use the codecs for MPlayer in /usr/lib/win32, however it can't find
+the real codecs in there. Eg run
+ $ strings /usr/local/lib/xine/plugins/1.0.0/xineplug_decode_real.so |grep drv
+after installing to see where it looks for the Real codecs. Either copy or
+symlink for Xine to find them.
+
+Quickly installing ffmpeg/ffserver
+Download the sources from http://ffmpeg.sourceforge.net/. If the current version is 0.4.6, I recommend using a more recent CVS snapshot because it uses less CPU when grabbing a TV device.
+Untar the source package, run './configure --enable-mp3lame' and 'make'. Install as root 'su -c "make install"'.
+
+KMPlayer doesn't work with all the video drivers that mplayer supports.
+I tested only xv (X Video Extension) and x11 (Image/Shm). If none work, you
+might try the patch for the x11 driver and see if that works for you (not needed anymore for mplayer version >= 0.90-rc4).
+You might need to change mimetype settings (Control Center | KDE Components | File Associations) to make sure KMPlayer (or 'Embedded MPlayer for KDE' in embedded tab) is set for all the formats you want to play with KMPlayer.
+Also make sure in the 'Embedding' tab 'Show file in embedded viewer' is set.
+
+If you run an older versio of MPlayer (0.9x), set 'Post MPlayer 0.90=false' in
+.kde/share/config/kmplayer.rc under group [MPlayer]. It will change some of the
+mencoder arguments (for recording).
+
+Enjoy!
+
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..a80556c
--- /dev/null
+++ b/TODO
@@ -0,0 +1,8 @@
+- open URL popup
+- configure kmplayer end of settings menu
+- 200/400% zoom
+- shorter names in recent menu
+- remove play/pause/stop from toolbar, add various sources
+- removing playlist items, reorder, easy adding (other than playlist edit mode)
+- more accessable loop option for item or playlist, eg. RMB
+- also callback RMB events for xine/gst/xv
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 0000000..ff0bdbb
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,11862 @@
+## -*- autoconf -*-
+
+dnl This file is part of the KDE libraries/packages
+dnl Copyright (C) 1997 Janos Farkas (chexum@shadow.banki.hu)
+dnl (C) 1997,98,99 Stephan Kulow (coolo@kde.org)
+
+dnl This file is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Library General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2 of the License, or (at your option) any later version.
+
+dnl This library 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 GNU
+dnl Library General Public License for more details.
+
+dnl You should have received a copy of the GNU Library General Public License
+dnl along with this library; see the file COPYING.LIB. If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+dnl Boston, MA 02110-1301, USA.
+
+dnl IMPORTANT NOTE:
+dnl Please do not modify this file unless you expect your modifications to be
+dnl carried into every other module in the repository.
+dnl
+dnl Single-module modifications are best placed in configure.in for kdelibs
+dnl and kdebase or configure.in.in if present.
+
+# KDE_PATH_X_DIRECT
+dnl Internal subroutine of AC_PATH_X.
+dnl Set ac_x_includes and/or ac_x_libraries.
+AC_DEFUN([KDE_PATH_X_DIRECT],
+[
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+if test "$ac_x_includes" = NO; then
+ # Guess where to find include files, by looking for this one X11 .h file.
+ test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
+
+ # First, try using that file with no special directory specified.
+AC_TRY_CPP([#include <$x_direct_test_include>],
+[# We can compile using X headers with no special include directory.
+ac_x_includes=],
+[# Look for the header file in a standard set of common directories.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ for ac_dir in \
+ /usr/X11/include \
+ /usr/X11R6/include \
+ /usr/X11R5/include \
+ /usr/X11R4/include \
+ \
+ /usr/include/X11 \
+ /usr/include/X11R6 \
+ /usr/include/X11R5 \
+ /usr/include/X11R4 \
+ \
+ /usr/local/X11/include \
+ /usr/local/X11R6/include \
+ /usr/local/X11R5/include \
+ /usr/local/X11R4/include \
+ \
+ /usr/local/include/X11 \
+ /usr/local/include/X11R6 \
+ /usr/local/include/X11R5 \
+ /usr/local/include/X11R4 \
+ \
+ /usr/X386/include \
+ /usr/x386/include \
+ /usr/XFree86/include/X11 \
+ \
+ /usr/include \
+ /usr/local/include \
+ /usr/unsupported/include \
+ /usr/athena/include \
+ /usr/local/x11r5/include \
+ /usr/lpp/Xamples/include \
+ \
+ /usr/openwin/include \
+ /usr/openwin/share/include \
+ ; \
+ do
+ if test -r "$ac_dir/$x_direct_test_include"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+ done])
+fi # $ac_x_includes = NO
+
+if test "$ac_x_libraries" = NO; then
+ # Check for the libraries.
+
+ test -z "$x_direct_test_library" && x_direct_test_library=Xt
+ test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
+
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS="$LIBS"
+ LIBS="-l$x_direct_test_library $LIBS"
+AC_TRY_LINK([#include <X11/Intrinsic.h>], [${x_direct_test_function}(1)],
+[LIBS="$ac_save_LIBS"
+# We can link X programs with no special library path.
+ac_x_libraries=],
+[LIBS="$ac_save_LIBS"
+# First see if replacing the include by lib works.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+for ac_dir in `echo "$ac_x_includes" | sed s/include/lib${kdelibsuff}/` \
+ /usr/X11/lib${kdelibsuff} \
+ /usr/X11R6/lib${kdelibsuff} \
+ /usr/X11R5/lib${kdelibsuff} \
+ /usr/X11R4/lib${kdelibsuff} \
+ \
+ /usr/lib${kdelibsuff}/X11 \
+ /usr/lib${kdelibsuff}/X11R6 \
+ /usr/lib${kdelibsuff}/X11R5 \
+ /usr/lib${kdelibsuff}/X11R4 \
+ \
+ /usr/local/X11/lib${kdelibsuff} \
+ /usr/local/X11R6/lib${kdelibsuff} \
+ /usr/local/X11R5/lib${kdelibsuff} \
+ /usr/local/X11R4/lib${kdelibsuff} \
+ \
+ /usr/local/lib${kdelibsuff}/X11 \
+ /usr/local/lib${kdelibsuff}/X11R6 \
+ /usr/local/lib${kdelibsuff}/X11R5 \
+ /usr/local/lib${kdelibsuff}/X11R4 \
+ \
+ /usr/X386/lib${kdelibsuff} \
+ /usr/x386/lib${kdelibsuff} \
+ /usr/XFree86/lib${kdelibsuff}/X11 \
+ \
+ /usr/lib${kdelibsuff} \
+ /usr/local/lib${kdelibsuff} \
+ /usr/unsupported/lib${kdelibsuff} \
+ /usr/athena/lib${kdelibsuff} \
+ /usr/local/x11r5/lib${kdelibsuff} \
+ /usr/lpp/Xamples/lib${kdelibsuff} \
+ /lib/usr/lib${kdelibsuff}/X11 \
+ \
+ /usr/openwin/lib${kdelibsuff} \
+ /usr/openwin/share/lib${kdelibsuff} \
+ ; \
+do
+dnl Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl; do
+ if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done])
+fi # $ac_x_libraries = NO
+])
+
+
+dnl ------------------------------------------------------------------------
+dnl Find a file (or one of more files in a list of dirs)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_FIND_FILE],
+[
+$3=NO
+for i in $2;
+do
+ for j in $1;
+ do
+ echo "configure: __oline__: $i/$j" >&AC_FD_CC
+ if test -r "$i/$j"; then
+ echo "taking that" >&AC_FD_CC
+ $3=$i
+ break 2
+ fi
+ done
+done
+])
+
+dnl KDE_FIND_PATH(program-name, variable-name, list-of-dirs,
+dnl if-not-found, test-parameter, prepend-path)
+dnl
+dnl Look for program-name in list-of-dirs+$PATH.
+dnl If prepend-path is set, look in $PATH+list-of-dirs instead.
+dnl If found, $variable-name is set. If not, if-not-found is evaluated.
+dnl test-parameter: if set, the program is executed with this arg,
+dnl and only a successful exit code is required.
+AC_DEFUN([KDE_FIND_PATH],
+[
+ AC_MSG_CHECKING([for $1])
+ if test -n "$$2"; then
+ kde_cv_path="$$2";
+ else
+ kde_cache=`echo $1 | sed 'y%./+-%__p_%'`
+
+ AC_CACHE_VAL(kde_cv_path_$kde_cache,
+ [
+ kde_cv_path="NONE"
+ kde_save_IFS=$IFS
+ IFS=':'
+ dirs=""
+ for dir in $PATH; do
+ dirs="$dirs $dir"
+ done
+ if test -z "$6"; then dnl Append dirs in PATH (default)
+ dirs="$3 $dirs"
+ else dnl Prepend dirs in PATH (if 6th arg is set)
+ dirs="$dirs $3"
+ fi
+ IFS=$kde_save_IFS
+
+ for dir in $dirs; do
+ if test -x "$dir/$1"; then
+ if test -n "$5"
+ then
+ evalstr="$dir/$1 $5 2>&1 "
+ if eval $evalstr; then
+ kde_cv_path="$dir/$1"
+ break
+ fi
+ else
+ kde_cv_path="$dir/$1"
+ break
+ fi
+ fi
+ done
+
+ eval "kde_cv_path_$kde_cache=$kde_cv_path"
+
+ ])
+
+ eval "kde_cv_path=\"`echo '$kde_cv_path_'$kde_cache`\""
+
+ fi
+
+ if test -z "$kde_cv_path" || test "$kde_cv_path" = NONE; then
+ AC_MSG_RESULT(not found)
+ $4
+ else
+ AC_MSG_RESULT($kde_cv_path)
+ $2=$kde_cv_path
+
+ fi
+])
+
+AC_DEFUN([KDE_MOC_ERROR_MESSAGE],
+[
+ AC_MSG_ERROR([No Qt meta object compiler (moc) found!
+Please check whether you installed Qt correctly.
+You need to have a running moc binary.
+configure tried to run $ac_cv_path_moc and the test didn't
+succeed. If configure shouldn't have tried this one, set
+the environment variable MOC to the right one before running
+configure.
+])
+])
+
+AC_DEFUN([KDE_UIC_ERROR_MESSAGE],
+[
+ AC_MSG_WARN([No Qt ui compiler (uic) found!
+Please check whether you installed Qt correctly.
+You need to have a running uic binary.
+configure tried to run $ac_cv_path_uic and the test didn't
+succeed. If configure shouldn't have tried this one, set
+the environment variable UIC to the right one before running
+configure.
+])
+])
+
+
+AC_DEFUN([KDE_CHECK_UIC_FLAG],
+[
+ AC_MSG_CHECKING([whether uic supports -$1 ])
+ kde_cache=`echo $1 | sed 'y% .=/+-%____p_%'`
+ AC_CACHE_VAL(kde_cv_prog_uic_$kde_cache,
+ [
+ cat >conftest.ui <<EOT
+ <!DOCTYPE UI><UI version="3" stdsetdef="1"></UI>
+EOT
+ ac_uic_testrun="$UIC_PATH -$1 $2 conftest.ui >/dev/null"
+ if AC_TRY_EVAL(ac_uic_testrun); then
+ eval "kde_cv_prog_uic_$kde_cache=yes"
+ else
+ eval "kde_cv_prog_uic_$kde_cache=no"
+ fi
+ rm -f conftest*
+ ])
+
+ if eval "test \"`echo '$kde_cv_prog_uic_'$kde_cache`\" = yes"; then
+ AC_MSG_RESULT([yes])
+ :
+ $3
+ else
+ AC_MSG_RESULT([no])
+ :
+ $4
+ fi
+])
+
+
+dnl ------------------------------------------------------------------------
+dnl Find the meta object compiler and the ui compiler in the PATH,
+dnl in $QTDIR/bin, and some more usual places
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_PATH_QT_MOC_UIC],
+[
+ AC_REQUIRE([KDE_CHECK_PERL])
+ qt_bindirs=""
+ for dir in $kde_qt_dirs; do
+ qt_bindirs="$qt_bindirs $dir/bin $dir/src/moc"
+ done
+ qt_bindirs="$qt_bindirs /usr/bin /usr/X11R6/bin /usr/local/qt/bin"
+ if test ! "$ac_qt_bindir" = "NO"; then
+ qt_bindirs="$ac_qt_bindir $qt_bindirs"
+ fi
+
+ KDE_FIND_PATH(moc, MOC, [$qt_bindirs], [KDE_MOC_ERROR_MESSAGE])
+ if test -z "$UIC_NOT_NEEDED"; then
+ KDE_FIND_PATH(uic, UIC_PATH, [$qt_bindirs], [UIC_PATH=""])
+ if test -z "$UIC_PATH" ; then
+ KDE_UIC_ERROR_MESSAGE
+ exit 1
+ else
+ UIC=$UIC_PATH
+
+ if test $kde_qtver = 3; then
+ KDE_CHECK_UIC_FLAG(L,[/nonexistent],ac_uic_supports_libpath=yes,ac_uic_supports_libpath=no)
+ KDE_CHECK_UIC_FLAG(nounload,,ac_uic_supports_nounload=yes,ac_uic_supports_nounload=no)
+
+ if test x$ac_uic_supports_libpath = xyes; then
+ UIC="$UIC -L \$(kde_widgetdir)"
+ fi
+ if test x$ac_uic_supports_nounload = xyes; then
+ UIC="$UIC -nounload"
+ fi
+ fi
+ fi
+ else
+ UIC="echo uic not available: "
+ fi
+
+ AC_SUBST(MOC)
+ AC_SUBST(UIC)
+
+ UIC_TR="i18n"
+ if test $kde_qtver = 3; then
+ UIC_TR="tr2i18n"
+ fi
+
+ AC_SUBST(UIC_TR)
+])
+
+AC_DEFUN([KDE_1_CHECK_PATHS],
+[
+ KDE_1_CHECK_PATH_HEADERS
+
+ KDE_TEST_RPATH=
+
+ if test -n "$USE_RPATH"; then
+
+ if test -n "$kde_libraries"; then
+ KDE_TEST_RPATH="-R $kde_libraries"
+ fi
+
+ if test -n "$qt_libraries"; then
+ KDE_TEST_RPATH="$KDE_TEST_RPATH -R $qt_libraries"
+ fi
+
+ if test -n "$x_libraries"; then
+ KDE_TEST_RPATH="$KDE_TEST_RPATH -R $x_libraries"
+ fi
+
+ KDE_TEST_RPATH="$KDE_TEST_RPATH $KDE_EXTRA_RPATH"
+ fi
+
+AC_MSG_CHECKING([for KDE libraries installed])
+ac_link='$LIBTOOL_SHELL --silent --mode=link ${CXX-g++} -o conftest $CXXFLAGS $all_includes $CPPFLAGS $LDFLAGS $all_libraries conftest.$ac_ext $LIBS -lkdecore $LIBQT $KDE_TEST_RPATH 1>&5'
+
+if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_ERROR([your system fails at linking a small KDE application!
+Check, if your compiler is installed correctly and if you have used the
+same compiler to compile Qt and kdelibs as you did use now.
+For more details about this problem, look at the end of config.log.])
+fi
+
+if eval `KDEDIR= ./conftest 2>&5`; then
+ kde_result=done
+else
+ kde_result=problems
+fi
+
+KDEDIR= ./conftest 2> /dev/null >&5 # make an echo for config.log
+kde_have_all_paths=yes
+
+KDE_SET_PATHS($kde_result)
+
+])
+
+AC_DEFUN([KDE_SET_PATHS],
+[
+ kde_cv_all_paths="kde_have_all_paths=\"yes\" \
+ kde_htmldir=\"$kde_htmldir\" \
+ kde_appsdir=\"$kde_appsdir\" \
+ kde_icondir=\"$kde_icondir\" \
+ kde_sounddir=\"$kde_sounddir\" \
+ kde_datadir=\"$kde_datadir\" \
+ kde_locale=\"$kde_locale\" \
+ kde_cgidir=\"$kde_cgidir\" \
+ kde_confdir=\"$kde_confdir\" \
+ kde_kcfgdir=\"$kde_kcfgdir\" \
+ kde_mimedir=\"$kde_mimedir\" \
+ kde_toolbardir=\"$kde_toolbardir\" \
+ kde_wallpaperdir=\"$kde_wallpaperdir\" \
+ kde_templatesdir=\"$kde_templatesdir\" \
+ kde_bindir=\"$kde_bindir\" \
+ kde_servicesdir=\"$kde_servicesdir\" \
+ kde_servicetypesdir=\"$kde_servicetypesdir\" \
+ kde_moduledir=\"$kde_moduledir\" \
+ kde_styledir=\"$kde_styledir\" \
+ kde_widgetdir=\"$kde_widgetdir\" \
+ xdg_appsdir=\"$xdg_appsdir\" \
+ xdg_menudir=\"$xdg_menudir\" \
+ xdg_directorydir=\"$xdg_directorydir\" \
+ kde_result=$1"
+])
+
+AC_DEFUN([KDE_SET_DEFAULT_PATHS],
+[
+if test "$1" = "default"; then
+
+ if test -z "$kde_htmldir"; then
+ kde_htmldir='\${datadir}/doc/HTML'
+ fi
+ if test -z "$kde_appsdir"; then
+ kde_appsdir='\${datadir}/applnk'
+ fi
+ if test -z "$kde_icondir"; then
+ kde_icondir='\${datadir}/icons'
+ fi
+ if test -z "$kde_sounddir"; then
+ kde_sounddir='\${datadir}/sounds'
+ fi
+ if test -z "$kde_datadir"; then
+ kde_datadir='\${datadir}/apps'
+ fi
+ if test -z "$kde_locale"; then
+ kde_locale='\${datadir}/locale'
+ fi
+ if test -z "$kde_cgidir"; then
+ kde_cgidir='\${exec_prefix}/cgi-bin'
+ fi
+ if test -z "$kde_confdir"; then
+ kde_confdir='\${datadir}/config'
+ fi
+ if test -z "$kde_kcfgdir"; then
+ kde_kcfgdir='\${datadir}/config.kcfg'
+ fi
+ if test -z "$kde_mimedir"; then
+ kde_mimedir='\${datadir}/mimelnk'
+ fi
+ if test -z "$kde_toolbardir"; then
+ kde_toolbardir='\${datadir}/toolbar'
+ fi
+ if test -z "$kde_wallpaperdir"; then
+ kde_wallpaperdir='\${datadir}/wallpapers'
+ fi
+ if test -z "$kde_templatesdir"; then
+ kde_templatesdir='\${datadir}/templates'
+ fi
+ if test -z "$kde_bindir"; then
+ kde_bindir='\${exec_prefix}/bin'
+ fi
+ if test -z "$kde_servicesdir"; then
+ kde_servicesdir='\${datadir}/services'
+ fi
+ if test -z "$kde_servicetypesdir"; then
+ kde_servicetypesdir='\${datadir}/servicetypes'
+ fi
+ if test -z "$kde_moduledir"; then
+ if test "$kde_qtver" = "2"; then
+ kde_moduledir='\${libdir}/kde2'
+ else
+ kde_moduledir='\${libdir}/kde3'
+ fi
+ fi
+ if test -z "$kde_styledir"; then
+ kde_styledir='\${libdir}/kde3/plugins/styles'
+ fi
+ if test -z "$kde_widgetdir"; then
+ kde_widgetdir='\${libdir}/kde3/plugins/designer'
+ fi
+ if test -z "$xdg_appsdir"; then
+ xdg_appsdir='\${datadir}/applications/kde'
+ fi
+ if test -z "$xdg_menudir"; then
+ xdg_menudir='\${sysconfdir}/xdg/menus'
+ fi
+ if test -z "$xdg_directorydir"; then
+ xdg_directorydir='\${datadir}/desktop-directories'
+ fi
+
+ KDE_SET_PATHS(defaults)
+
+else
+
+ if test $kde_qtver = 1; then
+ AC_MSG_RESULT([compiling])
+ KDE_1_CHECK_PATHS
+ else
+ AC_MSG_ERROR([path checking not yet supported for KDE 2])
+ fi
+
+fi
+])
+
+AC_DEFUN([KDE_CHECK_PATHS_FOR_COMPLETENESS],
+[ if test -z "$kde_htmldir" || test -z "$kde_appsdir" ||
+ test -z "$kde_icondir" || test -z "$kde_sounddir" ||
+ test -z "$kde_datadir" || test -z "$kde_locale" ||
+ test -z "$kde_cgidir" || test -z "$kde_confdir" ||
+ test -z "$kde_kcfgdir" ||
+ test -z "$kde_mimedir" || test -z "$kde_toolbardir" ||
+ test -z "$kde_wallpaperdir" || test -z "$kde_templatesdir" ||
+ test -z "$kde_bindir" || test -z "$kde_servicesdir" ||
+ test -z "$kde_servicetypesdir" || test -z "$kde_moduledir" ||
+ test -z "$kde_styledir" || test -z "kde_widgetdir" ||
+ test -z "$xdg_appsdir" || test -z "$xdg_menudir" || test -z "$xdg_directorydir" ||
+ test "x$kde_have_all_paths" != "xyes"; then
+ kde_have_all_paths=no
+ fi
+])
+
+AC_DEFUN([KDE_MISSING_PROG_ERROR],
+[
+ AC_MSG_ERROR([The important program $1 was not found!
+Please check whether you installed KDE correctly.
+])
+])
+
+AC_DEFUN([KDE_MISSING_ARTS_ERROR],
+[
+ AC_MSG_ERROR([The important program $1 was not found!
+Please check whether you installed aRts correctly or use
+--without-arts to compile without aRts support (this will remove functionality).
+])
+])
+
+AC_DEFUN([KDE_SET_DEFAULT_BINDIRS],
+[
+ kde_default_bindirs="/usr/bin /usr/local/bin /opt/local/bin /usr/X11R6/bin /opt/kde/bin /opt/kde3/bin /usr/kde/bin /usr/local/kde/bin"
+ test -n "$KDEDIR" && kde_default_bindirs="$KDEDIR/bin $kde_default_bindirs"
+ if test -n "$KDEDIRS"; then
+ kde_save_IFS=$IFS
+ IFS=:
+ for dir in $KDEDIRS; do
+ kde_default_bindirs="$dir/bin $kde_default_bindirs "
+ done
+ IFS=$kde_save_IFS
+ fi
+])
+
+AC_DEFUN([KDE_SUBST_PROGRAMS],
+[
+ AC_ARG_WITH(arts,
+ AC_HELP_STRING([--without-arts],[build without aRts [default=no]]),
+ [build_arts=$withval],
+ [build_arts=yes]
+ )
+ AM_CONDITIONAL(include_ARTS, test "$build_arts" '!=' "no")
+ if test "$build_arts" = "no"; then
+ AC_DEFINE(WITHOUT_ARTS, 1, [Defined if compiling without arts])
+ fi
+
+ KDE_SET_DEFAULT_BINDIRS
+ kde_default_bindirs="$exec_prefix/bin $prefix/bin $kde_libs_prefix/bin $kde_default_bindirs"
+ KDE_FIND_PATH(dcopidl, DCOPIDL, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidl)])
+ KDE_FIND_PATH(dcopidl2cpp, DCOPIDL2CPP, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidl2cpp)])
+ if test "$build_arts" '!=' "no"; then
+ KDE_FIND_PATH(mcopidl, MCOPIDL, [$kde_default_bindirs], [KDE_MISSING_ARTS_ERROR(mcopidl)])
+ KDE_FIND_PATH(artsc-config, ARTSCCONFIG, [$kde_default_bindirs], [KDE_MISSING_ARTS_ERROR(artsc-config)])
+ fi
+ KDE_FIND_PATH(meinproc, MEINPROC, [$kde_default_bindirs])
+
+ kde32ornewer=1
+ kde33ornewer=1
+ if test -n "$kde_qtver" && test "$kde_qtver" -lt 3; then
+ kde32ornewer=
+ kde33ornewer=
+ else
+ if test "$kde_qtver" = "3"; then
+ if test "$kde_qtsubver" -le 1; then
+ kde32ornewer=
+ fi
+ if test "$kde_qtsubver" -le 2; then
+ kde33ornewer=
+ fi
+ if test "$KDECONFIG" != "compiled"; then
+ if test `$KDECONFIG --version | grep KDE | sed 's/KDE: \(...\).*/\1/'` = 3.2; then
+ kde33ornewer=
+ fi
+ fi
+ fi
+ fi
+
+ if test -n "$kde32ornewer"; then
+ KDE_FIND_PATH(kconfig_compiler, KCONFIG_COMPILER, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kconfig_compiler)])
+ KDE_FIND_PATH(dcopidlng, DCOPIDLNG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidlng)])
+ fi
+ if test -n "$kde33ornewer"; then
+ KDE_FIND_PATH(makekdewidgets, MAKEKDEWIDGETS, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(makekdewidgets)])
+ AC_SUBST(MAKEKDEWIDGETS)
+ fi
+ KDE_FIND_PATH(xmllint, XMLLINT, [${prefix}/bin ${exec_prefix}/bin], [XMLLINT=""])
+
+ if test -n "$MEINPROC" -a "$MEINPROC" != "compiled"; then
+ kde_sharedirs="/usr/share/kde /usr/local/share /usr/share /opt/kde3/share /opt/kde/share $prefix/share"
+ test -n "$KDEDIR" && kde_sharedirs="$KDEDIR/share $kde_sharedirs"
+ AC_FIND_FILE(apps/ksgmltools2/customization/kde-chunk.xsl, $kde_sharedirs, KDE_XSL_STYLESHEET)
+ if test "$KDE_XSL_STYLESHEET" = "NO"; then
+ KDE_XSL_STYLESHEET=""
+ else
+ KDE_XSL_STYLESHEET="$KDE_XSL_STYLESHEET/apps/ksgmltools2/customization/kde-chunk.xsl"
+ fi
+ fi
+
+ DCOP_DEPENDENCIES='$(DCOPIDL)'
+ if test -n "$kde32ornewer"; then
+ KCFG_DEPENDENCIES='$(KCONFIG_COMPILER)'
+ DCOP_DEPENDENCIES='$(DCOPIDL) $(DCOPIDLNG)'
+ AC_SUBST(KCONFIG_COMPILER)
+ AC_SUBST(KCFG_DEPENDENCIES)
+ AC_SUBST(DCOPIDLNG)
+ fi
+ AC_SUBST(DCOPIDL)
+ AC_SUBST(DCOPIDL2CPP)
+ AC_SUBST(DCOP_DEPENDENCIES)
+ AC_SUBST(MCOPIDL)
+ AC_SUBST(ARTSCCONFIG)
+ AC_SUBST(MEINPROC)
+ AC_SUBST(KDE_XSL_STYLESHEET)
+ AC_SUBST(XMLLINT)
+])dnl
+
+AC_DEFUN([AC_CREATE_KFSSTND],
+[
+AC_REQUIRE([AC_CHECK_RPATH])
+
+AC_MSG_CHECKING([for KDE paths])
+kde_result=""
+kde_cached_paths=yes
+AC_CACHE_VAL(kde_cv_all_paths,
+[
+ KDE_SET_DEFAULT_PATHS($1)
+ kde_cached_paths=no
+])
+eval "$kde_cv_all_paths"
+KDE_CHECK_PATHS_FOR_COMPLETENESS
+if test "$kde_have_all_paths" = "no" && test "$kde_cached_paths" = "yes"; then
+ # wrong values were cached, may be, we can set better ones
+ kde_result=
+ kde_htmldir= kde_appsdir= kde_icondir= kde_sounddir=
+ kde_datadir= kde_locale= kde_cgidir= kde_confdir= kde_kcfgdir=
+ kde_mimedir= kde_toolbardir= kde_wallpaperdir= kde_templatesdir=
+ kde_bindir= kde_servicesdir= kde_servicetypesdir= kde_moduledir=
+ kde_have_all_paths=
+ kde_styledir=
+ kde_widgetdir=
+ xdg_appsdir = xdg_menudir= xdg_directorydir=
+ KDE_SET_DEFAULT_PATHS($1)
+ eval "$kde_cv_all_paths"
+ KDE_CHECK_PATHS_FOR_COMPLETENESS
+ kde_result="$kde_result (cache overridden)"
+fi
+if test "$kde_have_all_paths" = "no"; then
+ AC_MSG_ERROR([configure could not run a little KDE program to test the environment.
+Since it had compiled and linked before, it must be a strange problem on your system.
+Look at config.log for details. If you are not able to fix this, look at
+http://www.kde.org/faq/installation.html or any www.kde.org mirror.
+(If you're using an egcs version on Linux, you may update binutils!)
+])
+else
+ rm -f conftest*
+ AC_MSG_RESULT($kde_result)
+fi
+
+bindir=$kde_bindir
+
+KDE_SUBST_PROGRAMS
+
+])
+
+AC_DEFUN([AC_SUBST_KFSSTND],
+[
+AC_SUBST(kde_htmldir)
+AC_SUBST(kde_appsdir)
+AC_SUBST(kde_icondir)
+AC_SUBST(kde_sounddir)
+AC_SUBST(kde_datadir)
+AC_SUBST(kde_locale)
+AC_SUBST(kde_confdir)
+AC_SUBST(kde_kcfgdir)
+AC_SUBST(kde_mimedir)
+AC_SUBST(kde_wallpaperdir)
+AC_SUBST(kde_bindir)
+dnl X Desktop Group standards
+AC_SUBST(xdg_appsdir)
+AC_SUBST(xdg_menudir)
+AC_SUBST(xdg_directorydir)
+dnl for KDE 2
+AC_SUBST(kde_templatesdir)
+AC_SUBST(kde_servicesdir)
+AC_SUBST(kde_servicetypesdir)
+AC_SUBST(kde_moduledir)
+AC_SUBST(kdeinitdir, '$(kde_moduledir)')
+AC_SUBST(kde_styledir)
+AC_SUBST(kde_widgetdir)
+if test "$kde_qtver" = 1; then
+ kde_minidir="$kde_icondir/mini"
+else
+# for KDE 1 - this breaks KDE2 apps using minidir, but
+# that's the plan ;-/
+ kde_minidir="/dev/null"
+fi
+dnl AC_SUBST(kde_minidir)
+dnl AC_SUBST(kde_cgidir)
+dnl AC_SUBST(kde_toolbardir)
+])
+
+AC_DEFUN([KDE_MISC_TESTS],
+[
+ dnl Checks for libraries.
+ AC_CHECK_LIB(util, main, [LIBUTIL="-lutil"]) dnl for *BSD
+ AC_SUBST(LIBUTIL)
+ AC_CHECK_LIB(compat, main, [LIBCOMPAT="-lcompat"]) dnl for *BSD
+ AC_SUBST(LIBCOMPAT)
+ kde_have_crypt=
+ AC_CHECK_LIB(crypt, crypt, [LIBCRYPT="-lcrypt"; kde_have_crypt=yes],
+ AC_CHECK_LIB(c, crypt, [kde_have_crypt=yes], [
+ AC_MSG_WARN([you have no crypt in either libcrypt or libc.
+You should install libcrypt from another source or configure with PAM
+support])
+ kde_have_crypt=no
+ ]))
+ AC_SUBST(LIBCRYPT)
+ if test $kde_have_crypt = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_CRYPT, 1, [Defines if your system has the crypt function])
+ fi
+ AC_CHECK_SOCKLEN_T
+ AC_CHECK_LIB(dnet, dnet_ntoa, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"])
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ AC_CHECK_LIB(dnet_stub, dnet_ntoa,
+ [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"])
+ fi
+ AC_CHECK_FUNC(inet_ntoa)
+ if test $ac_cv_func_inet_ntoa = no; then
+ AC_CHECK_LIB(nsl, inet_ntoa, X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl")
+ fi
+ AC_CHECK_FUNC(connect)
+ if test $ac_cv_func_connect = no; then
+ AC_CHECK_LIB(socket, connect, X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS", ,
+ $X_EXTRA_LIBS)
+ fi
+
+ AC_CHECK_FUNC(remove)
+ if test $ac_cv_func_remove = no; then
+ AC_CHECK_LIB(posix, remove, X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix")
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ AC_CHECK_FUNC(shmat, ,
+ AC_CHECK_LIB(ipc, shmat, X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"))
+
+ # more headers that need to be explicitly included on darwin
+ AC_CHECK_HEADERS(sys/types.h stdint.h)
+
+ # sys/bitypes.h is needed for uint32_t and friends on Tru64
+ AC_CHECK_HEADERS(sys/bitypes.h)
+
+ # darwin requires a poll emulation library
+ AC_CHECK_LIB(poll, poll, LIB_POLL="-lpoll")
+
+ # for some image handling on Mac OS X
+ AC_CHECK_HEADERS(Carbon/Carbon.h)
+
+ # CoreAudio framework
+ AC_CHECK_HEADER(CoreAudio/CoreAudio.h, [
+ AC_DEFINE(HAVE_COREAUDIO, 1, [Define if you have the CoreAudio API])
+ FRAMEWORK_COREAUDIO="-Wl,-framework,CoreAudio"
+ ])
+
+ AC_CHECK_RES_INIT
+ AC_SUBST(LIB_POLL)
+ AC_SUBST(FRAMEWORK_COREAUDIO)
+ LIBSOCKET="$X_EXTRA_LIBS"
+ AC_SUBST(LIBSOCKET)
+ AC_SUBST(X_EXTRA_LIBS)
+ AC_CHECK_LIB(ucb, killpg, [LIBUCB="-lucb"]) dnl for Solaris2.4
+ AC_SUBST(LIBUCB)
+
+ case $host in dnl this *is* LynxOS specific
+ *-*-lynxos* )
+ AC_MSG_CHECKING([LynxOS header file wrappers])
+ [CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__"]
+ AC_MSG_RESULT(disabled)
+ AC_CHECK_LIB(bsd, gethostbyname, [LIBSOCKET="-lbsd"]) dnl for LynxOS
+ ;;
+ esac
+
+ KDE_CHECK_TYPES
+ KDE_CHECK_LIBDL
+ KDE_CHECK_STRLCPY
+ KDE_CHECK_PIE_SUPPORT
+
+# darwin needs this to initialize the environment
+AC_CHECK_HEADERS(crt_externs.h)
+AC_CHECK_FUNC(_NSGetEnviron, [AC_DEFINE(HAVE_NSGETENVIRON, 1, [Define if your system needs _NSGetEnviron to set up the environment])])
+
+AH_VERBATIM(_DARWIN_ENVIRON,
+[
+#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
+# include <sys/time.h>
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron())
+#endif
+])
+
+AH_VERBATIM(_AIX_STRINGS_H_BZERO,
+[
+/*
+ * AIX defines FD_SET in terms of bzero, but fails to include <strings.h>
+ * that defines bzero.
+ */
+
+#if defined(_AIX)
+#include <strings.h>
+#endif
+])
+
+AC_CHECK_FUNCS([vsnprintf snprintf])
+
+AH_VERBATIM(_TRU64,[
+/*
+ * On HP-UX, the declaration of vsnprintf() is needed every time !
+ */
+
+#if !defined(HAVE_VSNPRINTF) || defined(hpux)
+#if __STDC__
+#include <stdarg.h>
+#include <stdlib.h>
+#else
+#include <varargs.h>
+#endif
+#ifdef __cplusplus
+extern "C"
+#endif
+int vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
+#ifdef __cplusplus
+extern "C"
+#endif
+int snprintf(char *str, size_t n, char const *fmt, ...);
+#endif
+])
+
+])
+
+dnl ------------------------------------------------------------------------
+dnl Find the header files and libraries for X-Windows. Extended the
+dnl macro AC_PATH_X
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([K_PATH_X],
+[
+AC_REQUIRE([KDE_MISC_TESTS])dnl
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+AC_ARG_ENABLE(
+ embedded,
+ AC_HELP_STRING([--enable-embedded],[link to Qt-embedded, don't use X]),
+ kde_use_qt_emb=$enableval,
+ kde_use_qt_emb=no
+)
+
+AC_ARG_ENABLE(
+ qtopia,
+ AC_HELP_STRING([--enable-qtopia],[link to Qt-embedded, link to the Qtopia Environment]),
+ kde_use_qt_emb_palm=$enableval,
+ kde_use_qt_emb_palm=no
+)
+
+AC_ARG_ENABLE(
+ mac,
+ AC_HELP_STRING([--enable-mac],[link to Qt/Mac (don't use X)]),
+ kde_use_qt_mac=$enableval,
+ kde_use_qt_mac=no
+)
+
+# used to disable x11-specific stuff on special platforms
+AM_CONDITIONAL(include_x11, test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no")
+
+if test "$kde_use_qt_emb" = "no" && test "$kde_use_qt_mac" = "no"; then
+
+AC_MSG_CHECKING(for X)
+
+AC_CACHE_VAL(kde_cv_have_x,
+[# One or both of the vars are not set, and there is no cached value.
+if test "{$x_includes+set}" = set || test "$x_includes" = NONE; then
+ kde_x_includes=NO
+else
+ kde_x_includes=$x_includes
+fi
+if test "{$x_libraries+set}" = set || test "$x_libraries" = NONE; then
+ kde_x_libraries=NO
+else
+ kde_x_libraries=$x_libraries
+fi
+
+# below we use the standard autoconf calls
+ac_x_libraries=$kde_x_libraries
+ac_x_includes=$kde_x_includes
+
+KDE_PATH_X_DIRECT
+dnl AC_PATH_X_XMKMF picks /usr/lib as the path for the X libraries.
+dnl Unfortunately, if compiling with the N32 ABI, this is not the correct
+dnl location. The correct location is /usr/lib32 or an undefined value
+dnl (the linker is smart enough to pick the correct default library).
+dnl Things work just fine if you use just AC_PATH_X_DIRECT.
+dnl Solaris has a similar problem. AC_PATH_X_XMKMF forces x_includes to
+dnl /usr/openwin/include, which doesn't work. /usr/include does work, so
+dnl x_includes should be left alone.
+case "$host" in
+mips-sgi-irix6*)
+ ;;
+*-*-solaris*)
+ ;;
+*)
+ _AC_PATH_X_XMKMF
+ if test -z "$ac_x_includes"; then
+ ac_x_includes="."
+ fi
+ if test -z "$ac_x_libraries"; then
+ ac_x_libraries="/usr/lib${kdelibsuff}"
+ fi
+esac
+#from now on we use our own again
+
+# when the user already gave --x-includes, we ignore
+# what the standard autoconf macros told us.
+if test "$kde_x_includes" = NO; then
+ kde_x_includes=$ac_x_includes
+fi
+
+# for --x-libraries too
+if test "$kde_x_libraries" = NO; then
+ kde_x_libraries=$ac_x_libraries
+fi
+
+if test "$kde_x_includes" = NO; then
+ AC_MSG_ERROR([Can't find X includes. Please check your installation and add the correct paths!])
+fi
+
+if test "$kde_x_libraries" = NO; then
+ AC_MSG_ERROR([Can't find X libraries. Please check your installation and add the correct paths!])
+fi
+
+# Record where we found X for the cache.
+kde_cv_have_x="have_x=yes \
+ kde_x_includes=$kde_x_includes kde_x_libraries=$kde_x_libraries"
+])dnl
+
+eval "$kde_cv_have_x"
+
+if test "$have_x" != yes; then
+ AC_MSG_RESULT($have_x)
+ no_x=yes
+else
+ AC_MSG_RESULT([libraries $kde_x_libraries, headers $kde_x_includes])
+fi
+
+if test -z "$kde_x_includes" || test "x$kde_x_includes" = xNONE; then
+ X_INCLUDES=""
+ x_includes="."; dnl better than nothing :-
+ else
+ x_includes=$kde_x_includes
+ X_INCLUDES="-I$x_includes"
+fi
+
+if test -z "$kde_x_libraries" || test "x$kde_x_libraries" = xNONE || test "$kde_x_libraries" = "/usr/lib"; then
+ X_LDFLAGS=""
+ x_libraries="/usr/lib"; dnl better than nothing :-
+ else
+ x_libraries=$kde_x_libraries
+ X_LDFLAGS="-L$x_libraries"
+fi
+all_includes="$X_INCLUDES"
+all_libraries="$X_LDFLAGS $LDFLAGS_AS_NEEDED $LDFLAGS_NEW_DTAGS"
+
+# Check for libraries that X11R6 Xt/Xaw programs need.
+ac_save_LDFLAGS="$LDFLAGS"
+LDFLAGS="$LDFLAGS $X_LDFLAGS"
+# SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+# check for ICE first), but we must link in the order -lSM -lICE or
+# we get undefined symbols. So assume we have SM if we have ICE.
+# These have to be linked with before -lX11, unlike the other
+# libraries we check for below, so use a different variable.
+# --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
+AC_CHECK_LIB(ICE, IceConnectionNumber,
+ [LIBSM="-lSM -lICE"], , $X_EXTRA_LIBS)
+LDFLAGS="$ac_save_LDFLAGS"
+
+LIB_X11='-lX11 $(LIBSOCKET)'
+
+AC_MSG_CHECKING(for libXext)
+AC_CACHE_VAL(kde_cv_have_libXext,
+[
+kde_ldflags_safe="$LDFLAGS"
+kde_libs_safe="$LIBS"
+
+LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS"
+LIBS="-lXext -lX11 $LIBSOCKET"
+
+AC_TRY_LINK([
+#include <stdio.h>
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+#endif
+],
+[
+printf("hello Xext\n");
+],
+kde_cv_have_libXext=yes,
+kde_cv_have_libXext=no
+)
+
+LDFLAGS=$kde_ldflags_safe
+LIBS=$kde_libs_safe
+])
+
+AC_MSG_RESULT($kde_cv_have_libXext)
+
+if test "$kde_cv_have_libXext" = "no"; then
+ AC_MSG_ERROR([We need a working libXext to proceed. Since configure
+can't find it itself, we stop here assuming that make wouldn't find
+them either.])
+fi
+
+LIB_XEXT="-lXext"
+QTE_NORTTI=""
+
+elif test "$kde_use_qt_emb" = "yes"; then
+ dnl We're using QT Embedded
+ CPPFLAGS=-DQWS
+ CXXFLAGS="$CXXFLAGS -fno-rtti"
+ QTE_NORTTI="-fno-rtti -DQWS"
+ X_PRE_LIBS=""
+ LIB_X11=""
+ LIB_XEXT=""
+ LIB_XRENDER=""
+ LIBSM=""
+ X_INCLUDES=""
+ X_LDFLAGS=""
+ x_includes=""
+ x_libraries=""
+elif test "$kde_use_qt_mac" = "yes"; then
+ dnl We're using QT/Mac (I use QT_MAC so that qglobal.h doesn't *have* to
+ dnl be included to get the information) --Sam
+ CXXFLAGS="$CXXFLAGS -DQT_MAC -no-cpp-precomp"
+ CFLAGS="$CFLAGS -DQT_MAC -no-cpp-precomp"
+ X_PRE_LIBS=""
+ LIB_X11=""
+ LIB_XEXT=""
+ LIB_XRENDER=""
+ LIBSM=""
+ X_INCLUDES=""
+ X_LDFLAGS=""
+ x_includes=""
+ x_libraries=""
+fi
+AC_SUBST(X_PRE_LIBS)
+AC_SUBST(LIB_X11)
+AC_SUBST(LIB_XRENDER)
+AC_SUBST(LIBSM)
+AC_SUBST(X_INCLUDES)
+AC_SUBST(X_LDFLAGS)
+AC_SUBST(x_includes)
+AC_SUBST(x_libraries)
+AC_SUBST(QTE_NORTTI)
+AC_SUBST(LIB_XEXT)
+
+])
+
+AC_DEFUN([KDE_PRINT_QT_PROGRAM],
+[
+AC_REQUIRE([KDE_USE_QT])
+cat > conftest.$ac_ext <<EOF
+#include "confdefs.h"
+#include <qglobal.h>
+#include <qapplication.h>
+EOF
+if test "$kde_qtver" = "2"; then
+cat >> conftest.$ac_ext <<EOF
+#include <qevent.h>
+#include <qstring.h>
+#include <qstyle.h>
+EOF
+
+if test $kde_qtsubver -gt 0; then
+cat >> conftest.$ac_ext <<EOF
+#if QT_VERSION < 210
+#error 1
+#endif
+EOF
+fi
+fi
+
+if test "$kde_qtver" = "3"; then
+cat >> conftest.$ac_ext <<EOF
+#include <qcursor.h>
+#include <qstylefactory.h>
+#include <private/qucomextra_p.h>
+EOF
+fi
+
+echo "#if ! ($kde_qt_verstring)" >> conftest.$ac_ext
+cat >> conftest.$ac_ext <<EOF
+#error 1
+#endif
+
+int main() {
+EOF
+if test "$kde_qtver" = "2"; then
+cat >> conftest.$ac_ext <<EOF
+ QStringList *t = new QStringList();
+ Q_UNUSED(t);
+EOF
+if test $kde_qtsubver -gt 0; then
+cat >> conftest.$ac_ext <<EOF
+ QString s;
+ s.setLatin1("Elvis is alive", 14);
+EOF
+fi
+fi
+if test "$kde_qtver" = "3"; then
+cat >> conftest.$ac_ext <<EOF
+ (void)QStyleFactory::create(QString::null);
+ QCursor c(Qt::WhatsThisCursor);
+EOF
+fi
+cat >> conftest.$ac_ext <<EOF
+ return 0;
+}
+EOF
+])
+
+AC_DEFUN([KDE_USE_QT],
+[
+if test -z "$1"; then
+ # Current default Qt version: 3.3
+ kde_qtver=3
+ kde_qtsubver=3
+else
+ kde_qtsubver=`echo "$1" | sed -e 's#[0-9][0-9]*\.\([0-9][0-9]*\).*#\1#'`
+ # following is the check if subversion isnt found in passed argument
+ if test "$kde_qtsubver" = "$1"; then
+ kde_qtsubver=1
+ fi
+ kde_qtver=`echo "$1" | sed -e 's#^\([0-9][0-9]*\)\..*#\1#'`
+ if test "$kde_qtver" = "1"; then
+ kde_qtsubver=42
+ fi
+fi
+
+if test -z "$2"; then
+ if test "$kde_qtver" = "2"; then
+ if test $kde_qtsubver -gt 0; then
+ kde_qt_minversion=">= Qt 2.2.2"
+ else
+ kde_qt_minversion=">= Qt 2.0.2"
+ fi
+ fi
+ if test "$kde_qtver" = "3"; then
+ if test $kde_qtsubver -gt 0; then
+ if test $kde_qtsubver -gt 1; then
+ if test $kde_qtsubver -gt 2; then
+ kde_qt_minversion=">= Qt 3.3 and < 4.0"
+ else
+ kde_qt_minversion=">= Qt 3.2 and < 4.0"
+ fi
+ else
+ kde_qt_minversion=">= Qt 3.1 (20021021) and < 4.0"
+ fi
+ else
+ kde_qt_minversion=">= Qt 3.0 and < 4.0"
+ fi
+ fi
+ if test "$kde_qtver" = "1"; then
+ kde_qt_minversion=">= 1.42 and < 2.0"
+ fi
+else
+ kde_qt_minversion="$2"
+fi
+
+if test -z "$3"; then
+ if test $kde_qtver = 3; then
+ if test $kde_qtsubver -gt 0; then
+ kde_qt_verstring="QT_VERSION >= 0x03@VER@00 && QT_VERSION < 0x040000"
+ qtsubver=`echo "00$kde_qtsubver" | sed -e 's,.*\(..\)$,\1,'`
+ kde_qt_verstring=`echo $kde_qt_verstring | sed -e "s,@VER@,$qtsubver,"`
+ else
+ kde_qt_verstring="QT_VERSION >= 300 && QT_VERSION < 0x040000"
+ fi
+ fi
+ if test $kde_qtver = 2; then
+ if test $kde_qtsubver -gt 0; then
+ kde_qt_verstring="QT_VERSION >= 222"
+ else
+ kde_qt_verstring="QT_VERSION >= 200"
+ fi
+ fi
+ if test $kde_qtver = 1; then
+ kde_qt_verstring="QT_VERSION >= 142 && QT_VERSION < 200"
+ fi
+else
+ kde_qt_verstring="$3"
+fi
+
+if test $kde_qtver = 4; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt4 /usr/lib/qt /usr/share/qt4"
+fi
+if test $kde_qtver = 3; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt3 /usr/lib/qt /usr/share/qt3"
+fi
+if test $kde_qtver = 2; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt2 /usr/lib/qt"
+fi
+if test $kde_qtver = 1; then
+ kde_qt_dirs="$QTDIR /usr/lib/qt"
+fi
+])
+
+AC_DEFUN([KDE_CHECK_QT_DIRECT],
+[
+AC_REQUIRE([KDE_USE_QT])
+AC_MSG_CHECKING([if Qt compiles without flags])
+AC_CACHE_VAL(kde_cv_qt_direct,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ac_LD_LIBRARY_PATH_safe=$LD_LIBRARY_PATH
+ac_LIBRARY_PATH="$LIBRARY_PATH"
+ac_cxxflags_safe="$CXXFLAGS"
+ac_ldflags_safe="$LDFLAGS"
+ac_libs_safe="$LIBS"
+
+CXXFLAGS="$CXXFLAGS -I$qt_includes"
+LDFLAGS="$LDFLAGS $X_LDFLAGS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$LIBQT -lXext -lX11 $LIBSOCKET"
+else
+LIBS="$LIBQT $LIBSOCKET"
+fi
+LD_LIBRARY_PATH=
+export LD_LIBRARY_PATH
+LIBRARY_PATH=
+export LIBRARY_PATH
+
+KDE_PRINT_QT_PROGRAM
+
+if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ kde_cv_qt_direct="yes"
+else
+ kde_cv_qt_direct="no"
+ echo "configure: failed program was:" >&AC_FD_CC
+ cat conftest.$ac_ext >&AC_FD_CC
+fi
+
+rm -f conftest*
+CXXFLAGS="$ac_cxxflags_safe"
+LDFLAGS="$ac_ldflags_safe"
+LIBS="$ac_libs_safe"
+
+LD_LIBRARY_PATH="$ac_LD_LIBRARY_PATH_safe"
+export LD_LIBRARY_PATH
+LIBRARY_PATH="$ac_LIBRARY_PATH"
+export LIBRARY_PATH
+AC_LANG_RESTORE
+])
+
+if test "$kde_cv_qt_direct" = "yes"; then
+ AC_MSG_RESULT(yes)
+ $1
+else
+ AC_MSG_RESULT(no)
+ $2
+fi
+])
+
+dnl ------------------------------------------------------------------------
+dnl Try to find the Qt headers and libraries.
+dnl $(QT_LDFLAGS) will be -Lqtliblocation (if needed)
+dnl and $(QT_INCLUDES) will be -Iqthdrlocation (if needed)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_PATH_QT_1_3],
+[
+AC_REQUIRE([K_PATH_X])
+AC_REQUIRE([KDE_USE_QT])
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+dnl ------------------------------------------------------------------------
+dnl Add configure flag to enable linking to MT version of Qt library.
+dnl ------------------------------------------------------------------------
+
+AC_ARG_ENABLE(
+ mt,
+ AC_HELP_STRING([--disable-mt],[link to non-threaded Qt (deprecated)]),
+ kde_use_qt_mt=$enableval,
+ [
+ if test $kde_qtver = 3; then
+ kde_use_qt_mt=yes
+ else
+ kde_use_qt_mt=no
+ fi
+ ]
+)
+
+USING_QT_MT=""
+
+dnl ------------------------------------------------------------------------
+dnl If we not get --disable-qt-mt then adjust some vars for the host.
+dnl ------------------------------------------------------------------------
+
+KDE_MT_LDFLAGS=
+KDE_MT_LIBS=
+if test "x$kde_use_qt_mt" = "xyes"; then
+ KDE_CHECK_THREADING
+ if test "x$kde_use_threading" = "xyes"; then
+ CPPFLAGS="$USE_THREADS -DQT_THREAD_SUPPORT $CPPFLAGS"
+ KDE_MT_LDFLAGS="$USE_THREADS"
+ KDE_MT_LIBS="$LIBPTHREAD"
+ else
+ kde_use_qt_mt=no
+ fi
+fi
+AC_SUBST(KDE_MT_LDFLAGS)
+AC_SUBST(KDE_MT_LIBS)
+
+kde_qt_was_given=yes
+
+dnl ------------------------------------------------------------------------
+dnl If we haven't been told how to link to Qt, we work it out for ourselves.
+dnl ------------------------------------------------------------------------
+if test -z "$LIBQT_GLOB"; then
+ if test "x$kde_use_qt_emb" = "xyes"; then
+ LIBQT_GLOB="libqte.*"
+ else
+ LIBQT_GLOB="libqt.*"
+ fi
+fi
+
+dnl ------------------------------------------------------------
+dnl If we got --enable-embedded then adjust the Qt library name.
+dnl ------------------------------------------------------------
+if test "x$kde_use_qt_emb" = "xyes"; then
+ qtlib="qte"
+else
+ qtlib="qt"
+fi
+
+kde_int_qt="-l$qtlib"
+
+if test -z "$LIBQPE"; then
+dnl ------------------------------------------------------------
+dnl If we got --enable-palmtop then add -lqpe to the link line
+dnl ------------------------------------------------------------
+ if test "x$kde_use_qt_emb" = "xyes"; then
+ if test "x$kde_use_qt_emb_palm" = "xyes"; then
+ LIB_QPE="-lqpe"
+ else
+ LIB_QPE=""
+ fi
+ else
+ LIB_QPE=""
+ fi
+fi
+
+dnl ------------------------------------------------------------------------
+dnl If we got --enable-qt-mt then adjust the Qt library name for the host.
+dnl ------------------------------------------------------------------------
+
+if test "x$kde_use_qt_mt" = "xyes"; then
+ LIBQT="-l$qtlib-mt"
+ kde_int_qt="-l$qtlib-mt"
+ LIBQT_GLOB="lib$qtlib-mt.*"
+ USING_QT_MT="using -mt"
+else
+ LIBQT="-l$qtlib"
+fi
+
+if test $kde_qtver != 1; then
+
+ AC_REQUIRE([AC_FIND_PNG])
+ AC_REQUIRE([AC_FIND_JPEG])
+ LIBQT="$LIBQT $LIBPNG $LIBJPEG"
+fi
+
+if test $kde_qtver = 3; then
+ AC_REQUIRE([KDE_CHECK_LIBDL])
+ LIBQT="$LIBQT $LIBDL"
+fi
+
+AC_MSG_CHECKING([for Qt])
+
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBQT="$LIBQT $X_PRE_LIBS -lXext -lX11 $LIBSM $LIBSOCKET"
+fi
+ac_qt_includes=NO ac_qt_libraries=NO ac_qt_bindir=NO
+qt_libraries=""
+qt_includes=""
+AC_ARG_WITH(qt-dir,
+ AC_HELP_STRING([--with-qt-dir=DIR],[where the root of Qt is installed ]),
+ [ ac_qt_includes="$withval"/include
+ ac_qt_libraries="$withval"/lib${kdelibsuff}
+ ac_qt_bindir="$withval"/bin
+ ])
+
+AC_ARG_WITH(qt-includes,
+ AC_HELP_STRING([--with-qt-includes=DIR],[where the Qt includes are. ]),
+ [
+ ac_qt_includes="$withval"
+ ])
+
+kde_qt_libs_given=no
+
+AC_ARG_WITH(qt-libraries,
+ AC_HELP_STRING([--with-qt-libraries=DIR],[where the Qt library is installed.]),
+ [ ac_qt_libraries="$withval"
+ kde_qt_libs_given=yes
+ ])
+
+AC_CACHE_VAL(ac_cv_have_qt,
+[#try to guess Qt locations
+
+qt_incdirs=""
+for dir in $kde_qt_dirs; do
+ qt_incdirs="$qt_incdirs $dir/include $dir"
+done
+qt_incdirs="$QTINC $qt_incdirs /usr/local/qt/include /usr/include/qt /usr/include /usr/X11R6/include/X11/qt /usr/X11R6/include/qt /usr/X11R6/include/qt2 /usr/include/qt3 $x_includes"
+if test ! "$ac_qt_includes" = "NO"; then
+ qt_incdirs="$ac_qt_includes $qt_incdirs"
+fi
+
+if test "$kde_qtver" != "1"; then
+ kde_qt_header=qstyle.h
+else
+ kde_qt_header=qglobal.h
+fi
+
+AC_FIND_FILE($kde_qt_header, $qt_incdirs, qt_incdir)
+ac_qt_includes="$qt_incdir"
+
+qt_libdirs=""
+for dir in $kde_qt_dirs; do
+ qt_libdirs="$qt_libdirs $dir/lib${kdelibsuff} $dir"
+done
+qt_libdirs="$QTLIB $qt_libdirs /usr/X11R6/lib /usr/lib /usr/local/qt/lib $x_libraries"
+if test ! "$ac_qt_libraries" = "NO"; then
+ qt_libdir=$ac_qt_libraries
+else
+ qt_libdirs="$ac_qt_libraries $qt_libdirs"
+ # if the Qt was given, the chance is too big that libqt.* doesn't exist
+ qt_libdir=NONE
+ for dir in $qt_libdirs; do
+ try="ls -1 $dir/${LIBQT_GLOB}"
+ if test -n "`$try 2> /dev/null`"; then qt_libdir=$dir; break; else echo "tried $dir" >&AC_FD_CC ; fi
+ done
+fi
+for a in $qt_libdir/lib`echo ${kde_int_qt} | sed 's,^-l,,'`_incremental.*; do
+ if test -e "$a"; then
+ LIBQT="$LIBQT ${kde_int_qt}_incremental"
+ break
+ fi
+done
+
+ac_qt_libraries="$qt_libdir"
+
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+
+ac_cxxflags_safe="$CXXFLAGS"
+ac_ldflags_safe="$LDFLAGS"
+ac_libs_safe="$LIBS"
+
+CXXFLAGS="$CXXFLAGS -I$qt_incdir $all_includes"
+LDFLAGS="$LDFLAGS -L$qt_libdir $all_libraries $USER_LDFLAGS $KDE_MT_LDFLAGS"
+LIBS="$LIBS $LIBQT $KDE_MT_LIBS"
+
+KDE_PRINT_QT_PROGRAM
+
+if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ rm -f conftest*
+else
+ echo "configure: failed program was:" >&AC_FD_CC
+ cat conftest.$ac_ext >&AC_FD_CC
+ ac_qt_libraries="NO"
+fi
+rm -f conftest*
+CXXFLAGS="$ac_cxxflags_safe"
+LDFLAGS="$ac_ldflags_safe"
+LIBS="$ac_libs_safe"
+
+AC_LANG_RESTORE
+if test "$ac_qt_includes" = NO || test "$ac_qt_libraries" = NO; then
+ ac_cv_have_qt="have_qt=no"
+ ac_qt_notfound=""
+ missing_qt_mt=""
+ if test "$ac_qt_includes" = NO; then
+ if test "$ac_qt_libraries" = NO; then
+ ac_qt_notfound="(headers and libraries)";
+ else
+ ac_qt_notfound="(headers)";
+ fi
+ else
+ if test "x$kde_use_qt_mt" = "xyes"; then
+ missing_qt_mt="
+Make sure that you have compiled Qt with thread support!"
+ ac_qt_notfound="(library $qtlib-mt)";
+ else
+ ac_qt_notfound="(library $qtlib)";
+ fi
+ fi
+
+ AC_MSG_ERROR([Qt ($kde_qt_minversion) $ac_qt_notfound not found. Please check your installation!
+For more details about this problem, look at the end of config.log.$missing_qt_mt])
+else
+ have_qt="yes"
+fi
+])
+
+eval "$ac_cv_have_qt"
+
+if test "$have_qt" != yes; then
+ AC_MSG_RESULT([$have_qt]);
+else
+ ac_cv_have_qt="have_qt=yes \
+ ac_qt_includes=$ac_qt_includes ac_qt_libraries=$ac_qt_libraries"
+ AC_MSG_RESULT([libraries $ac_qt_libraries, headers $ac_qt_includes $USING_QT_MT])
+
+ qt_libraries="$ac_qt_libraries"
+ qt_includes="$ac_qt_includes"
+fi
+
+if test ! "$kde_qt_libs_given" = "yes" && test ! "$kde_qtver" = 3; then
+ KDE_CHECK_QT_DIRECT(qt_libraries= ,[])
+fi
+
+AC_SUBST(qt_libraries)
+AC_SUBST(qt_includes)
+
+if test "$qt_includes" = "$x_includes" || test -z "$qt_includes"; then
+ QT_INCLUDES=""
+else
+ QT_INCLUDES="-I$qt_includes"
+ all_includes="$QT_INCLUDES $all_includes"
+fi
+
+if test "$qt_libraries" = "$x_libraries" || test -z "$qt_libraries"; then
+ QT_LDFLAGS=""
+else
+ QT_LDFLAGS="-L$qt_libraries"
+ all_libraries="$QT_LDFLAGS $all_libraries"
+fi
+test -z "$KDE_MT_LDFLAGS" || all_libraries="$all_libraries $KDE_MT_LDFLAGS"
+
+AC_SUBST(QT_INCLUDES)
+AC_SUBST(QT_LDFLAGS)
+AC_PATH_QT_MOC_UIC
+
+KDE_CHECK_QT_JPEG
+
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIB_QT="$kde_int_qt $LIBJPEG_QT "'$(LIBZ) $(LIBPNG) -lXext $(LIB_X11) $(LIBSM)'
+else
+LIB_QT="$kde_int_qt $LIBJPEG_QT "'$(LIBZ) $(LIBPNG)'
+fi
+test -z "$KDE_MT_LIBS" || LIB_QT="$LIB_QT $KDE_MT_LIBS"
+for a in $qt_libdir/lib`echo ${kde_int_qt} | sed 's,^-l,,'`_incremental.*; do
+ if test -e "$a"; then
+ LIB_QT="$LIB_QT ${kde_int_qt}_incremental"
+ break
+ fi
+done
+
+AC_SUBST(LIB_QT)
+AC_SUBST(LIB_QPE)
+
+AC_SUBST(kde_qtver)
+])
+
+AC_DEFUN([AC_PATH_QT],
+[
+AC_PATH_QT_1_3
+])
+
+AC_DEFUN([KDE_CHECK_UIC_PLUGINS],
+[
+AC_REQUIRE([AC_PATH_QT_MOC_UIC])
+
+if test x$ac_uic_supports_libpath = xyes; then
+
+AC_MSG_CHECKING([if UIC has KDE plugins available])
+AC_CACHE_VAL(kde_cv_uic_plugins,
+[
+cat > actest.ui << EOF
+<!DOCTYPE UI><UI version="3.0" stdsetdef="1">
+<class>NewConnectionDialog</class>
+<widget class="QDialog">
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>testInput</cstring>
+ </property>
+ </widget>
+</widget>
+</UI>
+EOF
+
+
+
+kde_cv_uic_plugins=no
+kde_line="$UIC_PATH -L $kde_widgetdir"
+if test x$ac_uic_supports_nounload = xyes; then
+ kde_line="$kde_line -nounload"
+fi
+kde_line="$kde_line -impl actest.h actest.ui > actest.cpp"
+if AC_TRY_EVAL(kde_line); then
+ # if you're trying to debug this check and think it's incorrect,
+ # better check your installation. The check _is_ correct - your
+ # installation is not.
+ if test -f actest.cpp && grep klineedit actest.cpp > /dev/null; then
+ kde_cv_uic_plugins=yes
+ fi
+fi
+rm -f actest.ui actest.cpp
+])
+
+AC_MSG_RESULT([$kde_cv_uic_plugins])
+if test "$kde_cv_uic_plugins" != yes; then
+ AC_MSG_ERROR([
+you need to install kdelibs first.
+
+If you did install kdelibs, then the Qt version that is picked up by
+this configure is not the same version you used to compile kdelibs.
+The Qt Plugin installed by kdelibs is *ONLY* loadable if it is the
+_same Qt version_, compiled with the _same compiler_ and the same Qt
+configuration settings.
+])
+fi
+fi
+])
+
+AC_DEFUN([KDE_CHECK_FINAL],
+[
+ AC_ARG_ENABLE(final,
+ AC_HELP_STRING([--enable-final],
+ [build size optimized apps (experimental - needs lots of memory)]),
+ kde_use_final=$enableval, kde_use_final=no)
+
+ if test "x$kde_use_final" = "xyes"; then
+ KDE_USE_FINAL_TRUE=""
+ KDE_USE_FINAL_FALSE="#"
+ else
+ KDE_USE_FINAL_TRUE="#"
+ KDE_USE_FINAL_FALSE=""
+ fi
+ AC_SUBST(KDE_USE_FINAL_TRUE)
+ AC_SUBST(KDE_USE_FINAL_FALSE)
+])
+
+AC_DEFUN([KDE_CHECK_CLOSURE],
+[
+ AC_ARG_ENABLE(closure,
+ AC_HELP_STRING([--enable-closure],[delay template instantiation]),
+ kde_use_closure=$enableval, kde_use_closure=no)
+
+ KDE_NO_UNDEFINED=""
+ if test "x$kde_use_closure" = "xyes"; then
+ KDE_USE_CLOSURE_TRUE=""
+ KDE_USE_CLOSURE_FALSE="#"
+# CXXFLAGS="$CXXFLAGS $REPO"
+ else
+ KDE_USE_CLOSURE_TRUE="#"
+ KDE_USE_CLOSURE_FALSE=""
+ KDE_NO_UNDEFINED=""
+ case $host in
+ *-*-linux-gnu)
+ KDE_CHECK_COMPILER_FLAG([Wl,--no-undefined],
+ [KDE_CHECK_COMPILER_FLAG([Wl,--allow-shlib-undefined],
+ [KDE_NO_UNDEFINED="-Wl,--no-undefined -Wl,--allow-shlib-undefined"],
+ [KDE_NO_UNDEFINED=""])],
+ [KDE_NO_UNDEFINED=""])
+ ;;
+ esac
+ fi
+ AC_SUBST(KDE_USE_CLOSURE_TRUE)
+ AC_SUBST(KDE_USE_CLOSURE_FALSE)
+ AC_SUBST(KDE_NO_UNDEFINED)
+])
+
+dnl Check if the linker supports --enable-new-dtags and --as-needed
+AC_DEFUN([KDE_CHECK_NEW_LDFLAGS],
+[
+ AC_ARG_ENABLE(new_ldflags,
+ AC_HELP_STRING([--enable-new-ldflags],
+ [enable the new linker flags]),
+ kde_use_new_ldflags=$enableval,
+ kde_use_new_ldflags=no)
+
+ LDFLAGS_AS_NEEDED=""
+ LDFLAGS_NEW_DTAGS=""
+ if test "x$kde_use_new_ldflags" = "xyes"; then
+ LDFLAGS_NEW_DTAGS=""
+ KDE_CHECK_COMPILER_FLAG([Wl,--enable-new-dtags],
+ [LDFLAGS_NEW_DTAGS="-Wl,--enable-new-dtags"],)
+
+ KDE_CHECK_COMPILER_FLAG([Wl,--as-needed],
+ [LDFLAGS_AS_NEEDED="-Wl,--as-needed"],)
+ fi
+ AC_SUBST(LDFLAGS_AS_NEEDED)
+ AC_SUBST(LDFLAGS_NEW_DTAGS)
+])
+
+AC_DEFUN([KDE_CHECK_NMCHECK],
+[
+ AC_ARG_ENABLE(nmcheck,AC_HELP_STRING([--enable-nmcheck],[enable automatic namespace cleanness check]),
+ kde_use_nmcheck=$enableval, kde_use_nmcheck=no)
+
+ if test "$kde_use_nmcheck" = "yes"; then
+ KDE_USE_NMCHECK_TRUE=""
+ KDE_USE_NMCHECK_FALSE="#"
+ else
+ KDE_USE_NMCHECK_TRUE="#"
+ KDE_USE_NMCHECK_FALSE=""
+ fi
+ AC_SUBST(KDE_USE_NMCHECK_TRUE)
+ AC_SUBST(KDE_USE_NMCHECK_FALSE)
+])
+
+AC_DEFUN([KDE_EXPAND_MAKEVAR], [
+savex=$exec_prefix
+test "x$exec_prefix" = xNONE && exec_prefix=$prefix
+tmp=$$2
+while $1=`eval echo "$tmp"`; test "x$$1" != "x$tmp"; do tmp=$$1; done
+exec_prefix=$savex
+])
+
+dnl ------------------------------------------------------------------------
+dnl Now, the same with KDE
+dnl $(KDE_LDFLAGS) will be the kdeliblocation (if needed)
+dnl and $(kde_includes) will be the kdehdrlocation (if needed)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_BASE_PATH_KDE],
+[
+AC_REQUIRE([KDE_CHECK_STL])
+AC_REQUIRE([AC_PATH_QT])dnl
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+AC_CHECK_RPATH
+AC_MSG_CHECKING([for KDE])
+
+if test "${prefix}" != NONE; then
+ kde_includes=${includedir}
+ KDE_EXPAND_MAKEVAR(ac_kde_includes, includedir)
+
+ kde_libraries=${libdir}
+ KDE_EXPAND_MAKEVAR(ac_kde_libraries, libdir)
+
+else
+ ac_kde_includes=
+ ac_kde_libraries=
+ kde_libraries=""
+ kde_includes=""
+fi
+
+AC_CACHE_VAL(ac_cv_have_kde,
+[#try to guess kde locations
+
+if test "$kde_qtver" = 1; then
+ kde_check_header="ksock.h"
+ kde_check_lib="libkdecore.la"
+else
+ kde_check_header="ksharedptr.h"
+ kde_check_lib="libkio.la"
+fi
+
+if test -z "$1"; then
+
+kde_incdirs="$kde_libs_prefix/include /usr/lib/kde/include /usr/local/kde/include /usr/local/include /usr/kde/include /usr/include/kde /usr/include /opt/kde3/include /opt/kde/include $x_includes $qt_includes"
+test -n "$KDEDIR" && kde_incdirs="$KDEDIR/include $KDEDIR/include/kde $KDEDIR $kde_incdirs"
+kde_incdirs="$ac_kde_includes $kde_incdirs"
+AC_FIND_FILE($kde_check_header, $kde_incdirs, kde_incdir)
+ac_kde_includes="$kde_incdir"
+
+if test -n "$ac_kde_includes" && test ! -r "$ac_kde_includes/$kde_check_header"; then
+ AC_MSG_ERROR([
+in the prefix, you've chosen, are no KDE headers installed. This will fail.
+So, check this please and use another prefix!])
+fi
+
+kde_libdirs="$kde_libs_prefix/lib${kdelibsuff} /usr/lib/kde/lib${kdelibsuff} /usr/local/kde/lib${kdelibsuff} /usr/kde/lib${kdelibsuff} /usr/lib${kdelibsuff}/kde /usr/lib${kdelibsuff}/kde3 /usr/lib${kdelibsuff} /usr/X11R6/lib${kdelibsuff} /usr/local/lib${kdelibsuff} /opt/kde3/lib${kdelibsuff} /opt/kde/lib${kdelibsuff} /usr/X11R6/kde/lib${kdelibsuff}"
+test -n "$KDEDIR" && kde_libdirs="$KDEDIR/lib${kdelibsuff} $KDEDIR $kde_libdirs"
+kde_libdirs="$ac_kde_libraries $libdir $kde_libdirs"
+AC_FIND_FILE($kde_check_lib, $kde_libdirs, kde_libdir)
+ac_kde_libraries="$kde_libdir"
+
+kde_widgetdir=NO
+dnl this might be somewhere else
+AC_FIND_FILE("kde3/plugins/designer/kdewidgets.la", $kde_libdirs, kde_widgetdir)
+
+if test -n "$ac_kde_libraries" && test ! -r "$ac_kde_libraries/$kde_check_lib"; then
+AC_MSG_ERROR([
+in the prefix, you've chosen, are no KDE libraries installed. This will fail.
+So, check this please and use another prefix!])
+fi
+
+if test -n "$kde_widgetdir" && test ! -r "$kde_widgetdir/kde3/plugins/designer/kdewidgets.la"; then
+AC_MSG_ERROR([
+I can't find the designer plugins. These are required and should have been installed
+by kdelibs])
+fi
+
+if test -n "$kde_widgetdir"; then
+ kde_widgetdir="$kde_widgetdir/kde3/plugins/designer"
+fi
+
+
+if test "$ac_kde_includes" = NO || test "$ac_kde_libraries" = NO || test "$kde_widgetdir" = NO; then
+ ac_cv_have_kde="have_kde=no"
+else
+ ac_cv_have_kde="have_kde=yes \
+ ac_kde_includes=$ac_kde_includes ac_kde_libraries=$ac_kde_libraries"
+fi
+
+else dnl test -z $1, e.g. from kdelibs
+
+ ac_cv_have_kde="have_kde=no"
+
+fi
+])dnl
+
+eval "$ac_cv_have_kde"
+
+if test "$have_kde" != "yes"; then
+ if test "${prefix}" = NONE; then
+ ac_kde_prefix="$ac_default_prefix"
+ else
+ ac_kde_prefix="$prefix"
+ fi
+ if test "$exec_prefix" = NONE; then
+ ac_kde_exec_prefix="$ac_kde_prefix"
+ AC_MSG_RESULT([will be installed in $ac_kde_prefix])
+ else
+ ac_kde_exec_prefix="$exec_prefix"
+ AC_MSG_RESULT([will be installed in $ac_kde_prefix and $ac_kde_exec_prefix])
+ fi
+
+ kde_libraries="${libdir}"
+ kde_includes="${includedir}"
+
+else
+ ac_cv_have_kde="have_kde=yes \
+ ac_kde_includes=$ac_kde_includes ac_kde_libraries=$ac_kde_libraries"
+ AC_MSG_RESULT([libraries $ac_kde_libraries, headers $ac_kde_includes])
+
+ kde_libraries="$ac_kde_libraries"
+ kde_includes="$ac_kde_includes"
+fi
+AC_SUBST(kde_libraries)
+AC_SUBST(kde_includes)
+
+if test "$kde_includes" = "$x_includes" || test "$kde_includes" = "$qt_includes" || test "$kde_includes" = "/usr/include"; then
+ KDE_INCLUDES=""
+else
+ KDE_INCLUDES="-I$kde_includes"
+ all_includes="$KDE_INCLUDES $all_includes"
+fi
+
+KDE_DEFAULT_CXXFLAGS="-DQT_CLEAN_NAMESPACE -DQT_NO_ASCII_CAST -DQT_NO_STL -DQT_NO_COMPAT -DQT_NO_TRANSLATION"
+
+KDE_LDFLAGS="-L$kde_libraries"
+if test ! "$kde_libraries" = "$x_libraries" && test ! "$kde_libraries" = "$qt_libraries" ; then
+ all_libraries="$KDE_LDFLAGS $all_libraries"
+fi
+
+AC_SUBST(KDE_LDFLAGS)
+AC_SUBST(KDE_INCLUDES)
+
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+all_libraries="$all_libraries $USER_LDFLAGS"
+all_includes="$all_includes $USER_INCLUDES"
+AC_SUBST(all_includes)
+AC_SUBST(all_libraries)
+
+if test -z "$1"; then
+KDE_CHECK_UIC_PLUGINS
+fi
+
+ac_kde_libraries="$kde_libdir"
+
+AC_SUBST(AUTODIRS)
+
+
+])
+
+AC_DEFUN([KDE_CHECK_EXTRA_LIBS],
+[
+AC_MSG_CHECKING(for extra includes)
+AC_ARG_WITH(extra-includes,AC_HELP_STRING([--with-extra-includes=DIR],[adds non standard include paths]),
+ kde_use_extra_includes="$withval",
+ kde_use_extra_includes=NONE
+)
+kde_extra_includes=
+if test -n "$kde_use_extra_includes" && \
+ test "$kde_use_extra_includes" != "NONE"; then
+
+ ac_save_ifs=$IFS
+ IFS=':'
+ for dir in $kde_use_extra_includes; do
+ kde_extra_includes="$kde_extra_includes $dir"
+ USER_INCLUDES="$USER_INCLUDES -I$dir"
+ done
+ IFS=$ac_save_ifs
+ kde_use_extra_includes="added"
+else
+ kde_use_extra_includes="no"
+fi
+AC_SUBST(USER_INCLUDES)
+
+AC_MSG_RESULT($kde_use_extra_includes)
+
+kde_extra_libs=
+AC_MSG_CHECKING(for extra libs)
+AC_ARG_WITH(extra-libs,AC_HELP_STRING([--with-extra-libs=DIR],[adds non standard library paths]),
+ kde_use_extra_libs=$withval,
+ kde_use_extra_libs=NONE
+)
+if test -n "$kde_use_extra_libs" && \
+ test "$kde_use_extra_libs" != "NONE"; then
+
+ ac_save_ifs=$IFS
+ IFS=':'
+ for dir in $kde_use_extra_libs; do
+ kde_extra_libs="$kde_extra_libs $dir"
+ KDE_EXTRA_RPATH="$KDE_EXTRA_RPATH -R $dir"
+ USER_LDFLAGS="$USER_LDFLAGS -L$dir"
+ done
+ IFS=$ac_save_ifs
+ kde_use_extra_libs="added"
+else
+ kde_use_extra_libs="no"
+fi
+
+AC_SUBST(USER_LDFLAGS)
+
+AC_MSG_RESULT($kde_use_extra_libs)
+
+])
+
+AC_DEFUN([KDE_1_CHECK_PATH_HEADERS],
+[
+ AC_MSG_CHECKING([for KDE headers installed])
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+cat > conftest.$ac_ext <<EOF
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+#endif
+#include <stdio.h>
+#include "confdefs.h"
+#include <kapp.h>
+
+int main() {
+ printf("kde_htmldir=\\"%s\\"\n", KApplication::kde_htmldir().data());
+ printf("kde_appsdir=\\"%s\\"\n", KApplication::kde_appsdir().data());
+ printf("kde_icondir=\\"%s\\"\n", KApplication::kde_icondir().data());
+ printf("kde_sounddir=\\"%s\\"\n", KApplication::kde_sounddir().data());
+ printf("kde_datadir=\\"%s\\"\n", KApplication::kde_datadir().data());
+ printf("kde_locale=\\"%s\\"\n", KApplication::kde_localedir().data());
+ printf("kde_cgidir=\\"%s\\"\n", KApplication::kde_cgidir().data());
+ printf("kde_confdir=\\"%s\\"\n", KApplication::kde_configdir().data());
+ printf("kde_mimedir=\\"%s\\"\n", KApplication::kde_mimedir().data());
+ printf("kde_toolbardir=\\"%s\\"\n", KApplication::kde_toolbardir().data());
+ printf("kde_wallpaperdir=\\"%s\\"\n",
+ KApplication::kde_wallpaperdir().data());
+ printf("kde_bindir=\\"%s\\"\n", KApplication::kde_bindir().data());
+ printf("kde_partsdir=\\"%s\\"\n", KApplication::kde_partsdir().data());
+ printf("kde_servicesdir=\\"/tmp/dummy\\"\n");
+ printf("kde_servicetypesdir=\\"/tmp/dummy\\"\n");
+ printf("kde_moduledir=\\"/tmp/dummy\\"\n");
+ printf("kde_styledir=\\"/tmp/dummy\\"\n");
+ printf("kde_widgetdir=\\"/tmp/dummy\\"\n");
+ printf("xdg_appsdir=\\"/tmp/dummy\\"\n");
+ printf("xdg_menudir=\\"/tmp/dummy\\"\n");
+ printf("xdg_directorydir=\\"/tmp/dummy\\"\n");
+ printf("kde_kcfgdir=\\"/tmp/dummy\\"\n");
+ return 0;
+ }
+EOF
+
+ ac_save_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="$all_includes $CPPFLAGS"
+ if AC_TRY_EVAL(ac_compile); then
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_ERROR([your system is not able to compile a small KDE application!
+Check, if you installed the KDE header files correctly.
+For more details about this problem, look at the end of config.log.])
+ fi
+ CPPFLAGS=$ac_save_CPPFLAGS
+
+ AC_LANG_RESTORE
+])
+
+AC_DEFUN([KDE_CHECK_KDEQTADDON],
+[
+AC_MSG_CHECKING(for kde-qt-addon)
+AC_CACHE_VAL(kde_cv_have_kdeqtaddon,
+[
+ kde_ldflags_safe="$LDFLAGS"
+ kde_libs_safe="$LIBS"
+ kde_cxxflags_safe="$CXXFLAGS"
+
+ LIBS="-lkde-qt-addon $LIBQT $LIBS"
+ CXXFLAGS="$CXXFLAGS -I$prefix/include -I$prefix/include/kde $all_includes"
+ LDFLAGS="$LDFLAGS $all_libraries $USER_LDFLAGS"
+
+ AC_TRY_LINK([
+ #include <qdom.h>
+ ],
+ [
+ QDomDocument doc;
+ ],
+ kde_cv_have_kdeqtaddon=yes,
+ kde_cv_have_kdeqtaddon=no
+ )
+
+ LDFLAGS=$kde_ldflags_safe
+ LIBS=$kde_libs_safe
+ CXXFLAGS=$kde_cxxflags_safe
+])
+
+AC_MSG_RESULT($kde_cv_have_kdeqtaddon)
+
+if test "$kde_cv_have_kdeqtaddon" = "no"; then
+ AC_MSG_ERROR([Can't find libkde-qt-addon. You need to install it first.
+It is a separate package (and CVS module) named kde-qt-addon.])
+fi
+])
+
+AC_DEFUN([KDE_CREATE_LIBS_ALIASES],
+[
+ AC_REQUIRE([KDE_MISC_TESTS])
+ AC_REQUIRE([KDE_CHECK_LIBDL])
+ AC_REQUIRE([K_PATH_X])
+
+if test $kde_qtver = 3; then
+ case $host in
+ *cygwin*) lib_kded="-lkdeinit_kded" ;;
+ *) lib_kded="" ;;
+ esac
+ AC_SUBST(LIB_KDED, $lib_kded)
+ AC_SUBST(LIB_KDECORE, "-lkdecore")
+ AC_SUBST(LIB_KDEUI, "-lkdeui")
+ AC_SUBST(LIB_KIO, "-lkio")
+ AC_SUBST(LIB_KJS, "-lkjs")
+ AC_SUBST(LIB_SMB, "-lsmb")
+ AC_SUBST(LIB_KAB, "-lkab")
+ AC_SUBST(LIB_KABC, "-lkabc")
+ AC_SUBST(LIB_KHTML, "-lkhtml")
+ AC_SUBST(LIB_KSPELL, "-lkspell")
+ AC_SUBST(LIB_KPARTS, "-lkparts")
+ AC_SUBST(LIB_KDEPRINT, "-lkdeprint")
+ AC_SUBST(LIB_KUTILS, "-lkutils")
+ AC_SUBST(LIB_KDEPIM, "-lkdepim")
+ AC_SUBST(LIB_KIMPROXY, "-lkimproxy")
+ AC_SUBST(LIB_KNEWSTUFF, "-lknewstuff")
+ AC_SUBST(LIB_KDNSSD, "-lkdnssd")
+ AC_SUBST(LIB_KUNITTEST, "-lkunittest")
+# these are for backward compatibility
+ AC_SUBST(LIB_KSYCOCA, "-lkio")
+ AC_SUBST(LIB_KFILE, "-lkio")
+elif test $kde_qtver = 2; then
+ AC_SUBST(LIB_KDECORE, "-lkdecore")
+ AC_SUBST(LIB_KDEUI, "-lkdeui")
+ AC_SUBST(LIB_KIO, "-lkio")
+ AC_SUBST(LIB_KSYCOCA, "-lksycoca")
+ AC_SUBST(LIB_SMB, "-lsmb")
+ AC_SUBST(LIB_KFILE, "-lkfile")
+ AC_SUBST(LIB_KAB, "-lkab")
+ AC_SUBST(LIB_KHTML, "-lkhtml")
+ AC_SUBST(LIB_KSPELL, "-lkspell")
+ AC_SUBST(LIB_KPARTS, "-lkparts")
+ AC_SUBST(LIB_KDEPRINT, "-lkdeprint")
+else
+ AC_SUBST(LIB_KDECORE, "-lkdecore -lXext $(LIB_QT)")
+ AC_SUBST(LIB_KDEUI, "-lkdeui $(LIB_KDECORE)")
+ AC_SUBST(LIB_KFM, "-lkfm $(LIB_KDECORE)")
+ AC_SUBST(LIB_KFILE, "-lkfile $(LIB_KFM) $(LIB_KDEUI)")
+ AC_SUBST(LIB_KAB, "-lkab $(LIB_KIMGIO) $(LIB_KDECORE)")
+fi
+])
+
+AC_DEFUN([AC_PATH_KDE],
+[
+ AC_BASE_PATH_KDE
+ AC_ARG_ENABLE(path-check,AC_HELP_STRING([--disable-path-check],[don't try to find out, where to install]),
+ [
+ if test "$enableval" = "no";
+ then ac_use_path_checking="default"
+ else ac_use_path_checking=""
+ fi
+ ],
+ [
+ if test "$kde_qtver" = 1;
+ then ac_use_path_checking=""
+ else ac_use_path_checking="default"
+ fi
+ ]
+ )
+
+ AC_CREATE_KFSSTND($ac_use_path_checking)
+
+ AC_SUBST_KFSSTND
+ KDE_CREATE_LIBS_ALIASES
+])
+
+dnl KDE_CHECK_FUNC_EXT(<func>, [headers], [sample-use], [C prototype], [autoheader define], [call if found])
+AC_DEFUN([KDE_CHECK_FUNC_EXT],
+[
+AC_MSG_CHECKING(for $1)
+AC_CACHE_VAL(kde_cv_func_$1,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+save_CXXFLAGS="$CXXFLAGS"
+kde_safe_LIBS="$LIBS"
+LIBS="$LIBS $X_EXTRA_LIBS"
+if test "$GXX" = "yes"; then
+CXXFLAGS="$CXXFLAGS -pedantic-errors"
+fi
+AC_TRY_COMPILE([
+$2
+],
+[
+$3
+],
+kde_cv_func_$1=yes,
+kde_cv_func_$1=no)
+CXXFLAGS="$save_CXXFLAGS"
+LIBS="$kde_safe_LIBS"
+AC_LANG_RESTORE
+])
+
+AC_MSG_RESULT($kde_cv_func_$1)
+
+AC_MSG_CHECKING([if $1 needs custom prototype])
+AC_CACHE_VAL(kde_cv_proto_$1,
+[
+if test "x$kde_cv_func_$1" = xyes; then
+ kde_cv_proto_$1=no
+else
+ case "$1" in
+ setenv|unsetenv|usleep|random|srandom|seteuid|mkstemps|mkstemp|revoke|vsnprintf|strlcpy|strlcat)
+ kde_cv_proto_$1="yes - in libkdefakes"
+ ;;
+ *)
+ kde_cv_proto_$1=unknown
+ ;;
+ esac
+fi
+
+if test "x$kde_cv_proto_$1" = xunknown; then
+
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ kde_safe_libs=$LIBS
+ LIBS="$LIBS $X_EXTRA_LIBS"
+ AC_TRY_LINK([
+$2
+
+extern "C" $4;
+],
+[
+$3
+],
+[ kde_cv_func_$1=yes
+ kde_cv_proto_$1=yes ],
+ [kde_cv_proto_$1="$1 unavailable"]
+)
+LIBS=$kde_safe_libs
+AC_LANG_RESTORE
+fi
+])
+AC_MSG_RESULT($kde_cv_proto_$1)
+
+if test "x$kde_cv_func_$1" = xyes; then
+ AC_DEFINE(HAVE_$5, 1, [Define if you have $1])
+ $6
+fi
+if test "x$kde_cv_proto_$1" = xno; then
+ AC_DEFINE(HAVE_$5_PROTO, 1,
+ [Define if you have the $1 prototype])
+fi
+
+AH_VERBATIM([_HAVE_$5_PROTO],
+[
+#if !defined(HAVE_$5_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+$4;
+#ifdef __cplusplus
+}
+#endif
+#endif
+])
+])
+
+AC_DEFUN([AC_CHECK_SETENV],
+[
+ KDE_CHECK_FUNC_EXT(setenv, [
+#include <stdlib.h>
+],
+ [setenv("VAR", "VALUE", 1);],
+ [int setenv (const char *, const char *, int)],
+ [SETENV])
+])
+
+AC_DEFUN([AC_CHECK_UNSETENV],
+[
+ KDE_CHECK_FUNC_EXT(unsetenv, [
+#include <stdlib.h>
+],
+ [unsetenv("VAR");],
+ [void unsetenv (const char *)],
+ [UNSETENV])
+])
+
+AC_DEFUN([AC_CHECK_GETDOMAINNAME],
+[
+ KDE_CHECK_FUNC_EXT(getdomainname, [
+#include <stdlib.h>
+#include <unistd.h>
+#include <netdb.h>
+],
+ [
+char buffer[200];
+getdomainname(buffer, 200);
+],
+ [#include <sys/types.h>
+ int getdomainname (char *, size_t)],
+ [GETDOMAINNAME])
+])
+
+AC_DEFUN([AC_CHECK_GETHOSTNAME],
+[
+ KDE_CHECK_FUNC_EXT(gethostname, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+char buffer[200];
+gethostname(buffer, 200);
+],
+ [int gethostname (char *, unsigned int)],
+ [GETHOSTNAME])
+])
+
+AC_DEFUN([AC_CHECK_USLEEP],
+[
+ KDE_CHECK_FUNC_EXT(usleep, [
+#include <unistd.h>
+],
+ [
+usleep(200);
+],
+ [int usleep (unsigned int)],
+ [USLEEP])
+])
+
+
+AC_DEFUN([AC_CHECK_RANDOM],
+[
+ KDE_CHECK_FUNC_EXT(random, [
+#include <stdlib.h>
+],
+ [
+random();
+],
+ [long int random(void)],
+ [RANDOM])
+
+ KDE_CHECK_FUNC_EXT(srandom, [
+#include <stdlib.h>
+],
+ [
+srandom(27);
+],
+ [void srandom(unsigned int)],
+ [SRANDOM])
+
+])
+
+AC_DEFUN([AC_CHECK_INITGROUPS],
+[
+ KDE_CHECK_FUNC_EXT(initgroups, [
+#include <sys/types.h>
+#include <unistd.h>
+#include <grp.h>
+],
+ [
+char buffer[200];
+initgroups(buffer, 27);
+],
+ [int initgroups(const char *, gid_t)],
+ [INITGROUPS])
+])
+
+AC_DEFUN([AC_CHECK_MKSTEMPS],
+[
+ KDE_CHECK_FUNC_EXT(mkstemps, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+mkstemps("/tmp/aaaXXXXXX", 6);
+],
+ [int mkstemps(char *, int)],
+ [MKSTEMPS])
+])
+
+AC_DEFUN([AC_CHECK_MKSTEMP],
+[
+ KDE_CHECK_FUNC_EXT(mkstemp, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+mkstemp("/tmp/aaaXXXXXX");
+],
+ [int mkstemp(char *)],
+ [MKSTEMP])
+])
+
+AC_DEFUN([AC_CHECK_MKDTEMP],
+[
+ KDE_CHECK_FUNC_EXT(mkdtemp, [
+#include <stdlib.h>
+#include <unistd.h>
+],
+ [
+mkdtemp("/tmp/aaaXXXXXX");
+],
+ [char *mkdtemp(char *)],
+ [MKDTEMP])
+])
+
+
+AC_DEFUN([AC_CHECK_RES_INIT],
+[
+ AC_MSG_CHECKING([if res_init needs -lresolv])
+ kde_libs_safe="$LIBS"
+ LIBS="$LIBS $X_EXTRA_LIBS -lresolv"
+ AC_TRY_LINK(
+ [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+ ],
+ [
+ res_init();
+ ],
+ [
+ LIBRESOLV="-lresolv"
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_RES_INIT, 1, [Define if you have the res_init function])
+ ],
+ [ AC_MSG_RESULT(no) ]
+ )
+ LIBS=$kde_libs_safe
+ AC_SUBST(LIBRESOLV)
+
+ KDE_CHECK_FUNC_EXT(res_init,
+ [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+ ],
+ [res_init()],
+ [int res_init(void)],
+ [RES_INIT])
+])
+
+AC_DEFUN([AC_CHECK_STRLCPY],
+[
+ KDE_CHECK_FUNC_EXT(strlcpy, [
+#include <string.h>
+],
+[ char buf[20];
+ strlcpy(buf, "KDE function test", sizeof(buf));
+],
+ [unsigned long strlcpy(char*, const char*, unsigned long)],
+ [STRLCPY])
+])
+
+AC_DEFUN([AC_CHECK_STRLCAT],
+[
+ KDE_CHECK_FUNC_EXT(strlcat, [
+#include <string.h>
+],
+[ char buf[20];
+ buf[0]='\0';
+ strlcat(buf, "KDE function test", sizeof(buf));
+],
+ [unsigned long strlcat(char*, const char*, unsigned long)],
+ [STRLCAT])
+])
+
+AC_DEFUN([AC_CHECK_RES_QUERY],
+[
+ KDE_CHECK_FUNC_EXT(res_query, [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+#include <netdb.h>
+],
+[
+res_query(NULL, 0, 0, NULL, 0);
+],
+ [int res_query(const char *, int, int, unsigned char *, int)],
+ [RES_QUERY])
+])
+
+AC_DEFUN([AC_CHECK_DN_SKIPNAME],
+[
+ KDE_CHECK_FUNC_EXT(dn_skipname, [
+#include <sys/types.h>
+#include <netinet/in.h>
+#include <arpa/nameser.h>
+#include <resolv.h>
+],
+[
+dn_skipname (NULL, NULL);
+],
+ [int dn_skipname (unsigned char *, unsigned char *)],
+ [DN_SKIPNAME])
+])
+
+
+AC_DEFUN([AC_FIND_GIF],
+ [AC_MSG_CHECKING([for giflib])
+AC_CACHE_VAL(ac_cv_lib_gif,
+[ac_save_LIBS="$LIBS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$all_libraries -lgif -lX11 $LIBSOCKET"
+else
+LIBS="$all_libraries -lgif"
+fi
+AC_TRY_LINK(dnl
+[
+#ifdef __cplusplus
+extern "C" {
+#endif
+int GifLastError(void);
+#ifdef __cplusplus
+}
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+],
+ [return GifLastError();],
+ eval "ac_cv_lib_gif=yes",
+ eval "ac_cv_lib_gif=no")
+LIBS="$ac_save_LIBS"
+])dnl
+if eval "test \"`echo $ac_cv_lib_gif`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_LIBGIF, 1, [Define if you have libgif])
+else
+ AC_MSG_ERROR(You need giflib30. Please install the kdesupport package)
+fi
+])
+
+AC_DEFUN([KDE_FIND_JPEG_HELPER],
+[
+AC_MSG_CHECKING([for libjpeg$2])
+AC_CACHE_VAL(ac_cv_lib_jpeg_$1,
+[
+ac_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS -ljpeg$2 -lm"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(
+[
+#ifdef __cplusplus
+extern "C" {
+#endif
+void jpeg_CreateDecompress();
+#ifdef __cplusplus
+}
+#endif
+],
+[jpeg_CreateDecompress();],
+ eval "ac_cv_lib_jpeg_$1=-ljpeg$2",
+ eval "ac_cv_lib_jpeg_$1=no")
+LIBS="$ac_save_LIBS"
+CFLAGS="$ac_save_CFLAGS"
+])
+
+if eval "test ! \"`echo $ac_cv_lib_jpeg_$1`\" = no"; then
+ LIBJPEG="$ac_cv_lib_jpeg_$1"
+ AC_MSG_RESULT($ac_cv_lib_jpeg_$1)
+else
+ AC_MSG_RESULT(no)
+ $3
+fi
+
+])
+
+AC_DEFUN([AC_FIND_JPEG],
+[
+dnl first look for libraries
+KDE_FIND_JPEG_HELPER(6b, 6b,
+ KDE_FIND_JPEG_HELPER(normal, [],
+ [
+ LIBJPEG=
+ ]
+ )
+)
+
+dnl then search the headers (can't use simply AC_TRY_xxx, as jpeglib.h
+dnl requires system dependent includes loaded before it)
+jpeg_incdirs="$includedir /usr/include /usr/local/include $kde_extra_includes"
+AC_FIND_FILE(jpeglib.h, $jpeg_incdirs, jpeg_incdir)
+test "x$jpeg_incdir" = xNO && jpeg_incdir=
+
+dnl if headers _and_ libraries are missing, this is no error, and we
+dnl continue with a warning (the user will get no jpeg support in khtml)
+dnl if only one is missing, it means a configuration error, but we still
+dnl only warn
+if test -n "$jpeg_incdir" && test -n "$LIBJPEG" ; then
+ AC_DEFINE_UNQUOTED(HAVE_LIBJPEG, 1, [Define if you have libjpeg])
+else
+ if test -n "$jpeg_incdir" || test -n "$LIBJPEG" ; then
+ AC_MSG_WARN([
+There is an installation error in jpeg support. You seem to have only one
+of either the headers _or_ the libraries installed. You may need to either
+provide correct --with-extra-... options, or the development package of
+libjpeg6b. You can get a source package of libjpeg from http://www.ijg.org/
+Disabling JPEG support.
+])
+ else
+ AC_MSG_WARN([libjpeg not found. disable JPEG support.])
+ fi
+ jpeg_incdir=
+ LIBJPEG=
+fi
+
+AC_SUBST(LIBJPEG)
+AH_VERBATIM(_AC_CHECK_JPEG,
+[/*
+ * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system
+ * headers and I'm too lazy to write a configure test as long as only
+ * unixware is related
+ */
+#ifdef _UNIXWARE
+#define HAVE_BOOLEAN
+#endif
+])
+])
+
+AC_DEFUN([KDE_CHECK_QT_JPEG],
+[
+if test -n "$LIBJPEG"; then
+AC_MSG_CHECKING([if Qt needs $LIBJPEG])
+AC_CACHE_VAL(kde_cv_qt_jpeg,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ac_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS $LIBQT"
+LIBS=`echo $LIBS | sed "s/$LIBJPEG//"`
+ac_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(
+[#include <qapplication.h>],
+ [
+ int argc;
+ char** argv;
+ QApplication app(argc, argv);],
+ eval "kde_cv_qt_jpeg=no",
+ eval "kde_cv_qt_jpeg=yes")
+LIBS="$ac_save_LIBS"
+CXXFLAGS="$ac_save_CXXFLAGS"
+AC_LANG_RESTORE
+fi
+])
+
+if eval "test ! \"`echo $kde_cv_qt_jpeg`\" = no"; then
+ AC_MSG_RESULT(yes)
+ LIBJPEG_QT='$(LIBJPEG)'
+else
+ AC_MSG_RESULT(no)
+ LIBJPEG_QT=
+fi
+
+])
+
+AC_DEFUN([AC_FIND_ZLIB],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_MSG_CHECKING([for libz])
+AC_CACHE_VAL(ac_cv_lib_z,
+[
+kde_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS -lz $LIBSOCKET"
+kde_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(dnl
+[
+#include<zlib.h>
+],
+[
+ char buf[42];
+ gzFile f = (gzFile) 0;
+ /* this would segfault.. but we only link, don't run */
+ (void) gzgets(f, buf, sizeof(buf));
+
+ return (zlibVersion() == ZLIB_VERSION);
+],
+ eval "ac_cv_lib_z='-lz'",
+ eval "ac_cv_lib_z=no")
+LIBS="$kde_save_LIBS"
+CFLAGS="$kde_save_CFLAGS"
+])dnl
+if test ! "$ac_cv_lib_z" = no; then
+ AC_DEFINE_UNQUOTED(HAVE_LIBZ, 1, [Define if you have libz])
+ LIBZ="$ac_cv_lib_z"
+ AC_MSG_RESULT($ac_cv_lib_z)
+else
+ AC_MSG_ERROR(not found.
+ Possibly configure picks up an outdated version
+ installed by XFree86. Remove it from your system.
+
+ Check your installation and look into config.log)
+ LIBZ=""
+fi
+AC_SUBST(LIBZ)
+])
+
+AC_DEFUN([KDE_TRY_TIFFLIB],
+[
+AC_MSG_CHECKING([for libtiff $1])
+
+AC_CACHE_VAL(kde_cv_libtiff_$1,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+kde_save_LIBS="$LIBS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$all_libraries $USER_LDFLAGS -l$1 $LIBJPEG $LIBZ -lX11 $LIBSOCKET -lm"
+else
+LIBS="$all_libraries $USER_LDFLAGS -l$1 $LIBJPEG $LIBZ -lm"
+fi
+kde_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES"
+
+AC_TRY_LINK(dnl
+[
+#include<tiffio.h>
+],
+ [return (TIFFOpen( "", "r") == 0); ],
+[
+ kde_cv_libtiff_$1="-l$1 $LIBJPEG $LIBZ"
+], [
+ kde_cv_libtiff_$1=no
+])
+
+LIBS="$kde_save_LIBS"
+CXXFLAGS="$kde_save_CXXFLAGS"
+AC_LANG_RESTORE
+])
+
+if test "$kde_cv_libtiff_$1" = "no"; then
+ AC_MSG_RESULT(no)
+ LIBTIFF=""
+ $3
+else
+ LIBTIFF="$kde_cv_libtiff_$1"
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_LIBTIFF, 1, [Define if you have libtiff])
+ $2
+fi
+
+])
+
+AC_DEFUN([AC_FIND_TIFF],
+[
+AC_REQUIRE([K_PATH_X])
+AC_REQUIRE([AC_FIND_ZLIB])
+AC_REQUIRE([AC_FIND_JPEG])
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+KDE_TRY_TIFFLIB(tiff, [],
+ KDE_TRY_TIFFLIB(tiff34))
+
+AC_SUBST(LIBTIFF)
+])
+
+AC_DEFUN([KDE_FIND_LIBEXR],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_REQUIRE([AC_FIND_ZLIB])
+AC_CACHE_VAL(ac_cv_libexr,
+[
+ if test -z "$PKG_CONFIG"; then
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+ fi
+
+ AC_MSG_CHECKING([for OpenEXR libraries])
+
+ if test "$PKG_CONFIG" = "no" ; then
+ AC_MSG_RESULT(no)
+ echo "*** The pkg-config script could not be found. Make sure it is"
+ echo "*** in your path, or set the PKG_CONFIG environment variable"
+ echo "*** to the full path to pkg-config."
+ echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
+ else
+ if !(`$PKG_CONFIG --exists OpenEXR`) ; then
+ AC_MSG_RESULT(no)
+ EXRSTATUS=no
+ else
+ if !(`$PKG_CONFIG --atleast-version="1.1.1" OpenEXR`) ; then
+ AC_MSG_RESULT(no)
+ EXRSTATUS=old
+ else
+ kde_save_LIBS="$LIBS"
+ LIBS="$LIBS $all_libraries $USER_LDFLAGS `pkg-config --libs OpenEXR` $LIBZ"
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ kde_save_CXXFLAGS="$CXXFLAGS"
+ EXR_FLAGS=`$PKG_CONFIG --cflags OpenEXR`
+ CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES $EXR_FLAGS"
+
+ AC_TRY_LINK(dnl
+ [
+ #include <ImfRgbaFile.h>
+ ],
+ [
+ using namespace Imf;
+ RgbaInputFile file ("dummy");
+ return 0;
+ ],
+ eval "ac_cv_libexr='`pkg-config --libs OpenEXR`'",
+ eval "ac_cv_libexr=no"
+ )
+ LIBS="$kde_save_LIBS"
+ CXXFLAGS="$kde_save_CXXFLAGS"
+ AC_LANG_RESTORE
+ ])dnl
+ if eval "test ! \"`echo $ac_cv_libexr`\" = no"; then
+ AC_DEFINE_UNQUOTED(HAVE_EXR, 1, [Define if you have OpenEXR])
+ LIB_EXR="$ac_cv_libexr"
+ AC_MSG_RESULT($ac_cv_libexr)
+ else
+ AC_MSG_RESULT(no)
+ LIB_EXR=""
+ fi
+ fi
+ fi
+ fi
+ AC_SUBST(LIB_EXR)
+ AC_SUBST(EXR_FLAGS)
+])
+
+
+
+AC_DEFUN([AC_FIND_PNG],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_REQUIRE([AC_FIND_ZLIB])
+AC_MSG_CHECKING([for libpng])
+AC_CACHE_VAL(ac_cv_lib_png,
+[
+kde_save_LIBS="$LIBS"
+if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+LIBS="$LIBS $all_libraries $USER_LDFLAGS -lpng $LIBZ -lm -lX11 $LIBSOCKET"
+else
+LIBS="$LIBS $all_libraries $USER_LDFLAGS -lpng $LIBZ -lm"
+fi
+kde_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+
+AC_TRY_LINK(dnl
+ [
+ #include<png.h>
+ ],
+ [
+ png_structp png_ptr = png_create_read_struct( /* image ptr */
+ PNG_LIBPNG_VER_STRING, 0, 0, 0 );
+ return( png_ptr != 0 );
+ ],
+ eval "ac_cv_lib_png='-lpng $LIBZ -lm'",
+ eval "ac_cv_lib_png=no"
+)
+LIBS="$kde_save_LIBS"
+CFLAGS="$kde_save_CFLAGS"
+])dnl
+if eval "test ! \"`echo $ac_cv_lib_png`\" = no"; then
+ AC_DEFINE_UNQUOTED(HAVE_LIBPNG, 1, [Define if you have libpng])
+ LIBPNG="$ac_cv_lib_png"
+ AC_SUBST(LIBPNG)
+ AC_MSG_RESULT($ac_cv_lib_png)
+else
+ AC_MSG_RESULT(no)
+ LIBPNG=""
+ AC_SUBST(LIBPNG)
+fi
+])
+
+
+AC_DEFUN([AC_FIND_JASPER],
+[
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_REQUIRE([AC_FIND_JPEG])
+AC_MSG_CHECKING([for jasper])
+AC_CACHE_VAL(ac_cv_jasper,
+[
+kde_save_LIBS="$LIBS"
+LIBS="$LIBS $all_libraries $USER_LDFLAGS -ljasper $LIBJPEG -lm"
+kde_save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $all_includes $USER_INCLUDES"
+
+AC_TRY_LINK(dnl
+ [
+ #include<jasper/jasper.h>
+ ],
+ [
+ return( jas_init() );
+ ],
+ eval "ac_cv_jasper='-ljasper $LIBJPEG -lm'",
+ eval "ac_cv_jasper=no"
+)
+LIBS="$kde_save_LIBS"
+CFLAGS="$kde_save_CFLAGS"
+])dnl
+if eval "test ! \"`echo $ac_cv_jasper`\" = no"; then
+ AC_DEFINE_UNQUOTED(HAVE_JASPER, 1, [Define if you have jasper])
+ LIB_JASPER="$ac_cv_jasper"
+ AC_MSG_RESULT($ac_cv_jasper)
+else
+ AC_MSG_RESULT(no)
+ LIB_JASPER=""
+fi
+AC_SUBST(LIB_JASPER)
+])
+
+AC_DEFUN([AC_CHECK_BOOL],
+[
+ AC_DEFINE_UNQUOTED(HAVE_BOOL, 1, [You _must_ have bool])
+])
+
+AC_DEFUN([AC_CHECK_GNU_EXTENSIONS],
+[
+AC_MSG_CHECKING(if you need GNU extensions)
+AC_CACHE_VAL(ac_cv_gnu_extensions,
+[
+cat > conftest.c << EOF
+#include <features.h>
+
+#ifdef __GNU_LIBRARY__
+yes
+#endif
+EOF
+
+if (eval "$ac_cpp conftest.c") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ rm -rf conftest*
+ ac_cv_gnu_extensions=yes
+else
+ ac_cv_gnu_extensions=no
+fi
+])
+
+AC_MSG_RESULT($ac_cv_gnu_extensions)
+if test "$ac_cv_gnu_extensions" = "yes"; then
+ AC_DEFINE_UNQUOTED(_GNU_SOURCE, 1, [Define if you need to use the GNU extensions])
+fi
+])
+
+AC_DEFUN([KDE_CHECK_COMPILER_FLAG],
+[
+AC_MSG_CHECKING([whether $CXX supports -$1])
+kde_cache=`echo $1 | sed 'y% .=/+-,%____p__%'`
+AC_CACHE_VAL(kde_cv_prog_cxx_$kde_cache,
+[
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -$1"
+ AC_TRY_LINK([],[ return 0; ], [eval "kde_cv_prog_cxx_$kde_cache=yes"], [])
+ CXXFLAGS="$save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+if eval "test \"`echo '$kde_cv_prog_cxx_'$kde_cache`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ :
+ $2
+else
+ AC_MSG_RESULT(no)
+ :
+ $3
+fi
+])
+
+AC_DEFUN([KDE_CHECK_C_COMPILER_FLAG],
+[
+AC_MSG_CHECKING([whether $CC supports -$1])
+kde_cache=`echo $1 | sed 'y% .=/+-,%____p__%'`
+AC_CACHE_VAL(kde_cv_prog_cc_$kde_cache,
+[
+ AC_LANG_SAVE
+ AC_LANG_C
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -$1"
+ AC_TRY_LINK([],[ return 0; ], [eval "kde_cv_prog_cc_$kde_cache=yes"], [])
+ CFLAGS="$save_CFLAGS"
+ AC_LANG_RESTORE
+])
+if eval "test \"`echo '$kde_cv_prog_cc_'$kde_cache`\" = yes"; then
+ AC_MSG_RESULT(yes)
+ :
+ $2
+else
+ AC_MSG_RESULT(no)
+ :
+ $3
+fi
+])
+
+
+dnl AC_REMOVE_FORBIDDEN removes forbidden arguments from variables
+dnl use: AC_REMOVE_FORBIDDEN(CC, [-forbid -bad-option whatever])
+dnl it's all white-space separated
+AC_DEFUN([AC_REMOVE_FORBIDDEN],
+[ __val=$$1
+ __forbid=" $2 "
+ if test -n "$__val"; then
+ __new=""
+ ac_save_IFS=$IFS
+ IFS=" "
+ for i in $__val; do
+ case "$__forbid" in
+ *" $i "*) AC_MSG_WARN([found forbidden $i in $1, removing it]) ;;
+ *) # Careful to not add spaces, where there were none, because otherwise
+ # libtool gets confused, if we change e.g. CXX
+ if test -z "$__new" ; then __new=$i ; else __new="$__new $i" ; fi ;;
+ esac
+ done
+ IFS=$ac_save_IFS
+ $1=$__new
+ fi
+])
+
+
+AC_DEFUN([KDE_CHECK_FOR_BAD_COMPILER],
+[
+ AC_MSG_CHECKING([whether $CC is blacklisted])
+
+ dnl In theory we have tu run this test against $CC and $CXX
+ dnl in C and in C++ mode, because its perfectly legal for
+ dnl the user to mix compiler versions, since C has a defined
+ dnl ABI.
+ dnl
+ dnl For now, we assume the user is not on crack.
+
+ AC_TRY_COMPILE([
+#ifdef __GNUC__
+#if __GNUC__ == 4 && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 0
+choke me
+#endif
+#endif
+], ,
+ kde_bad_compiler=no,
+ kde_bad_compiler=yes
+)
+
+ AC_MSG_RESULT($kde_bad_compiler)
+
+if test "$kde_bad_compiler" = "yes"; then
+ AC_MSG_ERROR([
+
+This particular compiler version is blacklisted because it
+is known to miscompile KDE. Please use a newer version, or
+if that is not yet available, choose an older version.
+
+Please do not report a bug or bother us reporting this
+configure error. We know about it, and we introduced
+it by intention to avoid untraceable bugs or crashes in KDE.
+
+])
+fi
+
+])
+
+
+AC_DEFUN([KDE_CHECK_FOR_OPT_NOINLINE_MATCH],
+[
+ AC_CACHE_CHECK([whether system headers can cope with -O2 -fno-inline],
+ kde_cv_opt_noinline_match,
+ [
+ kde_cv_opt_noinline_match=irrelevant
+ dnl if we don't use both -O2 and -fno-inline, this check is moot
+ if echo "$CFLAGS" | grep -e -O2 >/dev/null 2>/dev/null \
+ && echo "$CFLAGS" | grep -e -fno-inline >/dev/null 2>/dev/null ; then
+
+ ac_cflags_save="$CFLAGS"
+ CFLAGS="$CFLAGS -D_USE_GNU"
+
+ AC_TRY_LINK([
+ #include <string.h>
+], [ const char *pt, *et;
+ et = __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p ( ";," ) && ((size_t)(const void *)(( ";," )+ 1) - (size_t)(const void *)( ";," ) == 1) ? ((__a0 =((__const char *) ( ";," ))[0], __a0 == '\0') ? ((void) ( pt ),((void *)0) ) : ((__a1 = ((__const char *) ( ";," ))[1], __a1== '\0') ? (__extension__ (__builtin_constant_p ( __a0 ) && ( __a0 ) == '\0' ? (char *) __rawmemchr ( pt , __a0) : strchr( pt , __a0 ))) : ((__a2 = ((__const char *) ( ";," ))[2], __a2 == '\0') ? __strpbrk_c2 ( pt , __a0, __a1) :(((__const char *) ( ";," ))[3] == '\0' ? __strpbrk_c3 ( pt ,__a0, __a1, __a2): strpbrk ( pt , ";," ))))) : strpbrk ( pt , ";," )); }) ;
+],
+ kde_cv_opt_noinline_match=yes,
+ kde_cv_opt_noinline_match=no
+ )
+
+ CFLAGS="$ac_cflags_save"
+ fi
+ ])
+])
+
+
+dnl AC_VALIDIFY_CXXFLAGS checks for forbidden flags the user may have given
+AC_DEFUN([AC_VALIDIFY_CXXFLAGS],
+[dnl
+if test "x$kde_use_qt_emb" != "xyes"; then
+ AC_REMOVE_FORBIDDEN(CXX, [-fno-rtti -rpath])
+ AC_REMOVE_FORBIDDEN(CXXFLAGS, [-fno-rtti -rpath])
+else
+ AC_REMOVE_FORBIDDEN(CXX, [-rpath])
+ AC_REMOVE_FORBIDDEN(CXXFLAGS, [-rpath])
+fi
+])
+
+AC_DEFUN([AC_CHECK_COMPILERS],
+[
+ AC_ARG_ENABLE(debug,
+ AC_HELP_STRING([--enable-debug=ARG],[enables debug symbols (yes|no|full) [default=no]]),
+ [
+ case $enableval in
+ yes)
+ kde_use_debug_code="yes"
+ kde_use_debug_define=no
+ ;;
+ full)
+ kde_use_debug_code="full"
+ kde_use_debug_define=no
+ ;;
+ *)
+ kde_use_debug_code="no"
+ kde_use_debug_define=yes
+ ;;
+ esac
+ ],
+ [kde_use_debug_code="no"
+ kde_use_debug_define=no
+ ])
+
+ dnl Just for configure --help
+ AC_ARG_ENABLE(dummyoption,
+ AC_HELP_STRING([--disable-debug],
+ [disables debug output and debug symbols [default=no]]),
+ [],[])
+
+ AC_ARG_ENABLE(strict,
+ AC_HELP_STRING([--enable-strict],
+ [compiles with strict compiler options (may not work!)]),
+ [
+ if test $enableval = "no"; then
+ kde_use_strict_options="no"
+ else
+ kde_use_strict_options="yes"
+ fi
+ ], [kde_use_strict_options="no"])
+
+ AC_ARG_ENABLE(warnings,AC_HELP_STRING([--disable-warnings],[disables compilation with -Wall and similar]),
+ [
+ if test $enableval = "no"; then
+ kde_use_warnings="no"
+ else
+ kde_use_warnings="yes"
+ fi
+ ], [kde_use_warnings="yes"])
+
+ dnl enable warnings for debug build
+ if test "$kde_use_debug_code" != "no"; then
+ kde_use_warnings=yes
+ fi
+
+ AC_ARG_ENABLE(profile,AC_HELP_STRING([--enable-profile],[creates profiling infos [default=no]]),
+ [kde_use_profiling=$enableval],
+ [kde_use_profiling="no"]
+ )
+
+ dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS
+ CFLAGS=" $CFLAGS"
+
+ AC_PROG_CC
+
+ AC_PROG_CPP
+
+ if test "$GCC" = "yes"; then
+ if test "$kde_use_debug_code" != "no"; then
+ if test $kde_use_debug_code = "full"; then
+ CFLAGS="-g3 -fno-inline $CFLAGS"
+ else
+ CFLAGS="-g -O2 -fno-schedule-insns -fno-inline $CFLAGS"
+ fi
+ else
+ CFLAGS="-O2 $CFLAGS"
+ fi
+ fi
+
+ if test "$kde_use_debug_define" = "yes"; then
+ CFLAGS="-DNDEBUG $CFLAGS"
+ fi
+
+
+ case "$host" in
+ *-*-sysv4.2uw*) CFLAGS="-D_UNIXWARE $CFLAGS";;
+ *-*-sysv5uw7*) CFLAGS="-D_UNIXWARE7 $CFLAGS";;
+ esac
+
+ if test -z "$LDFLAGS" && test "$kde_use_debug_code" = "no" && test "$GCC" = "yes"; then
+ LDFLAGS=""
+ fi
+
+ CXXFLAGS=" $CXXFLAGS"
+
+ AC_PROG_CXX
+
+ KDE_CHECK_FOR_BAD_COMPILER
+
+ if test "$GXX" = "yes" || test "$CXX" = "KCC"; then
+ if test "$kde_use_debug_code" != "no"; then
+ if test "$CXX" = "KCC"; then
+ CXXFLAGS="+K0 -Wall -pedantic -W -Wpointer-arith -Wwrite-strings $CXXFLAGS"
+ else
+ if test "$kde_use_debug_code" = "full"; then
+ CXXFLAGS="-g3 -fno-inline $CXXFLAGS"
+ else
+ CXXFLAGS="-g -O2 -fno-schedule-insns -fno-inline $CXXFLAGS"
+ fi
+ fi
+ KDE_CHECK_COMPILER_FLAG(fno-builtin,[CXXFLAGS="-fno-builtin $CXXFLAGS"])
+
+ dnl convenience compiler flags
+ KDE_CHECK_COMPILER_FLAG(Woverloaded-virtual, [WOVERLOADED_VIRTUAL="-Woverloaded-virtual"], [WOVERLOADED_VRITUAL=""])
+ AC_SUBST(WOVERLOADED_VIRTUAL)
+ else
+ if test "$CXX" = "KCC"; then
+ CXXFLAGS="+K3 $CXXFLAGS"
+ else
+ CXXFLAGS="-O2 $CXXFLAGS"
+ fi
+ fi
+ fi
+
+ if test "$kde_use_debug_define" = "yes"; then
+ CXXFLAGS="-DNDEBUG -DNO_DEBUG $CXXFLAGS"
+ fi
+
+ if test "$kde_use_profiling" = "yes"; then
+ KDE_CHECK_COMPILER_FLAG(pg,
+ [
+ CFLAGS="-pg $CFLAGS"
+ CXXFLAGS="-pg $CXXFLAGS"
+ ])
+ fi
+
+ if test "$kde_use_warnings" = "yes"; then
+ if test "$GCC" = "yes"; then
+ CXXFLAGS="-Wall -W -Wpointer-arith $CXXFLAGS"
+ case $host in
+ *-*-linux-gnu)
+ CFLAGS="-std=iso9899:1990 -W -Wall -Wchar-subscripts -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -D_XOPEN_SOURCE=500 -D_BSD_SOURCE $CFLAGS"
+ CXXFLAGS="-ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wchar-subscripts $CXXFLAGS"
+ KDE_CHECK_COMPILER_FLAG(Wmissing-format-attribute, [CXXFLAGS="$CXXFLAGS -Wformat-security -Wmissing-format-attribute"])
+ KDE_CHECK_C_COMPILER_FLAG(Wmissing-format-attribute, [CFLAGS="$CFLAGS -Wformat-security -Wmissing-format-attribute"])
+ ;;
+ esac
+ KDE_CHECK_COMPILER_FLAG(Wundef,[CXXFLAGS="-Wundef $CXXFLAGS"])
+ KDE_CHECK_COMPILER_FLAG(Wno-long-long,[CXXFLAGS="-Wno-long-long $CXXFLAGS"])
+ dnl ### FIXME: revert for KDE 4
+ KDE_CHECK_COMPILER_FLAG(Wno-non-virtual-dtor,[CXXFLAGS="$CXXFLAGS -Wno-non-virtual-dtor"])
+ fi
+ fi
+
+ if test "$GXX" = "yes" && test "$kde_use_strict_options" = "yes"; then
+ CXXFLAGS="-Wcast-qual -Wshadow -Wcast-align $CXXFLAGS"
+ fi
+
+ AC_ARG_ENABLE(pch,
+ AC_HELP_STRING([--enable-pch],
+ [enables precompiled header support (currently only KCC or gcc >=3.4+unsermake) [default=no]]),
+ [ kde_use_pch=$enableval ],[ kde_use_pch=no ])
+
+ HAVE_GCC_VISIBILITY=0
+ AC_SUBST([HAVE_GCC_VISIBILITY])
+
+ if test "$GXX" = "yes"; then
+ gcc_no_reorder_blocks=NO
+ KDE_CHECK_COMPILER_FLAG(fno-reorder-blocks,[gcc_no_reorder_blocks=YES])
+ if test $kde_use_debug_code != "no" && \
+ test $kde_use_debug_code != "full" && \
+ test "YES" = "$gcc_no_reorder_blocks" ; then
+ CXXFLAGS="$CXXFLAGS -fno-reorder-blocks"
+ CFLAGS="$CFLAGS -fno-reorder-blocks"
+ fi
+ KDE_CHECK_COMPILER_FLAG(fno-exceptions,[CXXFLAGS="$CXXFLAGS -fno-exceptions"])
+ KDE_CHECK_COMPILER_FLAG(fno-check-new, [CXXFLAGS="$CXXFLAGS -fno-check-new"])
+ KDE_CHECK_COMPILER_FLAG(fno-common, [CXXFLAGS="$CXXFLAGS -fno-common"])
+ KDE_CHECK_COMPILER_FLAG(fexceptions, [USE_EXCEPTIONS="-fexceptions"], USE_EXCEPTIONS= )
+ ENABLE_PERMISSIVE_FLAG="-fpermissive"
+
+ if test "$kde_use_pch" = "yes"; then
+ AC_MSG_CHECKING(whether gcc supports precompiling c header files)
+ echo >conftest.h
+ if $CC -x c-header conftest.h >/dev/null 2>/dev/null; then
+ kde_gcc_supports_pch=yes
+ AC_MSG_RESULT(yes)
+ else
+ kde_gcc_supports_pch=no
+ AC_MSG_RESULT(no)
+ fi
+ if test "$kde_gcc_supports_pch" = "yes"; then
+ AC_MSG_CHECKING(whether gcc supports precompiling c++ header files)
+ if $CXX -x c++-header conftest.h >/dev/null 2>/dev/null; then
+ kde_gcc_supports_pch=yes
+ AC_MSG_RESULT(yes)
+ else
+ kde_gcc_supports_pch=no
+ AC_MSG_RESULT(no)
+ fi
+ fi
+ rm -f conftest.h conftest.h.gch
+ fi
+
+ KDE_CHECK_FOR_OPT_NOINLINE_MATCH
+ if test "x$kde_cv_opt_noinline_match" = "xno" ; then
+ CFLAGS="`echo "$CFLAGS" | sed "s/ -fno-inline//"`"
+ fi
+ fi
+ AM_CONDITIONAL(unsermake_enable_pch, test "$kde_use_pch" = "yes" && test "$kde_gcc_supports_pch" = "yes")
+ if test "$CXX" = "KCC"; then
+ dnl unfortunately we currently cannot disable exception support in KCC
+ dnl because doing so is binary incompatible and Qt by default links with exceptions :-(
+ dnl KDE_CHECK_COMPILER_FLAG(-no_exceptions,[CXXFLAGS="$CXXFLAGS --no_exceptions"])
+ dnl KDE_CHECK_COMPILER_FLAG(-exceptions, [USE_EXCEPTIONS="--exceptions"], USE_EXCEPTIONS= )
+
+ if test "$kde_use_pch" = "yes"; then
+ dnl TODO: support --pch-dir!
+ KDE_CHECK_COMPILER_FLAG(-pch,[CXXFLAGS="$CXXFLAGS --pch"])
+ dnl the below works (but the dir must exist), but it's
+ dnl useless for a whole package.
+ dnl The are precompiled headers for each source file, so when compiling
+ dnl from scratch, it doesn't make a difference, and they take up
+ dnl around ~5Mb _per_ sourcefile.
+ dnl KDE_CHECK_COMPILER_FLAG(-pch_dir /tmp,
+ dnl [CXXFLAGS="$CXXFLAGS --pch_dir `pwd`/pcheaders"])
+ fi
+ dnl this flag controls inlining. by default KCC inlines in optimisation mode
+ dnl all implementations that are defined inside the class {} declaration.
+ dnl because of templates-compatibility with broken gcc compilers, this
+ dnl can cause excessive inlining. This flag limits it to a sane level
+ KDE_CHECK_COMPILER_FLAG(-inline_keyword_space_time=6,[CXXFLAGS="$CXXFLAGS --inline_keyword_space_time=6"])
+ KDE_CHECK_COMPILER_FLAG(-inline_auto_space_time=2,[CXXFLAGS="$CXXFLAGS --inline_auto_space_time=2"])
+ KDE_CHECK_COMPILER_FLAG(-inline_implicit_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_implicit_space_time=2.0"])
+ KDE_CHECK_COMPILER_FLAG(-inline_generated_space_time=2.0,[CXXFLAGS="$CXXFLAGS --inline_generated_space_time=2.0"])
+ dnl Some source files are shared between multiple executables
+ dnl (or libraries) and some of those need template instantiations.
+ dnl In that case KCC needs to compile those sources with
+ dnl --one_instantiation_per_object. To make it easy for us we compile
+ dnl _all_ objects with that flag (--one_per is a shorthand).
+ KDE_CHECK_COMPILER_FLAG(-one_per, [CXXFLAGS="$CXXFLAGS --one_per"])
+ fi
+ AC_SUBST(USE_EXCEPTIONS)
+ dnl obsolete macro - provided to keep things going
+ USE_RTTI=
+ AC_SUBST(USE_RTTI)
+
+ case "$host" in
+ *-*-irix*) test "$GXX" = yes && CXXFLAGS="-D_LANGUAGE_C_PLUS_PLUS -D__LANGUAGE_C_PLUS_PLUS $CXXFLAGS" ;;
+ *-*-sysv4.2uw*) CXXFLAGS="-D_UNIXWARE $CXXFLAGS";;
+ *-*-sysv5uw7*) CXXFLAGS="-D_UNIXWARE7 $CXXFLAGS";;
+ *-*-solaris*)
+ if test "$GXX" = yes; then
+ libstdcpp=`$CXX -print-file-name=libstdc++.so`
+ if test ! -f $libstdcpp; then
+ AC_MSG_ERROR([You've compiled gcc without --enable-shared. This doesn't work with KDE. Please recompile gcc with --enable-shared to receive a libstdc++.so])
+ fi
+ fi
+ ;;
+ esac
+
+ AC_VALIDIFY_CXXFLAGS
+
+ AC_PROG_CXXCPP
+
+ if test "$GCC" = yes; then
+ NOOPT_CFLAGS=-O0
+ fi
+ KDE_CHECK_COMPILER_FLAG(O0,[NOOPT_CXXFLAGS=-O0])
+
+ AC_ARG_ENABLE(coverage,
+ AC_HELP_STRING([--enable-coverage],[use gcc coverage testing]), [
+ if test "$am_cv_CC_dependencies_compiler_type" = "gcc3"; then
+ ac_coverage_compiler="-fprofile-arcs -ftest-coverage"
+ ac_coverage_linker="-lgcc"
+ elif test "$am_cv_CC_dependencies_compiler_type" = "gcc"; then
+ ac_coverage_compiler="-fprofile-arcs -ftest-coverage"
+ ac_coverage_linker=""
+ else
+ AC_MSG_ERROR([coverage with your compiler is not supported])
+ fi
+ CFLAGS="$CFLAGS $ac_coverage_compiler"
+ CXXFLAGS="$CXXFLAGS $ac_coverage_compiler"
+ LDFLAGS="$LDFLAGS $ac_coverage_linker"
+ ])
+
+ AC_SUBST(NOOPT_CXXFLAGS)
+ AC_SUBST(NOOPT_CFLAGS)
+ AC_SUBST(ENABLE_PERMISSIVE_FLAG)
+
+ KDE_CHECK_NEW_LDFLAGS
+ KDE_CHECK_FINAL
+ KDE_CHECK_CLOSURE
+ KDE_CHECK_NMCHECK
+
+ ifdef([AM_DEPENDENCIES], AC_REQUIRE([KDE_ADD_DEPENDENCIES]), [])
+])
+
+AC_DEFUN([KDE_CHECK_VISIBILITY_GCC_BUG],
+ [
+ AC_CACHE_CHECK([for gcc -fvisibility-inlines-hidden bug], kde_cv_val_gcc_visibility_bug,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ safe_CXXFLAGS=$CXXFLAGS
+ safe_LDFLAGS=$LDFLAGS
+ CXXFLAGS="$CXXFLAGS -fPIC -fvisibility-inlines-hidden -O0"
+ LDFLAGS="$LDFLAGS -shared -fPIC"
+
+ AC_TRY_LINK(
+ [
+ /* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19664 */
+ #include <string>
+ int some_function( void ) __attribute__ ((visibility("default")));
+ int some_function( void )
+ {
+ std::string s("blafasel");
+ return 0;
+ }
+ ], [/* elvis is alive */],
+ kde_cv_val_gcc_visibility_bug=no, kde_cv_val_gcc_visibility_bug=yes)
+
+ CXXFLAGS=$safe_CXXFLAGS
+ LDFLAGS=$safe_LDFLAGS
+ AC_LANG_RESTORE
+ ]
+ )
+
+ if test x$kde_cv_val_gcc_visibility_bug = xno; then
+ CXXFLAGS="$CXXFLAGS -fvisibility-inlines-hidden"
+ fi
+ ]
+)
+
+AC_DEFUN([KDE_ENABLE_HIDDEN_VISIBILITY],
+[
+ AC_BEFORE([AC_PATH_QT_1_3], [KDE_ENABLE_HIDDEN_VISIBILITY])
+
+ AC_MSG_CHECKING([grepping for visibility push/pop in headers])
+
+ if test "x$GXX" = "xyes"; then
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_EGREP_CPP(
+ [GCC visibility push],
+ [ #include <exception>
+ ],
+ [
+ AC_MSG_RESULT(yes)
+ kde_stdc_visibility_patched=yes ],
+ [
+ AC_MSG_RESULT(no)
+ AC_MSG_WARN([Your libstdc++ doesn't appear to be patched for
+ visibility support. Disabling -fvisibility=hidden])
+
+ kde_stdc_visibility_patched=no ])
+
+ AC_LANG_RESTORE
+
+ kde_have_gcc_visibility=no
+ KDE_CHECK_COMPILER_FLAG(fvisibility=hidden,
+ [
+ kde_have_gcc_visibility=yes
+ dnl the whole toolchain is just a mess, gcc is just too buggy
+ dnl to handle STL with visibility enabled. Lets reconsider
+ dnl when gcc 4.2 is out or when things get fixed in the compiler.
+ dnl Contact mueller@kde.org for details.
+ AC_ARG_ENABLE(gcc-hidden-visibility,
+ AC_HELP_STRING([--enable-gcc-hidden-visibility],[toolchain hidden visibility [default=no]]),
+ [kde_have_gcc_visibility=$enableval],
+ [kde_have_gcc_visibility=no])
+
+ AC_CACHE_CHECK([if Qt is patched for -fvisibility], kde_cv_val_qt_gcc_visibility_patched,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ safe_CXXFLAGS=$CXXFLAGS
+ CXXFLAGS="$CXXFLAGS $all_includes"
+
+ AC_TRY_COMPILE(
+ [
+#include <qglobal.h>
+#if Q_EXPORT - 0 != 0
+/* if this compiles, then Q_EXPORT is undefined */
+/* if Q_EXPORT is nonempty, this will break compilation */
+#endif
+ ], [/* elvis is alive */],
+ kde_cv_val_qt_gcc_visibility_patched=no, kde_cv_val_qt_gcc_visibility_patched=yes)
+
+ CXXFLAGS=$safe_CXXFLAGS
+ AC_LANG_RESTORE
+ ]
+ )
+
+ if test x$kde_have_gcc_visibility = "xyes" && test x$kde_stdc_visibility_patched = "xyes" && test x$kde_cv_val_qt_gcc_visibility_patched = "xyes"; then
+ CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
+ KDE_CHECK_VISIBILITY_GCC_BUG
+ HAVE_GCC_VISIBILITY=1
+ AC_DEFINE_UNQUOTED(__KDE_HAVE_GCC_VISIBILITY, "$HAVE_GCC_VISIBILITY", [define to 1 if -fvisibility is supported])
+ fi
+ ])
+ fi
+])
+
+AC_DEFUN([KDE_ADD_DEPENDENCIES],
+[
+ [A]M_DEPENDENCIES(CC)
+ [A]M_DEPENDENCIES(CXX)
+])
+
+dnl just a wrapper to clean up configure.in
+AC_DEFUN([KDE_PROG_LIBTOOL],
+[
+AC_REQUIRE([AC_CHECK_COMPILERS])
+AC_REQUIRE([AC_ENABLE_SHARED])
+AC_REQUIRE([AC_ENABLE_STATIC])
+
+AC_REQUIRE([AC_LIBTOOL_DLOPEN])
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+AC_OBJEXT
+AC_EXEEXT
+
+AM_PROG_LIBTOOL
+AC_LIBTOOL_CXX
+
+LIBTOOL_SHELL="/bin/sh ./libtool"
+# LIBTOOL="$LIBTOOL --silent"
+KDE_PLUGIN="-avoid-version -module -no-undefined \$(KDE_NO_UNDEFINED) \$(KDE_RPATH) \$(KDE_MT_LDFLAGS)"
+AC_SUBST(KDE_PLUGIN)
+
+# This hack ensures that libtool creates shared libs for kunittest plugins. By default check_LTLIBRARIES makes static libs.
+KDE_CHECK_PLUGIN="\$(KDE_PLUGIN) -rpath \$(libdir)"
+AC_SUBST(KDE_CHECK_PLUGIN)
+
+# we patch configure quite some so we better keep that consistent for incremental runs
+AC_SUBST(AUTOCONF,'$(SHELL) $(top_srcdir)/admin/cvs.sh configure || touch configure')
+])
+
+AC_DEFUN([KDE_CHECK_LIB64],
+[
+ AC_ARG_ENABLE(libsuffix,
+ AC_HELP_STRING([--enable-libsuffix],
+ [/lib directory suffix (64,32,none,auto[=default])]),
+ kdelibsuff=$enableval, kdelibsuff="auto")
+
+ if test "$kdelibsuff" = "auto"; then
+
+cat > conftest.c << EOF
+#include <stdio.h>
+int main() {
+ return 0;
+}
+EOF
+ kdelibsuff=`$CC conftest.c -o conftest.out; ldd conftest.out |sed -ne '/libc.so/{
+ s,.*/lib\([[^\/]]*\)/.*,\1,
+ p
+}'`
+ rm -rf conftest.*
+ fi
+
+ if test "$kdelibsuff" = "no" || test "$kdelibsuff" = "none"; then
+ kdelibsuff=
+ fi
+ if test -z "$kdelibsuff"; then
+ AC_MSG_RESULT([not using lib directory suffix])
+ AC_DEFINE(KDELIBSUFF, [""], Suffix for lib directories)
+ else
+ if test "$libdir" = '${exec_prefix}/lib'; then
+ libdir="$libdir${kdelibsuff}"
+ AC_SUBST([libdir], ["$libdir"]) dnl ugly hack for lib64 platforms
+ fi
+ AC_DEFINE_UNQUOTED(KDELIBSUFF, ["${kdelibsuff}"], Suffix for lib directories)
+ AC_MSG_RESULT([using lib directory suffix $kdelibsuff])
+ fi
+])
+
+AC_DEFUN([KDE_CHECK_TYPES],
+[ AC_CHECK_SIZEOF(int, 4)dnl
+ AC_CHECK_SIZEOF(short)dnl
+ AC_CHECK_SIZEOF(long, 4)dnl
+ AC_CHECK_SIZEOF(char *, 4)dnl
+])dnl
+
+dnl Not used - kept for compat only?
+AC_DEFUN([KDE_DO_IT_ALL],
+[
+AC_CANONICAL_SYSTEM
+AC_ARG_PROGRAM
+AM_INIT_AUTOMAKE($1, $2)
+AM_DISABLE_LIBRARIES
+AC_PREFIX_DEFAULT(${KDEDIR:-/usr/local/kde})
+AC_CHECK_COMPILERS
+KDE_PROG_LIBTOOL
+AM_KDE_WITH_NLS
+AC_PATH_KDE
+])
+
+AC_DEFUN([AC_CHECK_RPATH],
+[
+AC_MSG_CHECKING(for rpath)
+AC_ARG_ENABLE(rpath,
+ AC_HELP_STRING([--disable-rpath],[do not use the rpath feature of ld]),
+ USE_RPATH=$enableval, USE_RPATH=yes)
+
+if test -z "$KDE_RPATH" && test "$USE_RPATH" = "yes"; then
+
+ KDE_RPATH="-R \$(libdir)"
+
+ if test "$kde_libraries" != "$libdir"; then
+ KDE_RPATH="$KDE_RPATH -R \$(kde_libraries)"
+ fi
+
+ if test -n "$qt_libraries"; then
+ KDE_RPATH="$KDE_RPATH -R \$(qt_libraries)"
+ fi
+ dnl $x_libraries is set to /usr/lib in case
+ if test -n "$X_LDFLAGS"; then
+ X_RPATH="-R \$(x_libraries)"
+ KDE_RPATH="$KDE_RPATH $X_RPATH"
+ fi
+ if test -n "$KDE_EXTRA_RPATH"; then
+ KDE_RPATH="$KDE_RPATH \$(KDE_EXTRA_RPATH)"
+ fi
+fi
+AC_SUBST(KDE_EXTRA_RPATH)
+AC_SUBST(KDE_RPATH)
+AC_SUBST(X_RPATH)
+AC_MSG_RESULT($USE_RPATH)
+])
+
+dnl Check for the type of the third argument of getsockname
+AC_DEFUN([AC_CHECK_SOCKLEN_T],
+[
+ AC_MSG_CHECKING(for socklen_t)
+ AC_CACHE_VAL(kde_cv_socklen_t,
+ [
+ AC_LANG_PUSH(C++)
+ kde_cv_socklen_t=no
+ AC_TRY_COMPILE([
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ ],
+ [
+ socklen_t len;
+ getpeername(0,0,&len);
+ ],
+ [
+ kde_cv_socklen_t=yes
+ kde_cv_socklen_t_equiv=socklen_t
+ ])
+ AC_LANG_POP(C++)
+ ])
+ AC_MSG_RESULT($kde_cv_socklen_t)
+ if test $kde_cv_socklen_t = no; then
+ AC_MSG_CHECKING([for socklen_t equivalent for socket functions])
+ AC_CACHE_VAL(kde_cv_socklen_t_equiv,
+ [
+ kde_cv_socklen_t_equiv=int
+ AC_LANG_PUSH(C++)
+ for t in int size_t unsigned long "unsigned long"; do
+ AC_TRY_COMPILE([
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ ],
+ [
+ $t len;
+ getpeername(0,0,&len);
+ ],
+ [
+ kde_cv_socklen_t_equiv="$t"
+ break
+ ])
+ done
+ AC_LANG_POP(C++)
+ ])
+ AC_MSG_RESULT($kde_cv_socklen_t_equiv)
+ fi
+ AC_DEFINE_UNQUOTED(kde_socklen_t, $kde_cv_socklen_t_equiv,
+ [type to use in place of socklen_t if not defined])
+ AC_DEFINE_UNQUOTED(ksize_t, $kde_cv_socklen_t_equiv,
+ [type to use in place of socklen_t if not defined (deprecated, use kde_socklen_t)])
+])
+
+dnl This is a merge of some macros out of the gettext aclocal.m4
+dnl since we don't need anything, I took the things we need
+dnl the copyright for them is:
+dnl >
+dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+dnl This Makefile.in is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+dnl >
+dnl for this file it is relicensed under LGPL
+
+AC_DEFUN([AM_KDE_WITH_NLS],
+ [
+ dnl If we use NLS figure out what method
+
+ AM_PATH_PROG_WITH_TEST_KDE(MSGFMT, msgfmt,
+ [test -n "`$ac_dir/$ac_word --version 2>&1 | grep 'GNU gettext'`"], msgfmt)
+ AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+ if test -z "`$GMSGFMT --version 2>&1 | grep 'GNU gettext'`"; then
+ AC_MSG_RESULT([found msgfmt program is not GNU msgfmt; ignore it])
+ GMSGFMT=":"
+ fi
+ MSGFMT=$GMSGFMT
+ AC_SUBST(GMSGFMT)
+ AC_SUBST(MSGFMT)
+
+ AM_PATH_PROG_WITH_TEST_KDE(XGETTEXT, xgettext,
+ [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+
+ dnl Test whether we really found GNU xgettext.
+ if test "$XGETTEXT" != ":"; then
+ dnl If it is no GNU xgettext we define it as : so that the
+ dnl Makefiles still can work.
+ if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+ : ;
+ else
+ AC_MSG_RESULT(
+ [found xgettext programs is not GNU xgettext; ignore it])
+ XGETTEXT=":"
+ fi
+ fi
+ AC_SUBST(XGETTEXT)
+
+ ])
+
+# Search path for a program which passes the given test.
+# Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+# serial 1
+# Stephan Kulow: I appended a _KDE against name conflicts
+
+dnl AM_PATH_PROG_WITH_TEST_KDE(VARIABLE, PROG-TO-CHECK-FOR,
+dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST_KDE],
+[# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+ /*)
+ ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+ ;;
+ *)
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in ifelse([$5], , $PATH, [$5]); do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if [$3]; then
+ ac_cv_path_$1="$ac_dir/$ac_word"
+ break
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+ ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test -n "[$]$1"; then
+ AC_MSG_RESULT([$]$1)
+else
+ AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
+
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# serial 1
+
+AC_DEFUN([AM_LC_MESSAGES],
+ [if test $ac_cv_header_locale_h = yes; then
+ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+ [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+ am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+ if test $am_cv_val_LC_MESSAGES = yes; then
+ AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your locale.h file contains LC_MESSAGES])
+ fi
+ fi])
+
+dnl From Jim Meyering.
+dnl FIXME: migrate into libit.
+
+AC_DEFUN([AM_FUNC_OBSTACK],
+[AC_CACHE_CHECK([for obstacks], am_cv_func_obstack,
+ [AC_TRY_LINK([#include "obstack.h"],
+ [struct obstack *mem;obstack_free(mem,(char *) 0)],
+ am_cv_func_obstack=yes,
+ am_cv_func_obstack=no)])
+ if test $am_cv_func_obstack = yes; then
+ AC_DEFINE(HAVE_OBSTACK)
+ else
+ LIBOBJS="$LIBOBJS obstack.o"
+ fi
+])
+
+dnl From Jim Meyering. Use this if you use the GNU error.[ch].
+dnl FIXME: Migrate into libit
+
+AC_DEFUN([AM_FUNC_ERROR_AT_LINE],
+[AC_CACHE_CHECK([for error_at_line], am_cv_lib_error_at_line,
+ [AC_TRY_LINK([],[error_at_line(0, 0, "", 0, "");],
+ am_cv_lib_error_at_line=yes,
+ am_cv_lib_error_at_line=no)])
+ if test $am_cv_lib_error_at_line = no; then
+ LIBOBJS="$LIBOBJS error.o"
+ fi
+ AC_SUBST(LIBOBJS)dnl
+])
+
+# Macro to add for using GNU gettext.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+
+# serial 1
+# Stephan Kulow: I put a KDE in it to avoid name conflicts
+
+AC_DEFUN([AM_KDE_GNU_GETTEXT],
+ [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+ AC_REQUIRE([AC_PROG_RANLIB])dnl
+ AC_REQUIRE([AC_HEADER_STDC])dnl
+ AC_REQUIRE([AC_TYPE_OFF_T])dnl
+ AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+ AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+ AC_REQUIRE([AC_FUNC_MMAP])dnl
+ AC_REQUIRE([AM_KDE_WITH_NLS])dnl
+ AC_CHECK_HEADERS([limits.h locale.h nl_types.h string.h values.h alloca.h])
+ AC_CHECK_FUNCS([getcwd munmap putenv setlocale strchr strcasecmp \
+__argz_count __argz_stringify __argz_next])
+
+ AC_MSG_CHECKING(for stpcpy)
+ AC_CACHE_VAL(kde_cv_func_stpcpy,
+ [
+ kde_safe_cxxflags=$CXXFLAGS
+ CXXFLAGS="-Werror"
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([
+ #include <string.h>
+ ],
+ [
+ char buffer[200];
+ stpcpy(buffer, buffer);
+ ],
+ kde_cv_func_stpcpy=yes,
+ kde_cv_func_stpcpy=no)
+ AC_LANG_RESTORE
+ CXXFLAGS=$kde_safe_cxxflags
+ ])
+ AC_MSG_RESULT($kde_cv_func_stpcpy)
+ if eval "test \"`echo $kde_cv_func_stpcpy`\" = yes"; then
+ AC_DEFINE(HAVE_STPCPY, 1, [Define if you have stpcpy])
+ fi
+
+ AM_LC_MESSAGES
+
+ if test "x$CATOBJEXT" != "x"; then
+ if test "x$ALL_LINGUAS" = "x"; then
+ LINGUAS=
+ else
+ AC_MSG_CHECKING(for catalogs to be installed)
+ NEW_LINGUAS=
+ for lang in ${LINGUAS=$ALL_LINGUAS}; do
+ case "$ALL_LINGUAS" in
+ *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
+ esac
+ done
+ LINGUAS=$NEW_LINGUAS
+ AC_MSG_RESULT($LINGUAS)
+ fi
+
+ dnl Construct list of names of catalog files to be constructed.
+ if test -n "$LINGUAS"; then
+ for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+ fi
+ fi
+
+ ])
+
+AC_DEFUN([AC_HAVE_XPM],
+ [AC_REQUIRE_CPP()dnl
+ AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+ test -z "$XPM_LDFLAGS" && XPM_LDFLAGS=
+ test -z "$XPM_INCLUDE" && XPM_INCLUDE=
+
+ AC_ARG_WITH(xpm,AC_HELP_STRING([--without-xpm],[disable color pixmap XPM tests]),
+ xpm_test=$withval, xpm_test="yes")
+ if test "x$xpm_test" = xno; then
+ ac_cv_have_xpm=no
+ else
+ AC_MSG_CHECKING(for XPM)
+ AC_CACHE_VAL(ac_cv_have_xpm,
+ [
+ ac_save_ldflags="$LDFLAGS"
+ ac_save_cflags="$CFLAGS"
+ if test "x$kde_use_qt_emb" != "xyes" && test "x$kde_use_qt_mac" != "xyes"; then
+ LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS $LDFLAGS $XPM_LDFLAGS $all_libraries -lXpm -lX11 -lXext $LIBZ $LIBSOCKET"
+ else
+ LDFLAGS="$LDFLAGS $X_LDFLAGS $USER_LDFLAGS $LDFLAGS $XPM_LDFLAGS $all_libraries -lXpm $LIBZ $LIBSOCKET"
+ fi
+ CFLAGS="$CFLAGS $X_INCLUDES $USER_INCLUDES"
+ test -n "$XPM_INCLUDE" && CFLAGS="-I$XPM_INCLUDE $CFLAGS"
+ AC_TRY_LINK([#include <X11/xpm.h>],[],
+ ac_cv_have_xpm="yes",ac_cv_have_xpm="no")
+ LDFLAGS="$ac_save_ldflags"
+ CFLAGS="$ac_save_cflags"
+ ])dnl
+
+ if test "$ac_cv_have_xpm" = no; then
+ AC_MSG_RESULT(no)
+ XPM_LDFLAGS=""
+ XPMINC=""
+ $2
+ else
+ AC_DEFINE(HAVE_XPM, 1, [Define if you have XPM support])
+ if test "$XPM_LDFLAGS" = ""; then
+ XPMLIB='-lXpm $(LIB_X11)'
+ else
+ XPMLIB="-L$XPM_LDFLAGS -lXpm "'$(LIB_X11)'
+ fi
+ if test "$XPM_INCLUDE" = ""; then
+ XPMINC=""
+ else
+ XPMINC="-I$XPM_INCLUDE"
+ fi
+ AC_MSG_RESULT(yes)
+ $1
+ fi
+ fi
+ AC_SUBST(XPMINC)
+ AC_SUBST(XPMLIB)
+])
+
+AC_DEFUN([AC_HAVE_DPMS],
+ [AC_REQUIRE_CPP()dnl
+ AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+ test -z "$DPMS_LDFLAGS" && DPMS_LDFLAGS=
+ test -z "$DPMS_INCLUDE" && DPMS_INCLUDE=
+ DPMS_LIB=
+
+ AC_ARG_WITH(dpms,AC_HELP_STRING([--without-dpms],[disable DPMS power saving]),
+ dpms_test=$withval, dpms_test="yes")
+ if test "x$dpms_test" = xno; then
+ ac_cv_have_dpms=no
+ else
+ AC_MSG_CHECKING(for DPMS)
+ dnl Note: ac_cv_have_dpms can be no, yes, or -lXdpms.
+ dnl 'yes' means DPMS_LIB="", '-lXdpms' means DPMS_LIB="-lXdpms".
+ AC_CACHE_VAL(ac_cv_have_dpms,
+ [
+ if test "x$kde_use_qt_emb" = "xyes" || test "x$kde_use_qt_mac" = "xyes"; then
+ AC_MSG_RESULT(no)
+ ac_cv_have_dpms="no"
+ else
+ ac_save_ldflags="$LDFLAGS"
+ ac_save_cflags="$CFLAGS"
+ ac_save_libs="$LIBS"
+ LDFLAGS="$LDFLAGS $DPMS_LDFLAGS $all_libraries"
+ LIBS="-lX11 -lXext $LIBSOCKET"
+ CFLAGS="$CFLAGS $X_INCLUDES"
+ test -n "$DPMS_INCLUDE" && CFLAGS="-I$DPMS_INCLUDE $CFLAGS"
+ AC_TRY_LINK([
+ #include <X11/Xproto.h>
+ #include <X11/X.h>
+ #include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>
+ int foo_test_dpms()
+ { return DPMSSetTimeouts( 0, 0, 0, 0 ); }],[],
+ ac_cv_have_dpms="yes", [
+ LIBS="-lXdpms $LIBS"
+ AC_TRY_LINK([
+ #include <X11/Xproto.h>
+ #include <X11/X.h>
+ #include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>
+ int foo_test_dpms()
+ { return DPMSSetTimeouts( 0, 0, 0, 0 ); }],[],
+ [
+ ac_cv_have_dpms="-lXdpms"
+ ],ac_cv_have_dpms="no")
+ ])
+ LDFLAGS="$ac_save_ldflags"
+ CFLAGS="$ac_save_cflags"
+ LIBS="$ac_save_libs"
+ fi
+ ])dnl
+
+ if test "$ac_cv_have_dpms" = no; then
+ AC_MSG_RESULT(no)
+ DPMS_LDFLAGS=""
+ DPMSINC=""
+ $2
+ else
+ AC_DEFINE(HAVE_DPMS, 1, [Define if you have DPMS support])
+ if test "$ac_cv_have_dpms" = "-lXdpms"; then
+ DPMS_LIB="-lXdpms"
+ fi
+ if test "$DPMS_LDFLAGS" = ""; then
+ DPMSLIB="$DPMS_LIB "'$(LIB_X11)'
+ else
+ DPMSLIB="$DPMS_LDFLAGS $DPMS_LIB "'$(LIB_X11)'
+ fi
+ if test "$DPMS_INCLUDE" = ""; then
+ DPMSINC=""
+ else
+ DPMSINC="-I$DPMS_INCLUDE"
+ fi
+ AC_MSG_RESULT(yes)
+ $1
+ fi
+ fi
+ ac_save_cflags="$CFLAGS"
+ CFLAGS="$CFLAGS $X_INCLUDES"
+ test -n "$DPMS_INCLUDE" && CFLAGS="-I$DPMS_INCLUDE $CFLAGS"
+ AH_TEMPLATE(HAVE_DPMSCAPABLE_PROTO,
+ [Define if you have the DPMSCapable prototype in <X11/extensions/dpms.h>])
+ AC_CHECK_DECL(DPMSCapable,
+ AC_DEFINE(HAVE_DPMSCAPABLE_PROTO),,
+ [#include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>])
+ AH_TEMPLATE(HAVE_DPMSINFO_PROTO,
+ [Define if you have the DPMSInfo prototype in <X11/extensions/dpms.h>])
+ AC_CHECK_DECL(DPMSInfo,
+ AC_DEFINE(HAVE_DPMSINFO_PROTO),,
+ [#include <X11/Xlib.h>
+ #include <X11/extensions/dpms.h>])
+ CFLAGS="$ac_save_cflags"
+ AC_SUBST(DPMSINC)
+ AC_SUBST(DPMSLIB)
+])
+
+AC_DEFUN([AC_HAVE_GL],
+ [AC_REQUIRE_CPP()dnl
+ AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+
+ test -z "$GL_LDFLAGS" && GL_LDFLAGS=
+ test -z "$GL_INCLUDE" && GL_INCLUDE=
+
+ AC_ARG_WITH(gl,AC_HELP_STRING([--without-gl],[disable 3D GL modes]),
+ gl_test=$withval, gl_test="yes")
+ if test "x$kde_use_qt_emb" = "xyes"; then
+ # GL and Qt Embedded is a no-go for now.
+ ac_cv_have_gl=no
+ elif test "x$gl_test" = xno; then
+ ac_cv_have_gl=no
+ else
+ AC_MSG_CHECKING(for GL)
+ AC_CACHE_VAL(ac_cv_have_gl,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_ldflags=$LDFLAGS
+ ac_save_cxxflags=$CXXFLAGS
+ ac_save_libs=$LIBS
+ LDFLAGS="$LDFLAGS $GL_LDFLAGS $X_LDFLAGS $all_libraries"
+ LIBS="$LIBS -lGL -lGLU"
+ test "x$kde_use_qt_mac" != xyes && test "x$kde_use_qt_emb" != xyes && LIBS="$LIBS -lX11"
+ LIBS="$LIBS $LIB_XEXT -lm $LIBSOCKET"
+ CXXFLAGS="$CFLAGS $X_INCLUDES"
+ test -n "$GL_INCLUDE" && CFLAGS="-I$GL_INCLUDE $CFLAGS"
+ AC_TRY_LINK([#include <GL/gl.h>
+#include <GL/glu.h>
+], [],
+ ac_cv_have_gl="yes", ac_cv_have_gl="no")
+ AC_LANG_RESTORE
+ LDFLAGS=$ac_save_ldflags
+ CXXFLAGS=$ac_save_cxxflags
+ LIBS=$ac_save_libs
+ ])dnl
+
+ if test "$ac_cv_have_gl" = "no"; then
+ AC_MSG_RESULT(no)
+ GL_LDFLAGS=""
+ GLINC=""
+ $2
+ else
+ AC_DEFINE(HAVE_GL, 1, [Defines if you have GL (Mesa, OpenGL, ...)])
+ if test "$GL_LDFLAGS" = ""; then
+ GLLIB='-lGLU -lGL $(LIB_X11)'
+ else
+ GLLIB="$GL_LDFLAGS -lGLU -lGL "'$(LIB_X11)'
+ fi
+ if test "$GL_INCLUDE" = ""; then
+ GLINC=""
+ else
+ GLINC="-I$GL_INCLUDE"
+ fi
+ AC_MSG_RESULT($ac_cv_have_gl)
+ $1
+ fi
+ fi
+ AC_SUBST(GLINC)
+ AC_SUBST(GLLIB)
+])
+
+
+ dnl shadow password and PAM magic - maintained by ossi@kde.org
+
+AC_DEFUN([KDE_PAM], [
+ AC_REQUIRE([KDE_CHECK_LIBDL])
+
+ want_pam=
+ AC_ARG_WITH(pam,
+ AC_HELP_STRING([--with-pam[=ARG]],[enable support for PAM: ARG=[yes|no|service name]]),
+ [ if test "x$withval" = "xyes"; then
+ want_pam=yes
+ pam_service=kde
+ elif test "x$withval" = "xno"; then
+ want_pam=no
+ else
+ want_pam=yes
+ pam_service=$withval
+ fi
+ ], [ pam_service=kde ])
+
+ use_pam=
+ PAMLIBS=
+ if test "x$want_pam" != xno; then
+ AC_CHECK_LIB(pam, pam_start, [
+ AC_CHECK_HEADER(security/pam_appl.h,
+ [ pam_header=security/pam_appl.h ],
+ [ AC_CHECK_HEADER(pam/pam_appl.h,
+ [ pam_header=pam/pam_appl.h ],
+ [
+ AC_MSG_WARN([PAM detected, but no headers found!
+Make sure you have the necessary development packages installed.])
+ ]
+ )
+ ]
+ )
+ ], , $LIBDL)
+ if test -z "$pam_header"; then
+ if test "x$want_pam" = xyes; then
+ AC_MSG_ERROR([--with-pam was specified, but cannot compile with PAM!])
+ fi
+ else
+ AC_DEFINE(HAVE_PAM, 1, [Defines if you have PAM (Pluggable Authentication Modules)])
+ PAMLIBS="$PAM_MISC_LIB -lpam $LIBDL"
+ use_pam=yes
+
+ dnl darwin claims to be something special
+ if test "$pam_header" = "pam/pam_appl.h"; then
+ AC_DEFINE(HAVE_PAM_PAM_APPL_H, 1, [Define if your PAM headers are in pam/ instead of security/])
+ fi
+
+ dnl test whether struct pam_message is const (Linux) or not (Sun)
+ AC_MSG_CHECKING(for const pam_message)
+ AC_EGREP_HEADER([struct pam_message], $pam_header,
+ [ AC_EGREP_HEADER([const struct pam_message], $pam_header,
+ [AC_MSG_RESULT([const: Linux-type PAM])],
+ [AC_MSG_RESULT([nonconst: Sun-type PAM])
+ AC_DEFINE(PAM_MESSAGE_NONCONST, 1, [Define if your PAM support takes non-const arguments (Solaris)])]
+ )],
+ [AC_MSG_RESULT([not found - assume const, Linux-type PAM])])
+ fi
+ fi
+
+ AC_SUBST(PAMLIBS)
+])
+
+dnl DEF_PAM_SERVICE(arg name, full name, define name)
+AC_DEFUN([DEF_PAM_SERVICE], [
+ AC_ARG_WITH($1-pam,
+ AC_HELP_STRING([--with-$1-pam=[val]],[override PAM service from --with-pam for $2]),
+ [ if test "x$use_pam" = xyes; then
+ $3_PAM_SERVICE=$withval
+ else
+ AC_MSG_ERROR([Cannot use use --with-$1-pam, as no PAM was detected.
+You may want to enforce it by using --with-pam.])
+ fi
+ ],
+ [ if test "x$use_pam" = xyes; then
+ $3_PAM_SERVICE="$pam_service"
+ fi
+ ])
+ if test -n "$$3_PAM_SERVICE"; then
+ AC_MSG_RESULT([The PAM service used by $2 will be $$3_PAM_SERVICE])
+ AC_DEFINE_UNQUOTED($3_PAM_SERVICE, "$$3_PAM_SERVICE", [The PAM service to be used by $2])
+ fi
+ AC_SUBST($3_PAM_SERVICE)
+])
+
+AC_DEFUN([KDE_SHADOWPASSWD], [
+ AC_REQUIRE([KDE_PAM])
+
+ AC_CHECK_LIB(shadow, getspent,
+ [ LIBSHADOW="-lshadow"
+ ac_use_shadow=yes
+ ],
+ [ dnl for UnixWare
+ AC_CHECK_LIB(gen, getspent,
+ [ LIBGEN="-lgen"
+ ac_use_shadow=yes
+ ],
+ [ AC_CHECK_FUNC(getspent,
+ [ ac_use_shadow=yes ],
+ [ ac_use_shadow=no ])
+ ])
+ ])
+ AC_SUBST(LIBSHADOW)
+ AC_SUBST(LIBGEN)
+
+ AC_MSG_CHECKING([for shadow passwords])
+
+ AC_ARG_WITH(shadow,
+ AC_HELP_STRING([--with-shadow],[If you want shadow password support]),
+ [ if test "x$withval" != "xno"; then
+ use_shadow=yes
+ else
+ use_shadow=no
+ fi
+ ], [
+ use_shadow="$ac_use_shadow"
+ ])
+
+ if test "x$use_shadow" = xyes; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SHADOW, 1, [Define if you use shadow passwords])
+ else
+ AC_MSG_RESULT(no)
+ LIBSHADOW=
+ LIBGEN=
+ fi
+
+ dnl finally make the relevant binaries setuid root, if we have shadow passwds.
+ dnl this still applies, if we could use it indirectly through pam.
+ if test "x$use_shadow" = xyes ||
+ ( test "x$use_pam" = xyes && test "x$ac_use_shadow" = xyes ); then
+ case $host in
+ *-*-freebsd* | *-*-netbsd* | *-*-openbsd*)
+ SETUIDFLAGS="-m 4755 -o root";;
+ *)
+ SETUIDFLAGS="-m 4755";;
+ esac
+ fi
+ AC_SUBST(SETUIDFLAGS)
+
+])
+
+AC_DEFUN([KDE_PASSWDLIBS], [
+ AC_REQUIRE([KDE_MISC_TESTS]) dnl for LIBCRYPT
+ AC_REQUIRE([KDE_PAM])
+ AC_REQUIRE([KDE_SHADOWPASSWD])
+
+ if test "x$use_pam" = "xyes"; then
+ PASSWDLIBS="$PAMLIBS"
+ else
+ PASSWDLIBS="$LIBCRYPT $LIBSHADOW $LIBGEN"
+ fi
+
+ dnl FreeBSD uses a shadow-like setup, where /etc/passwd holds the users, but
+ dnl /etc/master.passwd holds the actual passwords. /etc/master.passwd requires
+ dnl root to read, so kcheckpass needs to be root (even when using pam, since pam
+ dnl may need to read /etc/master.passwd).
+ case $host in
+ *-*-freebsd*)
+ SETUIDFLAGS="-m 4755 -o root"
+ ;;
+ *)
+ ;;
+ esac
+
+ AC_SUBST(PASSWDLIBS)
+])
+
+AC_DEFUN([KDE_CHECK_LIBDL],
+[
+AC_CHECK_LIB(dl, dlopen, [
+LIBDL="-ldl"
+ac_cv_have_dlfcn=yes
+])
+
+AC_CHECK_LIB(dld, shl_unload, [
+LIBDL="-ldld"
+ac_cv_have_shload=yes
+])
+
+AC_SUBST(LIBDL)
+])
+
+AC_DEFUN([KDE_CHECK_DLOPEN],
+[
+KDE_CHECK_LIBDL
+AC_CHECK_HEADERS(dlfcn.h dl.h)
+if test "$ac_cv_header_dlfcn_h" = "no"; then
+ ac_cv_have_dlfcn=no
+fi
+
+if test "$ac_cv_header_dl_h" = "no"; then
+ ac_cv_have_shload=no
+fi
+
+dnl XXX why change enable_dlopen? its already set by autoconf's AC_ARG_ENABLE
+dnl (MM)
+AC_ARG_ENABLE(dlopen,
+AC_HELP_STRING([--disable-dlopen],[link statically [default=no]]),
+enable_dlopen=$enableval,
+enable_dlopen=yes)
+
+# override the user's opinion, if we know it better ;)
+if test "$ac_cv_have_dlfcn" = "no" && test "$ac_cv_have_shload" = "no"; then
+ enable_dlopen=no
+fi
+
+if test "$ac_cv_have_dlfcn" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_DLFCN, 1, [Define if you have dlfcn])
+fi
+
+if test "$ac_cv_have_shload" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_SHLOAD, 1, [Define if you have shload])
+fi
+
+if test "$enable_dlopen" = no ; then
+ test -n "$1" && eval $1
+else
+ test -n "$2" && eval $2
+fi
+
+])
+
+AC_DEFUN([KDE_CHECK_DYNAMIC_LOADING],
+[
+KDE_CHECK_DLOPEN(libtool_enable_shared=yes, libtool_enable_static=no)
+KDE_PROG_LIBTOOL
+AC_MSG_CHECKING([dynamic loading])
+eval "`egrep '^build_libtool_libs=' libtool`"
+if test "$build_libtool_libs" = "yes" && test "$enable_dlopen" = "yes"; then
+ dynamic_loading=yes
+ AC_DEFINE_UNQUOTED(HAVE_DYNAMIC_LOADING)
+else
+ dynamic_loading=no
+fi
+AC_MSG_RESULT($dynamic_loading)
+if test "$dynamic_loading" = "yes"; then
+ $1
+else
+ $2
+fi
+])
+
+AC_DEFUN([KDE_ADD_INCLUDES],
+[
+if test -z "$1"; then
+ test_include="Pix.h"
+else
+ test_include="$1"
+fi
+
+AC_MSG_CHECKING([for libg++ ($test_include)])
+
+AC_CACHE_VAL(kde_cv_libgpp_includes,
+[
+kde_cv_libgpp_includes=no
+
+ for ac_dir in \
+ \
+ /usr/include/g++ \
+ /usr/include \
+ /usr/unsupported/include \
+ /opt/include \
+ $extra_include \
+ ; \
+ do
+ if test -r "$ac_dir/$test_include"; then
+ kde_cv_libgpp_includes=$ac_dir
+ break
+ fi
+ done
+])
+
+AC_MSG_RESULT($kde_cv_libgpp_includes)
+if test "$kde_cv_libgpp_includes" != "no"; then
+ all_includes="-I$kde_cv_libgpp_includes $all_includes $USER_INCLUDES"
+fi
+])
+])
+
+AC_DEFUN([KDE_CHECK_LIBPTHREAD],
+[
+ dnl This code is here specifically to handle the
+ dnl various flavors of threading library on FreeBSD
+ dnl 4-, 5-, and 6-, and the (weird) rules around it.
+ dnl There may be an environment PTHREAD_LIBS that
+ dnl specifies what to use; otherwise, search for it.
+ dnl -pthread is special cased and unsets LIBPTHREAD
+ dnl below if found.
+ LIBPTHREAD=""
+
+ if test -n "$PTHREAD_LIBS"; then
+ if test "x$PTHREAD_LIBS" = "x-pthread" ; then
+ LIBPTHREAD="PTHREAD"
+ else
+ PTHREAD_LIBS_save="$PTHREAD_LIBS"
+ PTHREAD_LIBS=`echo "$PTHREAD_LIBS_save" | sed -e 's,^-l,,g'`
+ AC_MSG_CHECKING([for pthread_create in $PTHREAD_LIBS])
+ KDE_CHECK_LIB($PTHREAD_LIBS, pthread_create, [
+ LIBPTHREAD="$PTHREAD_LIBS_save"])
+ PTHREAD_LIBS="$PTHREAD_LIBS_save"
+ fi
+ fi
+
+ dnl Is this test really needed, in the face of the Tru64 test below?
+ if test -z "$LIBPTHREAD"; then
+ AC_CHECK_LIB(pthread, pthread_create, [LIBPTHREAD="-lpthread"])
+ fi
+
+ dnl This is a special Tru64 check, see BR 76171 issue #18.
+ if test -z "$LIBPTHREAD" ; then
+ AC_MSG_CHECKING([for pthread_create in -lpthread])
+ kde_safe_libs=$LIBS
+ LIBS="$LIBS -lpthread"
+ AC_TRY_LINK([#include <pthread.h>],[(void)pthread_create(0,0,0,0);],[
+ AC_MSG_RESULT(yes)
+ LIBPTHREAD="-lpthread"],[
+ AC_MSG_RESULT(no)])
+ LIBS=$kde_safe_libs
+ fi
+
+ dnl Un-special-case for FreeBSD.
+ if test "x$LIBPTHREAD" = "xPTHREAD" ; then
+ LIBPTHREAD=""
+ fi
+
+ AC_SUBST(LIBPTHREAD)
+])
+
+AC_DEFUN([KDE_CHECK_PTHREAD_OPTION],
+[
+ USE_THREADS=""
+ if test -z "$LIBPTHREAD"; then
+ KDE_CHECK_COMPILER_FLAG(pthread, [USE_THREADS="-D_THREAD_SAFE -pthread"])
+ fi
+
+ AH_VERBATIM(__svr_define, [
+#if defined(__SVR4) && !defined(__svr4__)
+#define __svr4__ 1
+#endif
+])
+ case $host_os in
+ solaris*)
+ KDE_CHECK_COMPILER_FLAG(mt, [USE_THREADS="-mt"])
+ CPPFLAGS="$CPPFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS -DUSE_SOLARIS -DSVR4"
+ ;;
+ freebsd*)
+ CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE $PTHREAD_CFLAGS"
+ ;;
+ aix*)
+ CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE"
+ LIBPTHREAD="$LIBPTHREAD -lc_r"
+ ;;
+ linux*) CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+ if test "$CXX" = "KCC"; then
+ CXXFLAGS="$CXXFLAGS --thread_safe"
+ NOOPT_CXXFLAGS="$NOOPT_CXXFLAGS --thread_safe"
+ fi
+ ;;
+ *)
+ ;;
+ esac
+ AC_SUBST(USE_THREADS)
+ AC_SUBST(LIBPTHREAD)
+])
+
+AC_DEFUN([KDE_CHECK_THREADING],
+[
+ AC_REQUIRE([KDE_CHECK_LIBPTHREAD])
+ AC_REQUIRE([KDE_CHECK_PTHREAD_OPTION])
+ dnl default is yes if libpthread is found and no if no libpthread is available
+ if test -z "$LIBPTHREAD"; then
+ if test -z "$USE_THREADS"; then
+ kde_check_threading_default=no
+ else
+ kde_check_threading_default=yes
+ fi
+ else
+ kde_check_threading_default=yes
+ fi
+ AC_ARG_ENABLE(threading,AC_HELP_STRING([--disable-threading],[disables threading even if libpthread found]),
+ kde_use_threading=$enableval, kde_use_threading=$kde_check_threading_default)
+ if test "x$kde_use_threading" = "xyes"; then
+ AC_DEFINE(HAVE_LIBPTHREAD, 1, [Define if you have a working libpthread (will enable threaded code)])
+ fi
+])
+
+AC_DEFUN([KDE_TRY_LINK_PYTHON],
+[
+if test "$kde_python_link_found" = no; then
+
+if test "$1" = normal; then
+ AC_MSG_CHECKING(if a Python application links)
+else
+ AC_MSG_CHECKING(if Python depends on $2)
+fi
+
+AC_CACHE_VAL(kde_cv_try_link_python_$1,
+[
+kde_save_cflags="$CFLAGS"
+CFLAGS="$CFLAGS $PYTHONINC"
+kde_save_libs="$LIBS"
+LIBS="$LIBS $LIBPYTHON $2 $LIBDL $LIBSOCKET"
+kde_save_ldflags="$LDFLAGS"
+LDFLAGS="$LDFLAGS $PYTHONLIB"
+
+AC_TRY_LINK(
+[
+#include <Python.h>
+],[
+ PySys_SetArgv(1, 0);
+],
+ [kde_cv_try_link_python_$1=yes],
+ [kde_cv_try_link_python_$1=no]
+)
+CFLAGS="$kde_save_cflags"
+LIBS="$kde_save_libs"
+LDFLAGS="$kde_save_ldflags"
+])
+
+if test "$kde_cv_try_link_python_$1" = "yes"; then
+ AC_MSG_RESULT(yes)
+ kde_python_link_found=yes
+ if test ! "$1" = normal; then
+ LIBPYTHON="$LIBPYTHON $2"
+ fi
+ $3
+else
+ AC_MSG_RESULT(no)
+ $4
+fi
+
+fi
+
+])
+
+AC_DEFUN([KDE_CHECK_PYTHON_DIR],
+[
+AC_MSG_CHECKING([for Python directory])
+
+AC_CACHE_VAL(kde_cv_pythondir,
+[
+ if test -z "$PYTHONDIR"; then
+ kde_cv_pythondir=/usr/local
+ else
+ kde_cv_pythondir="$PYTHONDIR"
+ fi
+])
+
+AC_ARG_WITH(pythondir,
+AC_HELP_STRING([--with-pythondir=pythondir],[use python installed in pythondir]),
+[
+ ac_python_dir=$withval
+], ac_python_dir=$kde_cv_pythondir
+)
+
+AC_MSG_RESULT($ac_python_dir)
+])
+
+AC_DEFUN([KDE_CHECK_PYTHON_INTERN],
+[
+AC_REQUIRE([KDE_CHECK_LIBDL])
+AC_REQUIRE([KDE_CHECK_LIBPTHREAD])
+AC_REQUIRE([KDE_CHECK_PYTHON_DIR])
+
+if test -z "$1"; then
+ version="1.5"
+else
+ version="$1"
+fi
+
+AC_MSG_CHECKING([for Python$version])
+
+python_incdirs="$ac_python_dir/include /usr/include /usr/local/include/ $kde_extra_includes"
+AC_FIND_FILE(Python.h, $python_incdirs, python_incdir)
+if test ! -r $python_incdir/Python.h; then
+ AC_FIND_FILE(python$version/Python.h, $python_incdirs, python_incdir)
+ python_incdir=$python_incdir/python$version
+ if test ! -r $python_incdir/Python.h; then
+ python_incdir=no
+ fi
+fi
+
+PYTHONINC=-I$python_incdir
+
+python_libdirs="$ac_python_dir/lib$kdelibsuff /usr/lib$kdelibsuff /usr/local /usr/lib$kdelibsuff $kde_extra_libs"
+AC_FIND_FILE(libpython$version.so, $python_libdirs, python_libdir)
+if test ! -r $python_libdir/libpython$version.so; then
+ AC_FIND_FILE(libpython$version.a, $python_libdirs, python_libdir)
+ if test ! -r $python_libdir/libpython$version.a; then
+ AC_FIND_FILE(python$version/config/libpython$version.a, $python_libdirs, python_libdir)
+ python_libdir=$python_libdir/python$version/config
+ if test ! -r $python_libdir/libpython$version.a; then
+ python_libdir=no
+ fi
+ fi
+fi
+
+PYTHONLIB=-L$python_libdir
+kde_orig_LIBPYTHON=$LIBPYTHON
+if test -z "$LIBPYTHON"; then
+ LIBPYTHON=-lpython$version
+fi
+
+AC_FIND_FILE(python$version/copy.py, $python_libdirs, python_moddir)
+python_moddir=$python_moddir/python$version
+if test ! -r $python_moddir/copy.py; then
+ python_moddir=no
+fi
+
+PYTHONMODDIR=$python_moddir
+
+AC_MSG_RESULT(header $python_incdir library $python_libdir modules $python_moddir)
+
+if test x$python_incdir = xno || test x$python_libdir = xno || test x$python_moddir = xno; then
+ LIBPYTHON=$kde_orig_LIBPYTHON
+ test "x$PYTHONLIB" = "x-Lno" && PYTHONLIB=""
+ test "x$PYTHONINC" = "x-Ino" && PYTHONINC=""
+ $2
+else
+ dnl Note: this test is very weak
+ kde_python_link_found=no
+ KDE_TRY_LINK_PYTHON(normal)
+ KDE_TRY_LINK_PYTHON(m, -lm)
+ KDE_TRY_LINK_PYTHON(pthread, $LIBPTHREAD)
+ KDE_TRY_LINK_PYTHON(tcl, -ltcl)
+ KDE_TRY_LINK_PYTHON(db2, -ldb2)
+ KDE_TRY_LINK_PYTHON(m_and_thread, [$LIBPTHREAD -lm])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_util, [$LIBPTHREAD -lm -lutil])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_db3, [$LIBPTHREAD -lm -ldb-3 -lutil])
+ KDE_TRY_LINK_PYTHON(pthread_and_db3, [$LIBPTHREAD -ldb-3])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_db, [$LIBPTHREAD -lm -ldb -ltermcap -lutil])
+ KDE_TRY_LINK_PYTHON(pthread_and_dl, [$LIBPTHREAD $LIBDL -lutil -lreadline -lncurses -lm])
+ KDE_TRY_LINK_PYTHON(pthread_and_panel_curses, [$LIBPTHREAD $LIBDL -lm -lpanel -lcurses])
+ KDE_TRY_LINK_PYTHON(m_and_thread_and_db_special, [$LIBPTHREAD -lm -ldb -lutil], [],
+ [AC_MSG_WARN([it seems, Python depends on another library.
+ Please set LIBPYTHON to '-lpython$version -lotherlib' before calling configure to fix this
+ and contact the authors to let them know about this problem])
+ ])
+
+ LIBPYTHON="$LIBPYTHON $LIBDL $LIBSOCKET"
+ AC_SUBST(PYTHONINC)
+ AC_SUBST(PYTHONLIB)
+ AC_SUBST(LIBPYTHON)
+ AC_SUBST(PYTHONMODDIR)
+ AC_DEFINE(HAVE_PYTHON, 1, [Define if you have the development files for python])
+fi
+
+])
+
+
+AC_DEFUN([KDE_CHECK_PYTHON],
+[
+ KDE_CHECK_PYTHON_INTERN("2.5",
+ [KDE_CHECK_PYTHON_INTERN("2.4",
+ [KDE_CHECK_PYTHON_INTERN("2.3",
+ [KDE_CHECK_PYTHON_INTERN("2.2",
+ [KDE_CHECK_PYTHON_INTERN("2.1",
+ [KDE_CHECK_PYTHON_INTERN("2.0",
+ [KDE_CHECK_PYTHON_INTERN($1, $2) ])
+ ])
+ ])
+ ])
+ ])
+ ])
+])
+
+AC_DEFUN([KDE_CHECK_STL],
+[
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="`echo $CXXFLAGS | sed s/-fno-exceptions//`"
+
+ AC_MSG_CHECKING([if C++ programs can be compiled])
+ AC_CACHE_VAL(kde_cv_stl_works,
+ [
+ AC_TRY_COMPILE([
+#include <string>
+using namespace std;
+],[
+ string astring="Hallo Welt.";
+ astring.erase(0, 6); // now astring is "Welt"
+ return 0;
+], kde_cv_stl_works=yes,
+ kde_cv_stl_works=no)
+])
+
+ AC_MSG_RESULT($kde_cv_stl_works)
+
+ if test "$kde_cv_stl_works" = "yes"; then
+ # back compatible
+ AC_DEFINE_UNQUOTED(HAVE_SGI_STL, 1, [Define if you have a STL implementation by SGI])
+ else
+ AC_MSG_ERROR([Your Installation isn't able to compile simple C++ programs.
+Check config.log for details - if you're using a Linux distribution you might miss
+a package named similar to libstdc++-dev.])
+ fi
+
+ CXXFLAGS="$ac_save_CXXFLAGS"
+ AC_LANG_RESTORE
+])
+
+AC_DEFUN([AC_FIND_QIMGIO],
+ [AC_REQUIRE([AC_FIND_JPEG])
+AC_REQUIRE([KDE_CHECK_EXTRA_LIBS])
+AC_MSG_CHECKING([for qimgio])
+AC_CACHE_VAL(ac_cv_lib_qimgio,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+ac_save_LIBS="$LIBS"
+ac_save_CXXFLAGS="$CXXFLAGS"
+LIBS="$all_libraries -lqimgio -lpng -lz $LIBJPEG $LIBQT"
+CXXFLAGS="$CXXFLAGS -I$qt_incdir $all_includes"
+AC_TRY_RUN(dnl
+[
+#include <qimageio.h>
+#include <qstring.h>
+int main() {
+ QString t = "hallo";
+ t.fill('t');
+ qInitImageIO();
+}
+],
+ ac_cv_lib_qimgio=yes,
+ ac_cv_lib_qimgio=no,
+ ac_cv_lib_qimgio=no)
+LIBS="$ac_save_LIBS"
+CXXFLAGS="$ac_save_CXXFLAGS"
+AC_LANG_RESTORE
+])dnl
+if eval "test \"`echo $ac_cv_lib_qimgio`\" = yes"; then
+ LIBQIMGIO="-lqimgio -lpng -lz $LIBJPEG"
+ AC_MSG_RESULT(yes)
+ AC_DEFINE_UNQUOTED(HAVE_QIMGIO, 1, [Define if you have the Qt extension qimgio available])
+ AC_SUBST(LIBQIMGIO)
+else
+ AC_MSG_RESULT(not found)
+fi
+])
+
+AC_DEFUN([AM_DISABLE_LIBRARIES],
+[
+ AC_PROVIDE([AM_ENABLE_STATIC])
+ AC_PROVIDE([AM_ENABLE_SHARED])
+ enable_static=no
+ enable_shared=yes
+])
+
+
+AC_DEFUN([AC_CHECK_UTMP_FILE],
+[
+ AC_MSG_CHECKING([for utmp file])
+
+ AC_CACHE_VAL(kde_cv_utmp_file,
+ [
+ kde_cv_utmp_file=no
+
+ for ac_file in \
+ \
+ /var/run/utmp \
+ /var/adm/utmp \
+ /etc/utmp \
+ ; \
+ do
+ if test -r "$ac_file"; then
+ kde_cv_utmp_file=$ac_file
+ break
+ fi
+ done
+ ])
+
+ if test "$kde_cv_utmp_file" != "no"; then
+ AC_DEFINE_UNQUOTED(UTMP, "$kde_cv_utmp_file", [Define the file for utmp entries])
+ $1
+ AC_MSG_RESULT($kde_cv_utmp_file)
+ else
+ $2
+ AC_MSG_RESULT([non found])
+ fi
+])
+
+
+AC_DEFUN([KDE_CREATE_SUBDIRSLIST],
+[
+
+DO_NOT_COMPILE="$DO_NOT_COMPILE CVS debian bsd-port admin"
+TOPSUBDIRS=""
+
+if test ! -s $srcdir/subdirs; then
+ dnl Note: Makefile.common creates subdirs, so this is just a fallback
+ files=`cd $srcdir && ls -1`
+ dirs=`for i in $files; do if test -d $i; then echo $i; fi; done`
+ for i in $dirs; do
+ echo $i >> $srcdir/subdirs
+ done
+fi
+
+ac_topsubdirs=
+if test -s $srcdir/inst-apps; then
+ ac_topsubdirs="`cat $srcdir/inst-apps`"
+elif test -s $srcdir/subdirs; then
+ ac_topsubdirs="`cat $srcdir/subdirs`"
+fi
+
+for i in $ac_topsubdirs; do
+ AC_MSG_CHECKING([if $i should be compiled])
+ if test -d $srcdir/$i; then
+ install_it="yes"
+ for j in $DO_NOT_COMPILE; do
+ if test $i = $j; then
+ install_it="no"
+ fi
+ done
+ else
+ install_it="no"
+ fi
+ AC_MSG_RESULT($install_it)
+ vari=`echo $i | sed -e 's,[[-+.@]],_,g'`
+ if test $install_it = "yes"; then
+ TOPSUBDIRS="$TOPSUBDIRS $i"
+ eval "$vari""_SUBDIR_included=yes"
+ else
+ eval "$vari""_SUBDIR_included=no"
+ fi
+done
+
+AC_SUBST(TOPSUBDIRS)
+])
+
+AC_DEFUN([KDE_CHECK_NAMESPACES],
+[
+AC_MSG_CHECKING(whether C++ compiler supports namespaces)
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+AC_TRY_COMPILE([
+],
+[
+namespace Foo {
+ extern int i;
+ namespace Bar {
+ extern int i;
+ }
+}
+
+int Foo::i = 0;
+int Foo::Bar::i = 1;
+],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_NAMESPACES)
+], [
+AC_MSG_RESULT(no)
+])
+AC_LANG_RESTORE
+])
+
+dnl ------------------------------------------------------------------------
+dnl Check for S_ISSOCK macro. Doesn't exist on Unix SCO. faure@kde.org
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_CHECK_S_ISSOCK],
+[
+AC_MSG_CHECKING(for S_ISSOCK)
+AC_CACHE_VAL(ac_cv_have_s_issock,
+[
+AC_TRY_LINK(
+[
+#include <sys/stat.h>
+],
+[
+struct stat buff;
+int b = S_ISSOCK( buff.st_mode );
+],
+ac_cv_have_s_issock=yes,
+ac_cv_have_s_issock=no)
+])
+AC_MSG_RESULT($ac_cv_have_s_issock)
+if test "$ac_cv_have_s_issock" = "yes"; then
+ AC_DEFINE_UNQUOTED(HAVE_S_ISSOCK, 1, [Define if sys/stat.h declares S_ISSOCK.])
+fi
+
+AH_VERBATIM(_ISSOCK,
+[
+#ifndef HAVE_S_ISSOCK
+#define HAVE_S_ISSOCK
+#define S_ISSOCK(mode) (1==0)
+#endif
+])
+
+])
+
+dnl ------------------------------------------------------------------------
+dnl Check for MAXPATHLEN macro, defines KDEMAXPATHLEN. faure@kde.org
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([AC_CHECK_KDEMAXPATHLEN],
+[
+AC_MSG_CHECKING(for MAXPATHLEN)
+AC_CACHE_VAL(ac_cv_maxpathlen,
+[
+cat > conftest.$ac_ext <<EOF
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+#endif
+#include <stdio.h>
+#include <sys/param.h>
+#ifndef MAXPATHLEN
+#define MAXPATHLEN 1024
+#endif
+
+KDE_HELLO MAXPATHLEN
+
+EOF
+
+ac_try="$ac_cpp conftest.$ac_ext 2>/dev/null | grep '^KDE_HELLO' >conftest.out"
+
+if AC_TRY_EVAL(ac_try) && test -s conftest.out; then
+ ac_cv_maxpathlen=`sed 's#KDE_HELLO ##' conftest.out`
+else
+ ac_cv_maxpathlen=1024
+fi
+
+rm conftest.*
+
+])
+AC_MSG_RESULT($ac_cv_maxpathlen)
+AC_DEFINE_UNQUOTED(KDEMAXPATHLEN,$ac_cv_maxpathlen, [Define a safe value for MAXPATHLEN] )
+])
+
+AC_DEFUN([KDE_CHECK_HEADER],
+[
+ kde_safe_cppflags=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $all_includes"
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_CHECK_HEADER([$1], [$2], [$3], [$4])
+ AC_LANG_RESTORE
+ CPPFLAGS=$kde_safe_cppflags
+])
+
+AC_DEFUN([KDE_CHECK_HEADERS],
+[
+ AH_CHECK_HEADERS([$1])
+ AC_LANG_SAVE
+ kde_safe_cppflags=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $all_includes"
+ AC_LANG_CPLUSPLUS
+ AC_CHECK_HEADERS([$1], [$2], [$3], [$4])
+ CPPFLAGS=$kde_safe_cppflags
+ AC_LANG_RESTORE
+])
+
+AC_DEFUN([KDE_FAST_CONFIGURE],
+[
+ dnl makes configure fast (needs perl)
+ AC_ARG_ENABLE(fast-perl, AC_HELP_STRING([--disable-fast-perl],[disable fast Makefile generation (needs perl)]),
+ with_fast_perl=$enableval, with_fast_perl=yes)
+])
+
+AC_DEFUN([KDE_CONF_FILES],
+[
+ val=
+ if test -f $srcdir/configure.files ; then
+ val=`sed -e 's%^%\$(top_srcdir)/%' $srcdir/configure.files`
+ fi
+ CONF_FILES=
+ if test -n "$val" ; then
+ for i in $val ; do
+ CONF_FILES="$CONF_FILES $i"
+ done
+ fi
+ AC_SUBST(CONF_FILES)
+])dnl
+
+dnl This sets the prefix, for arts and kdelibs
+dnl Do NOT use in any other module.
+dnl It only looks at --prefix, KDEDIR and falls back to /usr/local/kde
+AC_DEFUN([KDE_SET_PREFIX_CORE],
+[
+ unset CDPATH
+ dnl make $KDEDIR the default for the installation
+ AC_PREFIX_DEFAULT(${KDEDIR:-/usr/local/kde})
+
+ if test "x$prefix" = "xNONE"; then
+ prefix=$ac_default_prefix
+ ac_configure_args="$ac_configure_args --prefix=$prefix"
+ fi
+ # And delete superfluous '/' to make compares easier
+ prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+ exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+
+ kde_libs_prefix='$(prefix)'
+ kde_libs_htmldir='$(kde_htmldir)'
+ AC_SUBST(kde_libs_prefix)
+ AC_SUBST(kde_libs_htmldir)
+ KDE_FAST_CONFIGURE
+ KDE_CONF_FILES
+])
+
+
+AC_DEFUN([KDE_SET_PREFIX],
+[
+ unset CDPATH
+ dnl We can't give real code to that macro, only a value.
+ dnl It only matters for --help, since we set the prefix in this function anyway.
+ AC_PREFIX_DEFAULT(${KDEDIR:-the kde prefix})
+
+ KDE_SET_DEFAULT_BINDIRS
+ if test "x$prefix" = "xNONE"; then
+ dnl no prefix given: look for kde-config in the PATH and deduce the prefix from it
+ KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend)
+ else
+ dnl prefix given: look for kde-config, preferrably in prefix, otherwise in PATH
+ kde_save_PATH="$PATH"
+ PATH="$exec_prefix/bin:$prefix/bin:$PATH"
+ KDE_FIND_PATH(kde-config, KDECONFIG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(kde-config)], [], prepend)
+ PATH="$kde_save_PATH"
+ fi
+
+ kde_libs_prefix=`$KDECONFIG --prefix`
+ if test -z "$kde_libs_prefix" || test ! -x "$kde_libs_prefix"; then
+ AC_MSG_ERROR([$KDECONFIG --prefix outputed the non existant prefix '$kde_libs_prefix' for kdelibs.
+ This means it has been moved since you installed it.
+ This won't work. Please recompile kdelibs for the new prefix.
+ ])
+ fi
+ kde_libs_htmldir=`$KDECONFIG --install html --expandvars`
+
+ AC_MSG_CHECKING([where to install])
+ if test "x$prefix" = "xNONE"; then
+ prefix=$kde_libs_prefix
+ AC_MSG_RESULT([$prefix (as returned by kde-config)])
+ else
+ dnl --prefix was given. Compare prefixes and warn (in configure.in.bot.end) if different
+ given_prefix=$prefix
+ AC_MSG_RESULT([$prefix (as requested)])
+ fi
+
+ # And delete superfluous '/' to make compares easier
+ prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+ exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+ given_prefix=`echo "$given_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'`
+
+ AC_SUBST(KDECONFIG)
+ AC_SUBST(kde_libs_prefix)
+ AC_SUBST(kde_libs_htmldir)
+
+ KDE_FAST_CONFIGURE
+ KDE_CONF_FILES
+])
+
+pushdef([AC_PROG_INSTALL],
+[
+ dnl our own version, testing for a -p flag
+ popdef([AC_PROG_INSTALL])
+ dnl as AC_PROG_INSTALL works as it works we first have
+ dnl to save if the user didn't specify INSTALL, as the
+ dnl autoconf one overwrites INSTALL and we have no chance to find
+ dnl out afterwards
+ test -n "$INSTALL" && kde_save_INSTALL_given=$INSTALL
+ test -n "$INSTALL_PROGRAM" && kde_save_INSTALL_PROGRAM_given=$INSTALL_PROGRAM
+ test -n "$INSTALL_SCRIPT" && kde_save_INSTALL_SCRIPT_given=$INSTALL_SCRIPT
+ AC_PROG_INSTALL
+
+ if test -z "$kde_save_INSTALL_given" ; then
+ # OK, user hasn't given any INSTALL, autoconf found one for us
+ # now we test, if it supports the -p flag
+ AC_MSG_CHECKING(for -p flag to install)
+ rm -f confinst.$$.* > /dev/null 2>&1
+ echo "Testtest" > confinst.$$.orig
+ ac_res=no
+ if ${INSTALL} -p confinst.$$.orig confinst.$$.new > /dev/null 2>&1 ; then
+ if test -f confinst.$$.new ; then
+ # OK, -p seems to do no harm to install
+ INSTALL="${INSTALL} -p"
+ ac_res=yes
+ fi
+ fi
+ rm -f confinst.$$.*
+ AC_MSG_RESULT($ac_res)
+ fi
+ dnl the following tries to resolve some signs and wonders coming up
+ dnl with different autoconf/automake versions
+ dnl e.g.:
+ dnl *automake 1.4 install-strip sets A_M_INSTALL_PROGRAM_FLAGS to -s
+ dnl and has INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(A_M_INSTALL_PROGRAM_FLAGS)
+ dnl it header-vars.am, so there the actual INSTALL_PROGRAM gets the -s
+ dnl *automake 1.4a (and above) use INSTALL_STRIP_FLAG and only has
+ dnl INSTALL_PROGRAM = @INSTALL_PROGRAM@ there, but changes the
+ dnl install-@DIR@PROGRAMS targets to explicitly use that flag
+ dnl *autoconf 2.13 is dumb, and thinks it can use INSTALL_PROGRAM as
+ dnl INSTALL_SCRIPT, which breaks with automake <= 1.4
+ dnl *autoconf >2.13 (since 10.Apr 1999) has not that failure
+ dnl *sometimes KDE does not use the install-@DIR@PROGRAM targets from
+ dnl automake (due to broken Makefile.am or whatever) to install programs,
+ dnl and so does not see the -s flag in automake > 1.4
+ dnl to clean up that mess we:
+ dnl +set INSTALL_PROGRAM to use INSTALL_STRIP_FLAG
+ dnl which cleans KDE's program with automake > 1.4;
+ dnl +set INSTALL_SCRIPT to only use INSTALL, to clean up autoconf's problems
+ dnl with automake<=1.4
+ dnl note that dues to this sometimes two '-s' flags are used (if KDE
+ dnl properly uses install-@DIR@PROGRAMS, but I don't care
+ dnl
+ dnl And to all this comes, that I even can't write in comments variable
+ dnl names used by automake, because it is so stupid to think I wanted to
+ dnl _use_ them, therefor I have written A_M_... instead of AM_
+ dnl hmm, I wanted to say something ... ahh yes: Arghhh.
+
+ if test -z "$kde_save_INSTALL_PROGRAM_given" ; then
+ INSTALL_PROGRAM='${INSTALL} $(INSTALL_STRIP_FLAG)'
+ fi
+ if test -z "$kde_save_INSTALL_SCRIPT_given" ; then
+ INSTALL_SCRIPT='${INSTALL}'
+ fi
+])dnl
+
+AC_DEFUN([KDE_LANG_CPLUSPLUS],
+[AC_LANG_CPLUSPLUS
+ac_link='rm -rf SunWS_cache; ${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&AC_FD_CC'
+pushdef([AC_LANG_CPLUSPLUS], [popdef([AC_LANG_CPLUSPLUS]) KDE_LANG_CPLUSPLUS])
+])
+
+pushdef([AC_LANG_CPLUSPLUS],
+[popdef([AC_LANG_CPLUSPLUS])
+KDE_LANG_CPLUSPLUS
+])
+
+AC_DEFUN([KDE_CHECK_LONG_LONG],
+[
+AC_MSG_CHECKING(for long long)
+AC_CACHE_VAL(kde_cv_c_long_long,
+[
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_LINK([], [
+ long long foo = 0;
+ foo = foo+1;
+ ],
+ kde_cv_c_long_long=yes, kde_cv_c_long_long=no)
+ AC_LANG_RESTORE
+])
+AC_MSG_RESULT($kde_cv_c_long_long)
+if test "$kde_cv_c_long_long" = yes; then
+ AC_DEFINE(HAVE_LONG_LONG, 1, [Define if you have long long as datatype])
+fi
+])
+
+AC_DEFUN([KDE_CHECK_LIB],
+[
+ kde_save_LDFLAGS="$LDFLAGS"
+ dnl AC_CHECK_LIB modifies LIBS, so save it here
+ kde_save_LIBS="$LIBS"
+ LDFLAGS="$LDFLAGS $all_libraries"
+ case $host_os in
+ aix*) LDFLAGS="-brtl $LDFLAGS"
+ test "$GCC" = yes && LDFLAGS="-Wl,$LDFLAGS"
+ ;;
+ esac
+ AC_CHECK_LIB($1, $2, $3, $4, $5)
+ LDFLAGS="$kde_save_LDFLAGS"
+ LIBS="$kde_save_LIBS"
+])
+
+AC_DEFUN([KDE_JAVA_PREFIX],
+[
+ dir=`dirname "$1"`
+ base=`basename "$1"`
+ list=`ls -1 $dir 2> /dev/null`
+ for entry in $list; do
+ if test -d $dir/$entry/bin; then
+ case $entry in
+ $base)
+ javadirs="$javadirs $dir/$entry/bin"
+ ;;
+ esac
+ elif test -d $dir/$entry/jre/bin; then
+ case $entry in
+ $base)
+ javadirs="$javadirs $dir/$entry/jre/bin"
+ ;;
+ esac
+ fi
+ done
+])
+
+dnl KDE_CHEC_JAVA_DIR(onlyjre)
+AC_DEFUN([KDE_CHECK_JAVA_DIR],
+[
+
+AC_ARG_WITH(java,
+AC_HELP_STRING([--with-java=javadir],[use java installed in javadir, --without-java disables]),
+[ ac_java_dir=$withval
+], ac_java_dir=""
+)
+
+AC_MSG_CHECKING([for Java])
+
+dnl at this point ac_java_dir is either a dir, 'no' to disable, or '' to say look in $PATH
+if test "x$ac_java_dir" = "xno"; then
+ kde_java_bindir=no
+ kde_java_includedir=no
+ kde_java_libjvmdir=no
+ kde_java_libgcjdir=no
+ kde_java_libhpidir=no
+else
+ if test "x$ac_java_dir" = "x"; then
+
+
+ dnl No option set -> collect list of candidate paths
+ if test -n "$JAVA_HOME"; then
+ KDE_JAVA_PREFIX($JAVA_HOME)
+ fi
+ KDE_JAVA_PREFIX(/usr/j2se)
+ KDE_JAVA_PREFIX(/usr/lib/j2se)
+ KDE_JAVA_PREFIX(/usr/j*dk*)
+ KDE_JAVA_PREFIX(/usr/lib/j*dk*)
+ KDE_JAVA_PREFIX(/opt/j*sdk*)
+ KDE_JAVA_PREFIX(/usr/lib/java*)
+ KDE_JAVA_PREFIX(/usr/java*)
+ KDE_JAVA_PREFIX(/usr/java/j*dk*)
+ KDE_JAVA_PREFIX(/usr/java/j*re*)
+ KDE_JAVA_PREFIX(/usr/lib/SunJava2*)
+ KDE_JAVA_PREFIX(/usr/lib/SunJava*)
+ KDE_JAVA_PREFIX(/usr/lib/IBMJava2*)
+ KDE_JAVA_PREFIX(/usr/lib/IBMJava*)
+ KDE_JAVA_PREFIX(/opt/java*)
+
+ kde_cv_path="NONE"
+ kde_save_IFS=$IFS
+ IFS=':'
+ for dir in $PATH; do
+ if test -d "$dir"; then
+ javadirs="$javadirs $dir"
+ fi
+ done
+ IFS=$kde_save_IFS
+ jredirs=
+
+ dnl Now javadirs contains a list of paths that exist, all ending with bin/
+ for dir in $javadirs; do
+ dnl Check for the java executable
+ if test -x "$dir/java"; then
+ dnl And also check for a libjvm.so somewhere under there
+ dnl Since we have to go to the parent dir, /usr/bin is excluded, /usr is too big.
+ if test "$dir" != "/usr/bin"; then
+ libjvmdir=`find $dir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1`
+ if test ! -f $libjvmdir/libjvm.so; then continue; fi
+ jredirs="$jredirs $dir"
+ fi
+ fi
+ done
+
+ dnl Now jredirs contains a reduced list, of paths where both java and ../**/libjvm.so was found
+ JAVAC=
+ JAVA=
+ kde_java_bindir=no
+ for dir in $jredirs; do
+ JAVA="$dir/java"
+ kde_java_bindir=$dir
+ if test -x "$dir/javac"; then
+ JAVAC="$dir/javac"
+ break
+ fi
+ done
+
+ if test -n "$JAVAC"; then
+ dnl this substitution might not work - well, we test for jni.h below
+ kde_java_includedir=`echo $JAVAC | sed -e 's,bin/javac$,include/,'`
+ else
+ kde_java_includedir=no
+ fi
+ else
+ dnl config option set
+ kde_java_bindir=$ac_java_dir/bin
+ if test -x $ac_java_dir/bin/java && test ! -x $ac_java_dir/bin/javac; then
+ kde_java_includedir=no
+ else
+ kde_java_includedir=$ac_java_dir/include
+ fi
+ fi
+fi
+
+dnl At this point kde_java_bindir and kde_java_includedir are either set or "no"
+if test "x$kde_java_bindir" != "xno"; then
+
+ dnl Look for libjvm.so
+ kde_java_libjvmdir=`find $kde_java_bindir/.. -name libjvm.so | sed 's,libjvm.so,,'|head -n 1`
+ dnl Look for libgcj.so
+ kde_java_libgcjdir=`find $kde_java_bindir/.. -name libgcj.so | sed 's,libgcj.so,,'|head -n 1`
+ dnl Look for libhpi.so and avoid green threads
+ kde_java_libhpidir=`find $kde_java_bindir/.. -name libhpi.so | grep -v green | sed 's,libhpi.so,,' | head -n 1`
+
+ dnl Now check everything's fine under there
+ dnl the include dir is our flag for having the JDK
+ if test -d "$kde_java_includedir"; then
+ if test ! -x "$kde_java_bindir/javac"; then
+ AC_MSG_ERROR([javac not found under $kde_java_bindir - it seems you passed a wrong --with-java.])
+ fi
+ if test ! -x "$kde_java_bindir/javah"; then
+ AC_MSG_ERROR([javah not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.])
+ fi
+ if test ! -x "$kde_java_bindir/jar"; then
+ AC_MSG_ERROR([jar not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.])
+ fi
+ if test ! -r "$kde_java_includedir/jni.h"; then
+ AC_MSG_ERROR([jni.h not found under $kde_java_includedir. Use --with-java or --without-java.])
+ fi
+
+ jni_includes="-I$kde_java_includedir"
+ dnl Strange thing, jni.h requires jni_md.h which is under genunix here..
+ dnl and under linux here..
+
+ dnl not needed for gcj
+
+ if test "x$kde_java_libgcjdir" = "x"; then
+ test -d "$kde_java_includedir/linux" && jni_includes="$jni_includes -I$kde_java_includedir/linux"
+ test -d "$kde_java_includedir/solaris" && jni_includes="$jni_includes -I$kde_java_includedir/solaris"
+ test -d "$kde_java_includedir/genunix" && jni_includes="$jni_includes -I$kde_java_includedir/genunix"
+ fi
+
+ else
+ JAVAC=
+ jni_includes=
+ fi
+
+ if test "x$kde_java_libgcjdir" = "x"; then
+ if test ! -r "$kde_java_libjvmdir/libjvm.so"; then
+ AC_MSG_ERROR([libjvm.so not found under $kde_java_libjvmdir. Use --without-java.])
+ fi
+ else
+ if test ! -r "$kde_java_libgcjdir/libgcj.so"; then
+ AC_MSG_ERROR([libgcj.so not found under $kde_java_libgcjdir. Use --without-java.])
+ fi
+ fi
+
+ if test ! -x "$kde_java_bindir/java"; then
+ AC_MSG_ERROR([java not found under $kde_java_bindir. javac was found though! Use --with-java or --without-java.])
+ fi
+
+ dnl not needed for gcj compile
+
+ if test "x$kde_java_libgcjdir" = "x"; then
+ if test ! -r "$kde_java_libhpidir/libhpi.so"; then
+ AC_MSG_ERROR([libhpi.so not found under $kde_java_libhpidir. Use --without-java.])
+ fi
+ fi
+
+ if test -n "$jni_includes"; then
+ dnl Check for JNI version
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ ac_cxxflags_safe="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS $all_includes $jni_includes"
+
+ AC_TRY_COMPILE([
+ #include <jni.h>
+ ],
+ [
+ #ifndef JNI_VERSION_1_2
+ Syntax Error
+ #endif
+ ],[ kde_jni_works=yes ],
+ [ kde_jni_works=no ])
+
+ if test $kde_jni_works = no; then
+ AC_MSG_ERROR([Incorrect version of $kde_java_includedir/jni.h.
+ You need to have Java Development Kit (JDK) version 1.2.
+
+ Use --with-java to specify another location.
+ Use --without-java to configure without java support.
+ Or download a newer JDK and try again.
+ See e.g. http://java.sun.com/products/jdk/1.2 ])
+ fi
+
+ CXXFLAGS="$ac_cxxflags_safe"
+ AC_LANG_RESTORE
+
+ dnl All tests ok, inform and subst the variables
+
+ JAVAC=$kde_java_bindir/javac
+ JAVAH=$kde_java_bindir/javah
+ JAR=$kde_java_bindir/jar
+ AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is])
+ if test "x$kde_java_libgcjdir" = "x"; then
+ JVMLIBS="-L$kde_java_libjvmdir -ljvm -L$kde_java_libhpidir -lhpi"
+ else
+ JVMLIBS="-L$kde_java_libgcjdir -lgcj"
+ fi
+ AC_MSG_RESULT([java JDK in $kde_java_bindir])
+
+ else
+ AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is])
+ AC_MSG_RESULT([java JRE in $kde_java_bindir])
+ fi
+elif test -d "/Library/Java/Home"; then
+ kde_java_bindir="/Library/Java/Home/bin"
+ jni_includes="-I/Library/Java/Home/include"
+
+ JAVAC=$kde_java_bindir/javac
+ JAVAH=$kde_java_bindir/javah
+ JAR=$kde_java_bindir/jar
+ JVMLIBS="-Wl,-framework,JavaVM"
+
+ AC_DEFINE_UNQUOTED(PATH_JAVA, "$kde_java_bindir/java", [Define where your java executable is])
+ AC_MSG_RESULT([Apple Java Framework])
+else
+ AC_MSG_RESULT([none found])
+fi
+
+AC_SUBST(JAVAC)
+AC_SUBST(JAVAH)
+AC_SUBST(JAR)
+AC_SUBST(JVMLIBS)
+AC_SUBST(jni_includes)
+
+# for backward compat
+kde_cv_java_includedir=$kde_java_includedir
+kde_cv_java_bindir=$kde_java_bindir
+])
+
+dnl this is a redefinition of autoconf 2.5x's AC_FOREACH.
+dnl When the argument list becomes big, as in KDE for AC_OUTPUT in
+dnl big packages, m4_foreach is dog-slow. So use our own version of
+dnl it. (matz@kde.org)
+m4_define([mm_foreach],
+[m4_pushdef([$1])_mm_foreach($@)m4_popdef([$1])])
+m4_define([mm_car], [[$1]])
+m4_define([mm_car2], [[$@]])
+m4_define([_mm_foreach],
+[m4_if(m4_quote($2), [], [],
+ [m4_define([$1], mm_car($2))$3[]_mm_foreach([$1],
+ mm_car2(m4_shift($2)),
+ [$3])])])
+m4_define([AC_FOREACH],
+[mm_foreach([$1], m4_split(m4_normalize([$2])), [$3])])
+
+AC_DEFUN([KDE_NEED_FLEX],
+[
+kde_libs_safe=$LIBS
+LIBS="$LIBS $USER_LDFLAGS"
+AM_PROG_LEX
+LIBS=$kde_libs_safe
+if test -z "$LEXLIB"; then
+ AC_MSG_ERROR([You need to have flex installed.])
+fi
+AC_SUBST(LEXLIB)
+])
+
+AC_DEFUN([AC_PATH_QTOPIA],
+[
+ dnl TODO: use AC_CACHE_VAL
+
+ if test -z "$1"; then
+ qtopia_minver_maj=1
+ qtopia_minver_min=5
+ qtopia_minver_pat=0
+ else
+ qtopia_minver_maj=`echo "$1" | sed -e "s/^\(.*\)\..*\..*$/\1/"`
+ qtopia_minver_min=`echo "$1" | sed -e "s/^.*\.\(.*\)\..*$/\1/"`
+ qtopia_minver_pat=`echo "$1" | sed -e "s/^.*\..*\.\(.*\)$/\1/"`
+ fi
+
+ qtopia_minver="$qtopia_minver_maj$qtopia_minver_min$qtopia_minver_pat"
+ qtopia_minverstr="$qtopia_minver_maj.$qtopia_minver_min.$qtopia_minver_pat"
+
+ AC_REQUIRE([AC_PATH_QT])
+
+ AC_MSG_CHECKING([for Qtopia])
+
+ LIB_QTOPIA="-lqpe"
+ AC_SUBST(LIB_QTOPIA)
+
+ kde_qtopia_dirs="$QPEDIR /opt/Qtopia"
+
+ ac_qtopia_incdir=NO
+
+ AC_ARG_WITH(qtopia-dir,
+ AC_HELP_STRING([--with-qtopia-dir=DIR],[where the root of Qtopia is installed]),
+ [ ac_qtopia_incdir="$withval"/include] )
+
+ qtopia_incdirs=""
+ for dir in $kde_qtopia_dirs; do
+ qtopia_incdirs="$qtopia_incdirs $dir/include"
+ done
+
+ if test ! "$ac_qtopia_incdir" = "NO"; then
+ qtopia_incdirs="$ac_qtopia_incdir $qtopia_incdirs"
+ fi
+
+ qtopia_incdir=""
+ AC_FIND_FILE(qpe/qpeapplication.h, $qtopia_incdirs, qtopia_incdir)
+ ac_qtopia_incdir="$qtopia_incdir"
+
+ if test -z "$qtopia_incdir"; then
+ AC_MSG_ERROR([Cannot find Qtopia headers. Please check your installation.])
+ fi
+
+ qtopia_ver_maj=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION "\(.*\)\..*\..*".*,\1,p'`;
+ qtopia_ver_min=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION ".*\.\(.*\)\..*".*,\1,p'`;
+ qtopia_ver_pat=`cat $qtopia_incdir/qpe/version.h | sed -n -e 's,.*QPE_VERSION ".*\..*\.\(.*\)".*,\1,p'`;
+
+ qtopia_ver="$qtopia_ver_maj$qtopia_ver_min$qtopia_ver_pat"
+ qtopia_verstr="$qtopia_ver_maj.$qtopia_ver_min.$qtopia_ver_pat"
+ if test "$qtopia_ver" -lt "$qtopia_minver"; then
+ AC_MSG_ERROR([found Qtopia version $qtopia_verstr but version $qtopia_minverstr
+is required.])
+ fi
+
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+
+ ac_cxxflags_safe="$CXXFLAGS"
+ ac_ldflags_safe="$LDFLAGS"
+ ac_libs_safe="$LIBS"
+
+ CXXFLAGS="$CXXFLAGS -I$qtopia_incdir $all_includes"
+ LDFLAGS="$LDFLAGS $QT_LDFLAGS $all_libraries $USER_LDFLAGS $KDE_MT_LDFLAGS"
+ LIBS="$LIBS $LIB_QTOPIA $LIBQT"
+
+ cat > conftest.$ac_ext <<EOF
+#include "confdefs.h"
+#include <qpe/qpeapplication.h>
+#include <qpe/version.h>
+
+int main( int argc, char **argv )
+{
+ QPEApplication app( argc, argv );
+ return 0;
+}
+EOF
+
+ if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ rm -f conftest*
+ else
+ rm -f conftest*
+ AC_MSG_ERROR([Cannot link small Qtopia Application. For more details look at
+the end of config.log])
+ fi
+
+ CXXFLAGS="$ac_cxxflags_safe"
+ LDFLAGS="$ac_ldflags_safe"
+ LIBS="$ac_libs_safe"
+
+ AC_LANG_RESTORE
+
+ QTOPIA_INCLUDES="-I$qtopia_incdir"
+ AC_SUBST(QTOPIA_INCLUDES)
+
+ AC_MSG_RESULT([found version $qtopia_verstr with headers at $qtopia_incdir])
+])
+
+
+AC_DEFUN([KDE_INIT_DOXYGEN],
+[
+AC_MSG_CHECKING([for Qt docs])
+kde_qtdir=
+if test "${with_qt_dir+set}" = set; then
+ kde_qtdir="$with_qt_dir"
+fi
+
+AC_FIND_FILE(qsql.html, [ $kde_qtdir/doc/html $QTDIR/doc/html /usr/share/doc/packages/qt3/html /usr/lib/qt/doc /usr/lib/qt3/doc /usr/lib/qt3/doc/html /usr/doc/qt3/html /usr/doc/qt3 /usr/share/doc/qt3-doc /usr/share/qt3/doc/html /usr/X11R6/share/doc/qt/html ], QTDOCDIR)
+AC_MSG_RESULT($QTDOCDIR)
+
+AC_SUBST(QTDOCDIR)
+
+KDE_FIND_PATH(dot, DOT, [], [])
+if test -n "$DOT"; then
+ KDE_HAVE_DOT="YES"
+else
+ KDE_HAVE_DOT="NO"
+fi
+AC_SUBST(KDE_HAVE_DOT)
+KDE_FIND_PATH(doxygen, DOXYGEN, [], [])
+AC_SUBST(DOXYGEN)
+
+DOXYGEN_PROJECT_NAME="$1"
+DOXYGEN_PROJECT_NUMBER="$2"
+AC_SUBST(DOXYGEN_PROJECT_NAME)
+AC_SUBST(DOXYGEN_PROJECT_NUMBER)
+
+KDE_HAS_DOXYGEN=no
+if test -n "$DOXYGEN" && test -x "$DOXYGEN" && test -f $QTDOCDIR/qsql.html; then
+ KDE_HAS_DOXYGEN=yes
+fi
+AC_SUBST(KDE_HAS_DOXYGEN)
+
+])
+
+
+AC_DEFUN([AC_FIND_BZIP2],
+[
+AC_MSG_CHECKING([for bzDecompress in libbz2])
+AC_CACHE_VAL(ac_cv_lib_bzip2,
+[
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+kde_save_LIBS="$LIBS"
+LIBS="$all_libraries $USER_LDFLAGS -lbz2 $LIBSOCKET"
+kde_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$CXXFLAGS $all_includes $USER_INCLUDES"
+AC_TRY_LINK(dnl
+[
+#define BZ_NO_STDIO
+#include<bzlib.h>
+],
+ [ bz_stream s; (void) bzDecompress(&s); ],
+ eval "ac_cv_lib_bzip2='-lbz2'",
+ eval "ac_cv_lib_bzip2=no")
+LIBS="$kde_save_LIBS"
+CXXFLAGS="$kde_save_CXXFLAGS"
+AC_LANG_RESTORE
+])dnl
+AC_MSG_RESULT($ac_cv_lib_bzip2)
+
+if test ! "$ac_cv_lib_bzip2" = no; then
+ BZIP2DIR=bzip2
+
+ LIBBZ2="$ac_cv_lib_bzip2"
+ AC_SUBST(LIBBZ2)
+
+else
+
+ cxx_shared_flag=
+ ld_shared_flag=
+ KDE_CHECK_COMPILER_FLAG(shared, [
+ ld_shared_flag="-shared"
+ ])
+ KDE_CHECK_COMPILER_FLAG(fPIC, [
+ cxx_shared_flag="-fPIC"
+ ])
+
+ AC_MSG_CHECKING([for BZ2_bzDecompress in (shared) libbz2])
+ AC_CACHE_VAL(ac_cv_lib_bzip2_prefix,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ kde_save_LIBS="$LIBS"
+ LIBS="$all_libraries $USER_LDFLAGS $ld_shared_flag -lbz2 $LIBSOCKET"
+ kde_save_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CFLAGS $cxx_shared_flag $all_includes $USER_INCLUDES"
+
+ AC_TRY_LINK(dnl
+ [
+ #define BZ_NO_STDIO
+ #include<bzlib.h>
+ ],
+ [ bz_stream s; (void) BZ2_bzDecompress(&s); ],
+ eval "ac_cv_lib_bzip2_prefix='-lbz2'",
+ eval "ac_cv_lib_bzip2_prefix=no")
+ LIBS="$kde_save_LIBS"
+ CXXFLAGS="$kde_save_CXXFLAGS"
+ AC_LANG_RESTORE
+ ])dnl
+
+ AC_MSG_RESULT($ac_cv_lib_bzip2_prefix)
+
+ if test ! "$ac_cv_lib_bzip2_prefix" = no; then
+ BZIP2DIR=bzip2
+
+ LIBBZ2="$ac_cv_lib_bzip2_prefix"
+ AC_SUBST(LIBBZ2)
+
+ AC_DEFINE(NEED_BZ2_PREFIX, 1, [Define if the libbz2 functions need the BZ2_ prefix])
+ dnl else, we just ignore this
+ fi
+
+fi
+AM_CONDITIONAL(include_BZIP2, test -n "$BZIP2DIR")
+])
+
+dnl ------------------------------------------------------------------------
+dnl Try to find the SSL headers and libraries.
+dnl $(SSL_LDFLAGS) will be -Lsslliblocation (if needed)
+dnl and $(SSL_INCLUDES) will be -Isslhdrlocation (if needed)
+dnl ------------------------------------------------------------------------
+dnl
+AC_DEFUN([KDE_CHECK_SSL],
+[
+LIBSSL="-lssl -lcrypto"
+AC_REQUIRE([KDE_CHECK_LIB64])
+
+ac_ssl_includes=NO ac_ssl_libraries=NO
+ssl_libraries=""
+ssl_includes=""
+AC_ARG_WITH(ssl-dir,
+ AC_HELP_STRING([--with-ssl-dir=DIR],[where the root of OpenSSL is installed]),
+ [ ac_ssl_includes="$withval"/include
+ ac_ssl_libraries="$withval"/lib$kdelibsuff
+ ])
+
+want_ssl=yes
+AC_ARG_WITH(ssl,
+ AC_HELP_STRING([--without-ssl],[disable SSL checks]),
+ [want_ssl=$withval])
+
+if test $want_ssl = yes; then
+
+AC_MSG_CHECKING(for OpenSSL)
+
+AC_CACHE_VAL(ac_cv_have_ssl,
+[#try to guess OpenSSL locations
+
+ ssl_incdirs="/usr/include /usr/local/include /usr/ssl/include /usr/local/ssl/include $prefix/include $kde_extra_includes"
+ ssl_incdirs="$ac_ssl_includes $ssl_incdirs"
+ AC_FIND_FILE(openssl/ssl.h, $ssl_incdirs, ssl_incdir)
+ ac_ssl_includes="$ssl_incdir"
+
+ ssl_libdirs="/usr/lib$kdelibsuff /usr/local/lib$kdelibsuff /usr/ssl/lib$kdelibsuff /usr/local/ssl/lib$kdelibsuff $libdir $prefix/lib$kdelibsuff $exec_prefix/lib$kdelibsuff $kde_extra_libs"
+ if test ! "$ac_ssl_libraries" = "NO"; then
+ ssl_libdirs="$ac_ssl_libraries $ssl_libdirs"
+ fi
+
+ test=NONE
+ ssl_libdir=NONE
+ for dir in $ssl_libdirs; do
+ try="ls -1 $dir/libssl*"
+ if test=`eval $try 2> /dev/null`; then ssl_libdir=$dir; break; else echo "tried $dir" >&AC_FD_CC ; fi
+ done
+
+ ac_ssl_libraries="$ssl_libdir"
+
+ ac_ldflags_safe="$LDFLAGS"
+ ac_libs_safe="$LIBS"
+
+ LDFLAGS="$LDFLAGS -L$ssl_libdir $all_libraries"
+ LIBS="$LIBS $LIBSSL -lRSAglue -lrsaref"
+
+ AC_TRY_LINK(,void RSAPrivateEncrypt(void);RSAPrivateEncrypt();,
+ ac_ssl_rsaref="yes"
+ ,
+ ac_ssl_rsaref="no"
+ )
+
+ LDFLAGS="$ac_ldflags_safe"
+ LIBS="$ac_libs_safe"
+
+ if test "$ac_ssl_includes" = NO || test "$ac_ssl_libraries" = NO; then
+ have_ssl=no
+ else
+ have_ssl=yes;
+ fi
+
+ ])
+
+ eval "$ac_cv_have_ssl"
+
+ AC_MSG_RESULT([libraries $ac_ssl_libraries, headers $ac_ssl_includes])
+
+ AC_MSG_CHECKING([whether OpenSSL uses rsaref])
+ AC_MSG_RESULT($ac_ssl_rsaref)
+
+ AC_MSG_CHECKING([for easter eggs])
+ AC_MSG_RESULT([none found])
+
+else
+ have_ssl=no
+fi
+
+if test "$have_ssl" = yes; then
+ AC_MSG_CHECKING(for OpenSSL version)
+ dnl Check for SSL version
+ AC_CACHE_VAL(ac_cv_ssl_version,
+ [
+
+ cat >conftest.$ac_ext <<EOF
+#include <openssl/opensslv.h>
+#include <stdio.h>
+ int main() {
+
+#ifndef OPENSSL_VERSION_NUMBER
+ printf("ssl_version=\\"error\\"\n");
+#else
+ if (OPENSSL_VERSION_NUMBER < 0x00906000)
+ printf("ssl_version=\\"old\\"\n");
+ else
+ printf("ssl_version=\\"ok\\"\n");
+#endif
+ return (0);
+ }
+EOF
+
+ ac_save_CPPFLAGS=$CPPFLAGS
+ if test "$ac_ssl_includes" != "/usr/include"; then
+ CPPFLAGS="$CPPFLAGS -I$ac_ssl_includes"
+ fi
+
+ if AC_TRY_EVAL(ac_link); then
+
+ if eval `./conftest 2>&5`; then
+ if test $ssl_version = error; then
+ AC_MSG_ERROR([$ssl_incdir/openssl/opensslv.h doesn't define OPENSSL_VERSION_NUMBER !])
+ else
+ if test $ssl_version = old; then
+ AC_MSG_WARN([OpenSSL version too old. Upgrade to 0.9.6 at least, see http://www.openssl.org. SSL support disabled.])
+ have_ssl=no
+ fi
+ fi
+ ac_cv_ssl_version="ssl_version=$ssl_version"
+ else
+ AC_MSG_ERROR([Your system couldn't run a small SSL test program.
+ Check config.log, and if you can't figure it out, send a mail to
+ David Faure <faure@kde.org>, attaching your config.log])
+ fi
+
+ else
+ AC_MSG_ERROR([Your system couldn't link a small SSL test program.
+ Check config.log, and if you can't figure it out, send a mail to
+ David Faure <faure@kde.org>, attaching your config.log])
+ fi
+ CPPFLAGS=$ac_save_CPPFLAGS
+
+ ])
+
+ eval "$ac_cv_ssl_version"
+ AC_MSG_RESULT($ssl_version)
+fi
+
+if test "$have_ssl" != yes; then
+ LIBSSL="";
+else
+ AC_DEFINE(HAVE_SSL, 1, [If we are going to use OpenSSL])
+ ac_cv_have_ssl="have_ssl=yes \
+ ac_ssl_includes=$ac_ssl_includes ac_ssl_libraries=$ac_ssl_libraries ac_ssl_rsaref=$ac_ssl_rsaref"
+
+
+ ssl_libraries="$ac_ssl_libraries"
+ ssl_includes="$ac_ssl_includes"
+
+ if test "$ac_ssl_rsaref" = yes; then
+ LIBSSL="-lssl -lcrypto -lRSAglue -lrsaref"
+ fi
+
+ if test $ssl_version = "old"; then
+ AC_DEFINE(HAVE_OLD_SSL_API, 1, [Define if you have OpenSSL < 0.9.6])
+ fi
+fi
+
+SSL_INCLUDES=
+
+if test "$ssl_includes" = "/usr/include"; then
+ if test -f /usr/kerberos/include/krb5.h; then
+ SSL_INCLUDES="-I/usr/kerberos/include"
+ fi
+elif test "$ssl_includes" != "/usr/local/include" && test -n "$ssl_includes"; then
+ SSL_INCLUDES="-I$ssl_includes"
+fi
+
+if test "$ssl_libraries" = "/usr/lib" || test "$ssl_libraries" = "/usr/local/lib" || test -z "$ssl_libraries" || test "$ssl_libraries" = "NONE"; then
+ SSL_LDFLAGS=""
+else
+ SSL_LDFLAGS="-L$ssl_libraries -R$ssl_libraries"
+fi
+
+AC_SUBST(SSL_INCLUDES)
+AC_SUBST(SSL_LDFLAGS)
+AC_SUBST(LIBSSL)
+])
+
+AC_DEFUN([KDE_CHECK_STRLCPY],
+[
+ AC_REQUIRE([AC_CHECK_STRLCAT])
+ AC_REQUIRE([AC_CHECK_STRLCPY])
+ AC_CHECK_SIZEOF(size_t)
+ AC_CHECK_SIZEOF(unsigned long)
+
+ AC_MSG_CHECKING([sizeof size_t == sizeof unsigned long])
+ AC_TRY_COMPILE(,[
+ #if SIZEOF_SIZE_T != SIZEOF_UNSIGNED_LONG
+ choke me
+ #endif
+ ],AC_MSG_RESULT([yes]),[
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([
+ Apparently on your system our assumption sizeof size_t == sizeof unsigned long
+ does not apply. Please mail kde-devel@kde.org with a description of your system!
+ ])
+ ])
+])
+
+AC_DEFUN([KDE_CHECK_BINUTILS],
+[
+ AC_MSG_CHECKING([if ld supports unversioned version maps])
+
+ kde_save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
+ echo "{ local: extern \"C++\" { foo }; };" > conftest.map
+ AC_TRY_LINK([int foo;],
+[
+#ifdef __INTEL_COMPILER
+icc apparently does not support libtools version-info and version-script
+at the same time. Dunno where the bug is, but until somebody figured out,
+better disable the optional version scripts.
+#endif
+
+ foo = 42;
+], kde_supports_versionmaps=yes, kde_supports_versionmaps=no)
+ LDFLAGS="$kde_save_LDFLAGS"
+ rm -f conftest.map
+ AM_CONDITIONAL(include_VERSION_SCRIPT,
+ [test "$kde_supports_versionmaps" = "yes" && test "$kde_use_debug_code" = "no"])
+
+ AC_MSG_RESULT($kde_supports_versionmaps)
+])
+
+AC_DEFUN([AM_PROG_OBJC],[
+AC_CHECK_PROGS(OBJC, gcc, gcc)
+test -z "$OBJC" && AC_MSG_ERROR([no acceptable objective-c gcc found in \$PATH])
+if test "x${OBJCFLAGS-unset}" = xunset; then
+ OBJCFLAGS="-g -O2"
+fi
+AC_SUBST(OBJCFLAGS)
+_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES(OBJC)])
+])
+
+AC_DEFUN([KDE_CHECK_PERL],
+[
+ KDE_FIND_PATH(perl, PERL, [$bindir $exec_prefix/bin $prefix/bin], [
+ AC_MSG_ERROR([No Perl found in your $PATH.
+We need perl to generate some code.])
+ ])
+ AC_SUBST(PERL)
+])
+
+AC_DEFUN([KDE_CHECK_LARGEFILE],
+[
+AC_SYS_LARGEFILE
+if test "$ac_cv_sys_file_offset_bits" != no; then
+ CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
+fi
+
+if test "x$ac_cv_sys_large_files" != "xno"; then
+ CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=1"
+fi
+
+])
+
+dnl A small extension to PKG_CHECK_MODULES (defined in pkg.m4.in)
+dnl which allows to search for libs that get installed into the KDE prefix.
+dnl
+dnl Syntax: KDE_PKG_CHECK_MODULES(KSTUFF, libkexif >= 0.2 glib = 1.3.4, action-if, action-not)
+dnl defines KSTUFF_LIBS, KSTUFF_CFLAGS, see pkg-config man page
+dnl also defines KSTUFF_PKG_ERRORS on error
+AC_DEFUN([KDE_PKG_CHECK_MODULES], [
+
+ PKG_CONFIG_PATH="$prefix/lib${kdelibsuff}/pkgconfig:$PKG_CONFIG_PATH"
+ if test "$prefix" != "$kde_libs_prefix"; then
+ PKG_CONFIG_PATH="$kde_libs_prefix/lib${kdelibsuff}/pkgconfig:$PKG_CONFIG_PATH"
+ fi
+ export PKG_CONFIG_PATH
+ PKG_CHECK_MODULES([$1],[$2],[$3],[$4])
+])
+
+
+dnl Check for PIE support in the compiler and linker
+AC_DEFUN([KDE_CHECK_PIE_SUPPORT],
+[
+ AC_CACHE_CHECK([for PIE support], kde_cv_val_pie_support,
+ [
+ AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ safe_CXXFLAGS=$CXXFLAGS
+ safe_LDFLAGS=$LDFLAGS
+ CXXFLAGS="$CXXFLAGS -fPIE"
+ LDFLAGS="$LDFLAGS -pie"
+
+ AC_TRY_LINK([int foo;], [], [kde_cv_val_pie_support=yes], [kde_cv_val_pie_support=no])
+
+ CXXFLAGS=$safe_CXXFLAGS
+ LDFLAGS=$safe_LDFLAGS
+ AC_LANG_RESTORE
+ ])
+
+ AC_MSG_CHECKING(if enabling -pie/fPIE support)
+
+ AC_ARG_ENABLE(pie,
+ AC_HELP_STRING([--enable-pie],[platform supports PIE linking [default=detect]]),
+ [kde_has_pie_support=$enableval],
+ [kde_has_pie_support=detect])
+
+ if test "$kde_has_pie_support" = "detect"; then
+ kde_has_pie_support=$kde_cv_val_pie_support
+ fi
+
+ AC_MSG_RESULT([$kde_has_pie_support])
+
+ KDE_USE_FPIE=""
+ KDE_USE_PIE=""
+
+ AC_SUBST([KDE_USE_FPIE])
+ AC_SUBST([KDE_USE_PIE])
+
+ if test "$kde_has_pie_support" = "yes"; then
+ KDE_USE_FPIE="-fPIE"
+ KDE_USE_PIE="-pie"
+ fi
+])
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+## Copyright 1996, 1997, 1998, 1999, 2000, 2001
+## Free Software Foundation, Inc.
+## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+##
+## As a special exception to the GNU General Public License, if you
+## distribute this file as part of a program that contains a
+## configuration script generated by Autoconf, you may include it under
+## the same distribution terms that you use for the rest of that program.
+
+# serial 47 AC_PROG_LIBTOOL
+
+
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
+m4_ifdef([AC_PROVIDE_IFELSE],
+ [],
+ [m4_define([AC_PROVIDE_IFELSE],
+ [m4_ifdef([AC_PROVIDE_$1],
+ [$2], [$3])])])
+
+
+# AC_PROG_LIBTOOL
+# ---------------
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+ AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [AC_LIBTOOL_CXX],
+ [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+ ])])
+dnl And a similar setup for Fortran 77 support
+ AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [AC_LIBTOOL_F77],
+ [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+])])
+
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+ AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+ [AC_LIBTOOL_GCJ],
+ [ifdef([AC_PROG_GCJ],
+ [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([A][M_PROG_GCJ],
+ [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+ ifdef([LT_AC_PROG_GCJ],
+ [define([LT_AC_PROG_GCJ],
+ defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+])])# AC_PROG_LIBTOOL
+
+
+# _AC_PROG_LIBTOOL
+# ----------------
+AC_DEFUN([_AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool --silent'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])# _AC_PROG_LIBTOOL
+
+
+# AC_LIBTOOL_SETUP
+# ----------------
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+AC_LIBTOOL_SYS_MAX_CMD_LEN
+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+AC_LIBTOOL_OBJDIR
+
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+_LT_AC_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
+
+# Same as above, but do not quote variable references.
+[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+AC_CHECK_TOOL(AR, ar, false)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+ ;;
+ *)
+ old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ AC_PATH_MAGIC
+ fi
+ ;;
+esac
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+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],
+ [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],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [pic_mode="$withval"],
+ [pic_mode=default])
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+AC_LIBTOOL_LANG_C_CONFIG
+_LT_AC_TAGCONFIG
+])# AC_LIBTOOL_SETUP
+
+
+# _LT_AC_SYS_COMPILER
+# -------------------
+AC_DEFUN([_LT_AC_SYS_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_AC_SYS_COMPILER
+
+
+# _LT_AC_SYS_LIBPATH_AIX
+# ----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
+}'`; fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_AC_SYS_LIBPATH_AIX
+
+
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+AC_DEFUN([_LT_AC_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+ [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_AC_SHELL_INIT
+
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[_LT_AC_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+ ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X[$]1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+ # Yippee, $echo works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+[$]*
+EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+ echo_test_string="`eval $cmd`" &&
+ (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+ then
+ break
+ fi
+ done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ IFS="$lt_save_ifs"
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$dir/echo"
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ if test "X$echo" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ echo='print -r'
+ elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+ else
+ # Try using printf.
+ echo='printf %s\n'
+ if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+ if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "[$]0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ echo=echo
+ fi
+ fi
+ fi
+ fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+ ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+])])# _LT_AC_PROG_ECHO_BACKSLASH
+
+
+# _LT_AC_LOCK
+# -----------
+AC_DEFUN([_LT_AC_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AC_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case "`/usr/bin/file conftest.o`" in
+ *32-bit*)
+ LINUX_64_MODE="32"
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ LINUX_64_MODE="64"
+ case $host in
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+ ])
+esac
+
+need_locks="$enable_libtool_lock"
+
+])# _LT_AC_LOCK
+
+
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+[AC_REQUIRE([LT_AC_PROG_SED])
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s conftest.err; then
+ $2=yes
+ fi
+ fi
+ $rm conftest*
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$5], , :, [$5])
+else
+ ifelse([$6], , :, [$6])
+fi
+])# AC_LIBTOOL_COMPILER_OPTION
+
+
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ printf "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ else
+ $2=yes
+ fi
+ fi
+ $rm conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ ifelse([$4], , :, [$4])
+else
+ ifelse([$5], , :, [$5])
+fi
+])# AC_LIBTOOL_LINKER_OPTION
+
+
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+[# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ testring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ *)
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$testring" 2>/dev/null` \
+ = "XX$testring") >/dev/null 2>&1 &&
+ new_result=`expr "X$testring" : ".*" 2>&1` &&
+ lt_cv_sys_max_cmd_len=$new_result &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ testring=$testring$testring
+ done
+ testring=
+ # Add a significant safety factor because C++ compilers can tack on massive
+ # amounts of additional arguments before passing them to the linker.
+ # It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ ;;
+ esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
+
+
+# _LT_AC_CHECK_DLFCN
+# --------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)dnl
+])# _LT_AC_CHECK_DLFCN
+
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}]
+EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_unknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+
+# AC_LIBTOOL_DLOPEN_SELF
+# -------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_AC_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_AC_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $rm -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ # According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+ # that will create temporary files in the current directory regardless of
+ # the output directory. Thus, making CWD read-only will cause this test
+ # to fail, enabling locking or at least warning the user not to do parallel
+ # builds.
+ chmod -w .
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test ! -s out/conftest.err; then
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w .
+ $rm conftest* out/*
+ rmdir out
+ cd ..
+ rmdir conftest
+ $rm conftest*
+])
+])# AC_LIBTOOL_PROG_CC_C_O
+
+
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
+# Check to see if we can do hard links to lock some files if needed
+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+[AC_REQUIRE([_LT_AC_LOCK])dnl
+
+hard_links="nottested"
+if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
+
+
+# AC_LIBTOOL_OBJDIR
+# -----------------
+AC_DEFUN([AC_LIBTOOL_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+])# AC_LIBTOOL_OBJDIR
+
+
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
+# Check hardcoding attributes.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_AC_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+ test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \
+ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then
+
+ # We can hardcode non-existant directories.
+ if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_AC_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_AC_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+
+
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+[striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+])# AC_LIBTOOL_SYS_LIB_STRIP
+
+
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+[AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ shrext=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$host_os in
+ yes,cygwin* | yes,mingw* | yes,pw32*)
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+ ;;
+ mingw*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH printed by
+ # mingw gcc, but we are running on Cygwin. Gcc prints its search
+ # path with ; separators, and with drive letters. We can handle the
+ # drive letters (cygwin fileutils understands them), so leave them,
+ # especially as we might pass files found there to a mingw objdump,
+ # which wouldn't understand a cygwinified path. Ahh.
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ ;;
+
+ *)
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext='$(test .$module = .yes && echo .so || echo .dylib)'
+ # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+ if test "$GCC" = yes; then
+ sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+ else
+ sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+ fi
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+kfreebsd*-gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='GNU ld.so'
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[01]* | freebsdelf3.[01]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case "$host_cpu" in
+ ia64*)
+ shrext='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ libsuff=
+ if test "x$LINUX_64_MODE" = x64; then
+ # Some platforms are per default 64-bit, so there's no /lib64
+ if test -d /lib64; then
+ libsuff=64
+ fi
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff}"
+ sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}"
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+nto-qnx*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ export_dynamic_flag_spec='${wl}-Blargedynsym'
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+
+
+# _LT_AC_TAGCONFIG
+# ----------------
+AC_DEFUN([_LT_AC_TAGCONFIG],
+[AC_ARG_WITH([tags],
+ [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+ [include additional configurations @<:@automatic@:>@])],
+ [tagnames="$withval"])
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+ if test ! -f "${ofile}"; then
+ AC_MSG_WARN([output file `$ofile' does not exist])
+ fi
+
+ if test -z "$LTCC"; then
+ eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+ if test -z "$LTCC"; then
+ AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+ else
+ AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+ fi
+ fi
+
+ # Extract list of available tagged configurations in $ofile.
+ # Note that this assumes the entire list is on one line.
+ available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for tagname in $tagnames; do
+ IFS="$lt_save_ifs"
+ # Check whether tagname contains only valid characters
+ case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+ "") ;;
+ *) AC_MSG_ERROR([invalid tag name: $tagname])
+ ;;
+ esac
+
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+ then
+ AC_MSG_ERROR([tag name \"$tagname\" already exists])
+ fi
+
+ # Update the list of available tags.
+ if test -n "$tagname"; then
+ echo appending configuration tag \"$tagname\" to $ofile
+
+ case $tagname in
+ CXX)
+ if test -n "$CXX" && test "X$CXX" != "Xno"; then
+ AC_LIBTOOL_LANG_CXX_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ F77)
+ if test -n "$F77" && test "X$F77" != "Xno"; then
+ AC_LIBTOOL_LANG_F77_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ GCJ)
+ if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+ AC_LIBTOOL_LANG_GCJ_CONFIG
+ else
+ tagname=""
+ fi
+ ;;
+
+ RC)
+ AC_LIBTOOL_LANG_RC_CONFIG
+ ;;
+
+ *)
+ AC_MSG_ERROR([Unsupported tag name: $tagname])
+ ;;
+ esac
+
+ # Append the new tag name to the list of available tags.
+ if test -n "$tagname" ; then
+ available_tags="$available_tags $tagname"
+ fi
+ fi
+ done
+ IFS="$lt_save_ifs"
+
+ # Now substitute the updated list of available tags.
+ if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+ mv "${ofile}T" "$ofile"
+ chmod +x "$ofile"
+ else
+ rm -f "${ofile}T"
+ AC_MSG_ERROR([unable to update list of available tagged configurations.])
+ fi
+fi
+])# _LT_AC_TAGCONFIG
+
+
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN],
+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_DLOPEN
+
+
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 dll's
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_WIN32_DLL
+
+
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+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@:>@],
+ [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
+])# AC_ENABLE_SHARED
+
+
+# AC_DISABLE_SHARED
+# -----------------
+#- set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)
+])# AC_DISABLE_SHARED
+
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+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@:>@],
+ [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]AC_ENABLE_STATIC_DEFAULT)
+])# AC_ENABLE_STATIC
+
+
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)
+])# AC_DISABLE_STATIC
+
+
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+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@:>@],
+ [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+])# AC_ENABLE_FAST_INSTALL
+
+
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)
+])# AC_DISABLE_FAST_INSTALL
+
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)
+])# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+ [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])])
+
+
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="ifelse([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$1; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+])# AC_PATH_TOOL_PREFIX
+
+
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# AC_PATH_MAGIC
+
+
+# AC_PROG_LD
+# ----------
+# 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],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=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
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ 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 "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; 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_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some GNU ld's only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])# AC_PROG_LD
+
+
+# AC_PROG_LD_GNU
+# --------------
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# AC_PROG_LD_GNU
+
+
+# AC_PROG_LD_RELOAD_FLAG
+# ----------------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+])# AC_PROG_LD_RELOAD_FLAG
+
+
+# AC_DEPLIBS_CHECK_METHOD
+# -----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi4*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+mingw* | pw32*)
+ # win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='win32_libid'
+ ;;
+
+darwin* | rhapsody*)
+ # this will be overwritten by pass_all, but leave it in just in case
+ lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ lt_cv_file_magic_test_file=`/System/Library/Frameworks/System.framework/System`
+ ;;
+ *) # Darwin 1.3 on
+ lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+ ;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | kfreebsd*-gnu)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case "$host_cpu" in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ irix5* | nonstopux*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1"
+ ;;
+ esac
+ lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux*)
+ case $host_cpu in
+ alpha* | hppa* | i*86 | ia64* | m68* | mips* | powerpc* | sparc* | s390* | sh* | x86_64* )
+ lt_cv_deplibs_check_method=pass_all ;;
+ # the debian people say, arm and glibc 2.3.1 works for them with pass_all
+ arm* )
+ lt_cv_deplibs_check_method=pass_all ;;
+ *)
+ # glibc up to 2.1.1 does not perform some relocations on ARM
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;;
+ esac
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+nto-qnx*)
+ lt_cv_deplibs_check_method=unknown
+ ;;
+
+openbsd*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
+ else
+ lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sco3.2v5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+])# AC_DEPLIBS_CHECK_METHOD
+
+
+# AC_PROG_NM
+# ----------
+# find the pathname to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/${ac_tool_prefix}nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+])# AC_PROG_NM
+
+
+# AC_CHECK_LIBM
+# -------------
+# check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
+ ;;
+esac
+])# AC_CHECK_LIBM
+
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
+# DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will
+# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with
+# '${top_srcdir}/' (note the single quotes!). If your package is not
+# flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ case $enable_ltdl_convenience in
+ no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+ "") enable_ltdl_convenience=yes
+ ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+ esac
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments. Note that LIBLTDL
+# and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If
+# DIRECTORY is not provided and an installed libltdl is not found, it is
+# assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/'
+# and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single
+# quotes!). If your package is not flat and you're not using automake,
+# define top_builddir and top_srcdir appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ AC_CHECK_LIB(ltdl, lt_dlinit,
+ [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+ [if test x"$enable_ltdl_install" = xno; then
+ AC_MSG_WARN([libltdl not installed, but installation disabled])
+ else
+ enable_ltdl_install=yes
+ fi
+ ])
+ if test x"$enable_ltdl_install" = x"yes"; then
+ ac_configure_args="$ac_configure_args --enable-ltdl-install"
+ LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ else
+ ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+ LIBLTDL="-lltdl"
+ LTDLINCL=
+ fi
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+AC_DEFUN([AC_LIBTOOL_CXX],
+[AC_REQUIRE([_LT_AC_LANG_CXX])
+])# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+AC_DEFUN([_LT_AC_LANG_CXX],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
+])# _LT_AC_LANG_CXX
+
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+AC_DEFUN([AC_LIBTOOL_F77],
+[AC_REQUIRE([_LT_AC_LANG_F77])
+])# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+AC_DEFUN([_LT_AC_LANG_F77],
+[AC_REQUIRE([AC_PROG_F77])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
+])# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+AC_DEFUN([AC_LIBTOOL_GCJ],
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
+])# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+AC_DEFUN([_LT_AC_LANG_GCJ],
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+ [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+ [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+ [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+ [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
+])# _LT_AC_LANG_GCJ
+
+
+# AC_LIBTOOL_RC
+# --------------
+# enable support for Windows resource files
+AC_DEFUN([AC_LIBTOOL_RC],
+[AC_REQUIRE([LT_AC_PROG_RC])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
+])# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+[lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+_LT_AC_SYS_COMPILER
+
+#
+# Check for any special shared library compilation flags.
+#
+_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)=
+if test "$GCC" = no; then
+ case $host_os in
+ sco3.2v5*)
+ _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf'
+ ;;
+ esac
+fi
+if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then
+ AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries])
+ if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$]_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[[ ]]" >/dev/null; then :
+ else
+ AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure])
+ _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no
+ fi
+fi
+
+
+#
+# Check to make sure the static flag actually works.
+#
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works],
+ _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+ $_LT_AC_TAGVAR(lt_prog_compiler_static, $1),
+ [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+# Report which librarie types wil actually be built
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+aix4*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ darwin* | rhapsody*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,suppress'
+ ;;
+ *) # Darwin 1.3 on
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress'
+ else
+ case ${MACOSX_DEPLOYMENT_TARGET} in
+ 10.[012])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress'
+ ;;
+ 10.*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,dynamic_lookup'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ output_verbose_link_cmd='echo'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring'
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+[AC_LANG_PUSH(C++)
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([AC_PROG_CXXCPP])
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Dependencies to place before and after the object being linked:
+_LT_AC_TAGVAR(predep_objects, $1)=
+_LT_AC_TAGVAR(postdep_objects, $1)=
+_LT_AC_TAGVAR(predeps, $1)=
+_LT_AC_TAGVAR(postdeps, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+
+# Source file extension for C++ test sources.
+ac_ext=cc
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+ unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+ unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+else
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+fi
+
+if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ AC_PROG_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+ grep 'no-whole-archive' > /dev/null; then
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # KDE requires run time linking. Make it the default.
+ aix_use_runtimelinking=yes
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='-qmkshrobj ${wl}-G'
+ else
+ shared_flag='-qmkshrobj'
+ fi
+ fi
+ fi
+
+ # Let the compiler handle the export list.
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_AC_TAGVAR(archive_cmds, $1)="\$CC"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '" $shared_flag"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=no
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ darwin* | rhapsody*)
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,suppress'
+ ;;
+ *) # Darwin 1.3 on
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress'
+ else
+ case ${MACOSX_DEPLOYMENT_TARGET} in
+ 10.[012])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress'
+ ;;
+ 10.*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,dynamic_lookup'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $compiler_flags $deplibs -install_name $rpath/$soname $verstring'
+ fi
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs'
+
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $compiler_flags $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ freebsd[12]*)
+ # C++ shared libraries reported to be fairly broken before switch to ELF
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ freebsd-elf*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+ freebsd* | kfreebsd*-gnu)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+ gnu*)
+ ;;
+ hpux9*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | egrep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case "$host_cpu" in
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC)
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case "$host_cpu" in
+ ia64*|hppa*64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC)
+ # SGI C++
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+ fi
+ fi
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+ linux*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc)
+ # Intel C++
+ with_gnu_ld=yes
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ cxx)
+ # Compaq C++
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ esac
+ ;;
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+ osf3*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ osf4* | osf5*)
+ case $cc_basename in
+ KCC)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~
+ $rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ sco*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case $cc_basename in
+ CC)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~$rm $lib.exp'
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *)
+ # The C++ compiler is used as linker so we must use $wl
+ # flag to pass the commands to the underlying system
+ # linker.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | grep -v '^2\.7' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-h $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects ${wl}-h $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $compiler_flags $predep_objects $libobjs $deplibs $postdep_objects~$rm $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+ fi
+
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ fi
+ ;;
+ esac
+ ;;
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+esac
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+AC_LIBTOOL_POSTDEP_PREDEP($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+])# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
+# ------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
+int a;
+void foo (void) { a = 0; }
+EOF
+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+EOF
+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+EOF
+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ # The `*' in the case matches for architectures that use `case' in
+ # $output_verbose_cmd can trigger glob expansion during the loop
+ # eval without this substitution.
+ output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`"
+
+ for p in `eval $output_verbose_link_cmd`; do
+ case $p in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" \
+ || test $p = "-R"; then
+ prev=$p
+ continue
+ else
+ prev=
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ case $p in
+ -L* | -R*)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
+ _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
+ ;;
+
+ *.$objext|*.$libext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
+ _LT_AC_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
+ _LT_AC_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$rm -f confest.$objext
+
+case " $_LT_AC_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+])# AC_LIBTOOL_POSTDEP_PREDEP
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
+[AC_REQUIRE([AC_PROG_F77])
+AC_LANG_PUSH(Fortran 77)
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code=" subroutine t\n return\n end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=" program t\n end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'`
+
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+aix4*)
+ test "$enable_shared" = yes && enable_static=no
+ ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$G77"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_F77_CONFIG
+
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_GCJ_CONFIG
+
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the Windows resource compiler are
+# suitably defined. Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
+AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_RC_CONFIG
+
+
+# AC_LIBTOOL_CONFIG([TAGNAME])
+# ----------------------------
+# If TAGNAME is not passed, then create an initial libtool script
+# with a default configuration from the untagged config vars. Otherwise
+# add code to config.status for appending the configuration named by
+# TAGNAME from the matching tagged config vars.
+AC_DEFUN([AC_LIBTOOL_CONFIG],
+[# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ # See if we are running on zsh, and set the options which allow our commands through
+ # without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM SED SHELL \
+ libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+ old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+ deplibs_check_method reload_flag reload_cmds need_locks \
+ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+ lt_cv_sys_global_symbol_to_c_name_address \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ old_postinstall_cmds old_postuninstall_cmds \
+ _LT_AC_TAGVAR(compiler, $1) \
+ _LT_AC_TAGVAR(CC, $1) \
+ _LT_AC_TAGVAR(LD, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
+ _LT_AC_TAGVAR(old_archive_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
+ _LT_AC_TAGVAR(predep_objects, $1) \
+ _LT_AC_TAGVAR(postdep_objects, $1) \
+ _LT_AC_TAGVAR(predeps, $1) \
+ _LT_AC_TAGVAR(postdeps, $1) \
+ _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+ _LT_AC_TAGVAR(archive_cmds, $1) \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(postinstall_cmds, $1) \
+ _LT_AC_TAGVAR(postuninstall_cmds, $1) \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
+ _LT_AC_TAGVAR(allow_undefined_flag, $1) \
+ _LT_AC_TAGVAR(no_undefined_flag, $1) \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
+ _LT_AC_TAGVAR(hardcode_automatic, $1) \
+ _LT_AC_TAGVAR(module_cmds, $1) \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) \
+ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+ _LT_AC_TAGVAR(exclude_expsyms, $1) \
+ _LT_AC_TAGVAR(include_expsyms, $1); do
+
+ case $var in
+ _LT_AC_TAGVAR(old_archive_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_cmds, $1) | \
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(module_cmds, $1) | \
+ _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
+ _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
+ extract_expsyms_cmds | reload_cmds | finish_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case $lt_echo in
+ *'\[$]0 --fallback-echo"')
+ lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
+ ;;
+ esac
+
+ifelse([$1], [],
+ [cfgfile="${ofile}T"
+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+ $rm -f "$cfgfile"
+ AC_MSG_NOTICE([creating $ofile])],
+ [cfgfile="$ofile"])
+
+ cat <<__EOF__ >> "$cfgfile"
+ifelse([$1], [],
+[#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG],
+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# A language-specific compiler.
+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+
+# Is the compiler the GNU C compiler?
+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext='$shrext'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+
+# Symbols that must always be exported.
+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+
+ifelse([$1],[],
+[# ### END LIBTOOL CONFIG],
+[# ### END LIBTOOL TAG CONFIG: $tagname])
+
+__EOF__
+
+ifelse([$1],[], [
+ case $host_os in
+ aix3*)
+ cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+EOF
+ ;;
+ esac
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+ mv -f "$cfgfile" "$ofile" || \
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+])
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
+fi
+])# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+
+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris* | sysv5*)
+ symcode='[[BDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGISTW]]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Write the raw and C identifiers.
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if grep ' nm_test_var$' "$nlist" >/dev/null; then
+ if grep ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+ cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr_t address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+ cat <<\EOF >> conftest.$ac_ext
+ {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_save_LIBS="$LIBS"
+ lt_save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS="$lt_save_LIBS"
+ CFLAGS="$lt_save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+ ifelse([$1],[CXX],[
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | os2* | pw32*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix4* | aix5*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68)
+ # Green Hills C++ Compiler
+ # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | kfreebsd*-gnu)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive"
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux*)
+ case $cc_basename in
+ KCC)
+ # KAI C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ icpc)
+ # Intel C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ cxx)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC)
+ # Rational C++ 2.4.1
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx)
+ # Digital/Compaq C++
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ sco*)
+ case $cc_basename in
+ CC)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx)
+ # Green Hills C++ Compiler
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC)
+ # Sun C++ 4.x
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc)
+ # Lucid
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC)
+ # NonStop-UX NCC 3.20
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ unixware*)
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+
+ beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ hpux*)
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ linux*)
+ case $CC in
+ icc* | ecc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ ccc*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ esac
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn'
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+ _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+ [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+case "$host_os" in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+])
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ifelse([$1],[CXX],[
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ case $host_os in
+ aix4* | aix5*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw*)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ *)
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+],[
+ runpath_var=
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_AC_TAGVAR(archive_cmds, $1)=
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+ _LT_AC_TAGVAR(module_cmds, $1)=
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_AC_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+
+ # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can't use
+ # them.
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=no
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+ if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $compiler_flags $libobjs $deplibs -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sunos4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then
+ runpath_var=LD_RUN_PATH
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+ fi
+
+ # KDE requires run time linking. Make it the default.
+ aix_use_runtimelinking=yes
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_AC_TAGVAR(archive_cmds, $1)=''
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ else
+ # We have old collect2
+ _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='-qmkshrobj ${wl}-G'
+ else
+ shared_flag='-qmkshrobj'
+ fi
+ fi
+ fi
+
+ # Let the compiler handle the export list.
+ _LT_AC_TAGVAR(always_export_symbols, $1)=no
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_AC_TAGVAR(archive_cmds, $1)="\$CC"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '" $shared_flag"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an empty executable.
+ _LT_AC_SYS_LIBPATH_AIX
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ # -bexpall does not export symbols beginning with underscore (_)
+ _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds it's shared libraries.
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $compiler_flags $libobjs $deplibs ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ # see comment about different semantics on the GNU ld section
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ bsdi4*)
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=no
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $compiler_flags $libobjs `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+
+ darwin* | rhapsody*)
+ if test "$GXX" = yes ; then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,suppress'
+ ;;
+ *) # Darwin 1.3 on
+ if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress'
+ else
+ case ${MACOSX_DEPLOYMENT_TARGET} in
+ 10.[012])
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-flat_namespace -Wl,-undefined -Wl,suppress'
+ ;;
+ 10.*)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)='-Wl,-undefined -Wl,dynamic_lookup'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ lt_int_apple_cc_single_mod=no
+ output_verbose_link_cmd='echo'
+ if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then
+ lt_int_apple_cc_single_mod=yes
+ fi
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $compiler_flags $deplibs -install_name $rpath/$soname $verstring'
+ fi
+ _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs'
+ # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's
+ if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $compiler_flags $libobjs $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ else
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $compiler_flags $deplibs -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $compiler_flags $libobjs $deplibs~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience'
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ else
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ dgux*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ freebsd1*)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | kfreebsd*-gnu)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $compiler_flags $libobjs $deplibs'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $compiler_flags $libobjs $deplibs~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10* | hpux11*)
+ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $compiler_flags $libobjs $deplibs'
+ ;;
+ esac
+ else
+ case "$host_cpu" in
+ hppa*64*|ia64*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ case "$host_cpu" in
+ hppa*64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ ia64*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ *)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $compiler_flags $libobjs $deplibs ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ openbsd*)
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $compiler_flags $libobjs $deplibs'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $compiler_flags $libobjs $deplibs'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $compiler_flags $libobjs $deplibs$output_objdir/$libname.def'
+ _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $compiler_flags $libobjs $deplibs ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $compiler_flags $libobjs $deplibs ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ sco3.2v5*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
+ solaris*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs~$rm $lib.exp'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
+ esac
+ _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $compiler_flags $libobjs $deplibs'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4.2uw2*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+ _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+
+ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text'
+ if test "$GCC" = yes; then
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs'
+ else
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $compiler_flags $libobjs $deplibs'
+ fi
+ runpath_var='LD_RUN_PATH'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv5*)
+ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+ ;;
+
+ uts4*)
+ _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_AC_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_AC_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+ $rm conftest*
+ printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+ then
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $rm conftest*
+ AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+ ;;
+ esac
+ fi
+ ;;
+esac
+])# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# # ifdef __CYGWIN32__
+# # define __CYGWIN__ __CYGWIN32__
+# # endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+# __hDllInstance_base = hInst;
+# return TRUE;
+# }
+# /* ltdll.c ends here */
+])# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+
+AC_DEFUN([LT_AC_PROG_GCJ],
+[AC_CHECK_TOOL(GCJ, gcj, no)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)
+])
+
+AC_DEFUN([LT_AC_PROG_RC],
+[AC_CHECK_TOOL(RC, windres, no)
+])
+
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+AC_DEFUN([LT_AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && break
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_MSG_RESULT([$SED])
+])
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..fba2ca1
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1050 @@
+# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+#
+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$PKG_CONFIG"; then
+ if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ else
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+ [pkg_failed=yes])
+ fi
+else
+ pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+ [AC_MSG_RESULT([no])
+ $4])
+elif test $pkg_failed = untried; then
+ ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
+ [$4])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+ [AM_AUTOMAKE_VERSION([1.9.6])])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 7
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+ # Solaris 8's {/usr,}/bin/sh.
+ touch sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 3
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running `make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n 's/^U = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 12
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.58])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $1 | $1:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode is disabled by default
+ AC_ARG_ENABLE(maintainer-mode,
+[ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ USE_MAINTAINER_MODE=$enableval,
+ USE_MAINTAINER_MODE=no)
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST(MAINT)dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+#
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake. There are at least two reasons why we must not
+# use `-m 0755':
+# - it causes special bits like SGID to be ignored,
+# - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+#
+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
+# Some implementations (such as Solaris 8's) are not thread-safe: if a
+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
+# concurrently, both version can detect that a/ is missing, but only
+# one can create it and the other will error out. Consequently we
+# restrict ourselves to GNU make (using the --version option ensures
+# this.)
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+ # We used to keeping the `.' as first argument, in order to
+ # allow $(mkdir_p) to be used without argument. As in
+ # $(mkdir_p) $(somedir)
+ # where $(somedir) is conditionally defined. However this is wrong
+ # for two reasons:
+ # 1. if the package is installed by a user who cannot write `.'
+ # make install will fail,
+ # 2. the above comment should most certainly read
+ # $(mkdir_p) $(DESTDIR)$(somedir)
+ # so it does not work when $(somedir) is undefined and
+ # $(DESTDIR) is not.
+ # To support the latter case, we have to write
+ # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+ # so the `.' trick is pointless.
+ mkdir_p='mkdir -p --'
+else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ for d in ./-p ./--version;
+ do
+ test -d $d && rmdir $d
+ done
+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+ if test -f "$ac_aux_dir/mkinstalldirs"; then
+ mkdir_p='$(mkinstalldirs)'
+ else
+ mkdir_p='$(install_sh) -d'
+ fi
+fi
+AC_SUBST([mkdir_p])])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+ [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+ [m4_case([$1], [ustar],, [pax],,
+ [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar;
+ do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([acinclude.m4])
diff --git a/conf.diff b/conf.diff
new file mode 100644
index 0000000..7ebf50a
--- /dev/null
+++ b/conf.diff
@@ -0,0 +1,48 @@
+--- configure.in.in 2007-10-06 12:25:00.851848655 +0200
++++ configure.in.in 2007-09-29 00:20:22.000000000 +0200
+@@ -132,16 +137,16 @@
+
+ AM_CONDITIONAL(include_kgstplayer, [test "x$have_gst" = "xyes" && test "x$have_gst_plugins" = "xyes"])
+
+-buildnpp=yes
++hasnspr=yes
+ LIBNSPR_LIBS=""
+ LIBNSPR_CFLAGS=""
+ LIBQTDBUS=""
+ LIBDBUS_CFLAGS=""
+ AC_ARG_ENABLE(nspr, [ --enable-npplayer Enables building with npp support],
+ [if test "x$enableval" == "xno"; then
+- buildnpp=no
++ hasnspr=no
+ fi])
+-if test "$buildnpp" = "yes"; then
++if test "$hasnspr" = "yes"; then
+ if test "$PKGCONFIGFOUND" = "yes" ; then
+ DBUS_REQ=1.0.0
+ PKG_CHECK_MODULES(DBUS, dbus-1 >= $DBUS_REQ,
+@@ -150,9 +155,22 @@
+ AC_DEFINE(HAVE_DBUS, 1, [have DBus])
+ LIBQTDBUS="`$PKG_CONFIG --libs dbus-1` -ldbus-qt-1"
+ LIBDBUS_CFLAGS="`$PKG_CONFIG --cflags dbus-1`"
+- AC_DEFINE(HAVE_NSPR, 1, [build Netscape plugin loader])
+- LIBNSPR_LIBS="`$PKG_CONFIG --libs gtk+-x11-2.0` `$PKG_CONFIG --libs dbus-glib-1`"
+- LIBNSPR_CFLAGS="`$PKG_CONFIG --cflags gtk+-x11-2.0` `$PKG_CONFIG --cflags dbus-glib-1`"
++ PKG_CHECK_MODULES(NSPR, nspr >= 1.8.0,
++ have_nspr=yes,have_nspr=no)
++ if test "x$have_nspr" = "xno"; then
++ AC_CHECK_PROG(NSPRCONFIGFOUND, nspr-config,[yes])
++ if test $NSPRCONFIGFOUND; then
++ have_nspr=yes
++ NSPR_CFG=nspr-config
++ fi
++ else
++ NSPR_CFG=pkg-config nspr
++ fi
++ if test "x$have_nspr" = "xyes"; then
++ AC_DEFINE(HAVE_NSPR, 1, [have Netscape Portable Runtime])
++ LIBNSPR_LIBS="`$PKG_CONFIG --libs gtk+-x11-2.0` `$PKG_CONFIG --libs dbus-glib-1` `$NSPR_CFG --libs`"
++ LIBNSPR_CFLAGS="`$PKG_CONFIG --cflags gtk+-x11-2.0` `$PKG_CONFIG --cflags dbus-glib-1` `$NSPR_CFG --cflags`"
++ fi
+ fi
+ fi
+ fi
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..e3687cd
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,261 @@
+/* config.h.in. Generated from configure.in by autoheader. */
+
+/* Defines if your system has the cairo library */
+#undef HAVE_CAIRO
+
+/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
+#undef HAVE_CARBON_CARBON_H
+
+/* Define if you have the CoreAudio API */
+#undef HAVE_COREAUDIO
+
+/* Define to 1 if you have the <crt_externs.h> header file. */
+#undef HAVE_CRT_EXTERNS_H
+
+/* Defines if your system has the crypt function */
+#undef HAVE_CRYPT
+
+/* have DBus */
+#undef HAVE_DBUS
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* If libexpat is installed */
+#undef HAVE_EXPAT
+
+/* have GStreamer */
+#undef HAVE_GSTREAMER
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* If we have koffice installed */
+#undef HAVE_KOFFICE
+
+/* Define if you have libjpeg */
+#undef HAVE_LIBJPEG
+
+/* Define if you have libpng */
+#undef HAVE_LIBPNG
+
+/* Define if you have a working libpthread (will enable threaded code) */
+#undef HAVE_LIBPTHREAD
+
+/* Define if you have libz */
+#undef HAVE_LIBZ
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define if your system needs _NSGetEnviron to set up the environment */
+#undef HAVE_NSGETENVIRON
+
+/* build Netscape plugin loader */
+#undef HAVE_NSPR
+
+/* Define if you have res_init */
+#undef HAVE_RES_INIT
+
+/* Define if you have the res_init prototype */
+#undef HAVE_RES_INIT_PROTO
+
+/* Define if you have a STL implementation by SGI */
+#undef HAVE_SGI_STL
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define if you have strlcat */
+#undef HAVE_STRLCAT
+
+/* Define if you have the strlcat prototype */
+#undef HAVE_STRLCAT_PROTO
+
+/* Define if you have strlcpy */
+#undef HAVE_STRLCPY
+
+/* Define if you have the strlcpy prototype */
+#undef HAVE_STRLCPY_PROTO
+
+/* Define to 1 if you have the <sys/bitypes.h> header file. */
+#undef HAVE_SYS_BITYPES_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* If we have libxine installed */
+#undef HAVE_XINE
+
+/* Suffix for lib directories */
+#undef KDELIBSUFF
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* The size of `char *', as computed by sizeof. */
+#undef SIZEOF_CHAR_P
+
+/* The size of `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of `short', as computed by sizeof. */
+#undef SIZEOF_SHORT
+
+/* The size of `size_t', as computed by sizeof. */
+#undef SIZEOF_SIZE_T
+
+/* The size of `unsigned long', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_LONG
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
+
+/* Defined if compiling without arts */
+#undef WITHOUT_ARTS
+
+/*
+ * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system
+ * headers and I'm too lazy to write a configure test as long as only
+ * unixware is related
+ */
+#ifdef _UNIXWARE
+#define HAVE_BOOLEAN
+#endif
+
+
+
+/*
+ * AIX defines FD_SET in terms of bzero, but fails to include <strings.h>
+ * that defines bzero.
+ */
+
+#if defined(_AIX)
+#include <strings.h>
+#endif
+
+
+
+#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
+# include <sys/time.h>
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron())
+#endif
+
+
+
+#if !defined(HAVE_RES_INIT_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+int res_init(void);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+#if !defined(HAVE_STRLCAT_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+unsigned long strlcat(char*, const char*, unsigned long);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+#if !defined(HAVE_STRLCPY_PROTO)
+#ifdef __cplusplus
+extern "C" {
+#endif
+unsigned long strlcpy(char*, const char*, unsigned long);
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+
+/*
+ * On HP-UX, the declaration of vsnprintf() is needed every time !
+ */
+
+#if !defined(HAVE_VSNPRINTF) || defined(hpux)
+#if __STDC__
+#include <stdarg.h>
+#include <stdlib.h>
+#else
+#include <varargs.h>
+#endif
+#ifdef __cplusplus
+extern "C"
+#endif
+int vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
+#ifdef __cplusplus
+extern "C"
+#endif
+int snprintf(char *str, size_t n, char const *fmt, ...);
+#endif
+
+
+/* define to 1 if -fvisibility is supported */
+#undef __KDE_HAVE_GCC_VISIBILITY
+
+
+#if defined(__SVR4) && !defined(__svr4__)
+#define __svr4__ 1
+#endif
+
+
+/* type to use in place of socklen_t if not defined */
+#undef kde_socklen_t
+
+/* type to use in place of socklen_t if not defined (deprecated, use
+ kde_socklen_t) */
+#undef ksize_t
diff --git a/configure.files b/configure.files
new file mode 100644
index 0000000..030bce8
--- /dev/null
+++ b/configure.files
@@ -0,0 +1,2 @@
+./admin/configure.in.min
+configure.in.in
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..a197dc1
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,396 @@
+dnl =======================================================
+dnl FILE: ./admin/configure.in.min
+dnl =======================================================
+
+dnl This file is part of the KDE libraries/packages
+dnl Copyright (C) 2001 Stephan Kulow (coolo@kde.org)
+
+dnl This file is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Library General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2 of the License, or (at your option) any later version.
+
+dnl This library 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 GNU
+dnl Library General Public License for more details.
+
+dnl You should have received a copy of the GNU Library General Public License
+dnl along with this library; see the file COPYING.LIB. If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+dnl Boston, MA 02110-1301, USA.
+
+# Original Author was Kalle@kde.org
+# I lifted it in some mater. (Stephan Kulow)
+# I used much code from Janos Farkas
+
+dnl Process this file with autoconf to produce a configure script.
+
+AC_INIT(acinclude.m4) dnl a source file from your sub dir
+
+dnl This is so we can use kde-common
+AC_CONFIG_AUX_DIR(admin)
+
+dnl This ksh/zsh feature conflicts with `cd blah ; pwd`
+unset CDPATH
+
+dnl Checking host/target/build systems, for make, install etc.
+AC_CANONICAL_SYSTEM
+dnl Perform program name transformation
+AC_ARG_PROGRAM
+
+dnl Automake doc recommends to do this only here. (Janos)
+AM_INIT_AUTOMAKE(kmplayer, 0.10.0c) dnl searches for some needed programs
+
+KDE_SET_PREFIX
+
+dnl generate the config header
+AM_CONFIG_HEADER(config.h) dnl at the distribution this done
+
+dnl Checks for programs.
+AC_CHECK_COMPILERS
+AC_ENABLE_SHARED(yes)
+AC_ENABLE_STATIC(no)
+KDE_PROG_LIBTOOL
+
+dnl for NLS support. Call them in this order!
+dnl WITH_NLS is for the po files
+AM_KDE_WITH_NLS
+
+KDE_USE_QT(3)
+AC_PATH_KDE
+dnl =======================================================
+dnl FILE: configure.in.in
+dnl =======================================================
+
+#MIN_CONFIG(3)
+
+dnl PACKAGE set before
+
+KDE_ENABLE_HIDDEN_VISIBILITY
+
+AM_MAINTAINER_MODE
+
+AC_ARG_VAR(PKGCONFIGFOUND, [Path to pkg-config])
+AC_ARG_VAR(NSPRCONFIGFOUND, [Path to nspr-config])
+AC_CHECK_PROG(PKGCONFIGFOUND, pkg-config,[yes])
+
+AC_MSG_CHECKING(if koffice-plugin support is wanted)
+AC_ARG_ENABLE(koffice-plugin,
+[ --enable-koffice-plugin enable koffice plugin],
+[if test "$enableval" = yes; then
+ AC_MSG_RESULT(yes)
+ want_koffice_plugin="yes"
+else
+ AC_MSG_RESULT(no)
+fi], [AC_MSG_RESULT(no); want_koffice_plugin="no"])
+
+KDE_CHECK_HEADER(koDocument.h,
+ have_koffice=yes,
+ have_koffice=no)
+
+AC_MSG_CHECKING([if kmplayer can be compiled with koffice support])
+AC_MSG_RESULT($have_koffice)
+
+AM_CONDITIONAL(include_koffice_support, test "$want_koffice_plugin" = "yes" -a "$have_koffice" = "yes")
+if test "$want_koffice_plugin" = "yes" -a "$have_koffice" = "yes"; then
+ AC_DEFINE(HAVE_KOFFICE, 1, [If we have koffice installed])
+ LIB_KOFFICE="-lkofficecore -lkofficeui"
+ AC_SUBST(LIB_KOFFICE)
+fi
+
+AC_MSG_CHECKING(if expat XML parsing is wanted)
+AC_ARG_ENABLE(expat,
+[ --enable-expat use expat libs],
+[if test "$enableval" = yes; then
+ AC_MSG_RESULT(yes)
+ want_expat="yes"
+else
+ AC_MSG_RESULT(no)
+fi], [AC_MSG_RESULT(no); want_expat="no"])
+
+KDE_CHECK_HEADER(expat.h,
+ have_expat=yes,
+ have_expat=no)
+
+AC_MSG_CHECKING([if kmplayer can use expat its XML parser])
+AC_MSG_RESULT($have_expat)
+
+AM_CONDITIONAL(include_expat_support, test "$want_expat" = "yes" -a "$have_expat" = "yes")
+if test x$have_expat = xyes -a x$want_expat = xyes; then
+ AC_DEFINE(HAVE_EXPAT, 1, [If libexpat is installed])
+ LIB_EXPAT="-lexpat"
+ AC_SUBST(LIB_EXPAT)
+fi
+
+KDE_CHECK_HEADER(xine.h,
+ have_xine=yes,
+ have_xine=no)
+
+AC_MSG_CHECKING([if kxineplayer can be compiled])
+AC_MSG_RESULT($have_xine)
+
+AC_ARG_WITH(xine,
+ AC_HELP_STRING([--without-xine],[build KMPlayer without Xine [default=with]]),
+ [build_xine=$withval],
+ [build_xine=yes]
+)
+
+if test "$build_xine" != "no"; then
+ if test "$have_xine" = "yes"; then
+ vers=`xine-config --version 2>/dev/null | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'`
+ if test -n "$vers" && test "$vers" -ge 1000000
+ then
+ AC_DEFINE(HAVE_XINE, 1, [If we have libxine installed])
+ LIB_XINE="`xine-config --libs`"
+ AC_SUBST(LIB_XINE)
+ CFLAGS_XINE="`xine-config --cflags`"
+ AC_SUBST(CFLAGS_XINE)
+ else
+ have_xine="no"
+ AC_MSG_WARN([Your xine installation is too old (1.0.0 or later required)])
+ fi
+ fi
+else
+ have_xine="no"
+fi
+
+AM_CONDITIONAL(include_kxineplayer, test "$have_xine" = "yes")
+
+AC_ARG_WITH(gstreamer,
+ AC_HELP_STRING([--without-gstreamer],[build KMPlayer without GStreamer [default=with]]),
+ [build_gstreamer=$withval],
+ [build_gstreamer=yes]
+)
+
+if test "$build_gstreamer" != "no"; then
+ if test "$PKGCONFIGFOUND" = "yes" ; then
+ # check for GStreamer
+ dnl Now we're ready to ask for gstreamer libs and cflags
+ dnl And we can also ask for the right version of gstreamer
+
+ GST_MAJORMINOR=0.10
+ GST_REQ=0.10.0
+
+ PKG_CHECK_MODULES(GST, gstreamer-$GST_MAJORMINOR >= $GST_REQ,
+ have_gst=yes,have_gst=no)
+
+ PKG_CHECK_MODULES(GST_PLUGINS, gstreamer-plugins-base-$GST_MAJORMINOR >= $GST_REQ, \
+ have_gst_plugins=yes,have_gst_plugins=no)
+ LIB_GST=""
+ CFLAGS_GST=""
+ LIB_GST_PLUGINS=""
+ dnl Give error if we don't have gstreamer
+ if test "x$have_gst" = "xyes"; then
+ AC_SUBST(GST_MAJORMINOR)
+ AC_DEFINE(HAVE_GSTREAMER, 1, [have GStreamer])
+ LIB_GST=$GST_LIBS
+ CFLAGS_GST=$GST_CFLAGS
+ LIB_GST_PLUGINS=$GST_INTERFACES_LIBS
+ fi
+ AC_SUBST(LIB_GST)
+ AC_SUBST(CFLAGS_GST)
+ AC_SUBST(LIB_GST_PLUGINS)
+ fi
+fi
+AC_MSG_CHECKING([if kgstplayer can be compiled])
+if test "x$have_gst" = "xyes" && test "x$have_gst_plugins" = "xyes"; then
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_RESULT(no)
+fi
+
+AM_CONDITIONAL(include_kgstplayer, [test "x$have_gst" = "xyes" && test "x$have_gst_plugins" = "xyes"])
+
+buildnpp=yes
+LIBNSPR_LIBS=""
+LIBNSPR_CFLAGS=""
+LIBQTDBUS=""
+LIBDBUS_CFLAGS=""
+AC_ARG_ENABLE(nspr, [ --enable-npplayer Enables building with npp support],
+[if test "x$enableval" == "xno"; then
+ buildnpp=no
+ fi])
+if test "$buildnpp" = "yes"; then
+ if test "$PKGCONFIGFOUND" = "yes" ; then
+ DBUS_REQ=1.0.0
+ PKG_CHECK_MODULES(DBUS, dbus-1 >= $DBUS_REQ,
+ have_dbus=yes,have_dbus=no)
+ if test "x$have_dbus" = "xyes"; then
+ have_nspr=yes
+ AC_DEFINE(HAVE_DBUS, 1, [have DBus])
+ LIBQTDBUS="`$PKG_CONFIG --libs dbus-1` -ldbus-qt-1"
+ LIBDBUS_CFLAGS="`$PKG_CONFIG --cflags dbus-1`"
+ AC_DEFINE(HAVE_NSPR, 1, [build Netscape plugin loader])
+ LIBNSPR_LIBS="`$PKG_CONFIG --libs gtk+-x11-2.0` `$PKG_CONFIG --libs dbus-glib-1` `$PKG_CONFIG --libs gthread-2.0`"
+ LIBNSPR_CFLAGS="`$PKG_CONFIG --cflags gtk+-x11-2.0` `$PKG_CONFIG --cflags dbus-glib-1`"
+ fi
+ fi
+fi
+AC_SUBST(LIBNSPR_LIBS)
+AC_SUBST(LIBNSPR_CFLAGS)
+AC_SUBST(LIBQTDBUS)
+AC_SUBST(LIBDBUS_CFLAGS)
+
+AM_CONDITIONAL(include_knpplayer, test "$have_nspr" = "yes")
+
+hascairo=yes
+LIBCAIRO_LIBS=""
+LIBCAIRO_CFLAGS=""
+AC_ARG_ENABLE(cairo, [ --enable-cairo Enables building with cairo support],
+[if test "x$enableval" == "xno"; then
+ hascairo=no
+ fi])
+if test $hascairo = yes; then
+ AC_MSG_CHECKING([Checking for cairo with pkg-config])
+ hascairo=no
+ if test -n "$PKG_CONFIG"; then
+ LIBCAIRO_LIBS="`$PKG_CONFIG cairo --libs`"
+ LIBCAIRO_CFLAGS="`$PKG_CONFIG cairo --cflags`"
+ if test -n "$LIBCAIRO_LIBS" || test -n "$LIBCAIRO_CFLAGS"; then
+ AC_MSG_RESULT([found])
+ hascairo=yes
+ else
+ AC_MSG_RESULT([not found])
+ fi
+ else
+ AC_MSG_RESULT([failed: pkg-config not found])
+ fi
+ if test $hascairo = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_CAIRO, 1, [Defines if your system has the cairo library])
+ else
+ AC_MSG_WARN([Couldn't find a usable cairo])
+ fi
+fi
+AC_SUBST(LIBCAIRO_LIBS)
+AC_SUBST(LIBCAIRO_CFLAGS)
+
+KDE_CHECK_BINUTILS
+
+AC_MSG_CHECKING([for KDE version])
+
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+kdeversion_save_CXXFLAGS="$CXXFLAGS"
+kdeversion_safe_LIBS="$LIBS"
+LIBS="$LIBS $X_EXTRA_LIBS"
+CXXFLAGS="$CXXFLAGS $all_includes"
+
+AC_COMPILE_IFELSE([
+#include <kdeversion.h>
+#if ! ( KDE_IS_VERSION( 3, 3, 91 ) )
+#error KDE 3.3
+#endif
+],
+ need_kde33_compat="no"
+,
+ need_kde33_compat="yes"
+)
+
+AC_COMPILE_IFELSE([
+#include <kdeversion.h>
+#if ! ( KDE_IS_VERSION( 3, 2, 90 ) )
+#error KDE 3.2
+#endif
+],
+ need_kde32_compat="no"
+,
+ need_kde32_compat="yes"
+)
+
+AC_COMPILE_IFELSE([
+#include <kdeversion.h>
+#if ! ( KDE_IS_VERSION( 3, 1, 90 ) )
+#error KDE 3.1
+#endif
+],
+ need_kde31_compat="no"
+,
+ need_kde31_compat="yes"
+)
+
+CXXFLAGS="$kdeversion_save_CXXFLAGS"
+LIBS="$kdeversion_safe_LIBS"
+AC_LANG_RESTORE
+
+if test "$need_kde32_compat" = "yes"; then
+ AC_MSG_RESULT([KDE 3.2.x])
+fi
+
+if test "$need_kde31_compat" = "yes"; then
+ AC_MSG_RESULT([KDE 3.1.x])
+fi
+
+AM_CONDITIONAL(need_kde33_compatibility, test "$need_kde33_compat" = "yes")
+AM_CONDITIONAL(need_kde32_compatibility, test "$need_kde32_compat" = "yes")
+AM_CONDITIONAL(need_kde31_compatibility, test "$need_kde31_compat" = "yes")
+
+KDE_CREATE_SUBDIRSLIST
+AC_CONFIG_FILES([ Makefile ])
+AC_CONFIG_FILES([ doc/Makefile ])
+AC_CONFIG_FILES([ doc/da/Makefile ])
+AC_CONFIG_FILES([ doc/de/Makefile ])
+AC_CONFIG_FILES([ doc/en/Makefile ])
+AC_CONFIG_FILES([ doc/es/Makefile ])
+AC_CONFIG_FILES([ doc/et/Makefile ])
+AC_CONFIG_FILES([ doc/fr/Makefile ])
+AC_CONFIG_FILES([ doc/it/Makefile ])
+AC_CONFIG_FILES([ doc/nl/Makefile ])
+AC_CONFIG_FILES([ doc/pt/Makefile ])
+AC_CONFIG_FILES([ doc/ru/Makefile ])
+AC_CONFIG_FILES([ doc/sv/Makefile ])
+AC_CONFIG_FILES([ icons/Makefile ])
+AC_CONFIG_FILES([ mimetypes/Makefile ])
+AC_CONFIG_FILES([ mimetypes/application/Makefile ])
+AC_CONFIG_FILES([ mimetypes/audio/Makefile ])
+AC_CONFIG_FILES([ mimetypes/video/Makefile ])
+AC_CONFIG_FILES([ mimetypes/video/kde31/Makefile ])
+AC_CONFIG_FILES([ po/Makefile ])
+AC_CONFIG_FILES([ protocols/Makefile ])
+AC_CONFIG_FILES([ src/Makefile ])
+AC_OUTPUT
+# Check if KDE_SET_PREFIX was called, and --prefix was passed to configure
+if test -n "$kde_libs_prefix" -a -n "$given_prefix"; then
+ # And if so, warn when they don't match
+ if test "$kde_libs_prefix" != "$given_prefix"; then
+ # And if kde doesn't know about the prefix yet
+ echo ":"`kde-config --path exe`":" | grep ":$given_prefix/bin/:" 2>&1 >/dev/null
+ if test $? -ne 0; then
+ echo ""
+ echo "Warning: you chose to install this package in $given_prefix,"
+ echo "but KDE was found in $kde_libs_prefix."
+ echo "For this to work, you will need to tell KDE about the new prefix, by ensuring"
+ echo "that KDEDIRS contains it, e.g. export KDEDIRS=$given_prefix:$kde_libs_prefix"
+ echo "Then restart KDE."
+ echo ""
+ fi
+ fi
+fi
+
+if test x$GXX = "xyes" -a x$kde_have_gcc_visibility = "xyes" -a x$kde_cv_val_qt_gcc_visibility_patched = "xno"; then
+ echo ""
+ echo "Your GCC supports symbol visibility, but the patch for Qt supporting visibility"
+ echo "was not included. Therefore, GCC symbol visibility support remains disabled."
+ echo ""
+ echo "For better performance, consider including the Qt visibility supporting patch"
+ echo "located at:"
+ echo ""
+ echo "http://bugs.kde.org/show_bug.cgi?id=109386"
+ echo ""
+ echo "and recompile all of Qt and KDE. Note, this is entirely optional and"
+ echo "everything will continue to work just fine without it."
+ echo ""
+fi
+
+if test "$all_tests" = "bad"; then
+ if test ! "$cache_file" = "/dev/null"; then
+ echo ""
+ echo "Please remove the file $cache_file after changing your setup"
+ echo "so that configure will find the changes next time."
+ echo ""
+ fi
+else
+ echo ""
+ echo "Good - your configure finished. Start make now"
+ echo ""
+fi
diff --git a/configure.in.in b/configure.in.in
new file mode 100644
index 0000000..d302f38
--- /dev/null
+++ b/configure.in.in
@@ -0,0 +1,262 @@
+#MIN_CONFIG(3)
+
+AM_INIT_AUTOMAKE(kmplayer,0.10.0c)
+
+KDE_ENABLE_HIDDEN_VISIBILITY
+
+AM_MAINTAINER_MODE
+
+AC_ARG_VAR(PKGCONFIGFOUND, [Path to pkg-config])
+AC_ARG_VAR(NSPRCONFIGFOUND, [Path to nspr-config])
+AC_CHECK_PROG(PKGCONFIGFOUND, pkg-config,[yes])
+
+AC_MSG_CHECKING(if koffice-plugin support is wanted)
+AC_ARG_ENABLE(koffice-plugin,
+[ --enable-koffice-plugin enable koffice plugin],
+[if test "$enableval" = yes; then
+ AC_MSG_RESULT(yes)
+ want_koffice_plugin="yes"
+else
+ AC_MSG_RESULT(no)
+fi], [AC_MSG_RESULT(no); want_koffice_plugin="no"])
+
+KDE_CHECK_HEADER(koDocument.h,
+ have_koffice=yes,
+ have_koffice=no)
+
+AC_MSG_CHECKING([if kmplayer can be compiled with koffice support])
+AC_MSG_RESULT($have_koffice)
+
+AM_CONDITIONAL(include_koffice_support, test "$want_koffice_plugin" = "yes" -a "$have_koffice" = "yes")
+if test "$want_koffice_plugin" = "yes" -a "$have_koffice" = "yes"; then
+ AC_DEFINE(HAVE_KOFFICE, 1, [If we have koffice installed])
+ LIB_KOFFICE="-lkofficecore -lkofficeui"
+ AC_SUBST(LIB_KOFFICE)
+fi
+
+AC_MSG_CHECKING(if expat XML parsing is wanted)
+AC_ARG_ENABLE(expat,
+[ --enable-expat use expat libs],
+[if test "$enableval" = yes; then
+ AC_MSG_RESULT(yes)
+ want_expat="yes"
+else
+ AC_MSG_RESULT(no)
+fi], [AC_MSG_RESULT(no); want_expat="no"])
+
+KDE_CHECK_HEADER(expat.h,
+ have_expat=yes,
+ have_expat=no)
+
+AC_MSG_CHECKING([if kmplayer can use expat its XML parser])
+AC_MSG_RESULT($have_expat)
+
+AM_CONDITIONAL(include_expat_support, test "$want_expat" = "yes" -a "$have_expat" = "yes")
+if test x$have_expat = xyes -a x$want_expat = xyes; then
+ AC_DEFINE(HAVE_EXPAT, 1, [If libexpat is installed])
+ LIB_EXPAT="-lexpat"
+ AC_SUBST(LIB_EXPAT)
+fi
+
+KDE_CHECK_HEADER(xine.h,
+ have_xine=yes,
+ have_xine=no)
+
+AC_MSG_CHECKING([if kxineplayer can be compiled])
+AC_MSG_RESULT($have_xine)
+
+AC_ARG_WITH(xine,
+ AC_HELP_STRING([--without-xine],[build KMPlayer without Xine [default=with]]),
+ [build_xine=$withval],
+ [build_xine=yes]
+)
+
+if test "$build_xine" != "no"; then
+ if test "$have_xine" = "yes"; then
+ vers=`xine-config --version 2>/dev/null | awk 'BEGIN { FS = "."; } { printf "%d", ($1 * 1000 + $2) * 1000 + $3;}'`
+ if test -n "$vers" && test "$vers" -ge 1000000
+ then
+ AC_DEFINE(HAVE_XINE, 1, [If we have libxine installed])
+ LIB_XINE="`xine-config --libs`"
+ AC_SUBST(LIB_XINE)
+ CFLAGS_XINE="`xine-config --cflags`"
+ AC_SUBST(CFLAGS_XINE)
+ else
+ have_xine="no"
+ AC_MSG_WARN([Your xine installation is too old (1.0.0 or later required)])
+ fi
+ fi
+else
+ have_xine="no"
+fi
+
+AM_CONDITIONAL(include_kxineplayer, test "$have_xine" = "yes")
+
+AC_ARG_WITH(gstreamer,
+ AC_HELP_STRING([--without-gstreamer],[build KMPlayer without GStreamer [default=with]]),
+ [build_gstreamer=$withval],
+ [build_gstreamer=yes]
+)
+
+if test "$build_gstreamer" != "no"; then
+ if test "$PKGCONFIGFOUND" = "yes" ; then
+ # check for GStreamer
+ dnl Now we're ready to ask for gstreamer libs and cflags
+ dnl And we can also ask for the right version of gstreamer
+
+ GST_MAJORMINOR=0.10
+ GST_REQ=0.10.0
+
+ PKG_CHECK_MODULES(GST, gstreamer-$GST_MAJORMINOR >= $GST_REQ,
+ have_gst=yes,have_gst=no)
+
+ PKG_CHECK_MODULES(GST_PLUGINS, gstreamer-plugins-base-$GST_MAJORMINOR >= $GST_REQ, \
+ have_gst_plugins=yes,have_gst_plugins=no)
+ LIB_GST=""
+ CFLAGS_GST=""
+ LIB_GST_PLUGINS=""
+ dnl Give error if we don't have gstreamer
+ if test "x$have_gst" = "xyes"; then
+ AC_SUBST(GST_MAJORMINOR)
+ AC_DEFINE(HAVE_GSTREAMER, 1, [have GStreamer])
+ LIB_GST=$GST_LIBS
+ CFLAGS_GST=$GST_CFLAGS
+ LIB_GST_PLUGINS=$GST_INTERFACES_LIBS
+ fi
+ AC_SUBST(LIB_GST)
+ AC_SUBST(CFLAGS_GST)
+ AC_SUBST(LIB_GST_PLUGINS)
+ fi
+fi
+AC_MSG_CHECKING([if kgstplayer can be compiled])
+if test "x$have_gst" = "xyes" && test "x$have_gst_plugins" = "xyes"; then
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_RESULT(no)
+fi
+
+AM_CONDITIONAL(include_kgstplayer, [test "x$have_gst" = "xyes" && test "x$have_gst_plugins" = "xyes"])
+
+buildnpp=yes
+LIBNSPR_LIBS=""
+LIBNSPR_CFLAGS=""
+LIBQTDBUS=""
+LIBDBUS_CFLAGS=""
+AC_ARG_ENABLE(nspr, [ --enable-npplayer Enables building with npp support],
+[if test "x$enableval" == "xno"; then
+ buildnpp=no
+ fi])
+if test "$buildnpp" = "yes"; then
+ if test "$PKGCONFIGFOUND" = "yes" ; then
+ DBUS_REQ=1.0.0
+ PKG_CHECK_MODULES(DBUS, dbus-1 >= $DBUS_REQ,
+ have_dbus=yes,have_dbus=no)
+ if test "x$have_dbus" = "xyes"; then
+ have_nspr=yes
+ AC_DEFINE(HAVE_DBUS, 1, [have DBus])
+ LIBQTDBUS="`$PKG_CONFIG --libs dbus-1` -ldbus-qt-1"
+ LIBDBUS_CFLAGS="`$PKG_CONFIG --cflags dbus-1`"
+ AC_DEFINE(HAVE_NSPR, 1, [build Netscape plugin loader])
+ LIBNSPR_LIBS="`$PKG_CONFIG --libs gtk+-x11-2.0` `$PKG_CONFIG --libs dbus-glib-1` `$PKG_CONFIG --libs gthread-2.0`"
+ LIBNSPR_CFLAGS="`$PKG_CONFIG --cflags gtk+-x11-2.0` `$PKG_CONFIG --cflags dbus-glib-1`"
+ fi
+ fi
+fi
+AC_SUBST(LIBNSPR_LIBS)
+AC_SUBST(LIBNSPR_CFLAGS)
+AC_SUBST(LIBQTDBUS)
+AC_SUBST(LIBDBUS_CFLAGS)
+
+AM_CONDITIONAL(include_knpplayer, test "$have_nspr" = "yes")
+
+hascairo=yes
+LIBCAIRO_LIBS=""
+LIBCAIRO_CFLAGS=""
+AC_ARG_ENABLE(cairo, [ --enable-cairo Enables building with cairo support],
+[if test "x$enableval" == "xno"; then
+ hascairo=no
+ fi])
+if test $hascairo = yes; then
+ AC_MSG_CHECKING([Checking for cairo with pkg-config])
+ hascairo=no
+ if test -n "$PKG_CONFIG"; then
+ LIBCAIRO_LIBS="`$PKG_CONFIG cairo --libs`"
+ LIBCAIRO_CFLAGS="`$PKG_CONFIG cairo --cflags`"
+ if test -n "$LIBCAIRO_LIBS" || test -n "$LIBCAIRO_CFLAGS"; then
+ AC_MSG_RESULT([found])
+ hascairo=yes
+ else
+ AC_MSG_RESULT([not found])
+ fi
+ else
+ AC_MSG_RESULT([failed: pkg-config not found])
+ fi
+ if test $hascairo = yes; then
+ AC_DEFINE_UNQUOTED(HAVE_CAIRO, 1, [Defines if your system has the cairo library])
+ else
+ AC_MSG_WARN([Couldn't find a usable cairo])
+ fi
+fi
+AC_SUBST(LIBCAIRO_LIBS)
+AC_SUBST(LIBCAIRO_CFLAGS)
+
+KDE_CHECK_BINUTILS
+
+AC_MSG_CHECKING([for KDE version])
+
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+kdeversion_save_CXXFLAGS="$CXXFLAGS"
+kdeversion_safe_LIBS="$LIBS"
+LIBS="$LIBS $X_EXTRA_LIBS"
+CXXFLAGS="$CXXFLAGS $all_includes"
+
+AC_COMPILE_IFELSE([
+#include <kdeversion.h>
+#if ! ( KDE_IS_VERSION( 3, 3, 91 ) )
+#error KDE 3.3
+#endif
+],
+ need_kde33_compat="no"
+,
+ need_kde33_compat="yes"
+)
+
+AC_COMPILE_IFELSE([
+#include <kdeversion.h>
+#if ! ( KDE_IS_VERSION( 3, 2, 90 ) )
+#error KDE 3.2
+#endif
+],
+ need_kde32_compat="no"
+,
+ need_kde32_compat="yes"
+)
+
+AC_COMPILE_IFELSE([
+#include <kdeversion.h>
+#if ! ( KDE_IS_VERSION( 3, 1, 90 ) )
+#error KDE 3.1
+#endif
+],
+ need_kde31_compat="no"
+,
+ need_kde31_compat="yes"
+)
+
+CXXFLAGS="$kdeversion_save_CXXFLAGS"
+LIBS="$kdeversion_safe_LIBS"
+AC_LANG_RESTORE
+
+if test "$need_kde32_compat" = "yes"; then
+ AC_MSG_RESULT([KDE 3.2.x])
+fi
+
+if test "$need_kde31_compat" = "yes"; then
+ AC_MSG_RESULT([KDE 3.1.x])
+fi
+
+AM_CONDITIONAL(need_kde33_compatibility, test "$need_kde33_compat" = "yes")
+AM_CONDITIONAL(need_kde32_compatibility, test "$need_kde32_compat" = "yes")
+AM_CONDITIONAL(need_kde31_compatibility, test "$need_kde31_compat" = "yes")
+
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..0d0e4de
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = da de en es et fr it nl pt ru sv
diff --git a/doc/da/Makefile.am b/doc/da/Makefile.am
new file mode 100644
index 0000000..344f26a
--- /dev/null
+++ b/doc/da/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = index.docbook
+
+
+KDE_LANG = da
+KDE_DOCS = kmplayer
diff --git a/doc/da/index.docbook b/doc/da/index.docbook
new file mode 100644
index 0000000..a1f5928
--- /dev/null
+++ b/doc/da/index.docbook
@@ -0,0 +1,571 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!ENTITY kmplayer '<application
+>Kmplayer</application
+>'>
+ <!ENTITY kappname "&kmplayer;"
+><!-- replace kmplayer here -->
+ <!ENTITY package "kdeextragear-2">
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % Danish "INCLUDE"
+><!-- change language only here -->
+
+]>
+
+<book lang="&language;">
+
+
+<bookinfo>
+<title
+>&kmplayer;-håndbogen</title>
+
+<authorgroup>
+<author
+><firstname
+>Koos</firstname
+> <surname
+>Vriezen</surname
+> <affiliation
+> <address
+><email
+>koos dot vriezen at gmail dot com</email
+></address>
+</affiliation>
+</author>
+</authorgroup>
+
+&erik.kjaer.pedersen.role;
+
+<copyright>
+<year
+>2002</year>
+<year
+>2006</year>
+<holder
+>Koos Vriezen</holder>
+</copyright>
+<!-- Translators: put here the copyright notice of the translation -->
+<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
+ and in the FDL itself on how to use it. -->
+<legalnotice
+>&FDLNotice;</legalnotice>
+
+
+<date
+>2003-12-24</date>
+<releaseinfo
+>0.05.00</releaseinfo>
+
+<!-- Abstract about this handbook -->
+
+<abstract>
+<para
+>&kmplayer; er et program som er en &kde;-grænseflade for <application
+>Mplayer</application
+>, <application
+>Xine</application
+> og <application
+>GStreamer</application
+>. </para>
+</abstract>
+
+
+<keywordset>
+<keyword
+>KDE</keyword>
+<keyword
+>kdemultimedia</keyword>
+<keyword
+>MPlayer</keyword>
+<keyword
+>konqueror</keyword>
+<keyword
+>video</keyword>
+</keywordset>
+
+</bookinfo>
+
+<chapter id="introduction">
+<title
+>Indledning</title>
+<para
+>&kmplayer; er en simpel grænseflade for <application
+>Mplayer</application
+>, <application
+>Xine</application
+>, <application
+>Gstreamer</application
+> og <application
+>FFMpeg</application
+>. Du kan bruge det til at kigge på alle filmfilformat som <application
+>Mplayer</application
+>, <application
+>Xine</application
+> eller <application
+>Gstreamer</application
+> understøtter, samt kigge på en <acronym
+>dvd</acronym
+>, <acronym
+>vcd</acronym
+> eller <acronym
+>tv</acronym
+> og kamera. </para>
+<para
+>Dokumentationen for &kappname; var ikke færdig da &kde; blev installeret på denne computer.</para
+> <para
+>Hvis du behøver mere hjælp, kig på <ulink url="http://www.kde.org"
+>KDE's hjemmeside</ulink
+> for opdateringer, eller send dit spørgsmål til <ulink url="mailto:kde-user@kde.org"
+>&kde;'s e-mail-liste for brugere</ulink
+>. </para>
+<para
+><emphasis
+>&kde;-gruppen</emphasis
+></para>
+
+</chapter>
+<chapter id="gui">
+<title
+>Brugergrænsefladen</title>
+<para
+>Programvinduet består af såkaldte dokningsbare vinduer. Det centrale visningsvindue findes altid. Desuden er der et valgfrit spillelistevindue. Endelig er der et informationsvindue, som kun vises når der er en information at vise. </para>
+<section id="playlistwindow">
+<title
+>Spillelistevinduet</title>
+<para
+>Spillelistevinduet har fem kategorier når dette skrives, nuværende punkt, <guilabel
+>Optiske diske</guilabel
+>, <guilabel
+>Television</guilabel
+>, <guilabel
+>Bevarede spillelister</guilabel
+> og <guilabel
+>Nyligste</guilabel
+>. Ved et klik på en kategoris tekst vises dens indhold under linjen. Der skal naturligvis være noget indhold, se for eksempel <link linkend="tvsource"
+><acronym
+>TV</acronym
+>-indstillinger</link
+> om hvordan man tilføjer indhold for kategorien <guilabel
+>Television</guilabel
+>. Kategorien <guilabel
+>Nyligste</guilabel
+> udfyldes i når lokale mediafiler eller netværks-url'er afspilles. Denne kategori kan indeholde 60 punkter, hvoraf de sidste 50 er under grenen <guilabel
+>Mere...</guilabel
+>. </para>
+<section>
+<title
+>Kategorien Bevarede spillelister</title>
+<para
+>Det er muligt at opbevare dine favoritlink i menuen <guilabel
+>Bogmærker</guilabel
+>, men de er enkelte punkter. Hvis du vil oprette en liste med punkter som spilles i rækkefølge, skal du bruge kategorien <guilabel
+>Bevarede spillelister</guilabel
+>. </para>
+<para
+>Den nemmeste måde at tilføje et punkt til listen er at trække det fra <guilabel
+>Nyligste</guilabel
+> og slippe det på <guilabel
+>Bevarede spillelister</guilabel
+>. Som du vil se, vises en menu når du slipper det, hvor du kan vælge at tilføje det til denne liste eller oprette en ny gruppe. Punkter på øverste niveau opfører sig som bogmærkepunkter, men punkter i grupper afspiller hele gruppen som de indgår i. Punkter i denne kategori kan nemt flyttes, kopieres, tilføjes til en ny gruppe eller fjernes, blot ved at trække punktet til et andet sted i kategorien. Desuden er der valgmulighederne <guimenu
+>Slet punkt</guimenu
+>, <guimenu
+>Flyt opad</guimenu
+> og <guimenu
+>Flyt nedad</guimenu
+> i den sammenhængsafhængige menu (ved klik med højre museknap på et punkt). </para>
+<para
+>Du kan naturligvis tilføje grupper til grupper for at få et dybere hierarki. Ved klik på et punkt, kopieres dets gruppe og alle undergrupper til den nuværende kategori, og afspilning begynder på det klikkede punkts position. </para>
+<section>
+<title
+>Opbevaringsformat</title>
+<para
+>Data opbevares i <filename
+>~/.kde/share/apps/kmplayer/playlist.xml</filename
+>, og dets format er som i dette eksempel. Kig <link linkend="XML-editing"
+>her</link
+> om hvordan man håndterer denne data direkte. <programlisting>
+&lt;playlist&gt;
+ &lt;group title="feeds"&gt;
+ &lt;item url="http://www.lugradio.org/episodes.rss"/&gt;
+ &lt;item url="http://science.nasa.gov/podcast.xml"/&gt;
+ &lt;item url="http://www.theworld.org/rss/tech.xml"/&gt;
+ &lt;/group&gt;
+ &lt;group title="iradio"&gt;
+ &lt;group title="sunny"&gt;
+ &lt;item mplayeropts="-cache 256" url="http://www.swissgroove.ch/listen.m3u"/&gt;
+ &lt;item url="http://www.boombasticradio.com/shoutcast/64.pls"/&gt;
+ &lt;/group&gt;
+ &lt;group title="rainy"&gt;
+ &lt;item url="http://www.radioparadise.com/musiclinks/rp_64.m3u"/&gt;
+ &lt;item url="http://www.woxy.com/stream/wma64.asx"/&gt;
+ &lt;item url="http://radionigel.com/winmedia.asx"/&gt;
+ &lt;item url="rtsp://livestreams.omroep.nl/live/vpro/vpro3voor12radioalt.rm"/&gt;
+ &lt;/group&gt;
+ &lt;/group&gt;
+&lt;/playlist&gt;
+</programlisting
+> Bemærk også at egne tilvalg kan indstilles med flaget <computeroutput
+>mplayeropts</computeroutput
+> for <application
+>Mplayer</application
+>. &kmplayer; søger opad i træet efter dette flag, så du kan indstille det for en hel gruppe og sætte det ud af kraft for en undergruppe eller for et punkt. </para>
+</section>
+</section>
+</section>
+<section id="XML-editing">
+<title
+>Direkte XML-redigering</title>
+<para
+>Kategorierne Seneste, <guilabel
+>Television</guilabel
+> og <guilabel
+>Bevarede spillelister</guilabel
+> kan også håndteres ved at redigere deres <acronym
+>XML</acronym
+>-opbevaring. Man kan naturligvis gøre det når &kmplayer; ikke kører, og redigere de forskellige filer i <filename
+>~/.kde/share/apps/kmplayer/</filename
+>, men også i selve programmet. Klik blot på en kategorioverskrift, og vælg derefter <guimenu
+>Vis</guimenu
+> og siden <guimenu
+>Redigeringstilstand</guimenu
+>. Du kan også klikke på en undergren og så ser du kun <acronym
+>XML</acronym
+>-indholdet for grenen. </para>
+<para
+>Efter at du har redigeret noget <acronym
+>XML</acronym
+>, klikkes på <guilabel
+>Synkronisér med spilleliste</guilabel
+> og afmarkér enten tilvalget <guimenu
+>Redigeringstilstand</guimenu
+> eller klik på en anden kategori. <caution
+><para
+>Alle ændringer går tabt hvis du forlader redigeringstilstand eller vælger en anden gren uden at synkronisere med spillelisten. </para
+></caution>
+</para>
+<para
+>På grund af dovenskab blandt &kmplayer;s forfattere, kan visse funktioner kun aktiveres ved at redigere XML. </para>
+</section>
+</chapter>
+<chapter id="settings">
+<title
+>Opsætning</title>
+<section>
+ <title
+>Animering ved start og afslutning</title>
+ <para
+>Deaktivering af start- og slutanimeringen kan udføres ved at redigere <filename
+>~/.kde/share/config/kmplayerrc</filename
+> og ændre <programlisting>
+[General Options]
+ No Intro=0
+ </programlisting
+> ovenstående tilvalg til '1'. Tilføj blot dette tilvalg hvis der ikke allerede er der. </para>
+<para
+>Det er også muligt at angive alternative animeringer. Kmplayer kigger på <filename
+>~/.kde/share/apps/kmplayer/intro.xml</filename
+> og <filename
+>~/.kde/share/apps/kmplayer/exit.xml</filename
+>. Formatet skal være en <acronym
+>XML</acronym
+>-fil som understøttes. </para>
+<para
+>Den indledende animering behøver ikke være kort, eftersom den automatisk slutter når en anden kilde åbnes. Dette ville naturligvis være noget irriterende for slutanimeringen, men brugeren kan altid afslutte programmet to gange. </para>
+<para
+>Et simpelt eksempel på en indledning, som viser dit favoritfoto kunne være <programlisting>
+&lt;smil&gt;
+ &lt;body&gt;
+ &lt;img dur="indefinite" src="file:///home/bruger/lillemor.gif" fit="meet"/&gt;
+ &lt;/body&gt;
+&lt;/smil&gt;
+ </programlisting
+> I Kmplayers kildekodepakke, under <filename
+>tests/</filename
+> er der nogle eksempler på <acronym
+>SMIL</acronym
+> som Kmplayer understøtter. </para>
+</section>
+</chapter>
+<chapter id="backends">
+<title
+>Afspilningsgrænsefladen</title>
+<para
+>&kmplayer; bruger eksterne programmer til at udføre selve afspilningen. </para>
+<section id="mplayer">
+<title
+>MPlayer</title>
+<para
+>Der er et indstillingsfaneblad for Mplayer i &kmplayer;s indstillingsdialog. Der kan man blandt andet indstille søgestien til Mplayer og dets cachestørrelse for netværksstrømme. </para>
+<section id="mplayer-debug">
+<title
+>Fejlsøgning</title>
+<para
+>Den bedste måde at fejlsøge i grænsefladen er at starte &kmplayer; fra et terminalprogram såsom konsole. Start derefter en film med Kmplayer og se nøjagtigt den kommandolinje som bruges til at starte Mplayer i terminalprogrammet. Kopiér og indsæt den nu i et andet terminalprogram, fjerne flaget '-wid 12344' og spil den. Formodentlig er det blot om at vælge rigtige parametre for -ao og -vo. Sørg også for at Mplayer ikke er forudindstillet til at starte med en grafisk grænseflade. </para>
+<para
+>Et andet fejlsøgningsværktøj er knappen 'Terminal' i Kmplayers værktøjslinje. Der kan du se uddataen fra Mplayer. </para>
+</section>
+</section>
+<section id="xine">
+<title
+>Xine</title>
+<para
+>Når &kmplayer; er konfigureret med understøttelse for Xine, er der indstillingsfaneblade for Xine i &kmplayer;s indstillingsdialog. Der kan du indstille diverse tilvalg. Disse tilvalg hentes dynamisk fra Xines bibliotek. Brug den sammenhængsafhængige hjælp til at få information om hvad valgmulighederne gør (dvs. klikke på spørgsmålstegnet i dialogens navnelist og klik derefter på et tilvalg). </para>
+<para
+>Tilvalgene gemmes i <filename
+>.kde/share/apps/kmplayer/xine_config</filename
+> som et tekstdokument. </para>
+<section id="xine-debug">
+<title
+>Fejlsøgning</title>
+<para
+>Hovedsageligt på samme måde at fejlsøge som for <link linkend="mplayer-debug"
+>Mplayer</link
+>, men med progravnavnet <filename
+>kxineplayer</filename
+>. </para>
+</section>
+</section>
+<section id="gstreamer">
+<title
+>GStreamer</title>
+<para
+>Der er intet indstillingsfaneblad for Gstreamer i &kmplayer;s indstillingsdialog. De sædvanlige valgmulighederne for f.eks. <acronym
+>dvd</acronym
+>-enheder bruges når det passer. </para>
+<section id="gstremaer-debug">
+<title
+>Fejlsøgning</title>
+<para
+>Hovedsagelig på samme måde at fejlsøge som for <link linkend="mplayer-debug"
+>Mplayer</link
+>, men med programnavnet <filename
+>kgstplayer</filename
+>. </para>
+</section>
+</section>
+</chapter>
+<chapter id="sources">
+<title
+>Kilder som kan afspilles</title>
+<para
+>&kmplayer; kan afspille forskellige kilder. Disse kilder listes i menuen Kilde. </para>
+<section id="tvsource">
+ <title
+>TV</title>
+ <para
+>&kmplayer; kan afspille fra et tv-kort med <application
+>Mplayer</application
+> eller <acronym
+>Xvideo</acronym
+> (ved brug af <application
+>kxvplayer</application
+>). Inden du kan kigge på tv skal du indstille hvilken enhed som skal bruges, og tv-kanalerne. Du kan bruge søgefunktionen i indstillingsdialogen til dette, eller redigere indstillingsfilen manuelt. </para>
+<para
+>Indstillingsfilen for tv-indstillingerne er en <acronym
+>XML</acronym
+>-fil, med navnet <filename
+>~/.kde/share/apps/kmplayer/tv.xml</filename
+>. Kig <link linkend="XML-editing"
+>her</link
+> om hvordan man håndterer denne data direkte. <acronym
+>XML</acronym
+>-formatet er som følgende eksempel: <programlisting>
+&lt;tvdevices&gt;
+ &lt;device path="/dev/video0" width="320" height="240" name="BT878 video (Hauppauge (bt878))" audio=""
+ minwidth="48" minheight="32" maxwidth="924" maxheight="576" playback="0" xvport="240"&gt;
+ &lt;input name="Television" id="0" tuner="1" norm="PAL" xvenc="0"&gt;
+ &lt;channel name="Ned1" frequency="21600"/&gt;
+ &lt;channel name="VCR" frequency="59490"/&gt;
+ &lt;/input&gt;
+ &lt;input name="Composite1" id="1" xvenc="7"/&gt;
+ &lt;input name="S-Video" id="2" xvenc="14"/&gt;
+ &lt;input name="Composite3" id="3"/&gt;
+ &lt;/device&gt;
+ &lt;device path="/dev/video1" width="640" height="480" name="Philips 740 webcam" audio=""
+ minwidth="160" minheight="120" maxwidth="640" maxheight="480" playback="1"&gt;
+ &lt;input name="Webcam" id="0"/&gt;
+ &lt;/device&gt;
+&lt;/tvdevices&gt;
+</programlisting
+> Bemærk at elementerne <quote
+>input</quote
+> som har kanaler, skal have egenskaben <quote
+>tuner</quote
+> indstillet til <quote
+>1</quote
+>. </para>
+<para
+><acronym
+>Xvideo</acronym
+> bruger kun egenskaberne <quote
+>xvport</quote
+> og <quote
+>xvenc</quote
+> og kan kun indstilles ved at redigere filen manuelt. Egenskabernes værdier kan hentes ved at køre <quote
+>kxvplayer</quote
+> i et terminalvindue såsom <quote
+>konsole</quote
+>. For hver port skriver <quote
+>kxvplayer</quote
+> linjer ud som vises nedenfor, og værdierne kan indstilles for de nævnte egenskaber. <programlisting>
+ xvport 240
+ ....
+ encoding: 0 PAL-television
+ encoding: 1 NTSC-television
+ encoding: 2 SECAM-television
+ ....
+</programlisting
+> Desuden ignoreres egenskaberne bredde og højde af <acronym
+>Xvideo</acronym
+>-afspilleren. Afspilleren henter størrelserna fra X-serveren. En af de gode ting ved <acronym
+>Xvideo</acronym
+> er at skalering gøres i hardware af videokortet, hvilket giver understøttelse for fuldskærmsvisning uden processorbrug og uden at ændre billedskærmens opløsning. Desuden opstår der ikke noget irriterende flimmer når et andet vindue overlapper videovinduet. </para>
+<para
+>Se afsnittet VDR for mere information om at bruge <acronym
+>Xvideo</acronym
+>. </para>
+</section>
+<section id="vdrsource">
+ <title
+>VDR</title>
+<para
+>For at indstille VDR-indstillinger i Kmplayer, bruges indstillingsfeltet Kilde -> VDR -> Xvideo port. Der skal være detekterede porte, hvorfra du skal vælge en. Du skal regne ud hvilken kodning du skal bruge (i vesteuropa er det f.eks. PAL) og formodentlig har den rigtige et navn som indeholder <quote
+>dvb</quote
+>. </para>
+<para
+>Jeg har for eksempel et tv-kort, et DVB-S kort og en web-kamera sluttet til i mit system. Med disse har mine indstillinger tre porte. Den første har en lang liste med NTSC(-JP)/PAL(-M)/SECAM-indgange som alle indeholder noget med television/composite/svideo (mit tv-kort). Den anden har NTSC-dvb/PAL-dvb/SECAM-dvb (mit DVB-S kort). Den tredje har endelig kun ntsc/pal (formodentlig mit web-kamera). Derfor skal jeg indstille (blot ved at markere den) den anden port og den anden indgang (PAL-dvb). </para>
+<para
+>Eftersom VDR-understøttelse i Kmplayer kun kan bruge <acronym
+>Xvideo</acronym
+>, burde <acronym
+>Xvideo</acronym
+> naturligvis virke (og jeg tror at denne måde at kigge på videoenheder kun virker med Linux). Dette virker også kun på den første skærm (:0.0). Sørg altså for at udvidelsen <quote
+>videoforlinux</quote
+> virker med X-serveren. For XFree86-serveren, skal følgende være i indstillingsfilen (<filename
+>/etc/X11/XF86Config</filename
+>): <programlisting
+>Section "Module"
+ ....
+ Load "v4l"
+EndSection
+</programlisting>
+</para>
+<para
+>Desværre skal du indstille dette igen ligeså snart du opdaterer din videodriver. </para>
+</section>
+<section id="kmplayer_url">
+ <title
+>Kommandolinje</title>
+<para
+>Internt bruger Kmplayer distinkte navne for kilder. På det tidspunkt hvor dette skrives er de "dvdnavsource", "dvdsource", "exitsource", "hrefsource", "introsource", "pipesource", "tvscanner", "tvsource", "urlsource", "vcdsource" og "vdrsource". Når de aktiveres begynder de som regel at spille listen med spilbare punkter. </para>
+<para
+>Du kan aktivere en bestemt kilde med URL <filename
+>kmplayer://</filename
+>. Angiv blot værtsdelen som kildens navn og den valgfrie del som ekstra argument, hvilket vil kunne se ud som <filename
+>kmplayer://vdrsource/22 MTV 2</filename
+> for en kanal fra "vdrsource". For eksempel starter følgende script Kmplayer med "dvdnavsource" og bruger <acronym
+>DCOP</acronym
+> til at afspille i fuldskærmstilstand. <programlisting>
+/bin/bash
+kmplayer kmplayer://dvdnavsource/ &amp;
+PID=$!
+sleep 2
+dcop kmplayer-$PID KMediaPlayer toggleFullScreen
+ </programlisting
+> Dette udfører ikke meget for visse kilder, eftersom de ikke er beregnede til normal afspilning. Det er deaktiveret for "pipesource", eftersom det naturligvis ville være et alvorligt sikkerhedshul. </para>
+</section>
+</chapter>
+<chapter id="questionsanswersandtips">
+ <title
+>Spørgsmål, svar og tips</title>
+
+ <qandaset id="faq">
+ <title
+>Ofte stillede spørgsmål</title>
+ <qandaentry>
+ <question>
+ <para
+>Xine starter langsomt, hvorfor skal den måle min processorydelse hele tiden?</para>
+ </question>
+ <answer>
+ <para
+>Bemærk at svaret nedenfor er forældet. <application
+>kxineplayer</application
+> gemmer den automatisk til den seneste værdi, så xine udfører kun processortesten første gangen. </para>
+ <para
+>Grænsefladen for <application
+>Xine</application
+> i &kmplayer;, <application
+>kxineplayer</application
+>, bruger <filename
+>~/.kde/share/apps/kmplayer/xine_config</filename
+> til sine indstillinger. Indstillingerne for <application
+>Xine</application
+> er i indstillingsdialogen <quote
+>General Options</quote
+>|<quote
+>Xine</quote
+>. (Hvis du ændrer et punkt der og gemmer det, indeholder <filename
+>~/.kde/share/apps/kmplayer/xine_config</filename
+> også en del forklaringer). Målingen af processorydelse forårsages af at punktet <computeroutput
+>misc.memcpy_method</computeroutput
+> er indstillet til <computeroutput
+>probe</computeroutput
+>. For at finde ud af hvilken version af hukommelseskopiering som er hurtigst for dig, aktiveres <quote
+>Vis terminaludskrift</quote
+> i menuen <quote
+>Vis</quote
+> og kig på resultatet af målingen når du spiller noget med Xine. Indstil <computeroutput
+>misc.memcpy_method</computeroutput
+> til metoden med kortest tid.</para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question>
+ <para
+>Nogle tip til at gøre cdrom-enheden mere stille når den bruges til afspilning (ikke VCD://)?</para>
+ </question>
+ <answer>
+ <para
+>Selvfølgelig, prøv <command
+>hdparm -E 8 /dev/cdrom</command
+> som systemadministrator, efter at have monteret enheden. Men sørg for at du dobbelttjekker at <filename
+>/dev/cdrom</filename
+> peger på cdrom-enheden. </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+
+ </chapter>
+<chapter id="credits-and-licenses">
+<title
+>Medvirkende og licens</title>
+
+<para
+>&kmplayer; ophavsret 2002, 2003 Koos Vriezen</para>
+&underFDL; &underGPL; </chapter>
+
+&documentation.index;
+</book>
+<!--
+Local Variables:
+mode: sgml
+sgml-minimize-attributes:nil
+sgml-general-insert-case:lower
+sgml-indent-step:0
+sgml-indent-data:nil
+End:
+-->
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/de/Makefile.am b/doc/de/Makefile.am
new file mode 100644
index 0000000..b55ecf5
--- /dev/null
+++ b/doc/de/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = index.docbook
+
+
+KDE_LANG = de
+KDE_DOCS = kmplayer
diff --git a/doc/de/index.docbook b/doc/de/index.docbook
new file mode 100644
index 0000000..50a76c7
--- /dev/null
+++ b/doc/de/index.docbook
@@ -0,0 +1,400 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!ENTITY kmplayer '<application
+>Kmplayer</application
+>'>
+ <!ENTITY kappname "&kmplayer;"
+><!-- replace kmplayer here -->
+ <!ENTITY package "kdeextragear-2">
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % German "INCLUDE"
+><!-- change language only here -->
+
+]>
+
+<book lang="&language;">
+
+
+<bookinfo>
+<title
+>Das Handbuch zu &kmplayer;</title>
+
+<authorgroup>
+<author
+><firstname
+>Koos</firstname
+> <surname
+>Vriezen</surname
+> <affiliation
+> <address
+><email
+>koos dot vriezen at xs4all dot nl</email
+></address>
+</affiliation>
+</author>
+</authorgroup>
+
+<othercredit role="translator"
+> <firstname
+>René</firstname
+> <surname
+>Landert</surname
+> <affiliation
+><address
+><email
+>rene.landert@bluewin.ch</email
+> </address
+> </affiliation
+> <contrib
+>Deutsche Übersetzung </contrib
+> </othercredit
+>
+
+<copyright>
+<year
+>2002</year>
+<year
+>2003</year>
+<holder
+>Koos Vriezen</holder>
+</copyright>
+<!-- Translators: put here the copyright notice of the translation -->
+<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
+ and in the FDL itself on how to use it. -->
+<legalnotice
+>&FDLNotice;</legalnotice>
+
+
+<date
+>2003-12-24</date>
+<releaseinfo
+>0.05.00</releaseinfo>
+
+<!-- Abstract about this handbook -->
+
+<abstract>
+<para
+>&kmplayer; ist die Benutzeroberfläche des Programmes <application
+>MPlayer</application
+> für das &kde;. </para>
+</abstract>
+
+
+<keywordset>
+<keyword
+>KDE</keyword>
+<keyword
+>kdemultimedia</keyword>
+<keyword
+>MPlayer</keyword>
+<keyword
+>Konqueror</keyword>
+<keyword
+>Video</keyword>
+</keywordset>
+
+</bookinfo>
+
+<chapter id="introduction">
+<title
+>Einleitung</title>
+<para
+>&kmplayer; ist eine einfache Benutzeroberfläche für <application
+>MPlayer</application
+>, <application
+>Xine</application
+> und <application
+>FFMpeg</application
+>. Das Programm wird gebraucht zum Abspielen von Videodateien der von <application
+>MPlayer</application
+>/<application
+>Xine</application
+> unterstützten Formate, sowie zur Wiedergabe von <acronym
+>DVD</acronym
+>s, <acronym
+>VCD</acronym
+>s oder <acronym
+>TV</acronym
+>/<acronym
+>Kamera</acronym
+>. </para>
+<para
+>Die Dokumentation für &kappname; war noch nicht beendet als &kde; auf diesem Rechner installiert wurde.</para
+> <para
+>Für Hilfe bitte die Seite <ulink url="http://www.kde.org"
+> The KDE Website</ulink
+> auf neue Versionen überprüfen, oder die Frage an <ulink url="mailto:kde-user@kde.org"
+>The &kde; User Mailing list</ulink
+> schicken.</para>
+<para
+><emphasis
+>Das &kde;-Team</emphasis
+></para>
+
+</chapter>
+<chapter id="settings">
+<title
+>Einstellungen</title>
+<section>
+ <title
+>Animation beim Starten / Beenden</title>
+ <para
+>Die Animation beim Starten und Beenden kann deaktiviert werden durch das Editieren von <filename
+>~/.kde/share/config/kmplayerrc</filename
+> und Ändern von <programlisting>
+[General Options]
+ No Intro=0
+ </programlisting
+> obiger Option auf '1'. Falls die Option nicht vorhanden ist, kann sie einfach eingefügt werden. </para>
+<para
+>Es ist auch möglich eine andere Animation zu aktivieren. KMPlayer wird die Dateien <filename
+>~/.kde/share/apps/kmplayer/intro.xml</filename
+> und <filename
+>~/.kde/share/apps/kmplayer/exit.xml</filename
+> beachten. Das Format muss eine unterstützte <acronym
+>XML</acronym
+> Datei sein. </para>
+<para
+>Die Animation beim Starten braucht nicht kurz zu sein, sie wird automatisch beendet durch das Öffnen einer anderen Quelle. Dies wäre bei der Ende-Animation allerdings störend, der Benutzer kann daher die Applikation ein zweites Mal beenden. </para>
+<para
+>Ein einfaches Beispiel einer Start-Animation kann das Anzeigen eines Lieblingsfotos sein: <programlisting>
+&lt;smil&gt;
+ &lt;body&gt;
+ &lt;img dur="indefinite" src="file:///home/koos/mum.gif" fit="meet"/&gt;
+ &lt;/body&gt;
+&lt;/smil&gt;
+ </programlisting
+> Im Quellpaket von KMPlayer sind im Verzeichnis <filename
+>tests/</filename
+> einige Beispiele von <acronym
+>SMIL</acronym
+> die von KMPlayer unterstützt werden. </para>
+</section>
+</chapter>
+<chapter id="sources">
+<title
+>Die abspielbaren Quellen</title>
+<para
+>&kmplayer; kann von verschiedenen Quellen abspielen. Diese Quellen sind im Menü Quellen aufgeführt. </para>
+<section id="tvsource">
+ <title
+>TV</title>
+ <para
+>&kmplayer; kann von TV Karten abspielen, entweder mittels <application
+>MPlayer</application
+> oder <acronym
+>XVideo</acronym
+> (dies braucht <application
+>kxvplayer</application
+>). Bevor TV geschaut werden kann, müssen das zu gebrauchende Gerät und die TV Kanäle konfiguriert werden. Dazu kann der Scanner aus dem Konfigurationsdialog benutzt werden oder die Konfigurationsdatei kann manuell editiert werden. </para>
+<para
+>Die Konfigurationsdatei für die TV Einstellungen ist eine <acronym
+>XML</acronym
+>-Datei mit dem Namen <filename
+>~/.kde/share/apps/kmplayer/tv.xml</filename
+>. Das <acronym
+>XML</acronym
+> Format ist wie im folgenden Beispiel: <programlisting>
+&lt;tvdevices&gt;
+ &lt;device path="/dev/video0" width="320" height="240" name="BT878 video (Hauppauge (bt878))" audio=""
+ minwidth="48" minheight="32" maxwidth="924" maxheight="576" playback="0" xvport="240"&gt;
+ &lt;input name="Television" id="0" tuner="1" norm="PAL" xvenc="0"&gt;
+ &lt;channel name="Ned1" frequency="21600"/&gt;
+ &lt;channel name="VCR" frequency="59490"/&gt;
+ &lt;/input&gt;
+ &lt;input name="Composite1" id="1" xvenc="7"/&gt;
+ &lt;input name="S-Video" id="2" xvenc="14"/&gt;
+ &lt;input name="Composite3" id="3"/&gt;
+ &lt;/device&gt;
+ &lt;device path="/dev/video1" width="640" height="480" name="Philips 740 webcam" audio=""
+ minwidth="160" minheight="120" maxwidth="640" maxheight="480" playback="1"&gt;
+ &lt;input name="Webcam" id="0"/&gt;
+ &lt;/device&gt;
+&lt;/tvdevices&gt;
+</programlisting
+> Es ist darauf zu achten, dass <quote
+>input</quote
+> Elemente mit <quote
+>channels</quote
+> das <quote
+>tuner</quote
+> Attribut auf <quote
+>1</quote
+> gesetzt haben sollten. </para>
+<para
+><acronym
+>XVideo</acronym
+> braucht nur die <quote
+>xvport</quote
+> und <quote
+>xvenc</quote
+> Attribute; diese können nur durch manuelles Editieren der Datei gesetzt werden. Die Werte dieser beiden Attribute können ausgelesen werden, indem <quote
+>kxvplayer</quote
+> in einer Terminal Anwendung wie z.B. <quote
+>konsole</quote
+> gestartet wird. Für jeden Port wird <quote
+>kxvplayer</quote
+> eine Zeile wie unten aufgeführt ausgeben. Die Werte können daraufhin für die erwähnten Attribute gesetzt werden. <programlisting>
+ xvport 240
+ ....
+ encoding: 0 PAL-television
+ encoding: 1 NTSC-television
+ encoding: 2 SECAM-television
+ ....
+</programlisting
+> Die Attribute für die Breite und die Höhe werden vom <acronym
+>XVideo</acronym
+>-Spieler nicht beachtet. Dieses Programm erhält seine Bildgröße vom X Server. Einer der Vorteile von <acronym
+>XVideo</acronym
+> ist die Eigenschaft, dass die Skalierung durch die Hardware erledigt wird, d.h. durch die Video Karte, und somit auch im Vollbildmodus ohne CPU Belastung und ohne Wechsel der Bildschirmauflösung. Ebensowenig gibt es ein Flickern wenn ein anderes Fenster das Videobild überlagert. </para>
+<para
+>Im Kapitel VDR sind mehr Informationen enthalten über den Gebrauch von <acronym
+>XVideo</acronym
+>. </para>
+</section>
+<section id="vdrsource">
+ <title
+>VDR</title>
+<para
+>Zum Konfigurieren der VDR (Video Daten Rekorder) Einstellungen im kmplayer ist der Dialog in den Einstellungen unter ->Quelle->VDR->XVideo Port zu benutzen. Dort sollten Ports erkannt werden, von denen einer ausgewählt wird. Die zu verwendende Codierung muss herausgefunden werden (z.B. ist es PAL für West Europa), der korrekte Name hat wahrscheinlich ein<quote
+>dvb</quote
+> darin enthalten. </para>
+<para
+>Als Beispiel sei im PC eine TV Karte, eine DVB-S Karte und eine Webkamera eingebaut. In diesem Fall enthält die Konfiguration drei Ports. Der erste Port enthält eine lange Liste mit Einträgen für NTSC(-JP)/PAL(-M)/SECAM , die alle etwas über Television/Composite/Svideo (die TV Karte) aussagen. Der zweite Port enthält NTSC-dvb/PAL-dvb/SECAM-dvb (die DVB-S Karte). Und schliesslich der dritte Port, der nur ntsc/pal enthält (vermutlich die Webkamera). Daher ist in diesem Fall der zweite Port mit dem zweiten Eintrag (diesen einfach nur auswählen) zu konfigurieren (PAL-dvb). </para>
+<para
+>Da die VDR Unterstützung von kmplayer nur <acronym
+>XVideo</acronym
+> nutzen kann, sollte <acronym
+>XVideo</acronym
+> auch funktionieren (vermutlich ist diese Art des Abspielens von Video Geräten unter Linux die einzige die funktioniert). Dies wird zudem auch nur auf dem ersten Bildschirm (:0.0) untertstützt. Aus diesem Grund muss die <quote
+>videoforlinux</quote
+> Erweiterung für den X Server funktionstüchtig sein. Für den XFree86 Server muss daher in seiner Konfigurationsdatei (<filename
+>/etc/X11/XF86Config</filename
+>) folgendes enthalten sein <programlisting
+>Section "Module"
+ ....
+ Load "v4l"
+EndSection
+</programlisting>
+</para>
+<para
+>Unglücklicherweise muss man bei jedem Aktualisieren des Video Treibers diese Einstellung wieder konfigurieren. </para>
+</section>
+<section id="kmplayer_url">
+ <title
+>Kommandozeile</title>
+<para
+>Intern werden von KMPlayer für die Quellen verschiedene Namen benutzt. Zum Zeitpunkt der Entstehung dieser Dokumentation sind dies "dvdnavsource", "dvdsource", "exitsource", "hrefsource", "introsource", "pipesource", "tvscanner", "tvsource", "urlsource", "vcdsource" und "vdrsource". Wenn sie aktiviert werden, beginnen sie mit dem Abspielen der Wiedergabeliste. </para>
+<para
+>Eine bestimmte Quelle kann mit der <acronym
+>URL</acronym
+> der Form <filename
+>kmplayer://</filename
+> aktiviert werden. Für den Rechnernamen ist der Quellname zu setzen und optional der Pfad als Teil des zusätzlichen Arguments; für einen Kanal der Quelle "vdrsource" könnte dies wie folgt aussehen: <filename
+>kmplayer://vdrsource/22 MTV 2</filename
+>. Die nachfolgende Kommandodatei startet kmplayer mit der Quelle "dvdnavsource" unter Nutzung von <acronym
+>DCOP</acronym
+> um im Vollbildmodus wiederzugeben. <programlisting>
+/bin/bash
+kmplayer kmplayer://dvdnavsource/ &amp;
+PID=$!
+sleep 2
+dcop kmplayer-$PID KMediaPlayer toggleFullScreen
+ </programlisting
+> Für einige Quellen wird dies nicht viel ergeben, weil diese nicht für das übliche Abspielen vorgesehen sind. Für "pipesource" ist dies abgeschaltet, weil dies natürlich eine grosse Sicherheitslücke wäre. </para>
+</section>
+</chapter>
+<chapter id="questionsanswersandtips">
+ <title
+>Fragen, Antworten, und Tips</title>
+
+ <qandaset id="faq">
+ <title
+>Häufig gestellte Fragen</title>
+ <qandaentry>
+ <question>
+ <para
+>Xine startet nur langsam auf, wieso muss jedes Mal meine CPU auf ihre Leistung geprüft werden?</para>
+ </question>
+ <answer>
+ <para
+>Anmerkung: die Antwort ist überholt. <application
+>kxineplayer</application
+> braucht automatisch den letzten gespeicherten Wert, nur das erste Mal wird xine die CPU prüfen. </para>
+ <para
+>Die <application
+>Xine</application
+> Oberfläche für &kmplayer;, <application
+>kxineplayer</application
+>, braucht <filename
+>~/.kde/share/apps/kmplayer/xine_config</filename
+> für ihre Konfiguration. Die Einstellungen für <application
+>Xine</application
+> befinden sich im Konfigurationsdialog <quote
+>Generelle Optionen</quote
+>|<quote
+>Xine</quote
+>. (Wird hier eine Option geändert und gesichert, so enthält <filename
+>~/.kde/share/apps/kmplayer/xine_config</filename
+> ebenfalls einige Erklärungen). Die Leistungsmessung der CPU wird durch das Setzen der Option <computeroutput
+>misc.memcpy_method</computeroutput
+> auf den Wert <computeroutput
+>probe</computeroutput
+>aktiviert. Um festzustellen welche memcpy Version am schnellsten arbeitet, muss <quote
+>Konsole</quote
+> aus dem Menü <quote
+>Ansicht</quote
+> gewählt werden. Die Resultate der Leistungsmessung werden beim Abspielen mit Xine angezeigt. <computeroutput
+>misc.memcpy_method</computeroutput
+> ist mit der Methode mit der kleinsten gemessenen Zeit zu konfigurieren.</para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question>
+ <para
+>Gibt es Hinweise wie ich mein CDROM Laufwerk leiser machen kann, wenn ich von ihm abspiele (nicht von der VCD://)?</para>
+ </question>
+ <answer>
+ <para
+>Ja, der Befehl <command
+>hdparm -E 8 /dev/cdrom</command
+> ist als Benutzer "root" nach dem Einbinden des Geräts auszuführen. Dabei ist unbedingt sicher zu stellen, dass <filename
+>/dev/cdrom</filename
+> auf das CDROM Laufwerk zeigt. </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+
+ </chapter>
+<chapter id="credits-and-licenses">
+<title
+>Mitwirkende und Lizenzen</title>
+
+<para
+>&kmplayer; Copyright 2002,2003 Koos Vriezen</para>
+&underFDL; &underGPL; </chapter>
+
+&documentation.index;
+</book>
+<!--
+Local Variables:
+mode: sgml
+sgml-minimize-attributes:nil
+sgml-general-insert-case:lower
+sgml-indent-step:0
+sgml-indent-data:nil
+End:
+-->
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/en/Makefile.am b/doc/en/Makefile.am
new file mode 100644
index 0000000..135460c
--- /dev/null
+++ b/doc/en/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = index.docbook
+
+
+KDE_LANG = en
+KDE_DOCS = kmplayer
diff --git a/doc/en/index.docbook b/doc/en/index.docbook
new file mode 100644
index 0000000..6aa9e58
--- /dev/null
+++ b/doc/en/index.docbook
@@ -0,0 +1,513 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!ENTITY kmplayer '<application>KMPlayer</application>'>
+ <!ENTITY kappname "&kmplayer;"><!-- replace kmplayer here -->
+ <!ENTITY package "kdeextragear-2">
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % English "INCLUDE"><!-- change language only here -->
+
+]>
+
+<book lang="&language;">
+
+
+<bookinfo>
+<title>The &kmplayer; Handbook</title>
+
+<authorgroup>
+<author>
+<firstname>Koos</firstname>
+<surname>Vriezen</surname>
+<affiliation>
+<address><email>koos dot vriezen at gmail dot com</email></address>
+</affiliation>
+</author>
+</authorgroup>
+
+<!-- TRANS:ROLES_OF_TRANSLATORS -->
+
+<copyright>
+<year>2002</year>
+<year>2006</year>
+<year>2007</year>
+<holder>Koos Vriezen</holder>
+</copyright>
+<!-- Translators: put here the copyright notice of the translation -->
+<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
+ and in the FDL itself on how to use it. -->
+<legalnotice>&FDLNotice;</legalnotice>
+
+
+<date>2007-07-28</date>
+<releaseinfo>0.06.00</releaseinfo>
+
+<!-- Abstract about this handbook -->
+
+<abstract>
+<para>
+ &kmplayer; is an application that is a &kde; frontend to <application>MPlayer</application>, <application>Xine</application> and <application>GStreamer</application>.
+</para>
+</abstract>
+
+
+<keywordset>
+<keyword>KDE</keyword>
+<keyword>kdemultimedia</keyword>
+<keyword>MPlayer</keyword>
+<keyword>konqueror</keyword>
+<keyword>video</keyword>
+</keywordset>
+
+</bookinfo>
+
+<chapter id="introduction">
+<title>Introduction</title>
+<para>
+&kmplayer; is a simple frontend to <application>MPlayer</application>,
+<application>Xine</application>, <application>GStreamer</application> and
+<application>FFMpeg</application>. You can use it for watching all the movie
+file formats that <application>MPlayer</application>,
+<application>Xine</application> or <application>GStreamer</application>
+supports as well as watching from <acronym>DVD</acronym>,
+<acronym>VCD</acronym> or <acronym>TV</acronym> and <acronym>camera</acronym>.
+</para>
+<para>
+The documentation for &kappname; was not finished when &kde; was
+installed on this computer.</para> <para>If you need more help, please
+check <ulink url="http://www.kde.org">The KDE Website</ulink> for
+updates, or by submitting your question to
+<ulink url="mailto:kde-user@kde.org">The &kde; User Mailing list</ulink>.
+</para>
+<para><emphasis>The &kde; Team</emphasis></para>
+
+</chapter>
+<chapter id="gui">
+<title>The user interface</title>
+<para>
+The application window is made of so called dockable windows. There is always
+the central view window. Optional there is the playlist window. And finally
+there is an info window, that just shows itself when some information is there
+to been shown.
+</para>
+<section id="playlistwindow">
+<title>Playlist window</title>
+<para>
+The playlist window has as of this writing five categories, current item(s),
+<guilabel>Optical Disks</guilabel>, <guilabel>Television</guilabel>,
+<guilabel>Persistent Playlists</guilabel> and <guilabel>Most Recent</guilabel>.
+When clicked on a category's text, it will show the contents below this line.
+Of course there has to be contents, eg. see
+<link linkend="tvsource"><acronym>TV</acronym> settings</link> for adding
+content for the <guilabel>Television</guilabel> category. The
+<guilabel>Most Recent</guilabel> category will fill itself when playing
+locale media files or network <acronym>Url</acronym>s. This category can
+hold 60 items of which the last 50 are under the <guilabel>More ..</guilabel>
+branch.
+</para>
+<section>
+<title>Persisent Playlists category</title>
+<para>
+It's possible to store your favorite links in the <guilabel>Bookmark</guilabel>
+menu, but those are single items. If you want to create a list of items that
+play after each other, than you should use the
+<guilabel>Persistent Playlists</guilabel> category.
+</para>
+<para>
+The easiest way to add an item in this list is to drag it from
+<guilabel>Most Recent</guilabel> and drop it on
+<guilabel>Persistent Playlists</guilabel>. As you will see, when dropped, a
+pop-up menu appears where you can choose to add to this list or create a
+new group. Top level items behave like a bookmark item, but items in groups
+will play the whole group wherein they reside. Items in this category can
+easily be moved, copied, added to a new group or deleted just by dragging this
+item to another place in this category. Additionally there are
+<guimenu>Delete item</guimenu>, <guimenu>Move up</guimenu> and
+<guimenu>Move down</guimenu> items in the context menu (when clicking with
+the right mouse button on an item).
+</para>
+<para>
+Of course you can add groups to groups to get a deeper hierarchy. When clicked
+on an item, its group and all its child groups will be copied to the current
+category and playings starts at the clicked item position.
+</para>
+<section>
+<title>Storage format</title>
+<para>
+The data is stored in
+<filename>~/.kde/share/apps/kmplayer/playlist.xml</filename>, and its format
+is like this example. See <link linkend="XML-editing">here</link> for
+manipulating this data directly.
+<programlisting>
+&lt;playlist&gt;
+ &lt;group title="feeds"&gt;
+ &lt;item url="http://www.lugradio.org/episodes.rss"/&gt;
+ &lt;item url="http://science.nasa.gov/podcast.xml"/&gt;
+ &lt;item url="http://www.theworld.org/rss/tech.xml"/&gt;
+ &lt;/group&gt;
+ &lt;group title="iradio"&gt;
+ &lt;group title="sunny"&gt;
+ &lt;item mplayeropts="-cache 256" url="http://www.swissgroove.ch/listen.m3u"/&gt;
+ &lt;item url="http://www.boombasticradio.com/shoutcast/64.pls"/&gt;
+ &lt;/group&gt;
+ &lt;group title="rainy"&gt;
+ &lt;item url="http://www.radioparadise.com/musiclinks/rp_64.m3u"/&gt;
+ &lt;item url="http://www.woxy.com/stream/wma64.asx"/&gt;
+ &lt;item url="http://radionigel.com/winmedia.asx"/&gt;
+ &lt;item url="rtsp://livestreams.omroep.nl/live/vpro/vpro3voor12radioalt.rm"/&gt;
+ &lt;/group&gt;
+ &lt;/group&gt;
+&lt;/playlist&gt;
+</programlisting>
+Also note that for <application>MPlayer</application> custom options can be
+set using the <computeroutput>mplayeropts</computeroutput> argument. &kmplayer;
+searches for this option upwards in the tree, so you can set it for a whole
+group and override it for a child group or item.
+</para>
+</section>
+</section>
+</section>
+<section id="XML-editing">
+<title>Direct XML editing</title>
+<para>
+The current, <guilabel>Television</guilabel> and
+<guilabel>Persistent Playlists</guilabel> categories can also be manipulated
+by editing their <acronym>XML</acronym> storage. Of course one can do that
+when &kmplayer; is not running and editing the various files in
+<filename>~/.kde/share/apps/kmplayer/</filename>, but also in the application
+itself. Simply click on a catergory label, then choose <guimenu>View</guimenu>
+and next <guimenu>Edit mode</guimenu>. You can also click on a child branch
+and will then see only the <acronym>XML</acronym> contents of the branch.
+</para>
+<para>
+After you have edited some <acronym>XML</acronym>, click on the
+<guilabel>Sync with playlist</guilabel> and either deselect the
+<guimenu>Edit mode</guimenu> item or click on another catergory.
+<caution><para>
+ All changes are lost when leaving edit mode or selecting another branch without syncing with playlist.
+</para></caution>
+</para>
+<para>
+Because of the lazyness of &kmplayer;'s author(s), some features can only be
+enabled by editing the XML.
+</para>
+</section>
+</chapter>
+<chapter id="settings">
+<title>Settings</title>
+<section>
+ <title>Intro/exit animation</title>
+ <para>
+ Disabling the starting/ending animation can be configured by editing <filename>~/.kde/share/config/kmplayerrc</filename> and modify
+ <programlisting>
+[General Options]
+ No Intro=0
+ </programlisting>
+ the above option to '1'. Just add this option if it's not there yet.
+</para>
+<para>
+ It's also possible to set an alternative animation. &kmplayer; will look at resp. <filename>~/.kde/share/apps/kmplayer/intro.xml</filename> and <filename>~/.kde/share/apps/kmplayer/exit.xml</filename>. The format has to be a supported <acronym>XML</acronym> file.
+</para>
+<para>
+ The intro animation doesn't have to be a short one, because it will automatically end when another source is opened. Of course for the exit animation this would be a bit annoying, however the user can always end the application twice.
+</para>
+<para>
+ A simple example of an intro, showing your favorite photo can be
+ <programlisting>
+&lt;smil&gt;
+ &lt;body&gt;
+ &lt;img dur="indefinite" src="file:///home/koos/mum.gif" fit="meet"/&gt;
+ &lt;/body&gt;
+&lt;/smil&gt;
+ </programlisting>
+ In &kmplayer;'s source package, in the <filename>tests/</filename> are some examples of <acronym>SMIL</acronym> that &kmplayer; supports.
+</para>
+</section>
+</chapter>
+<chapter id="backends">
+<title>The backend players</title>
+<para>
+&kmplayer; uses external programs to do the actual playing.
+</para>
+<section id="mplayer">
+<title>MPlayer</title>
+<para>
+There is a configuration tab for MPlayer in &kmplayer;'s config dialog. Here
+you can set MPlayer's path and it cache size for network stream, among other
+things.
+</para>
+<para>
+This player configuration name is <parameter>mplayer</parameter>.
+</para>
+<section id="mplayer-debug">
+<title>Trouble shooting</title>
+<para>
+The best way to debug this backend is to start &kmplayer; from a console
+application like konsole. Then start a movie with kmplayer and see the exact
+commandline that is used to start mplayer in the console application.
+Now copy/paste that to another console, remove the '-wid 12344' options, and
+make it play. Probably it's just choosing the right -ao/-vo params. Also make
+sure mplayer doesn't start default with a <acronym>GUI</acronym>.
+</para>
+<para>
+Another debugging tool is the 'console' button in kmplayer's toolbar. Here you
+can see the output from mplayer.
+</para>
+</section>
+</section>
+<section id="xine">
+<title>Xine</title>
+<para>
+When configured &kmplayer; with Xine support, there will be configuration tab
+for Xine in &kmplayer;'s config dialog. Here you can set various options.
+These options are dynamic retrieved from the Xine library. Use context help to
+get information on what these options do (ie. click on the question mark
+button from the dialog title bar and then click on an option).
+</para>
+<para>
+This player configuration name is <parameter>xine</parameter>.
+</para>
+<para>
+The options are saved in
+<filename>.kde/share/apps/kmplayer/xine_config</filename> as a text document.
+</para>
+<section id="xine-debug">
+<title>Trouble shooting</title>
+<para>
+Basically the same way as trouble shooting
+<link linkend="mplayer-debug">MPlayer</link>, with the application name of
+<filename>kxineplayer</filename>.
+</para>
+</section>
+</section>
+<section id="gstreamer">
+<title>GStreamer</title>
+<para>
+There is no configuration tab for GStreamer in &kmplayer;'s config dialog. The
+common options for eg. <acronym>DVD</acronym> device are used when appropriate.
+</para>
+<para>
+This player configuration name is <parameter>gstreamer</parameter>.
+</para>
+<section id="gstremaer-debug">
+<title>Trouble shooting</title>
+<para>
+Basically the same way as trouble shooting
+<link linkend="mplayer-debug">MPlayer</link>, with the application name of
+<filename>kgstplayer</filename>.
+</para>
+</section>
+</section>
+<section id="npp">
+<title>Browser plugin</title>
+<para>
+There is no configuration tab for this player in &kmplayer;'s config dialog.
+Everything must be configured by manually editing the
+<filename>~/.kde/share/config/kmplayerrc</filename> like with configuring the
+<link linkend="backend-mimetype">backend per mimetype</link>. This is an
+example how to let flash be played with the swfdec-mozilla plugin:
+<programlisting>
+[application/x-shockwave-flash]
+player=npp
+plugin=/usr/lib/mozilla/plugins/libswfdecmozilla.so
+</programlisting>
+</para>
+<para>
+You can play flash inside &kmplayer;, actually you can even paste the special
+<parameter>embed</parameter> field for
+<ulink url="http://www.youtube.com">YouTube</ulink> in the
+<link linkend="XML-editing">playlist <acronym>XML</acronym></link>.
+</para>
+<para>
+In order to let &kmplayer; play flash in HTML pages, you should make the
+&kmplayer; plugin the service provider for the
+<parameter>application/x-shockwave-flash</parameter> mimetype in KDE's
+<guilabel>File Associations</guilabel> configuration dialog.
+</para>
+<para>
+As in the above example, this player configuration name is
+<parameter>npp</parameter>.
+</para>
+<section id="npp-debug">
+<title>Trouble shooting</title>
+<para>
+Start Konqueror or &kmplayer; in a console application and look for errors
+about loading the browser plugin library. The process started is called
+<filename>knpplayer</filename>. If that doesn't give any errors, check
+the backend output capturing inside &kmplayer; (<guimenu>View</guimenu>,
+<guimenuitem>Console</guimenuitem>, or <guimenuitem>Console</guimenuitem>
+from the popup menu).
+</para>
+</section>
+</section>
+<section id="backend-mimetype">
+<title>Force backend player for a mimetype</title>
+<para>
+To configure to always use a given backend for a particular mimetype
+(if detected of course) can be done by manually editing the
+<filename>~/.kde/share/config/kmplayerrc</filename>. For example, let xine play
+all ogg files:
+<programlisting>
+[audio/ogg]
+player=xine
+</programlisting>
+</para>
+</section>
+</chapter>
+<chapter id="sources">
+<title>The playable sources</title>
+<para>
+ &kmplayer; can play from various sources. These sources are listed in the Source menu.
+</para>
+<section id="tvsource">
+ <title>TV</title>
+ <para>
+ &kmplayer; can play from TV cards using <application>MPlayer</application> or <acronym>XVideo</acronym> (using <application>kxvplayer</application>). Before you can watch TV, you have to configure which device to use and the TV channels. You can use the scanner from the configure dialog for this or edit the config file manually.
+</para>
+<para>
+The config file for TV settings is a <acronym>XML</acronym> file, located
+<filename>~/.kde/share/apps/kmplayer/tv.xml</filename>. See
+<link linkend="XML-editing">here</link> for manipulating this data directly.
+The <acronym>XML</acronym> format is like this example:
+<programlisting>
+&lt;tvdevices&gt;
+ &lt;device path="/dev/video0" width="320" height="240" name="BT878 video (Hauppauge (bt878))" audio=""
+ minwidth="48" minheight="32" maxwidth="924" maxheight="576" playback="0" xvport="240"&gt;
+ &lt;input name="Television" id="0" tuner="1" norm="PAL" xvenc="0"&gt;
+ &lt;channel name="Ned1" frequency="216"/&gt;
+ &lt;channel name="VCR" frequency="594.90"/&gt;
+ &lt;/input&gt;
+ &lt;input name="Composite1" id="1" xvenc="7"/&gt;
+ &lt;input name="S-Video" id="2" xvenc="14"/&gt;
+ &lt;input name="Composite3" id="3"/&gt;
+ &lt;/device&gt;
+ &lt;device path="/dev/video1" width="640" height="480" name="Philips 740 webcam" audio=""
+ minwidth="160" minheight="120" maxwidth="640" maxheight="480" playback="1"&gt;
+ &lt;input name="Webcam" id="0"/&gt;
+ &lt;/device&gt;
+&lt;/tvdevices&gt;
+</programlisting>
+Note that <quote>input</quote> elements having channels, should have the <quote>tuner</quote> attribute set to <quote>1</quote>.
+</para>
+<para>
+<acronym>XVideo</acronym> only uses the <quote>xvport</quote> and <quote>xvenc</quote> attributes and they can only be set by manually editing this file. The values of these two attributes can be retrieved by running <quote>kxvplayer</quote> in a terminal application like <quote>konsole</quote>. For every port, <quote>kxvplayer</quote> will output lines like below and the numbers can be set for the attributes mentioned.
+<programlisting>
+ xvport 240
+ ....
+ encoding: 0 PAL-television
+ encoding: 1 NTSC-television
+ encoding: 2 SECAM-television
+ ....
+</programlisting>
+Also width and height attributes are ignored by the <acronym>XVideo</acronym> player. This player gets the sizes from the X server. One of the nice things of <acronym>XVideo</acronym> is that scaling is done in hardware, by the video card, so fullscreen support without CPU usage and without resolution change of your monitor. Also no annoying flicker when another window overlaps this video window.
+</para>
+<para>
+See the VDR section for more information about using <acronym>XVideo</acronym>.
+</para>
+</section>
+<section id="vdrsource">
+ <title>VDR</title>
+<para>
+To configure your VDR settings in kmplayer, see the Configure panel->Source->VDR->XVideo port panel. There should be ports detected, from which you should select one. You have to figure out what encoding you should use (eg. for western europe, that is PAL) and likely the correct one has a name with <quote>dvb</quote> in it.
+</para>
+<para>
+ For instance, I have a TV card, a DVB-S card and a webcam pluged into my system. With these, my settings are that there are three Ports. The first one has a long list of NTSC(-JP)/PAL(-M)/SECAM entries all saying something about television/composite/svideo (my TV card). The second one has NTSC-dvb/PAL-dvb/SECAM-dvb (my DVB-S card). And finally the third has only ntsc/pal (probably my webcam). I should therefore configure (just select it) the second port and second entry (PAL-dvb).
+</para>
+<para>
+ Because VDR support from kmplayer can only use <acronym>XVideo</acronym>, of course <acronym>XVideo</acronym> should work (and I believe for video devices, this way of viewing only works on linux). Also this only works on your first display (:0.0). So make sure <quote>videoforlinux</quote> extension works with the X server. For the XFree86 server, therefor in its configuration (<filename>/etc/X11/XF86Config</filename>) it should have
+<programlisting>
+Section "Module"
+ ....
+ Load "v4l"
+EndSection
+</programlisting>
+</para>
+<para>
+ Unfortunately, when ever you update your video driver, you have to reconfigure this setting.
+</para>
+</section>
+<section id="kmplayer_url">
+ <title>Commandline</title>
+<para>
+ Internally for the sources, &kmplayer; uses distinct names. At the time of
+ this writing these are "dvdnavsource", "dvdsource", "exitsource",
+ "hrefsource", "introsource", "pipesource", "tvscanner", "tvsource",
+ "urlsource", "vcdsource" and "vdrsource". When activated, they mostly
+ starts playing the list of playable items.
+</para>
+<para>
+ You can activate a particular source with a <filename>kmplayer://</filename> type <acronym>URL</acronym>. Just set the host part as the source name and optional path part as extra arguments, so for a channel for the "vdrsource" this could look like <filename>kmplayer://vdrsource/22 MTV 2</filename>. Eg. this script starts kmplayer using "dvdnavsource" and using <acronym>DCOP</acronym> to play fullscreen.
+ <programlisting>
+/bin/bash
+kmplayer kmplayer://dvdnavsource/ &amp;
+PID=$!
+sleep 2
+dcop kmplayer-$PID KMediaPlayer toggleFullScreen
+ </programlisting>
+ For some sources this will not do much because they are not meant to be
+ for normal playing. For "pipesource" this is disabled because that
+ would be a bad security hole of course.
+</para>
+</section>
+</chapter>
+<chapter id="questionsanswersandtips">
+ <title>Questions, Answers, and Tips</title>
+
+ <qandaset id="faq">
+ <title>Frequently asked questions</title>
+ <qandaentry>
+ <question>
+ <para>Xine starts up slow, why does it have to benchmark my CPU all the time?</para>
+ </question>
+ <answer>
+ <para>
+ Note the answer below is outdated. <application>kxineplayer</application> saves it automatically to last value, so only the first time xine will do the CPU test.
+ </para>
+ <para>The <application>Xine</application> frontend for &kmplayer;, <application>kxineplayer</application>, uses <filename>~/.kde/share/apps/kmplayer/xine_config</filename> for its configuration. Settings for <application>Xine</application> are found in the configuration dialog <quote>General Options</quote>|<quote>Xine</quote>. (If you change an option here and save it, <filename>~/.kde/share/apps/kmplayer/xine_config</filename> will contain some explainations too). The CPU benchmarking is caused by the option <computeroutput>misc.memcpy_method</computeroutput> set to <computeroutput>probe</computeroutput>. To see which memcpy version works the fastest for you, enable <quote>Show Console Output</quote> from the <quote>View</quote> menu and look at the results from this benchmarking when you play something with Xine. Configure <computeroutput>misc.memcpy_method</computeroutput> with the method with the lowest time.</para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question>
+ <para>Any hints to make my CDROM less noisy when playing from it (not VCD://)?</para>
+ </question>
+ <answer>
+ <para>Sure, try <command>hdparm -E 8 /dev/cdrom</command> as root after mounting the device. But be sure to double check <filename>/dev/cdrom</filename> pointing to your CDROM drive.
+ </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+
+ </chapter>
+<chapter id="credits-and-licenses">
+<title>Credits and Licenses</title>
+
+<para>&kmplayer; copyright 2002,2003 Koos Vriezen</para>
+
+&underFDL;
+&underGPL;
+
+</chapter>
+
+&documentation.index;
+</book>
+<!--
+Local Variables:
+mode: sgml
+sgml-minimize-attributes:nil
+sgml-general-insert-case:lower
+sgml-indent-step:0
+sgml-indent-data:nil
+End:
+-->
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/es/Makefile.am b/doc/es/Makefile.am
new file mode 100644
index 0000000..4be9769
--- /dev/null
+++ b/doc/es/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = index.docbook
+
+
+KDE_LANG = es
+KDE_DOCS = kmplayer
diff --git a/doc/es/index.docbook b/doc/es/index.docbook
new file mode 100644
index 0000000..2ee031c
--- /dev/null
+++ b/doc/es/index.docbook
@@ -0,0 +1,225 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!ENTITY kmplayer '<application
+>Kmplayer</application
+>'>
+ <!ENTITY kappname "&kmplayer;"
+><!-- replace kmplayer here -->
+ <!ENTITY package "kdeextragear-2">
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % Spanish "INCLUDE"
+><!-- change language only here -->
+
+]>
+
+<book lang="&language;">
+
+
+<bookinfo>
+<title
+>El manual de &kmplayer;</title>
+
+<authorgroup>
+<author
+><firstname
+>Koos</firstname
+> <surname
+>Vriezen</surname
+> <affiliation
+> <address
+><email
+>koos dot vriezen at xs4all dot nl</email
+></address>
+</affiliation>
+</author>
+</authorgroup>
+
+<othercredit role="translator"
+><firstname
+></firstname
+><surname
+></surname
+><affiliation
+><address
+><email
+>pablo.pita@pitagoral.com</email
+></address
+></affiliation
+><contrib
+></contrib
+></othercredit
+>
+
+<copyright>
+<year
+>2002</year>
+<year
+>2003</year>
+<holder
+>Koos Vriezen</holder>
+</copyright>
+<!-- Translators: put here the copyright notice of the translation -->
+<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
+ and in the FDL itself on how to use it. -->
+<legalnotice
+>&FDLNotice;</legalnotice>
+
+
+<date
+>2003-12-24</date>
+<releaseinfo
+>0.05.00</releaseinfo>
+
+<!-- Abstract about this handbook -->
+
+<abstract>
+<para
+>&kmplayer; es una aplicación de &kde; y es una interfaz gráfica sobre <application
+>MPlayer</application
+>. </para>
+</abstract>
+
+
+<keywordset>
+<keyword
+>KDE</keyword>
+<keyword
+>kdemultimedia</keyword>
+<keyword
+>MPlayer</keyword>
+<keyword
+>konqueror</keyword>
+<keyword
+>vídeo</keyword>
+</keywordset>
+
+</bookinfo>
+
+<chapter id="introduction">
+<title
+>Introducción</title>
+
+
+<para
+>&kmplayer; es una interfaz gráfica simple a <application
+>MPlayer</application
+>, <application
+>Xine</application
+> y <application
+>FFMpeg</application
+>. Puede usarla para ver los distintos formatos de películas que soportan <application
+>MPlayer</application
+>/<application
+>Xine</application
+> así como ver <acronym
+>DVD</acronym
+>s, <acronym
+>VCD</acronym
+> o <acronym
+>TV</acronym
+>/<acronym
+>cámaras</acronym
+>. </para>
+
+<para
+>La documentación de &kappname; no se terminó cuando &kde; se instaló en este ordenador.</para
+> <para
+>Si necesita ayuda, por favor vaya al <ulink url="http://www.kde.org"
+>sitio web de KDE</ulink
+> para actualizaciones, o para enviar su pregunta, a <ulink url="mail to:kde-user@kde.org"
+>la lista de correo de los usuarios de &kde;</ulink
+>.</para>
+<para
+><emphasis
+>El equipo de &kde;</emphasis
+></para>
+
+</chapter>
+<chapter id="questionsanswersandtips">
+ <title
+>Preguntas, respuestas y consejos</title>
+
+ <qandaset id="faq">
+ <title
+>Preguntas habituales</title>
+ <qandaentry>
+ <question>
+ <para
+>Xine comienza lentamente, porqué tiene que hacer siempre la prueba de mi CPU ?</para>
+ </question>
+ <answer>
+ <para
+>La interfaz gráfica de &kmplayer; para <application
+>Xine</application
+>, <application
+>kxineplayer</application
+>, usa como archivo de configuración <application
+>~/.xine/config2</application
+>. Las preferencias para <filename
+>Xine</filename
+> se encuentran en el diálogo de configuración <application
+>Opciones generales</application
+>|<quote
+>Xine</quote
+>. (Si cambia una opción aquí y la guarda, el archivo <filename
+>~/.xine/config2</filename
+> contendrá algunas explicaciones también). La prueba de la CPU la causa el valor de la opción <computeroutput
+>misc.memcpy_method</computeroutput
+> dado como <computeroutput
+>probe</computeroutput
+>. Para ver que versión de memcpy funciona de manera más rápida para usted, habilite <quote
+>Mostrar salida de consola</quote
+> desde la <quote
+>Vista</quote
+></para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question>
+ <para
+>Alguna idea de como hacer más silencioso mi CDROM cuando se usa (no VCD://) ?</para>
+ </question>
+ <answer>
+ <para
+>Por supuesto, pruebe como usuario root el comando <command
+>hdparm -E 8 /dev/cdrom</command
+> despues de montar el dispositivo. Pero asegúrese de que <filename
+>/dev/cdrom</filename
+> se refiere a su dispositivo CDROM. </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+
+ </chapter>
+<chapter id="credits-and-licenses">
+<title
+>Créditos y licencias</title>
+
+<para
+>&kmplayer; copyright 2002,2003 Koos Vriezen</para>
+&underFDL; &underGPL; </chapter>
+
+&documentation.index;
+</book>
+<!--
+Local Variables:
+mode: sgml
+sgml-minimize-attributes:nil
+sgml-general-insert-case:lower
+sgml-indent-step:0
+sgml-indent-data:nil
+End:
+-->
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/et/Makefile.am b/doc/et/Makefile.am
new file mode 100644
index 0000000..f458944
--- /dev/null
+++ b/doc/et/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = index.docbook
+
+
+KDE_LANG = et
+KDE_DOCS = kmplayer
diff --git a/doc/et/index.docbook b/doc/et/index.docbook
new file mode 100644
index 0000000..cc589a3
--- /dev/null
+++ b/doc/et/index.docbook
@@ -0,0 +1,227 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!ENTITY kmplayer '<application
+>Kmplayer</application
+>'>
+ <!ENTITY kappname "&kmplayer;"
+><!-- replace kmplayer here -->
+ <!ENTITY package "kdeextragear-2">
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % Estonian "INCLUDE"
+><!-- change language only here -->
+
+]>
+
+<book lang="&language;">
+
+
+<bookinfo>
+<title
+>&kmplayer;i käsiraamat</title>
+
+<authorgroup>
+<author
+><firstname
+>Koos</firstname
+> <surname
+>Vriezen</surname
+> <affiliation
+> <address
+><email
+>koos dot vriezen at xs4all dot nl</email
+></address>
+</affiliation>
+</author>
+</authorgroup>
+
+<othercredit role="translator"
+><firstname
+>Marek</firstname
+><surname
+>Laane</surname
+><affiliation
+><address
+><email
+>bald@online.ee</email
+></address
+></affiliation
+><contrib
+>Tõlge eesti keelde</contrib
+></othercredit
+>
+
+<copyright>
+<year
+>2002</year>
+<year
+>2003</year>
+<holder
+>Koos Vriezen</holder>
+</copyright>
+<!-- Translators: put here the copyright notice of the translation -->
+<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
+ and in the FDL itself on how to use it. -->
+<legalnotice
+>&FDLNotice;</legalnotice>
+
+
+<date
+>2003-12-24</date>
+<releaseinfo
+>0.05.00</releaseinfo>
+
+<!-- Abstract about this handbook -->
+
+<abstract>
+<para
+>&kmplayer; on meediamängija <application
+>MPlayer</application
+> kasutajaliides &kde; keskkonnale. </para>
+</abstract>
+
+
+<keywordset>
+<keyword
+>KDE</keyword>
+<keyword
+>kdemultimedia</keyword>
+<keyword
+>MPlayer</keyword>
+<keyword
+>konqueror</keyword>
+<keyword
+>video</keyword>
+</keywordset>
+
+</bookinfo>
+
+<chapter id="introduction">
+<title
+>Sissejuhatus</title>
+
+
+<para
+>&kmplayer; on meediamängija <application
+>MPlayer</application
+>, <application
+>Xine</application
+> ja <application
+>FFMpeg</application
+> lihtne kasutajaliides. Sellega saab vaadata nii filme kõigis vormingutes, mida <application
+>MPlayer</application
+>/<application
+>Xine</application
+> toetab, kui ka <acronym
+>DVD</acronym
+>-sid, <acronym
+>VCD</acronym
+>-sid või <acronym
+>TV</acronym
+>/<acronym
+>kaamera</acronym
+> võtteid. </para>
+
+<para
+>Vabandust, aga &kappname; dokumentatsioon ei olnud lõpetatud ajaks, kui &kde; sellele arvutile paigaldati.</para
+> <para
+>Kui vajad abi või uuemat infot, külasta <ulink url="http://www.kde.org"
+>KDE veebilehekülge</ulink
+> või postita oma küsimus <ulink url="mailto:kde-user@kde.org"
+>&kde; meililisti</ulink
+>.</para>
+<para
+><emphasis
+>&kde; meeskond</emphasis
+></para>
+
+</chapter>
+<chapter id="questionsanswersandtips">
+ <title
+>Küsimused, vastused ja nõuanded</title>
+
+ <qandaset id="faq">
+ <title
+>Korduma kippuvad küsimused</title>
+ <qandaentry>
+ <question>
+ <para
+>Xine käivitub aeglaselt, miks see kogu aeg minu protsessori jõudlust uurib?</para>
+ </question>
+ <answer>
+ <para
+>&kmplayer;i <application
+>Xine</application
+> kasutajaliides <application
+>kxineplayer</application
+> võtab seadistuse aluseks faili <filename
+>~/.xine/config2</filename
+>. <application
+>Xine</application
+> seadistusi näeb seadistustedialoogis <quote
+>Üldised valikud</quote
+>|<quote
+>Xine</quote
+>. (Kui muudad seal midagi ja salvestad, sisaldab <filename
+>~/.xine/config2</filename
+> selle kohta ka mõningaid selgitusi). Protsessori jõudluse uurimist tingib see, et võtme <computeroutput
+>misc.memcpy_method</computeroutput
+> väärtuseks on <computeroutput
+>probe</computeroutput
+>. Kui soovid näha, milline memcpy versioon sinu jaoks kõige kiiremini toimib, lülita sisse käsk <quote
+>Näita konsooli väljundit</quote
+>, mille leiad menüüst <quote
+>Vaade</quote
+> ning jälgi seda millegi taasesitamisel Xines. Määra <computeroutput
+>misc.memcpy_method</computeroutput
+> väärtuseks väikseima ajaga meetod.</para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question>
+ <para
+>Kuidas vähendada CD-ROM-i müra, kui mängitakse sellelt (mitte VCD://)?</para>
+ </question>
+ <answer>
+ <para
+>Proovi pärast seadme ühendamist administraatorina anda käsk <command
+>hdparm -E 8 /dev/cdrom</command
+>. Aga kontrolli kindlasti hoolikalt, et <filename
+>/dev/cdrom</filename
+> ikka viitaks sinu CD-ROM seadmele. </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+
+ </chapter>
+<chapter id="credits-and-licenses">
+<title
+>Autorid ja litsents</title>
+
+<para
+>&kmplayer;i autoriõigus 2002, 2003: Koos Vriezen</para>
+&underFDL; &underGPL; </chapter>
+
+&documentation.index;
+</book>
+<!--
+Local Variables:
+mode: sgml
+sgml-minimize-attributes:nil
+sgml-general-insert-case:lower
+sgml-indent-step:0
+sgml-indent-data:nil
+End:
+-->
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/fr/Makefile.am b/doc/fr/Makefile.am
new file mode 100644
index 0000000..2b04350
--- /dev/null
+++ b/doc/fr/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = index.docbook
+
+
+KDE_LANG = fr
+KDE_DOCS = kmplayer
diff --git a/doc/fr/index.docbook b/doc/fr/index.docbook
new file mode 100644
index 0000000..ae2137e
--- /dev/null
+++ b/doc/fr/index.docbook
@@ -0,0 +1,213 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!ENTITY kmplayer '<application
+>Kmplayer</application
+>'>
+ <!ENTITY kappname "&kmplayer;"
+><!-- replace kmplayer here -->
+ <!ENTITY package "kdeextragear-2">
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % French "INCLUDE"
+><!-- change language only here -->
+
+]>
+
+<book lang="&language;">
+
+
+<bookinfo>
+<title
+>Le guide de &kmplayer;</title>
+
+<authorgroup>
+<author
+><firstname
+>Koos</firstname
+> <surname
+>Vriezen</surname
+> <affiliation
+> <address
+><email
+>koos POINT vriezen CHEZ xs4all POINT nl</email
+></address>
+</affiliation>
+</author>
+</authorgroup>
+
+&traducteurSimonDepiets;
+
+<copyright>
+<year
+>2002</year>
+<year
+>2003</year>
+<holder
+>Koos Vriezen</holder>
+</copyright>
+<!-- Translators: put here the copyright notice of the translation -->
+<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
+ and in the FDL itself on how to use it. -->
+<legalnotice
+>&FDLNotice;</legalnotice>
+
+
+<date
+>2003-12-24</date>
+<releaseinfo
+>0.05.00</releaseinfo>
+
+<!-- Abstract about this handbook -->
+
+<abstract>
+<para
+>&kmplayer; est une interface graphique pour &kde; de <application
+>MPlayer</application
+>. </para>
+</abstract>
+
+
+<keywordset>
+<keyword
+>KDE</keyword>
+<keyword
+>kdemultimedia</keyword>
+<keyword
+>MPlayer</keyword>
+<keyword
+>konqueror</keyword>
+<keyword
+>vidéo</keyword>
+</keywordset>
+
+</bookinfo>
+
+<chapter id="introduction">
+<title
+>Introduction</title>
+
+
+<para
+>&kmplayer; est une interface graphique simple de <application
+>MPlayer</application
+>, <application
+>Xine</application
+> et <application
+>FFMpeg</application
+>. Vous pouvez l'utiliser pour regarder tous les formats vidéo que <application
+>MPlayer</application
+>/<application
+>Xine</application
+> supporte ainsi que regarder des<acronym
+>DVD</acronym
+>s, <acronym
+>VCD</acronym
+> ou <acronym
+>TV</acronym
+>/<acronym
+>caméra</acronym
+>. </para>
+
+<para
+>La documentation de &kappname; n'était pas finie quand &kde; fut installé sur cet ordinateur.</para
+> <para
+>Si vous avez besoin, veuillez regarder sur le <ulink url="http://www.kde.org"
+>Site Web de KDE</ulink
+> pour les mises à jour, ou pour soumettre vos questions à la <ulink url="mail to:kde-user@kde.org"
+>Liste de diffusion &kde;</ulink
+>.</para>
+<para
+><emphasis
+>L'équipe de &kde;</emphasis
+></para>
+
+</chapter>
+<chapter id="questionsanswersandtips">
+ <title
+>Questions, Réponses, et Astuces</title>
+
+ <qandaset id="faq">
+ <title
+>Foire aux questions</title>
+ <qandaentry>
+ <question>
+ <para
+>Wine se lance lentement, pourquoi doit-il tester mon processeur en permanence.</para>
+ </question>
+ <answer>
+ <para
+>L'interface graphique <application
+>Xine</application
+> pour &kmplayer;, <application
+>kxineplayer</application
+>, utilise <filename
+>~/.xine/config2</filename
+> pour sa configuration. La configuration de<application
+>Xine</application
+> et configurable dans la boîte de dialogue <quote
+>Options Générales</quote
+>|<quote
+>Xine</quote
+>. (Si vous changez une option ici et l'enregistrez, <filename
+>~/.xine/config2</filename
+> contiendra aussi quelques explications). Le test processus est lancé par l'option <computeroutput
+>misc.memcpy_method</computeroutput
+> au réglage <computeroutput
+>probe</computeroutput
+>. Pour voir quelle version de memcpy fonctionne le plus rapidement chez vous, activez <quote
+>Montrer la Sortie Console</quote
+> depuis le menu <quote
+>Afficher</quote
+> et regardez les résultats du test quand vous jouez quelque chose avec Xine. Configurez <computeroutput
+>misc.memcpy_method</computeroutput
+> avec la méthode prenant le moins de temps.</para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question>
+ <para
+>Avez-vous une astuce pour rendre mon CDROM moins bruyant quand je joue depuis celui-ci (non VCD ://) ?</para>
+ </question>
+ <answer>
+ <para
+>Bien sûr, essayez la commande <command
+>hdparm -E 8 /dev/cdrom</command
+> en tant que route après avoir monté le périphérique. Mais assurez-vous que le lien <filename
+>/dev/cdrom</filename
+> pointe vers votre lecteur CDROM. </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+
+ </chapter>
+<chapter id="credits-and-licenses">
+<title
+>Remerciements et licence</title>
+
+<para
+>&kmplayer; copyright 2002,2003 Koos Vriezen</para>
+&underFDL; &underGPL; </chapter>
+
+&documentation.index;
+</book>
+<!--
+Local Variables:
+mode: sgml
+sgml-minimize-attributes:nil
+sgml-general-insert-case:lower
+sgml-indent-step:0
+sgml-indent-data:nil
+End:
+-->
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/it/Makefile.am b/doc/it/Makefile.am
new file mode 100644
index 0000000..1707be6
--- /dev/null
+++ b/doc/it/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = index.docbook
+
+
+KDE_LANG = it
+KDE_DOCS = kmplayer
diff --git a/doc/it/index.docbook b/doc/it/index.docbook
new file mode 100644
index 0000000..8d28856
--- /dev/null
+++ b/doc/it/index.docbook
@@ -0,0 +1,593 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!ENTITY kmplayer '<application
+>Kmplayer</application
+>'>
+ <!ENTITY kappname "&kmplayer;"
+><!-- replace kmplayer here -->
+ <!ENTITY package "kdeextragear-2">
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % Italian "INCLUDE"
+><!-- change language only here -->
+
+]>
+
+<book lang="&language;">
+
+
+<bookinfo>
+<title
+>Manuale di &kmplayer;</title>
+
+<authorgroup>
+<author
+><firstname
+>Koos</firstname
+> <surname
+>Vriezen</surname
+> <affiliation
+> <address
+><email
+>koos dot vriezen at gmail dot com</email
+></address>
+</affiliation>
+</author>
+</authorgroup>
+
+<othercredit role="translator"
+><firstname
+>Federico</firstname
+><surname
+>Zenith</surname
+><affiliation
+><address
+><email
+>zenith@chemeng.ntnu.no</email
+></address
+></affiliation
+><contrib
+>Quando ci sarà la documentazione, ah, allora la tradurrò...</contrib
+></othercredit
+>
+
+<copyright>
+<year
+>2002</year>
+<year
+>2006</year>
+<holder
+>Koos Vriezen</holder>
+</copyright>
+<!-- Translators: put here the copyright notice of the translation -->
+<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
+ and in the FDL itself on how to use it. -->
+<legalnotice
+>&FDLNotice;</legalnotice>
+
+
+<date
+>2003-12-24</date>
+<releaseinfo
+>0.05.00</releaseinfo>
+
+<!-- Abstract about this handbook -->
+
+<abstract>
+<para
+>&kmplayer; è un'applicazione di interfaccia tra &kde; e<application
+>MPlayer</application
+>, <application
+>Xine</application
+> e <application
+>GStreamer</application
+>. </para>
+</abstract>
+
+
+<keywordset>
+<keyword
+>KDE</keyword>
+<keyword
+>kdemultimedia</keyword>
+<keyword
+>MPlayer</keyword>
+<keyword
+>konqueror</keyword>
+<keyword
+>video</keyword>
+</keywordset>
+
+</bookinfo>
+
+<chapter id="introduction">
+<title
+>Introduzione</title>
+<para
+>&kmplayer; è una semplice interfaccia per <application
+>MPlayer</application
+>, <application
+>Xine</application
+> and <application
+>GStreamer</application
+> e <application
+>FFMpeg</application
+>. Puoi usarlo per vedere tutti i formati video filmati che <application
+>MPlayer</application
+>, <application
+>Xine</application
+> o <application
+>GStreamer</application
+> supportano, e anche vedere <acronym
+>DVD</acronym
+>, <acronym
+>VCD</acronym
+>, <acronym
+>TV</acronym
+> o <acronym
+>telecamere</acronym
+>. </para>
+<para
+>La documentazione di &kappname; non era pronta quando &kde; è stato installato su questo computer.</para
+> <para
+>Se hai bisogno di aiuto, per piacere visita <ulink url="http://www.kde.org"
+>il sito web di KDE</ulink
+> per aggiornamenti, o manda la tua domanda alla <ulink url="mail to:kde-user@kde.org"
+>Mailing list utenti &kde;</ulink
+>. </para>
+<para
+><emphasis
+>Il gruppo di &kde;</emphasis
+></para>
+
+</chapter>
+<chapter id="gui">
+<title
+>L'interfaccia utente</title>
+<para
+>La finestra dell'applicazione è composta da finestre cosiddette agganciabili. C'è sempre la finestra di vista centrale. Opzionalmente c'è anche la finestra della scaletta. Infine c'è una finestra di informazioni, che si fa vedere quando ci sono informazioni da comunicare. </para>
+<section id="playlistwindow">
+<title
+>Finestra della scaletta</title>
+<para
+>La finestra della scaletta ha, al momento della stesura di questo documento, cinque categorie: gli elementi attuali, <guilabel
+>Dischi ottici</guilabel
+>, <guilabel
+>Televisione</guilabel
+> <guilabel
+>Scalette persistenti</guilabel
+> e <guilabel
+>Più recenti</guilabel
+>. Quando si fa clic sul testo di una categoria, ne saranno mostrati i contenuti. Ovviamente questi dovrebbero innanzi tutto esserci, per esempio vedi <link linkend="tvsource"
+>le impostazioni della <acronym
+>TV</acronym
+></link
+> per aggiungere la categoria <guilabel
+>Televisione</guilabel
+>. La categoria <guilabel
+>Più recenti</guilabel
+> si riempirà quando si riproducono file multimediali sul tuo computer o da un <acronym
+>URL</acronym
+> in rete. Questa categoria può contenere fino a 60 elementi, di cui gli ultimi 50 sono raggruppati sotto <guilabel
+>Altri...</guilabel
+>. </para>
+<section>
+<title
+>Categoria delle scalette persistenti</title>
+<para
+>È possibile salvare le i tuoi collegamenti preferiti nel menu dei <guilabel
+>Segnalibri</guilabel
+>, ma sarebbero elementi singoli. Se vuoi creare un elenco di elementi da riprodurre in sequenza, dovresti usare la categoria delle <guilabel
+>Scalette persistenti</guilabel
+>. </para>
+<para
+>Il modo più semplice di aggiungere un elemento in questo elenco è trascinarlo da <guilabel
+>Più recenti</guilabel
+> in <guilabel
+>Scalette persistenti</guilabel
+>. Come vedrai, quando lo metti lì, appare un menu a comparsa dove puoi scegliere di aggiungerlo alla scaletta o creare un nuovo gruppo. Gli elementi di massimo livello si comportano come dei segnalibri, ma gli elementi nei gruppi leggeranno tutto il gruppo in cui si trovano. Gli elementi di questa categoria si possono facilmente spostare, copiare, aggiungere a un nuovo gruppo o eliminare solo trascinandoli in un altro posto. Inoltre ci sono i comandi <guimenu
+>Elimina elemento</guimenu
+>, <guimenu
+>Sposta in alto</guimenu
+>, <guimenu
+>Sposta in basso</guimenu
+> nel menu contestuale (che si ottiene facendo clic destro su un elemento). </para>
+<para
+>Ovviamente puoi aggiungere gruppi ad altri gruppi per avere una gerarchia ramificata. Quando fai clic su un elemento, il suo gruppo e tutti i suoi gruppi figli saranno copiati nella categoria attuale, e la lettura comincerà dalla posizione dell'elemento su cui si è fatto clic. </para>
+<section>
+<title
+>Formato di memorizzazione</title>
+<para
+>I dati sono memorizzati in <filename
+>~/.kde/share/apps/kmplayer/playlist.xml</filename
+>, e il suo formato è come un questo esempio. Vedi <link linkend="XML-editing"
+>qui</link
+> per sapere come manipolare i dati direttamente. <programlisting>
+&lt;playlist&gt;
+ &lt;group title="feeds"&gt;
+ &lt;item url="http://www.lugradio.org/episodes.rss"/&gt;
+ &lt;item url="http://science.nasa.gov/podcast.xml"/&gt;
+ &lt;item url="http://www.theworld.org/rss/tech.xml"/&gt;
+ &lt;/group&gt;
+ &lt;group title="iradio"&gt;
+ &lt;group title="sunny"&gt;
+ &lt;item mplayeropts="-cache 256" url="http://www.swissgroove.ch/listen.m3u"/&gt;
+ &lt;item url="http://www.boombasticradio.com/shoutcast/64.pls"/&gt;
+ &lt;/group&gt;
+ &lt;group title="rainy"&gt;
+ &lt;item url="http://www.radioparadise.com/musiclinks/rp_64.m3u"/&gt;
+ &lt;item url="http://www.woxy.com/stream/wma64.asx"/&gt;
+ &lt;item url="http://radionigel.com/winmedia.asx"/&gt;
+ &lt;item url="rtsp://livestreams.omroep.nl/live/vpro/vpro3voor12radioalt.rm"/&gt;
+ &lt;/group&gt;
+ &lt;/group&gt;
+&lt;/playlist&gt;
+</programlisting
+> Nota anche che per <application
+>MPlayer</application
+> si possono impostare delle opzioni personalizzane usando l'argomento <computeroutput
+>mplayeropts</computeroutput
+>. &kmplayer; cerca questa opzione andando in alto nell'albero, quindi puoi impostarla per un intero gruppo sostituendo le impostazioni di un gruppo o elemento figlio. </para>
+</section>
+</section>
+</section>
+<section id="XML-editing">
+<title
+>Modifica diretta dei file XML</title>
+<para
+>Le categorie attuali, <guilabel
+>Televisione</guilabel
+> e <guilabel
+>Scalette persistenti</guilabel
+> possono essere manipolate anche modificando il loro file <acronym
+>XML</acronym
+> associato. Ovviamente lo si può fare quando &kmplayer; non è in esecuzione e non sta modificando i vari file in <filename
+>~/.kde/share/apps/kmplayer/</filename
+>, ma anche dall'applicazione. Basta fare clic sull'etichetta di una categoria, scegliere <guimenu
+>Visualizza</guimenu
+> e poi <guimenu
+>Modalità di modifica</guimenu
+>. Puoi anche fare clic su un ramo figlio, e allora vedrai solo i contenuti <acronym
+>XML</acronym
+> del ramo. </para>
+<para
+>Dopo che hai modificato l'<acronym
+>XML</acronym
+>, fai clic su <guilabel
+>Sincronizza con scaletta</guilabel
+> e deseleziona la <guimenu
+>Modalità di modifica</guimenu
+> o fai clic su un'altra categoria. <caution
+><para
+>Tutte le modifiche vengono perse se lasci la modalità di modifica o selezioni un'altro ramo senza sincronizzare con la scaletta. </para
+></caution>
+</para>
+<para
+>A causa della pigrizia dell'autore di &kmplayer;, alcune funzionalità si possono abilitare solo attraverso modifiche del codice <acronym
+>XML</acronym
+>. </para>
+</section>
+</chapter>
+<chapter id="settings">
+<title
+>Impostazioni</title>
+<section>
+ <title
+>Animazione introduttiva e di uscita</title>
+ <para
+>È possibile disattivare l'animazione di avvio e di uscita modificando <filename
+>~/.kde/share/config/kmplayerrc</filename
+> e cambiando <programlisting>
+[General Options]
+ No Intro=0
+ </programlisting
+> questa opzione a '1'. Se l'opzione non c'è, basta aggiungerla. </para>
+<para
+>È anche possibile impostare un'animazione alternativa. KMPlayer cercherà rispettivamente <filename
+>~/.kde/share/apps/kmplayer/intro.xml</filename
+> e <filename
+>~/.kde/share/apps/kmplayer/exit.xml</filename
+>. Il formato deve essere un file <acronym
+>XML</acronym
+> supportato. </para>
+<para
+>L'animazione di avvio non deve essere breve, perché terminerà automaticamente quando viene aperta un'altra sorgente. Ovviamente ciò sarebbe un po' fastidioso per l'animazione di uscita, ma l'utente può sempre terminare l'applicazione due volte. </para>
+<para
+>Un semplice esempio di introduzione, che mostra le tue foto preferite, potrebbe essere: <programlisting>
+&lt;smil&gt;
+ &lt;body&gt;
+ &lt;img dur="indefinite" src="file:///home/pippo/mamma.png" fit="meet"/&gt;
+ &lt;/body&gt;
+&lt;/smil&gt;
+ </programlisting
+>Nel pacchetto sorgente di KMPlayer, nella cartella <filename
+>tests/</filename
+>, ci sono degli esempi di <acronym
+>SMIL</acronym
+> supportati da KMPlayer. </para>
+</section>
+</chapter>
+<chapter id="backends">
+<title
+>I lettori</title>
+<para
+>&kmplayer; usa dei programmi esterni per la lettura dei file. </para>
+<section id="mplayer">
+<title
+>MPlayer</title>
+<para
+>C'è una scheda di configurazione per MPlayer nella finestra di configurazione di &kmplayer;. Qui puoi impostare il percorso di MPlayer e le dimensioni della sua cache per i flussi di rete, tra le altre cose. </para>
+<section id="mplayer-debug">
+<title
+>Risoluzione dei problemi</title>
+<para
+>Il modo migliore di risolvere i problemi legati a questo lettore è avviare &kmplayer; da una console. Avvia un filmato con &kmplayer; e guarda la riga di comando esatta che viene usata per avviare MPlayer nella console. Ora copia e incolla in un'altra console, rimuovi le o opzioni '-wid 12344', e fallo partire. Probabilmente si tratta solo di scegliere i parametri giusti per -ao/-vo. Assicurati anche che MPlayer non parta con un'interfaccia grafica. </para>
+<para
+>Un altro strumento per risolvere i problemi è il pulsante <guilabel
+>Console</guilabel
+> nella barra degli strumenti di &kmplayer;. Qui puoi vedere l'output di MPlayer. </para>
+</section>
+</section>
+<section id="xine">
+<title
+>Xine</title>
+<para
+>Quando &kmplayer; è configurato per supportare Xine, ci sarà una scheda relativa per la configurazione di Xine nella finestra di configurazione di &kmplayer;. Qui puoi impostare varie opzioni. Queste sono recuperate dinamicamente dalla libreria di Xine. Usa l'aiuto contestuale per avere informazioni su cosa fanno le opzioni (cioè fai clic sul punto interrogativo sulla barra del titolo della finestra e fai clic su un'opzione). </para>
+<para
+>Le opzioni vengono salvate in <filename
+>.kde/share/apps/kmplayer/xine_config</filename
+> come file di testo. </para>
+<section id="xine-debug">
+<title
+>Risoluzione dei problemi</title>
+<para
+>Fondamentalmente la risoluzione dei problemi funziona come per <link linkend="mplayer-debug"
+>MPlayer</link
+>, con il nome di applicazione <filename
+>kxineplayer</filename
+>. </para>
+</section>
+</section>
+<section id="gstreamer">
+<title
+>GStreamer</title>
+<para
+>Non c'è nessuna scheda di configurazione per GStreamer nella finestra di configurazione di &kmplayer;. Le opzioni comuni per i dispositivi come i <acronym
+>DVD</acronym
+> vengono usate secondo opportunità. </para>
+<section id="gstremaer-debug">
+<title
+>Risoluzione dei problemi</title>
+<para
+>Fondamentalmente la risoluzione dei problemi funziona come per <link linkend="mplayer-debug"
+>MPlayer</link
+>, con il nome di applicazione <filename
+>kgstplayer</filename
+>. </para>
+</section>
+</section>
+</chapter>
+<chapter id="sources">
+<title
+>Le sorgenti riproducibili</title>
+<para
+>&kmplayer; può riprodurre diverse sorgenti. Queste sono elencate nel menu Sorgente. </para>
+<section id="tvsource">
+ <title
+>TV</title>
+ <para
+>&kmplayer; può usare le schede TV usando <application
+>MPlayer</application
+> o <acronym
+>XVideo</acronym
+> (usando <application
+>kxvplayer</application
+>). Prima di poter vedere la TV, devi configurare quale dispositivo usare e i canali televisivi. Puoi usare il programma di scansione dalla finestra di configurazione, oppure puoi configurare il file manualmente. </para>
+<para
+>Il file di configurazione per le impostazioni della TV è un file <acronym
+>XML</acronym
+>, posizionato a <filename
+>~/.kde/share/apps/kmplayer/tv.xml</filename
+>. Vedi <link linkend="XML-editing"
+>qui</link
+> per la manipolazione diretta di questi dati. Il formato <acronym
+>XML</acronym
+> è come in questo esempio: <programlisting>
+&lt;tvdevices&gt;
+ &lt;device path="/dev/video0" width="320" height="240" name="BT878 video (Hauppauge (bt878))" audio=""
+ minwidth="48" minheight="32" maxwidth="924" maxheight="576" playback="0" xvport="240"&gt;
+ &lt;input name="Television" id="0" tuner="1" norm="PAL" xvenc="0"&gt;
+ &lt;channel name="Ned1" frequency="21600"/&gt;
+ &lt;channel name="VCR" frequency="59490"/&gt;
+ &lt;/input&gt;
+ &lt;input name="Composite1" id="1" xvenc="7"/&gt;
+ &lt;input name="S-Video" id="2" xvenc="14"/&gt;
+ &lt;input name="Composite3" id="3"/&gt;
+ &lt;/device&gt;
+ &lt;device path="/dev/video1" width="640" height="480" name="Philips 740 webcam" audio=""
+ minwidth="160" minheight="120" maxwidth="640" maxheight="480" playback="1"&gt;
+ &lt;input name="Webcam" id="0"/&gt;
+ &lt;/device&gt;
+&lt;/tvdevices&gt;
+</programlisting
+> Nota che gli elementi <quote
+>input</quote
+> con dei canali dovrebbero avere l'attributo <quote
+>tuner</quote
+> impostato a <quote
+>1</quote
+>. </para>
+<para
+><acronym
+>XVideo</acronym
+> usa solo gli attributi <quote
+>xvport</quote
+> e <quote
+>xvenc</quote
+>, e possono essere impostati manualmente solo modificando questo file. I valori di questi attributi possono essere recuperati usando <quote
+>kxvplayer</quote
+> in un'applicazione di terminale come &konsole;. Per ogni porta, <quote
+>kxvplayer</quote
+> scriverà delle righe come le seguenti, e si possono impostare i numeri per gli attributi di cui si è parlato. <programlisting>
+ xvport 240
+ ....
+ encoding: 0 PAL-television
+ encoding: 1 NTSC-television
+ encoding: 2 SECAM-television
+ ....
+</programlisting
+> Anche gli attributi di altezza e larghezza sono ignorati dal lettore <acronym
+>XVideo</acronym
+>. Questo lettore ottiene le dimensioni dal server X. Una delle cose carine di <acronym
+>XVideo</acronym
+> è che la scala è fatta dall'hardware, dalla scheda video, quindi è possibile avere il supporto a schermo intero senza uso di CPU e senza cambio di risoluzione del tuo monitor. Inoltre, non ci sarà un noioso sfarfallio quando un'altra finestra si sovrapporrà a questa finestra video. </para>
+<para
+>Vedi la sezione VDR per maggiori informazioni sull'uso di <acronym
+>XVideo</acronym
+>. </para>
+</section>
+<section id="vdrsource">
+ <title
+>VDR</title>
+<para
+>Per configurare le tue impostazioni VDR in kmplayer, vedi il pannello Configura pannello->Sorgente->VDR->Porta XVideo. Ci dovrebbero essere le porte rilevate, tra cui dovresti sceglierne una. Devi decidere quale codifica usare (per esempio PAL per l'europa occidentale), e probabilmente quella giusta ha un nome contenente <quote
+>dvb</quote
+>. </para>
+<para
+>Per esempio, io ho una scheda TV, una scheda DVB-S e una webcam nel mio sistema. Con questi, ho tre porte nelle mie impostazioni. La prima è un lungo elenco di voci NTSC(-JP)/PAL(-M)/SECAM, tutte riguardo a un television/composite/svideo (la mia scheda TV). La seconda contiene NTSC-dvb/PAL-dvb/SECAM-dvb (la mia scheda DVB-S). Infine, la terza contiene solo ntsc/pal (probabilmente la mia webcam). Quindi dovrei configurare la seconda porta (basta selezionarla) e la seconda voce (PAL-dvb). </para>
+<para
+>Siccome il supporto VDR di &kmplayer; può usare solo <acronym
+>XVideo</acronym
+>, <acronym
+>XVideo</acronym
+> deve ovviamente funzionare (credo che per i dispositivi video, questo modo di visualizzazione funzioni solo in Linux). Ciò funziona solo sul tuo primo schermo (:0.0). Perciò assicurati che l'estensione <quote
+>videoforlinux</quote
+> funzioni nel server X. Per il server XFree86, nel suo file di configurazione (<filename
+>/etc/X11/XF86Config</filename
+>), dovrebbe esserci <programlisting
+>Section "Module"
+ ....
+ Load "v4l"
+EndSection
+</programlisting>
+</para>
+<para
+>Sfortunatamente, quando aggiorni il tuo driver video, devi riconfigurare questa impostazione. </para>
+</section>
+<section id="kmplayer_url">
+ <title
+>Riga di comando</title>
+<para
+>Internamente, KMPlayer usa diversi nomi per le sorgenti. Al momento della scrittura questi erano "dvdnavsource", "dvdsource", "exitsource", "hrefsource", "introsource", "pipesource", "tvscanner", "tvsource", "urlsource", "vcdsource" e "vdrsource". Quando attivi, cominciano a riprodurre l'elenco di elementi riproducibili. </para>
+<para
+>Puoi attivare una sorgente particolare con un <acronym
+>URL</acronym
+> di tipo <filename
+>kmplayer://</filename
+>. Basta impostare la parte host come il nome della sorgente e la parte del percorso opzionale come argomenti aggiuntivi; quindi per un canale per "vdrsource" potrebbe essere: <filename
+>kmplayer://vdrsource/22 MTV 2</filename
+>. Per esempio, questo script avvia KMPlayer usando "dvdnavsource" e usando <acronym
+>DCOP</acronym
+> per riprodurre a schermo intero.<programlisting>
+/bin/bash
+kmplayer kmplayer://dvdnavsource/ &amp;
+PID=$!
+sleep 2
+dcop kmplayer-$PID KMediaPlayer toggleFullScreen
+</programlisting
+>Per alcune sorgenti ciò non farà molto, perché non sono fatte per la riproduzione normale. Per "pipesource" questo è disattivato perché sarebbe una pericolosa falla nella sicurezza. </para>
+</section>
+</chapter>
+<chapter id="questionsanswersandtips">
+ <title
+>Domande, risposte e suggerimenti</title>
+
+ <qandaset id="faq">
+ <title
+>Domande frequenti</title>
+ <qandaentry>
+ <question>
+ <para
+>Xine si avvia lentamente, perché deve fare benchmark della mia CPU in continuazione?</para>
+ </question>
+ <answer>
+ <para
+>Nota che la risposta sotto è obsoleta. <application
+>kxineplayer</application
+> salva automaticamente l'ultimo valore, quindi solo xine farà il test della CPU solo la prima volta. </para>
+ <para
+>L'interfaccia di &kmplayer; per <application
+>Xine</application
+>, <application
+>kxineplayer</application
+>, usa <filename
+>~/.kde/share/apps/kmplayer/xine_config</filename
+> per la sua configurazione. Le impostazioni di <application
+>Xine</application
+> si trovano nella finestra di configurazione <quote
+>Opzioni generali</quote
+>|<quote
+>Xine</quote
+> (Se cambi un'opzione qui e la salvi, anche <filename
+>~/.kde/share/apps/kmplayer/xine_config</filename
+> conterrà delle spiegazioni). Il benchmarking della CPU è causato dall'opzione <computeroutput
+>misc.memcpy_method</computeroutput
+> impostata a <computeroutput
+>probe</computeroutput
+>. Per vedere quale versione di memcpy funziona più velocemente per te, attiva <quote
+>Mostra output della console</quote
+> dal menu <quote
+>Visualizza</quote
+>, e guarda i risultati di questo benchmark quando riproduci qualcosa con Xine. Configura <computeroutput
+>misc.memcpy_method</computeroutput
+> con il metodo con il tempo più basso.</para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question>
+ <para
+>Ci sono trucchi per rendere il mio CDROM meno rumoroso quando sto riproducendo qualcosa (non VCD://)?</para>
+ </question>
+ <answer>
+ <para
+>Certo, prova <command
+>hdparm -E 8 /dev/cdrom</command
+> come root dopo aver montato il dispositivo. Assicurati di controllare bene che <filename
+>/dev/cdrom</filename
+> punti al tuo dispositivo CDROM. </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+
+ </chapter>
+<chapter id="credits-and-licenses">
+<title
+>Riconoscimenti e licenza</title>
+
+<para
+>&kmplayer; copyright 2002,2003 Koos Vriezen</para>
+&underFDL; &underGPL; </chapter>
+
+&documentation.index;
+</book>
+<!--
+Local Variables:
+mode: sgml
+sgml-minimize-attributes:nil
+sgml-general-insert-case:lower
+sgml-indent-step:0
+sgml-indent-data:nil
+End:
+-->
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/nl/Makefile.am b/doc/nl/Makefile.am
new file mode 100644
index 0000000..a09519d
--- /dev/null
+++ b/doc/nl/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = index.docbook
+
+
+KDE_LANG = nl
+KDE_DOCS = kmplayer
diff --git a/doc/nl/index.docbook b/doc/nl/index.docbook
new file mode 100644
index 0000000..a4a99f4
--- /dev/null
+++ b/doc/nl/index.docbook
@@ -0,0 +1,386 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!ENTITY kmplayer '<application
+>Kmplayer</application
+>'>
+ <!ENTITY kappname "&kmplayer;"
+><!-- replace kmplayer here -->
+ <!ENTITY package "kdeextragear-2">
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % Dutch "INCLUDE"
+><!-- change language only here -->
+
+]>
+
+<book lang="&language;">
+
+
+<bookinfo>
+<title
+>Het handboek van &kmplayer;</title>
+
+<authorgroup>
+<author
+><firstname
+>Koos</firstname
+> <surname
+>Vriezen</surname
+> <affiliation
+> <address
+><email
+>koos dot vriezen at xs4all dot nl</email
+></address>
+</affiliation>
+</author>
+</authorgroup>
+
+&Rinse.Devries;
+
+<copyright>
+<year
+>2002</year>
+<year
+>2003</year>
+<holder
+>Koos Vriezen</holder>
+</copyright>
+<!-- Translators: put here the copyright notice of the translation -->
+<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
+ and in the FDL itself on how to use it. -->
+<legalnotice
+>&FDLNotice;</legalnotice>
+
+
+<date
+>2003-12-24</date>
+<releaseinfo
+>0.05.00</releaseinfo>
+
+<!-- Abstract about this handbook -->
+
+<abstract>
+<para
+>&kmplayer; is een grafische schil voor <application
+>MPlayer</application
+>, geschreven voor &kde;. </para>
+</abstract>
+
+
+<keywordset>
+<keyword
+>KDE</keyword>
+<keyword
+>kdemultimedia</keyword>
+<keyword
+>MPlayer</keyword>
+<keyword
+>konqueror</keyword>
+<keyword
+>video</keyword>
+</keywordset>
+
+</bookinfo>
+
+<chapter id="introduction">
+<title
+>Inleiding</title>
+<para
+>&kmplayer; is een eenvoudige schil voor <application
+>Mplayer</application
+>, <application
+>Xine</application
+> en <application
+>FFMpeg</application
+>. U kunt het gebruiken voor het bekijken van alle videoformaten die <application
+>MPlayer</application
+> en <application
+>Xine</application
+> ondersteunen, waaronder <acronym
+>DVD</acronym
+>, <acronym
+>VCD</acronym
+> of <acronym
+>TV</acronym
+>/camera. </para>
+<para
+>De documentatie voor &kappname; was nog niet af toen &kde; op deze computer werd geïnstalleerd.</para
+> <para
+>Als u hulp nodig hebt, kijk dan op de <ulink url="http://www.kde.org"
+>website van KDE</ulink
+> voor nieuwe versies, of stel uw vraag op de <ulink url="mailto:kde-user@kde.org"
+>KDE-mailinglist</ulink
+>.</para>
+<para
+><emphasis
+>Het &kde;-team</emphasis
+></para>
+
+</chapter>
+<chapter id="settings">
+<title
+>Instellingen</title>
+<section>
+ <title
+>Intro/afsluit animatie</title>
+ <para
+>U kunt de animatie bij het opstarten/afsluiten an het programma instellen door het bestand <filename
+>~/.kde/share/config/kmplayerrc</filename
+> te bewerken. Wijzig onderstaande optie in '1' <programlisting>
+[General Options]
+ No Intro=0
+ </programlisting
+> Of voeg deze optie toe als hij er nog iet bij staat. </para>
+<para
+>Het is ook mogelijk om een alternatieve animatie op te geven. KMPlayer zoekt respectievelijk in <filename
+>~/.kde/share/apps/kmplayer/intro.xml</filename
+> en <filename
+>~/.kde/share/apps/kmplayer/exit.xml</filename
+>. Het bestand dient te zijn opgemaakt in ondersteunde <acronym
+>XML</acronym
+>. </para>
+<para
+>De intro-animatie hoeft niet kort te zijn omdat hij automatisch zal worden beëindigd als er een andere bron wordt geopend. Een lange afsluitanimatie is uiteraard hinderlijk, maar de gebruiker kan altijd het programma tweemaal afsluiten. </para>
+<para
+>Een eenvoudig voorbeeld van een intro die uw favoriete foto toont: <programlisting>
+&lt;smil&gt;
+ &lt;body&gt;
+ &lt;img dur="indefinite" src="file:///home/koos/mams.gif" fit="meet"/&gt;
+ &lt;/body&gt;
+&lt;/smil&gt;
+ </programlisting
+> In het broncodepakket van KMPlayer vindt u in de map <filename
+>tests/</filename
+> enkele voorbeelden van <acronym
+>SMIL</acronym
+> die KMPlayer ondersteunt. </para>
+</section>
+</chapter>
+<chapter id="sources">
+<title
+>De afspeelbare bronnen</title>
+<para
+>&kmplayer; kan vanuit vele bronnen afspelen. Deze bronnen staan in het Bron-menu. </para>
+<section id="tvsource">
+ <title
+>TV</title>
+ <para
+>&kmplayer; kan tv-programma's van de tv-kaar spelen met behulp van <application
+>MPlayer</application
+> of <acronym
+>XVideo</acronym
+> (met behulp van <application
+>kxvplayer</application
+>). Voordat u kunt tv kijken dient u eerst het te gebruiken apparaat in te stellen en de tv-kanalen. U kunt de scanner uit de instellingendialoog hiervoor gebruiken, of het configuratiebestand handmatig bewerken. </para>
+<para
+>Het configuratiebestand voor de tv-instellingen is opgemaakt in <acronym
+>XML</acronym
+> en bevindt zich op <filename
+>~/.kde/share/apps/kmplayer/tv.xml</filename
+>. Het <acronym
+>XML</acronym
+>-formaat is zoals in dit voorbeeld: <programlisting>
+&lt;tvdevices&gt;
+ &lt;device path="/dev/video0" width="320" height="240" name="BT878 video (Hauppauge (bt878))" audio=""
+ minwidth="48" minheight="32" maxwidth="924" maxheight="576" playback="0" xvport="240"&gt;
+ &lt;input name="Television" id="0" tuner="1" norm="PAL" xvenc="0"&gt;
+ &lt;channel name="Ned1" frequency="21600"/&gt;
+ &lt;channel name="VCR" frequency="59490"/&gt;
+ &lt;/input&gt;
+ &lt;input name="Composite1" id="1" xvenc="7"/&gt;
+ &lt;input name="S-Video" id="2" xvenc="14"/&gt;
+ &lt;input name="Composite3" id="3"/&gt;
+ &lt;/device&gt;
+ &lt;device path="/dev/video1" width="640" height="480" name="Philips 740 webcam" audio=""
+ minwidth="160" minheight="120" maxwidth="640" maxheight="480" playback="1"&gt;
+ &lt;input name="Webcam" id="0"/&gt;
+ &lt;/device&gt;
+&lt;/tvdevices&gt;
+</programlisting
+> Merk op dat bij de elementen <quote
+>input</quote
+> die kanalen bevatten het attribuut <quote
+>tuner</quote
+> op <quote
+>1</quote
+> gezet moeten zijn. </para>
+<para
+><acronym
+>XVideo</acronym
+> gebruikt alleen de attributen <quote
+>xvport</quote
+> en <quote
+>xvenx</quote
+>. Ze kunnen alleen handmatig in dit bestand worden gezet. De waarden van deze twee attributen kunnen worden verkregen door <quote
+>kxvplayer</quote
+> in een terminalprogramam als <quote
+>konsole</quote
+> te draaien. Voor elke poort zal <quote
+>kvplayer</quote
+> uitvoerregels zoals hieronder produceren en de getallen voor de attributen kunnen zoals eerder genoemd worden ingesteld. <programlisting>
+ xvport 240
+ ....
+ encoding: 0 PAL-television
+ encoding: 1 NTSC-television
+ encoding: 2 SECAM-television
+ ....
+</programlisting
+> De <acronym
+>XVideo</acronym
+>-speler negeert ook de attributen widht en height. Deze speler krijgt de afmetingen van de X-server. Een van de aardigheden vn <acronym
+>XVideo</acronym
+> is dat het schalen door de hardware, de videokaart, wordt gedaan, dus ondesteuning voor volledig-scherm-weergave zonder processorgebruik en zonder resolutiewijzing van uw monitor. Bovendien geen hinderlijk geflikker als een ander venster dit videovenster overlapt. </para>
+<para
+>Zie de VDR-sectie voor meer informatie over het gebruik van <acronym
+>XVideo</acronym
+>. </para>
+</section>
+<section id="vdrsource">
+ <title
+>VDR</title>
+<para
+>Voor het instellen van de VDR-instellingen van kmplayer gaat u naar <quote
+>Instellingen ->KMplayer instellen</quote
+>, sectie <quote
+>Bron</quote
+>, tabblad <quote
+>VDR</quote
+>. Als het goed is zijn er poorten gedetecteerd waaruit u een kunt kiezen. U dient uit te vogelen welke codering u moet gebruiken (voor West-Europa is dat PAL), de juiste heeft waarschijnlijk een naam met <quote
+>dvb</quote
+> erin. </para>
+<para
+>Bijvoorbeeld, ik heb een tv-kaart, een DVB-S-kaart en een webcam op mijn computer aangesloten. Met deze configuratie zitten er 3 poorten bij mijn instellingen. De eerste heeft een lange lijst met items als NTSC(-JP)/PAL(-M)/SECAM en zeggen allen iets over television/composite/svideo (mijn tv-kaart). De tweede heeft NTSC-dvb/PAL-dvb/SECAM-dvb (mijn DVB-S-kaart). En tot slot de laatste heeft alleen ntsc/pal (waarschijnlijk mijn webcam). Ik moet dus de tweede poort instellen (gewoon selecteren) en het tweede item (PAL-dvb) kiezen. </para>
+<para
+>Omdat VDR-ondersteuning van kmplayer alleen <acronym
+>XVideo</acronym
+> kan gebruiken dient <acronym
+>XVideo</acronym
+> uiteraard te werken (en ik geloof dat voor video-apparaten alleen deze manier van weergeven in Linux werkt). Dit werkt bovendien alleen voor de eerste display (:0.0). Zorg er dus voor dat de <quote
+>videoforlinux</quote
+>-extensie werkt met de X-server. Voor deXFree86-server moet daarom het volgende in het configuratiebestand (<filename
+>/etc/X11/XF86Config</filename
+>) staan: <programlisting
+>Section "Module"
+ ....
+ Load "v4l"
+EndSection
+</programlisting>
+</para>
+<para
+>Helaas dient u deze instelling opnieuw toe te voegen als u het stuurprogramma van uw videokaart opwaardeert. </para>
+</section>
+<section id="kmplayer_url">
+ <title
+>Commandoregel</title>
+<para
+>Intern gebruikt KMPlayer aparte namen voor de bronnen. Op het moment dat dit document is geschreven waren dat "dvdnavsource", "dvdsource", "exitsource", "hrefsource", "introsource", "pipesource", "tvscanner", "tvsource", "urlsource", "vcdsource" en "vdrsource". Wanneer geactiveerd beginnen ze in de meeste gevallen met het afspelen van de lijst met afspeelbare items. </para>
+<para
+>U kunt een specifieke bron activeren met een <filename
+>kmplayer://</filename
+> <acronym
+>URL</acronym
+>-adres. Zet het hostgedeelte als bronnaam en het optionele gedeelte als extra argumenten. Dus voor een kanaal voor de "vdrsource" ziet dit er uit als <filename
+>kmplayer://vdrsource/22 MTV 2</filename
+>. Bijv. dit script start kmplayer met "dvdnavsource" en gebruikt &DCOP; om op volledig scherm af te spelen:<programlisting>
+/bin/bash
+kmplayer kmplayer://dvdnavsource/ &amp;
+PID=$!
+sleep 2
+dcop kmplayer-$PID KMediaPlayer toggleFullScreen
+ </programlisting
+> Bij sommige bronnen doet dit niet veel omdat ze niet bedoeld zijn voor normaal afspelen. voor "pipesource" is dit uitgeschakeld omdat het anders een flink beveiligingsgat zou veroorzaken. </para>
+</section>
+</chapter>
+<chapter id="questionsanswersandtips">
+ <title
+>Vragen, antwoorden en tips</title>
+
+ <qandaset id="faq">
+ <title
+>Veel voorkomende vragen</title>
+ <qandaentry>
+ <question>
+ <para
+>Xine start traag op, waarom voert het telkens een CPU-benchmark uit?</para>
+ </question>
+ <answer>
+ <para
+>Merk op dat onderstaand antwoord verouderd is. <application
+>kxineplayer</application
+> slaat de laatste waarde automatisch op, zodat de CPU-test alleen de eerste keer zal worden uitgevoerd. </para>
+ <para
+>De <application
+>Xine</application
+>-schil voor &kmplayer;, <application
+>kxineplayer</application
+>, gebruikt het bestand <filename
+>~/.kde/share/apps/kmplayer/xine_config</filename
+> voor diens configuratie. De instellingen voor <application
+>Xine</application
+> staan in de configuratiedialoog <quote
+>Algemene opties</quote
+>|<quote
+>Xine</quote
+>. (Als u daar een optie wijzigt en opslaat, dan zal het bestand <filename
+>~/.kde/share/apps/kmplayer/xine_config</filename
+> ook enige uitleg bevatten.) De CPU-benchmarking wordt veroorzaakt door de optie <computeroutput
+>misc.memcpy_method</computeroutput
+> die is gezet op <computeroutput
+>probe</computeroutput
+>. Om na te gaan welke memcpy-versie het snelst is voor u, activeer de optie <quote
+>Console-uitvoer tonen</quote
+> in het menu <quote
+>Beeld</quote
+> en bekijk de resultaten van deze benchmarking als u iets met Xine afspeelt. Stel de optie <computeroutput
+>misc.memcpy_method</computeroutput
+> in met de methode met de laagste tijd.</para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question>
+ <para
+>Enige tips om mijn CD-ROM stiller te maken als er een film wordt afgespeeld (niet VCD://)?</para>
+ </question>
+ <answer>
+ <para
+>Zeker, probeer commando <command
+>hdparm -E 8 /dev/cdrom</command
+> als root nadat het station is aangekoppeld (mount), waarbij <filename
+>/dev/cdrom</filename
+> naar uw CD-ROM-staton verwijst. </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+
+ </chapter>
+<chapter id="credits-and-licenses">
+<title
+>Dankbetuigingen en licenties</title>
+
+<para
+>&kmplayer; copyright 2002,2003 Koos Vriezen</para>
+&underFDL; &underGPL; &meld.fouten; &vertaling.rinse; </chapter>
+
+&documentation.index;
+</book>
+<!--
+Local Variables:
+mode: sgml
+sgml-minimize-attributes:nil
+sgml-general-insert-case:lower
+sgml-indent-step:0
+sgml-indent-data:nil
+End:
+-->
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/pt/Makefile.am b/doc/pt/Makefile.am
new file mode 100644
index 0000000..374a987
--- /dev/null
+++ b/doc/pt/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = index.docbook
+
+
+KDE_LANG = pt
+KDE_DOCS = kmplayer
diff --git a/doc/pt/index.docbook b/doc/pt/index.docbook
new file mode 100644
index 0000000..3bf8382
--- /dev/null
+++ b/doc/pt/index.docbook
@@ -0,0 +1,593 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!ENTITY kmplayer '<application
+>Kmplayer</application
+>'>
+ <!ENTITY kappname "&kmplayer;"
+><!-- replace kmplayer here -->
+ <!ENTITY package "kdeextragear-2">
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % Portuguese "INCLUDE"
+><!-- change language only here -->
+
+]>
+
+<book lang="&language;">
+
+
+<bookinfo>
+<title
+>O Manual do &kmplayer;</title>
+
+<authorgroup>
+<author
+><firstname
+>Koos</firstname
+> <surname
+>Vriezen</surname
+> <affiliation
+> <address
+><email
+>koos dot vriezen at gmail dot com</email
+></address>
+</affiliation>
+</author>
+</authorgroup>
+
+<othercredit role="translator"
+><firstname
+>Pedro</firstname
+><surname
+>Morais</surname
+><affiliation
+><address
+><email
+>morais@kde.org</email
+></address
+></affiliation
+><contrib
+>Tradução</contrib
+></othercredit
+>
+
+<copyright>
+<year
+>2002</year>
+<year
+>2006</year>
+<holder
+>Koos Vriezen</holder>
+</copyright>
+<!-- Translators: put here the copyright notice of the translation -->
+<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
+ and in the FDL itself on how to use it. -->
+<legalnotice
+>&FDLNotice;</legalnotice>
+
+
+<date
+>2003-12-24</date>
+<releaseinfo
+>0.05.00</releaseinfo>
+
+<!-- Abstract about this handbook -->
+
+<abstract>
+<para
+>O &kmplayer; é uma interface &kde; para o <application
+>MPlayer</application
+>, o <application
+>Xine</application
+> e o <application
+>GStreamer</application
+>. </para>
+</abstract>
+
+
+<keywordset>
+<keyword
+>KDE</keyword>
+<keyword
+>kdemultimedia</keyword>
+<keyword
+>MPlayer</keyword>
+<keyword
+>konqueror</keyword>
+<keyword
+>vídeo</keyword>
+</keywordset>
+
+</bookinfo>
+
+<chapter id="introduction">
+<title
+>Introdução</title>
+<para
+>O &kmplayer; é uma interface simples para o <application
+>MPlayer</application
+>, o <application
+>Xine</application
+>, o <application
+>GStreamer</application
+> e o <application
+>FFMpeg</application
+>. Você poderá usá-lo para ver todos os tipos de formatos de ficheiros que o <application
+>MPlayer</application
+>, o <application
+>Xine</application
+> ou o <application
+>GStreamer</application
+> suportam, assim como ver <acronym
+>DVD</acronym
+>s, <acronym
+>VCD</acronym
+> ou <acronym
+>TV</acronym
+>/<acronym
+>vídeo</acronym
+>. </para>
+<para
+>A documentação do &kappname; não estava terminada quando o &kde; foi instalado neste computador.</para
+> <para
+>Se necessitar de ajuda, procure na <ulink url="http://www.kde.org"
+>Página do KDE</ulink
+> actualizações, ou envie perguntas para <ulink url="mail to:kde-user@kde.org"
+>A Lista de E-mail dos Utilizadores do &kde;</ulink
+>. </para>
+<para
+><emphasis
+>A Equipa do &kde;</emphasis
+></para>
+
+</chapter>
+<chapter id="gui">
+<title
+>A interface do utilizador</title>
+<para
+>A janela da aplicação é composta por janelas acopláveis. Existe sempre a janela central. Uma janela opcional é a janela da lista de reprodução. Finalmente, existe uma janela de informação, que aparece simplesmente quando existe alguma informação para ser apresentada. </para>
+<section id="playlistwindow">
+<title
+>Janela da lista de reprodução</title>
+<para
+>A janela da lista de reprodução tem, na altura em que este documento foi escrito, cinco categorias, sendo os itens actuais, os <guilabel
+>Discos Ópticos</guilabel
+>, a <guilabel
+>Televisão</guilabel
+>, as <guilabel
+>Listas Persistentes</guilabel
+> e o <guilabel
+>Mais Recente</guilabel
+>. Quando carregar no texto de uma categoria, o mesmo irá mostrar os conteúdos por baixo desta linha. Obviamente, terão de existir conteúdos; p.ex., veja a <link linkend="tvsource"
+>configuração da <acronym
+>TV</acronym
+></link
+> para adicionar conteúdos à categoria <guilabel
+>Television</guilabel
+> (Televisão). A categoria <guilabel
+>Mais Recente</guilabel
+> preencher-se-á à medida que vão sendo tocados ficheiros multimédia locais ou <acronym
+>URL</acronym
+>s remotos. Esta categoria poderá conter 60 itens, dos quais os últimos 50 se encontram no ramo <guilabel
+>Mais ..</guilabel
+>. </para>
+<section>
+<title
+>Categoria das Listas Persistentes</title>
+<para
+>É possível gravar as suas referências favoritas no menu <guilabel
+>Favorito</guilabel
+>, mas estes são itens únicos. Se quiser criar uma lista de itens que sejam reproduzidos uns atrás dos outros, então deverá usar a categoria de <guilabel
+>Listas Persistentes</guilabel
+>. </para>
+<para
+>A forma mais simples de adicionar um item nesta lista é arrastá-la da categoria <guilabel
+>Mais Recente</guilabel
+> e largá-la nas <guilabel
+>Listas Persistentes</guilabel
+>. Como poderá ver, ao largar os itens, irá aparecer um menu onde poderá escolher entre adicionar a esta lista ou criar um grupo novo. Os itens do nível de topo comportam-se como um item de favorito, mas os itens nos grupos irão tocar o grupo inteiro onde residem. Os itens desta categoria poderão ser movidos, copiados, adicionados a um novo grupo ou removidos facilmente, bastando para tal arrastar este item para outro local nesta categoria. Para além disso, existem os itens <guimenu
+>Apagar o item</guimenu
+>, <guimenu
+>Subir</guimenu
+> e <guimenu
+>Descer</guimenu
+> no menu de contexto (ao carregar com o botão direito do rato num item). </para>
+<para
+>Como é óbvio, poderá adicionar grupos aos grupos, para obter uma hierarquia mais profunda. Quando carregar num item, o seu grupo e todos os grupos-filhos serão copiados para a categoria actual e a reprodução começa na posição do item seleccionado. </para>
+<section>
+<title
+>Formato de armazenamento</title>
+<para
+>Os dados são gravados em <filename
+>~/.kde/share/apps/kmplayer/playlist.xml</filename
+> e o seu formato é semelhante ao exemplo seguinte. Veja <link linkend="XML-editing"
+>aqui</link
+> como manipular estes dados directamente. <programlisting>
+&lt;playlist&gt;
+ &lt;group title="feeds"&gt;
+ &lt;item url="http://www.lugradio.org/episodes.rss"/&gt;
+ &lt;item url="http://science.nasa.gov/podcast.xml"/&gt;
+ &lt;item url="http://www.theworld.org/rss/tech.xml"/&gt;
+ &lt;/group&gt;
+ &lt;group title="iradio"&gt;
+ &lt;group title="sunny"&gt;
+ &lt;item mplayeropts="-cache 256" url="http://www.swissgroove.ch/listen.m3u"/&gt;
+ &lt;item url="http://www.boombasticradio.com/shoutcast/64.pls"/&gt;
+ &lt;/group&gt;
+ &lt;group title="rainy"&gt;
+ &lt;item url="http://www.radioparadise.com/musiclinks/rp_64.m3u"/&gt;
+ &lt;item url="http://www.woxy.com/stream/wma64.asx"/&gt;
+ &lt;item url="http://radionigel.com/winmedia.asx"/&gt;
+ &lt;item url="rtsp://livestreams.omroep.nl/live/vpro/vpro3voor12radioalt.rm"/&gt;
+ &lt;/group&gt;
+ &lt;/group&gt;
+&lt;/playlist&gt;
+</programlisting
+> Repare também que as opções personalizadas do <application
+>MPlayer</application
+> podem ser definidas com o argumento <computeroutput
+>mplayeropts</computeroutput
+>. O &kmplayer; procura por esta opção para cima na árvore, para que a possa definir para um grupo inteiro e substituí-la por um grupo ou item-filho. </para>
+</section>
+</section>
+</section>
+<section id="XML-editing">
+<title
+>Edição directa do XML</title>
+<para
+>A categoria actual, a <guilabel
+>Television</guilabel
+> e a das <guilabel
+>Listas Persistentes</guilabel
+> poderão ser também manipuladas, se editar o seu armazenamento em <acronym
+>XML</acronym
+>. Obviamente, uma pessoa podê-lo-á fazer quando o &kmplayer; não estiver a correr e editar os vários ficheiros em <filename
+>~/.kde/share/apps/kmplayer/</filename
+>, mas também na aplicação em si. Basta carregar no texto de uma categoria, escolher <guimenu
+>Ver</guimenu
+> e depois <guimenu
+>modo de Edição</guimenu
+>. Poderá também carregar num ramo-filho, vendo apenas o conteúdo em <acronym
+>XML</acronym
+> desse ramo. </para>
+<para
+>Depois de ter editado algum <acronym
+>XML</acronym
+>, carregue na opção <guilabel
+>Sincronizar com a lista</guilabel
+> e depois desligue o item <guimenu
+>modo de Edição</guimenu
+> ou carregue noutra categoria. <caution
+><para
+>Todas as alterações serão perdidas, quando sair do modo de edição, ou seleccionar outro ramo, sem sincronizar com a lista. </para
+></caution>
+</para>
+<para
+>Devido à preguiça dos autores do &kmplayer;, algumas funcionalidades só poderão ser activadas se editar o XML. </para>
+</section>
+</chapter>
+<chapter id="settings">
+<title
+>Configuração</title>
+<section>
+ <title
+>Animação no arranque/saída</title>
+ <para
+>A desactivação da animação inicial/final poderá ser configurada se editar o ficheiro <filename
+>~/.kde/share/config/kmplayerrc</filename
+> e modificar <programlisting>
+[General Options]
+ No Intro=0
+ </programlisting
+> a opção anterior para '1'. Basta adicionar a opção se não existir no ficheiro. </para>
+<para
+>Também é possível definir uma animação alternativa. O KMPlayer irá ver, respectivamente, em <filename
+>~/.kde/share/apps/kmplayer/intro.xml</filename
+> e <filename
+>~/.kde/share/apps/kmplayer/exit.xml</filename
+>. O formato terá de ser um ficheiro <acronym
+>XML</acronym
+> suportado. </para>
+<para
+>A animação inicial não terá de ser reduzida, dado que irá terminar imediatamente, quando for aberto outro ficheiro. Claro que, para a animação final, isso poder-se-á tornar incómodo; contudo, o utilizador poderá terminar a aplicação duas vezes. </para>
+<para
+>Um exemplo simples de uma introdução que mostre a sua fotografia favorito poderá ser<programlisting>
+&lt;smil&gt;
+ &lt;body&gt;
+ &lt;img dur="indefinite" src="file:///home/ze/namorada.gif" fit="meet"/&gt;
+ &lt;/body&gt;
+&lt;/smil&gt;
+ </programlisting
+> No pacote de código do KMPlayer, em <filename
+>tests/</filename
+> existem alguns exemplos de ficheiros <acronym
+>SMIL</acronym
+> que o KMPlayer suporta. </para>
+</section>
+</chapter>
+<chapter id="backends">
+<title
+>Os leitores das infra-estruturas</title>
+<para
+>O &kmplayer; usa programas externos para efectuar a reprodução em si. </para>
+<section id="mplayer">
+<title
+>MPlayer</title>
+<para
+>Existe uma página de configuração do MPlayer na janela de configuração do &kmplayer;. Aqui, poderá configurar a localização do MPlayer e o tamanho da sua 'cache, para as transmissões pela rede, entre outras coisas. </para>
+<section id="mplayer-debug">
+<title
+>Resolução de problemas</title>
+<para
+>A melhor forma de depurar esta infra-estrutura é iniciar o &kmplayer; a partir de uma aplicação da consola, como o 'konsole'. Depois, inicie um filme com o 'kmplayer' e veja a linha de comandos exacta que é usada para iniciar o 'mplayer' na aplicação da consola. De seguida, copie/cole essa informação para outra consola, remova as opções '-wid 12344' e ponha-o a tocar. Provavelmente, basta apenas escolher os parâmetros '-ao'/'-vo' correctos. Verifique também se o 'mplayer' não inicia por omissão com uma <acronym
+>GUI</acronym
+>. </para>
+<para
+>Outra ferramenta de depuração é o botão de 'consola' da barra de ferramentas do 'kmplayer'. Aí poderá ver o resultado do 'mplayer'. </para>
+</section>
+</section>
+<section id="xine">
+<title
+>Xine</title>
+<para
+>Quando configurar o &kmplayer; com o suporte para o Xine, irá existir uma página de configuração para o Xine na janela de configuração do &kmplayer;. Aqui poderá definir várias opções. Estas opções são obtidas, de forma dinâmica, da biblioteca do Xine. Use a ajuda de contexto para obter informações sobre o que estas opções fazem (ie., carregue no botão do ponto de interrogação, na barra de título da janela, e carregue depois numa opção). </para>
+<para
+>As opções são gravadas no ficheiro <filename
+>.kde/share/apps/kmplayer/xine_config</filename
+>, como um documento de texto. </para>
+<section id="xine-debug">
+<title
+>Resolução de problemas</title>
+<para
+>Basicamente, a mesma forma de resolver os problemas do <link linkend="mplayer-debug"
+>MPlayer</link
+>, com o nome da aplicação a ser <filename
+>kxineplayer</filename
+>. </para>
+</section>
+</section>
+<section id="gstreamer">
+<title
+>GStreamer</title>
+<para
+>Não existe nenhuma página de configuração do GStreamer na janela de configuração do &kmplayer;. As opções comuns são, p.ex., o dispositivo de <acronym
+>DVD</acronym
+> que é usado, na medida do possível. </para>
+<section id="gstremaer-debug">
+<title
+>Resolução de problemas</title>
+<para
+>Basicamente a mesma forma de resolver os problemas do <link linkend="mplayer-debug"
+>MPlayer</link
+>, sendo o nome da aplicação <filename
+>kgstplayer</filename
+>. </para>
+</section>
+</section>
+</chapter>
+<chapter id="sources">
+<title
+>Fontes que podem ser lidas</title>
+<para
+>O &kmplayer; pode ler a partir de várias fontes. Estas estão listadas no menu Fonte. </para>
+<section id="tvsource">
+ <title
+>TV</title>
+ <para
+>O &kmplayer; poderá ver o conteúdo das placas de TV com o <application
+>MPlayer</application
+> ou o <acronym
+>XVideo</acronym
+> (usando o <application
+>kxvplayer</application
+>). Antes de poder ver televisão, terá de configurar o dispositivo a usar e os canais de TV. Poderá usar o sintonizador da janela de configuração para tal ou editar o ficheiro de configuração manualmente. </para>
+<para
+>O ficheiro de configuração da TV é um ficheiro em <acronym
+>XML</acronym
+>, localizado em <filename
+>~/.kde/share/apps/kmplayer/tv.xml</filename
+>. Veja <link linkend="XML-editing"
+>aqui</link
+> como manipular directamente estes dados. O formato em <acronym
+>XML</acronym
+> é mais ou menos como neste exemplo: <programlisting>
+&lt;tvdevices&gt;
+ &lt;device path="/dev/video0" width="320" height="240" name="BT878 video (Hauppauge (bt878))" audio=""
+ minwidth="48" minheight="32" maxwidth="924" maxheight="576" playback="0" xvport="240"&gt;
+ &lt;input name="Television" id="0" tuner="1" norm="PAL" xvenc="0"&gt;
+ &lt;channel name="Ned1" frequency="216"/&gt;
+ &lt;channel name="VCR" frequency="594.90"/&gt;
+ &lt;/input&gt;
+ &lt;input name="Composite1" id="1" xvenc="7"/&gt;
+ &lt;input name="S-Video" id="2" xvenc="14"/&gt;
+ &lt;input name="Composite3" id="3"/&gt;
+ &lt;/device&gt;
+ &lt;device path="/dev/video1" width="640" height="480" name="Philips 740 webcam" audio=""
+ minwidth="160" minheight="120" maxwidth="640" maxheight="480" playback="1"&gt;
+ &lt;input name="Webcam" id="0"/&gt;
+ &lt;/device&gt;
+&lt;/tvdevices&gt;
+</programlisting
+> Repare que os elementos <quote
+>input</quote
+> que têm canais, deverão ter o atributo <quote
+>tuner</quote
+> igual a <quote
+>1</quote
+>. </para>
+<para
+>O <acronym
+>XVideo</acronym
+> só usa os atributos <quote
+>xvport</quote
+> e <quote
+>xvenc</quote
+>, e eles só poderão ser definidos se editar manualmente este ficheiro. Os valores destes dois atributos poderão ser obtidos se executar o <quote
+>kxvplayer</quote
+> numa aplicação de terminal, como o <quote
+>konsole</quote
+>. Para todos os portos, o <quote
+>kxvplayer</quote
+> irá mostrar linhas como as que aparecem abaixo e os números poderão definidos para os atributos mencionados.<programlisting>
+ xvport 240
+ ....
+ encoding: 0 PAL-television
+ encoding: 1 NTSC-television
+ encoding: 2 SECAM-television
+ ....
+</programlisting
+> Também os atributos 'width' e 'height' são ignorados pelo leitor do <acronym
+>XVideo</acronym
+>. Este leitor obtém os tamanhos do servidor do X. Uma das coisas boas do <acronym
+>XVideo</acronym
+> é que o dimensionamento é feito por 'hardware', pela placa de vídeo, como tal o suporte de ecrã completo é feito sem utilizar o CPU e sem a mudança de resolução do seu monitor. Do mesmo modo, também não haverá nenhuma interferência incómoda quando outra janela se sobrepor a esta janela de vídeo. </para>
+<para
+>Veja a secção de VDR para mais informações sobre o uso do <acronym
+>XVideo</acronym
+>. </para>
+</section>
+<section id="vdrsource">
+ <title
+>VDR</title>
+<para
+>Para configurar as suas opções de VDR no 'kmplayer', veja o painel Configurar->Fonte->VDR->XVideo. Deverão existir portos detectados, nos quais deverá seleccionar um deles. Terá de descobrir a codificação que deverá usar (p.ex., para a Europa ocidental, este é o PAL) e, provavelmente, o correcto terá um nome com <quote
+>dvb</quote
+> incluído. </para>
+<para
+>Por exemplo, o autor tem uma placa de TV, uma placa de DVB-S e uma webcam ligada ao seu sistema. Graças a elas, a configuração acusa três portos. O primeiro tem uma lista extensa de itens NTSC(-JP)/PAL(-M)/SECAM que dizem algo sobre a televisão/composto/svideo (corresponde à placa de TV). O segundo tem opções referente a NTSC-dvb/PAL-dvb/SECAM-dvb (da placa DVB-S). Finalmente, o terceiro só tem ntsc/pal (talvez a webcam). Como tal, deverá ser configurado (bastando para tal seleccioná-lo) o segundo porto e o segundo item (PAL-dvb). </para>
+<para
+>Dado que o suporte de VDR do 'kmplayer' só poderá usar o <acronym
+>XVideo</acronym
+>, claro que o <acronym
+>XVideo</acronym
+> deverá funcionar (no caso dos dispositivos, segundo a opinião do autor, esta forma de visualização só funciona no Linux). Do mesmo modo, também só funciona no seu primeiro ecrã (:0.0). Como tal, deverá certificar-se que a extensão <quote
+>videoforlinux</quote
+> funciona para o servidor do X. Para o servidor XFree86, na sua configuração (em <filename
+>/etc/X11/XF86Config</filename
+>), deverá existir <programlisting
+>Section "Module"
+ ....
+ Load "v4l"
+EndSection
+</programlisting>
+</para>
+<para
+>Infelizmente, sempre que actualizar o seu controlador de vídeo, terá de configurar de novo esta opção. </para>
+</section>
+<section id="kmplayer_url">
+ <title
+>Linha de comandos</title>
+<para
+>Internamente, no que respeita às fontes, o KMPlayer usa nomes distintos. Na altura em que este documento foi escrito, são as seguintes: "dvdnavsource", "dvdsource", "exitsource", "hrefsource", "introsource", "pipesource", "tvscanner", "tvsource", "urlsource", "vcdsource" e "vdrsource". Quando estiver activado, o programa irá executar a lista de itens com possibilidade de reprodução. </para>
+<para
+>Poderá activar uma fonte em particular com um <acronym
+>URL</acronym
+> do tipo <filename
+>kmplayer://</filename
+>. Basta definir o nome da máquina como nome da fonte e uma localização opcional como argumento extra, como tal, para um canal da fonte "vdrsource", isto poderá ficar algo do género <filename
+>kmplayer://vdrsource/22 MTV 2</filename
+>. P.ex., este programa inicia o 'kmplayer' com o "dvdnavsource" e a usar o <acronym
+>DCOP</acronym
+> para mostrar em todo o ecrã.<programlisting>
+/bin/bash
+kmplayer kmplayer://dvdnavsource/ &amp;
+PID=$!
+sleep 2
+dcop kmplayer-$PID KMediaPlayer toggleFullScreen
+ </programlisting
+> Para algumas fontes, isto não fará muita coisa, porque não se pretende usá-las na reprodução normal. Na "pipesource", esta opção está desactivada, porque poderia ser um grave problema de segurança. </para>
+</section>
+</chapter>
+<chapter id="questionsanswersandtips">
+ <title
+>Perguntas, Respostas e Dicas</title>
+
+ <qandaset id="faq">
+ <title
+>Perguntas mais frequentes</title>
+ <qandaentry>
+ <question>
+ <para
+>O Xine demora muito a arrancar, porque é que tem que verificar a velocidade do meu processador todas as vezes?</para>
+ </question>
+ <answer>
+ <para
+>Repare que a resposta abaixo está desactualizada. O <application
+>kxineplayer</application
+> grava-a automaticamente com o último valor, como tal, da primeira vez, o 'xine' irá fazer o teste do CPU. </para>
+ <para
+>A interface do <application
+>Xine</application
+> para o &kmplayer;, o <application
+>kxineplayer</application
+>, usa o <filename
+>~/.kde/share/apps/kmplayer/xine_config</filename
+> para a sua configuração. As opções do <application
+>Xine</application
+> estão na janela de configuração <quote
+>Opções Gerais</quote
+>|<quote
+>Xine</quote
+>. (Se você mudar aqui uma opção e gravá-la, o <filename
+>~/.kde/share/apps/kmplayer/xine_config</filename
+> irá conter também algumas explicações). A medida de performance do CPU e devida à opção <computeroutput
+>misc.memcpy_method</computeroutput
+> configurada para <computeroutput
+>probe</computeroutput
+> (detectar). Para ver qual a versão do 'memcpy' que funciona mais rapidamente para si, active a opção <quote
+>Mostrar o Resultado da Consola</quote
+> do menu <quote
+>Ver</quote
+> e veja os resultados desta análise quando tocar algo com o Xine. Configure o <computeroutput
+>misc.memcpy_method</computeroutput
+> com o método com menor tempo.</para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question>
+ <para
+>Algumas dicas em como tornar o CDROM menos barulhento quando é utilizado (não com VCD://)?</para>
+ </question>
+ <answer>
+ <para
+>Claro, tente o comando <command
+>hdparm -E 8 /dev/cdrom</command
+> como 'root' depois de montar o dispositivo. Mas certifique-se que tem o <filename
+>/dev/cdrom</filename
+> a apontar para a sua unidade de CDROM. </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+
+ </chapter>
+<chapter id="credits-and-licenses">
+<title
+>Créditos e Licenças</title>
+
+<para
+>&kmplayer; copyright 2002,2003 Koos Vriezen</para>
+&underFDL; &underGPL; </chapter>
+
+&documentation.index;
+</book>
+<!--
+Local Variables:
+mode: sgml
+sgml-minimize-attributes:nil
+sgml-general-insert-case:lower
+sgml-indent-step:0
+sgml-indent-data:nil
+End:
+-->
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/ru/Makefile.am b/doc/ru/Makefile.am
new file mode 100644
index 0000000..6754a55
--- /dev/null
+++ b/doc/ru/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = index.docbook
+
+
+KDE_LANG = ru
+KDE_DOCS = kmplayer
diff --git a/doc/ru/index.docbook b/doc/ru/index.docbook
new file mode 100644
index 0000000..7be8db4
--- /dev/null
+++ b/doc/ru/index.docbook
@@ -0,0 +1,227 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!ENTITY kmplayer '<application
+>Kmplayer</application
+>'>
+ <!ENTITY kappname "&kmplayer;"
+><!-- replace kmplayer here -->
+ <!ENTITY package "kdeextragear-2">
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % Russian "INCLUDE"
+><!-- change language only here -->
+
+]>
+
+<book lang="&language;">
+
+
+<bookinfo>
+<title
+>Руководство &kmplayer;</title>
+
+<authorgroup>
+<author
+><firstname
+>Koos</firstname
+> <surname
+>Vriezen</surname
+> <affiliation
+> <address
+><email
+>koos dot vriezen at xs4all dot nl</email
+></address>
+</affiliation>
+</author>
+</authorgroup>
+
+<othercredit role="translator"
+><firstname
+>Григорий</firstname
+><surname
+>Мохин</surname
+><affiliation
+><address
+><email
+>mok@kde.ru</email
+></address
+></affiliation
+><contrib
+>Перевод на русский, 2005</contrib
+></othercredit
+>
+
+<copyright>
+<year
+>2002</year>
+<year
+>2003</year>
+<holder
+>Koos Vriezen</holder>
+</copyright>
+<!-- Translators: put here the copyright notice of the translation -->
+<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
+ and in the FDL itself on how to use it. -->
+<legalnotice
+>&FDLNotice;</legalnotice>
+
+
+<date
+>2003-12-24</date>
+<releaseinfo
+>0.05.00</releaseinfo>
+
+<!-- Abstract about this handbook -->
+
+<abstract>
+<para
+>&kmplayer; - это программа-облочка &kde; для <application
+>MPlayer</application
+>. </para>
+</abstract>
+
+
+<keywordset>
+<keyword
+>KDE</keyword>
+<keyword
+>kdemultimedia</keyword>
+<keyword
+>MPlayer</keyword>
+<keyword
+>konqueror</keyword>
+<keyword
+>video</keyword>
+</keywordset>
+
+</bookinfo>
+
+<chapter id="introduction">
+<title
+>Введение</title>
+
+
+<para
+>&kmplayer; - это простая оболочка для <application
+>MPlayer</application
+>, <application
+>Xine</application
+> и <application
+>FFMpeg</application
+>. С его помощью можно просматривать все форматы видео, поддерживаемые <application
+>MPlayer</application
+> или <application
+>Xine</application
+>, а также <acronym
+>DVD</acronym
+>, <acronym
+>VCD</acronym
+> и программы с <acronym
+>ТВ</acronym
+> или <acronym
+>видеокамеры</acronym
+>. </para>
+
+<para
+>Документация &kappname; находится в процессе написания.</para
+> <para
+>Обратитесь на <ulink url="http://www.kde.org"
+>Сайт KDE</ulink
+> за помощью или обновлениями или отправьте вопрос в <ulink url="mail to:kde-user@kde.org"
+>рассылку пользователей &kde;</ulink
+>.</para>
+<para
+><emphasis
+>Команда &kde;</emphasis
+></para>
+
+</chapter>
+<chapter id="questionsanswersandtips">
+ <title
+>Советы и подсказки</title>
+
+ <qandaset id="faq">
+ <title
+>Вопросы и ответы</title>
+ <qandaentry>
+ <question>
+ <para
+>Xine стартует медленно, почему всякий раз идёт проверка быстродействия процессора?</para>
+ </question>
+ <answer>
+ <para
+>Облочка <application
+>Xine</application
+> в &kmplayer;, <application
+>kxineplayer</application
+> использует файл конфигурации <filename
+>~/.xine/config2</filename
+>. Параметры для <application
+>Xine</application
+> можно задать в диалоге <quote
+>Общие параметры</quote
+>|<quote
+>Xine</quote
+>. (Если сохранить опцию, в файле <filename
+>~/.xine/config2</filename
+> будет содержаться информация о ней). Тест процессора можно запустить, задав <computeroutput
+>misc.memcpy_method</computeroutput
+> равным <computeroutput
+>probe</computeroutput
+>. Чтобы просмотреть, какая версия memcpy работает быстрее всего, включите опцию <quote
+>Показать вывод консоли</quote
+> в меню <quote
+>Вид</quote
+> и посмотрите на результаты при воспроизведении чего-либо с помощью Xine. Укажите самый быстрый метод <computeroutput
+>misc.memcpy_method</computeroutput
+>.</para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question>
+ <para
+>Как уменьшить шум от CDROM при проигрывании с него (не VCD://)?</para>
+ </question>
+ <answer>
+ <para
+>Выполните команду <command
+>hdparm -E 8 /dev/cdrom</command
+> от имени root после монтирования устройства. Но сначала убедитесь, что <filename
+>/dev/cdrom</filename
+> указывает на устройство CD-ROM. </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+
+ </chapter>
+<chapter id="credits-and-licenses">
+<title
+>Благодарности и лицензия</title>
+
+<para
+>&kmplayer; copyright 2002,2003 Koos Vriezen</para>
+&underFDL; &underGPL; </chapter>
+
+&documentation.index;
+</book>
+<!--
+Local Variables:
+mode: sgml
+sgml-minimize-attributes:nil
+sgml-general-insert-case:lower
+sgml-indent-step:0
+sgml-indent-data:nil
+End:
+-->
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/doc/sv/Makefile.am b/doc/sv/Makefile.am
new file mode 100644
index 0000000..84c6898
--- /dev/null
+++ b/doc/sv/Makefile.am
@@ -0,0 +1,5 @@
+EXTRA_DIST = index.docbook
+
+
+KDE_LANG = sv
+KDE_DOCS = kmplayer
diff --git a/doc/sv/index.docbook b/doc/sv/index.docbook
new file mode 100644
index 0000000..5c8fb22
--- /dev/null
+++ b/doc/sv/index.docbook
@@ -0,0 +1,660 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!ENTITY kmplayer '<application
+>KMPlayer</application
+>'>
+ <!ENTITY kappname "&kmplayer;"
+><!-- replace kmplayer here -->
+ <!ENTITY package "kdeextragear-2">
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % Swedish "INCLUDE"
+><!-- change language only here -->
+
+]>
+
+<book lang="&language;">
+
+
+<bookinfo>
+<title
+>Handbok &kmplayer;</title>
+
+<authorgroup>
+<author
+><firstname
+>Koos</firstname
+> <surname
+>Vriezen</surname
+> <affiliation
+> <address
+><email
+>koos dot vriezen at gmail dot com</email
+></address>
+</affiliation>
+</author>
+</authorgroup>
+
+<othercredit role="translator"
+><firstname
+>Stefan</firstname
+><surname
+>Asserhäll</surname
+><affiliation
+><address
+><email
+>stefan.asserhall@comhem.se</email
+></address
+></affiliation
+><contrib
+>Översättare</contrib
+></othercredit
+>
+
+<copyright>
+<year
+>2002</year>
+<year
+>2006</year>
+<year
+>2007</year>
+<holder
+>Koos Vriezen</holder>
+</copyright>
+<!-- Translators: put here the copyright notice of the translation -->
+<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
+ and in the FDL itself on how to use it. -->
+<legalnotice
+>&FDLNotice;</legalnotice>
+
+
+<date
+>2007-07-28</date>
+<releaseinfo
+>0.06.00</releaseinfo>
+
+<!-- Abstract about this handbook -->
+
+<abstract>
+<para
+>&kmplayer; är ett program som är ett &kde;-gränssnitt till <application
+>Mplayer</application
+>, <application
+>Xine</application
+> och <application
+>Gstreamer</application
+>. </para>
+</abstract>
+
+
+<keywordset>
+<keyword
+>KDE</keyword>
+<keyword
+>kdemultimedia</keyword>
+<keyword
+>Mplayer</keyword>
+<keyword
+>konqueror</keyword>
+<keyword
+>video</keyword>
+</keywordset>
+
+</bookinfo>
+
+<chapter id="introduction">
+<title
+>Inledning</title>
+<para
+>&kmplayer; är ett enkelt gränssnitt till <application
+>Mplayer</application
+>, <application
+>Xine</application
+>, <application
+>Gstreamer</application
+> och <application
+>FFMpeg</application
+>. Du kan använda det för att titta på alla filmfilformat som <application
+>Mplayer</application
+>, <application
+>Xine</application
+> eller <application
+>Gstreamer</application
+> stöder, samt titta på en <acronym
+>dvd</acronym
+>, <acronym
+>vcd</acronym
+> eller <acronym
+>tv</acronym
+> och kamera. </para>
+<para
+>Dokumentationen för &kappname; var inte klar när &kde; installerades på den här datorn.</para
+> <para
+>Om du behöver mer hjälp, titta på <ulink url="http://www.kde.org"
+>KDE:s hemsida</ulink
+> för uppdateringar, eller skicka din fråga till <ulink url="mailto:kde-user@kde.org"
+>&kde;:s e-postlista för användare</ulink
+>. </para>
+<para
+><emphasis
+>&kde;-gruppen</emphasis
+></para>
+
+</chapter>
+<chapter id="gui">
+<title
+>Användargränssnittet</title>
+<para
+>Programfönstret består av så kallade dockningsbara fönster. Det centrala visningsfönstret finns alltid. Dessutom finns ett valfritt spellistefönster. Slutligen finns ett informationsfönster, som bara visas när det finns någon information att visa. </para>
+<section id="playlistwindow">
+<title
+>Spellistefönstret</title>
+<para
+>Spellistefönstret har fem kategorier när det här skrivs, aktuella objekt, <guilabel
+>Optiska skivor</guilabel
+>, <guilabel
+>Television</guilabel
+>, <guilabel
+>Bevarade spellistor</guilabel
+> och <guilabel
+>Senaste</guilabel
+>. Vid ett klick på en kategoris text visas dess innehåll under linjen. Det måste förstås finnas något innehåll, se till exempel <link linkend="tvsource"
+><acronym
+>TV</acronym
+>-inställningar</link
+> om hur man lägger till innehåll för kategorin <guilabel
+>Television</guilabel
+>. Kategorin <guilabel
+>Senaste</guilabel
+> fylls i när lokala mediafiler eller nätverkswebbadresser spelas upp. Kategorin kan innehålla 60 objekt, varav de sista 50 är under grenen <guilabel
+>Mer...</guilabel
+>. </para>
+<section>
+<title
+>Kategorin Bevarade spellistor</title>
+<para
+>Det är möjligt att lagra dina favoritlänkar i menyn <guilabel
+>Bokmärken</guilabel
+>, men de är enskilda objekt. Om du vill skapa en lista med objekt som spelas i tur och ordning, ska du använda kategorin <guilabel
+>Bevarade spellistor</guilabel
+>. </para>
+<para
+>Det enklaste sättet att lägga till ett objekt i listan är att dra det från <guilabel
+>Senaste</guilabel
+> och släppa det på <guilabel
+>Bevarade spellistor</guilabel
+>. Som du märker, visas en meny när du släpper det, där du kan välja att lägga till det i den här listan eller skapa en ny grupp. Objekt på översta nivån beter sig som bokmärkesobjekt, men objekt i grupper spelar upp hela gruppen som de ingår i. Objekt i kategorin kan enkelt flyttas, kopieras, läggas till i en ny grupp eller tas bort, bara genom att dra objektet till en annan plats i kategorin. Dessutom finns alternativen <guimenu
+>Ta bort objekt</guimenu
+>, <guimenu
+>Flytta upp</guimenu
+> och <guimenu
+>Flytta ner</guimenu
+> i den sammanhangsberoende menyn (vid klick med höger musknapp på ett objekt). </para>
+<para
+>Du kan förstås lägga till grupper i grupper för att få en djupare hierarki. Vid klick på ett objekt, kopieras dess grupp och alla undergrupper till den aktuella kategorin, och uppspelning börjar på det klickade objektets position. </para>
+<section>
+<title
+>Lagringsformat</title>
+<para
+>Data lagras i <filename
+>~/.kde/share/apps/kmplayer/playlist.xml</filename
+>, och dess format är som i exemplet. Titta <link linkend="XML-editing"
+>här</link
+> om hur man hanterar denna data direkt. <programlisting>
+&lt;playlist&gt;
+ &lt;group title="feeds"&gt;
+ &lt;item url="http://www.lugradio.org/episodes.rss"/&gt;
+ &lt;item url="http://science.nasa.gov/podcast.xml"/&gt;
+ &lt;item url="http://www.theworld.org/rss/tech.xml"/&gt;
+ &lt;/group&gt;
+ &lt;group title="iradio"&gt;
+ &lt;group title="sunny"&gt;
+ &lt;item mplayeropts="-cache 256" url="http://www.swissgroove.ch/listen.m3u"/&gt;
+ &lt;item url="http://www.boombasticradio.com/shoutcast/64.pls"/&gt;
+ &lt;/group&gt;
+ &lt;group title="rainy"&gt;
+ &lt;item url="http://www.radioparadise.com/musiclinks/rp_64.m3u"/&gt;
+ &lt;item url="http://www.woxy.com/stream/wma64.asx"/&gt;
+ &lt;item url="http://radionigel.com/winmedia.asx"/&gt;
+ &lt;item url="rtsp://livestreams.omroep.nl/live/vpro/vpro3voor12radioalt.rm"/&gt;
+ &lt;/group&gt;
+ &lt;/group&gt;
+&lt;/playlist&gt;
+</programlisting
+> Observera också att egna alternativ kan ställas in med väljaren <computeroutput
+>mplayeropts</computeroutput
+> för <application
+>Mplayer</application
+>. &kmplayer; söker uppåt i trädet efter väljaren, så du kan ställa in den för en hel grupp och överskrida den för en undergrupp eller för ett objekt. </para>
+</section>
+</section>
+</section>
+<section id="XML-editing">
+<title
+>Direkt XML-redigering</title>
+<para
+>Kategorierna Senaste, <guilabel
+>Television</guilabel
+> och <guilabel
+>Bevarade spellistor</guilabel
+> kan också hanteras genom att redigera deras <acronym
+>XML</acronym
+>-lagring. Man kan förstås göra det när &kmplayer; inte kör, och redigera de olika filerna i <filename
+>~/.kde/share/apps/kmplayer/</filename
+>, men också i själva programmet. Klicka helt enkelt på en kategorirubrik, välj därefter <guimenu
+>Visa</guimenu
+> och sedan <guimenu
+>Redigeringsläge</guimenu
+>. Du kan också klicka på en undergren och då ser du bara <acronym
+>XML</acronym
+>-innehållet för grenen. </para>
+<para
+>Efter du har redigerat en del <acronym
+>XML</acronym
+>, klicka på <guilabel
+>Synkronisera med spellista</guilabel
+> och avmarkera antingen alternativet <guimenu
+>Redigeringsläge</guimenu
+> eller klicka på en annan kategori. <caution
+><para
+>Alla ändringar går förlorade om du lämnar redigeringsläge eller väljer en annan gren utan att synkronisera med spellistan. </para
+></caution>
+</para>
+<para
+>På grund av lättja hos &kmplayer;s upphovsmän, kan vissa funktioner bara aktiveras genom att redigera XML. </para>
+</section>
+</chapter>
+<chapter id="settings">
+<title
+>Inställningar</title>
+<section>
+ <title
+>Animering vid start och avslutning</title>
+ <para
+>Att inaktivera start- och slutanimeringen kan utföras genom att redigera <filename
+>~/.kde/share/config/kmplayerrc</filename
+> och ändra <programlisting>
+[General Options]
+ No Intro=0
+ </programlisting
+> ovanstående alternativ till '1'. Lägg bara till alternativet om det inte redan finns där. </para>
+<para
+>Det är också möjligt att ange alternativa animeringar. &kmplayer; tittar på <filename
+>~/.kde/share/apps/kmplayer/intro.xml</filename
+> och <filename
+>~/.kde/share/apps/kmplayer/exit.xml</filename
+>. Formatet måste vara en <acronym
+>XML</acronym
+>-fil som stöds. </para>
+<para
+>Den inledande animeringen behöver inte vara kort, eftersom den automatiskt slutar när en annan källa öppnas. Det skulle förstås vara något irriterande för slutanimeringen, men användaren kan alltid avsluta programmet två gånger. </para>
+<para
+>Ett enkelt exempel på en inledning, som visar ditt favoritfoto skulle kunna vara <programlisting>
+&lt;smil&gt;
+ &lt;body&gt;
+ &lt;img dur="indefinite" src="///home/användare/mamma.gif" fit="meet"/&gt;
+ &lt;/body&gt;
+&lt;/smil&gt;
+ </programlisting
+> I &kmplayer;s källkodspaket, under <filename
+>tests/</filename
+> finns några exempel på <acronym
+>SMIL</acronym
+> som &kmplayer; stöder. </para>
+</section>
+</chapter>
+<chapter id="backends">
+<title
+>Uppspelningsgränssnitten</title>
+<para
+>&kmplayer; använder externa program för att utföra själva uppspelningen. </para>
+<section id="mplayer">
+<title
+>Mplayer</title>
+<para
+>Det finns en inställningsflik för Mplayer i &kmplayer;s inställnigsdialogruta. Där kan man bland annat ställa in sökvägen till Mplayer och dess cachestorlek för nätverksströmmar. </para>
+<para
+>Spelarens inställningsnamn är <parameter
+>mplayer</parameter
+>. </para>
+<section id="mplayer-debug">
+<title
+>Felsökning</title>
+<para
+>Det bästa sättet att felsöka i gränssnittet är att starta &kmplayer; från ett terminalprogram som konsole. Starta därefter en film med Kmplayer och se exakt den kommandorad som används för att starta Mplayer i terminalprogrammet. Kopiera och klistra nu in den i ett annat terminalprogram, ta bort väljaren '-wid 12344' och spela den. Troligen är det bara att välja rätt parametrar för -ao och -vo. Försäkra dig också om att Mplayer inte är förinställt att starta med ett grafiskt gränssnitt. </para>
+<para
+>Ett annat felsökningsverktyg är knappen 'Terminal' i Kmplayers verktygsrad. Där kan du se utmatningen från Mplayer. </para>
+</section>
+</section>
+<section id="xine">
+<title
+>Xine</title>
+<para
+>När &kmplayer; är konfigurerad med stöd för Xine, finns det inställningsflikar för Xine i &kmplayer;s inställningsdialogruta. Där kan du ställa in diverse alternativ. Alternativen hämtas dynamiskt från Xines bibliotek. Använd den sammanhangsberoende hjälpen för att få information om vad alternativen gör (dvs. klicka på frågetecknet i dialogrutans namnlist och klicka därefter på ett alternativ). </para>
+<para
+>Spelarens inställningsnamn är <parameter
+>xine</parameter
+>. </para>
+<para
+>Alternativen sparas i <filename
+>.kde/share/apps/kmplayer/xine_config</filename
+> som ett textdokument. </para>
+<section id="xine-debug">
+<title
+>Felsökning</title>
+<para
+>Huvudsakligen samma sätt att felsöka som för <link linkend="mplayer-debug"
+>Mplayer</link
+>, men med programnamnet <filename
+>kxineplayer</filename
+>. </para>
+</section>
+</section>
+<section id="gstreamer">
+<title
+>Gstreamer</title>
+<para
+>Det finns ingen inställningsflik för Gstreamer i &kmplayer;s inställningsdialogruta. De vanliga alternativen för t.ex. <acronym
+>dvd</acronym
+>-enheter används när det passar. </para>
+<para
+>Spelarens inställningsnamn är <parameter
+>gstreamer</parameter
+>. </para>
+<section id="gstremaer-debug">
+<title
+>Felsökning</title>
+<para
+>Huvudsakligen samma sätt att felsöka som för <link linkend="mplayer-debug"
+>Mplayer</link
+>, men med programnamnet <filename
+>kgstplayer</filename
+>. </para>
+</section>
+</section>
+<section id="npp">
+<title
+>Insticksprogram för bläddring</title>
+<para
+>Det finns ingen inställningsflik för spelaren i &kmplayer;s inställningsdialogruta. Allting måste ställas in genom att redigera <filename
+>~/.kde/share/config/kmplayerrc</filename
+> för hand, liksom vid inställning av <link linkend="backend-mimetype"
+>uppspelningsgränssnitt per Mime-typ</link
+>. Här är ett exempel på hur man kan få Flash att spelas upp med insticksprogrammet swfdec-mozilla: <programlisting
+>[application/x-shockwave-flash]
+player=npp
+plugin=/usr/lib/mozilla/plugins/libswfdecmozilla.so
+</programlisting>
+</para>
+<para
+>Du kan spela upp Flash inne i &kmplayer;. I själva verket kan du till och med klistra in det särskilda fältet <parameter
+>embed</parameter
+> för <ulink url="http://www.youtube.com"
+>YouTube</ulink
+> i <link linkend="XML-editing"
+>spellistans <acronym
+>XML</acronym
+></link
+>. </para>
+<para
+>För att låta &kmplayer; spela upp Flash på HTML-sidor, ska du ställa in &kmplayer;-insticksprogrammet att vara den tjänst som tillhandahåller Mime-typen <parameter
+>application/x-shockwave-flash</parameter
+> i KDE:s inställningsdialogruta <guilabel
+>Filbindningar</guilabel
+>. </para>
+<para
+>Som i föregående exempel, är spelarens inställningsnamn <parameter
+>npp</parameter
+>. </para>
+<section id="npp-debug">
+<title
+>Felsökning</title>
+<para
+>Starta Konqueror eller &kmplayer; i ett terminalprogram och titta efter fel när biblioteket för insticksprogrammet för bläddring laddas. Processen som startas kallas <filename
+>knpplayer</filename
+>. Om det inte finns några fel, kontrollera uppspelningsgränssnittets utmatning inne i &kmplayer; (<guimenu
+>Visa</guimenu
+> <guimenuitem
+>Terminal</guimenuitem
+>, eller <guimenuitem
+>Terminal</guimenuitem
+> i den sammanhangsberoende menyn). </para>
+</section>
+</section>
+<section id="backend-mimetype">
+<title
+>Tvinga uppspelningsgränssnitt för en viss Mime-typ</title>
+<para
+>Att ändra inställningen så att ett givet gränssnitt alltid används för en viss Mime-typ (naturligtvis enbart om den har detekterats) kan göras genom att redigera filen <filename
+>~/.kde/share/config/kmplayerrc</filename
+> för hand. För att till exempel låta Xine spela upp alla ogg-filer: <programlisting
+>[audio/ogg]
+player=xine
+</programlisting>
+</para>
+</section>
+</chapter>
+<chapter id="sources">
+<title
+>Källor som kan spelas upp</title>
+<para
+>&kmplayer; kan spela upp olika källor. Dessa källor listas i menyn Källa. </para>
+<section id="tvsource">
+ <title
+>Tv</title>
+ <para
+>&kmplayer; kan spela från tv-kort med <application
+>Mplayer</application
+> eller <acronym
+>Xvideo</acronym
+> (med användning av <application
+>kxvplayer</application
+>). Innan du kan titta på tv måste du ställa in vilken enhet som ska användas, och tv-kanalerna. Du kan använda sökfunktionen i inställningsdialogrutan för detta, eller redigera inställningsfilen för hand. </para>
+<para
+>Inställningsfilen för tv-inställningarna är en <acronym
+>XML</acronym
+>-fil, med namnet <filename
+>~/.kde/share/apps/kmplayer/tv.xml</filename
+>. Titta <link linkend="XML-editing"
+>här</link
+> om hur man hanterar denna data direkt. <acronym
+>XML</acronym
+>-formatet är som följande exempel: <programlisting>
+&lt;tvdevices&gt;
+ &lt;device path="/dev/video0" width="320" height="240" name="BT878 video (Hauppauge (bt878))" audio=""
+ minwidth="48" minheight="32" maxwidth="924" maxheight="576" playback="0" xvport="240"&gt;
+ &lt;input name="Television" id="0" tuner="1" norm="PAL" xvenc="0"&gt;
+ &lt;channel name="Ned1" frequency="21600"/&gt;
+ &lt;channel name="VCR" frequency="59490"/&gt;
+ &lt;/input&gt;
+ &lt;input name="Composite1" id="1" xvenc="7"/&gt;
+ &lt;input name="S-Video" id="2" xvenc="14"/&gt;
+ &lt;input name="Composite3" id="3"/&gt;
+ &lt;/device&gt;
+ &lt;device path="/dev/video1" width="640" height="480" name="Philips 740 webcam" audio=""
+ minwidth="160" minheight="120" maxwidth="640" maxheight="480" playback="1"&gt;
+ &lt;input name="Webcam" id="0"/&gt;
+ &lt;/device&gt;
+&lt;/tvdevices&gt;
+</programlisting
+> Observera att elementen <quote
+>input</quote
+> som har kanaler, ska ha egenskapen <quote
+>tuner</quote
+> inställd till <quote
+>1</quote
+>. </para>
+<para
+><acronym
+>Xvideo</acronym
+> använder bara egenskaperna <quote
+>xvport</quote
+> och <quote
+>xvenc</quote
+> och kan bara ställas in genom att redigera filen för hand. Värden för de två egenskaperna kan hämtas genom att köra <quote
+>kxvplayer</quote
+> i ett terminalfönster som <quote
+>konsole</quote
+>. För varje port skriver <quote
+>kxvplayer</quote
+> ut rader som visas nedan, och värdena kan ställas in för de nämnda egenskaperna. <programlisting>
+ xvport 240
+ ....
+ encoding: 0 PAL-television
+ encoding: 1 NTSC-television
+ encoding: 2 SECAM-television
+ ....
+</programlisting
+> Dessutom ignoreras egenskaperna bredd och höjd av <acronym
+>Xvideo</acronym
+>-spelaren. Spelaren hämtar storlekarna från X-servern. En av de trevliga sakerna med <acronym
+>Xvideo</acronym
+> är att skalning görs i hårdvara av videokortet, vilket ger stöd för fullskärmsvisning utan processoranvändning och utan att ändra bildskärmens upplösning. Dessutom uppstår inget irriterande flimmer när ett annat fönster överlappar videofönstret. </para>
+<para
+>Se avsnittet VDR för mer information om att använda <acronym
+>Xvideo</acronym
+>. </para>
+</section>
+<section id="vdrsource">
+ <title
+>VDR</title>
+<para
+>För att ställa in VDR-inställningar i Kmplayer, använd inställningsrutan Källa -> VDR -> Xvideo port. Det ska finnas detekterade portar, där du ska välja en. Du måste räkna ut vilken kodning du ska använda (i västeuropa är det t.ex. PAL) och troligen har den rätta ett namn som innehåller <quote
+>dvb</quote
+>. </para>
+<para
+>Jag har till exempel ett tv-kort, ett DVB-S kort och en webbkamera inkopplade i mitt system. Med dessa har mina inställningar tre portar. Den första har en lång lista med NTSC(-JP)/PAL(-M)/SECAM-poster som alla innehåller något med television/composite/svideo (mitt tv-kort). Den andra har NTSC-dvb/PAL-dvb/SECAM-dvb (mitt DVB-S kort). Den tredje har slutligen bara ntsc/pal (troligen min webbkamera). Därför ska jag ställa in (bara genom att markera den) den andra porten och andra posten (PAL-dvb). </para>
+<para
+>Eftersom VDR-stöd i Kmplayer bara kan använda <acronym
+>Xvideo</acronym
+>, måste förstås <acronym
+>Xvideo</acronym
+> fungera (och jag tror att detta sätt att titta på videoenheter bara fungerar med Linux). Detta fungerar också bara på den första skärmen (:0.0). Försäkra dig alltså om att utökningen <quote
+>videoforlinux</quote
+> fungerar med X-servern. För XFree86-servern, ska följande finnas i inställningsfilen (<filename
+>/etc/X11/XF86Config</filename
+>): <programlisting
+>Section "Module"
+ ....
+ Load "v4l"
+EndSection
+</programlisting>
+</para>
+<para
+>Tyvärr måste du ställa in det här alternativet igen så fort du uppdaterar din videodrivrutin. </para>
+</section>
+<section id="kmplayer_url">
+ <title
+>Kommandorad</title>
+<para
+>Internt använder &kmplayer; distinkta namn för källor. När det här skrivs är de "dvdnavsource", "dvdsource", "exitsource", "hrefsource", "introsource", "pipesource", "tvscanner", "tvsource", "urlsource", "vcdsource" och "vdrsource". När de aktiveras börjar de oftast spela listan med spelbara objekt. </para>
+<para
+>Du kan aktivera en viss källa med webbadressen <filename
+>kmplayer://</filename
+>. Ange bara värddatordelen som källans namn och den valfria delen som extra argument, vilket skulle kunna se ut som <filename
+>kmplayer://vdrsource/22 MTV 2</filename
+> för en kanal från "vdrsource". Till exempel startar följande skript Kmplayer med "dvdnavsource" och använder <acronym
+>DCOP</acronym
+> för att spela upp med fullskärmsläge. <programlisting>
+/bin/bash
+kmplayer kmplayer://dvdnavsource/ &amp;
+PID=$!
+sleep 2
+dcop kmplayer-$PID KMediaPlayer toggleFullScreen
+ </programlisting
+> Det gör inte mycket för vissa källor, eftersom de inte är avsedda för normal uppspelning. Det är inaktiverat för "pipesource", eftersom det naturligtvis skulle vara ett allvarligt säkerhetshål. </para>
+</section>
+</chapter>
+<chapter id="questionsanswersandtips">
+ <title
+>Frågor, svar och tips</title>
+
+ <qandaset id="faq">
+ <title
+>Vanliga frågor</title>
+ <qandaentry>
+ <question>
+ <para
+>Xine startar långsamt, varför måste det mäta min processorprestanda hela tiden?</para>
+ </question>
+ <answer>
+ <para
+>Observera att svaret nedan är föråldrat. <application
+>kxineplayer</application
+> sparar den automatiskt i det senaste värdet, så xine gör bara processortesten första gången. </para>
+ <para
+>Gränssnittet till <application
+>Xine</application
+> i &kmplayer;, <application
+>kxineplayer</application
+>, använder <filename
+>~/.kde/share/apps/kmplayer/xine_config</filename
+> för sina inställningar. Inställningar för <application
+>Xine</application
+> finns i inställningsdialogrutan <quote
+>General Options</quote
+>|<quote
+>Xine</quote
+>. (Om du ändrar ett alternativ här och sparar det, innehåller <filename
+>~/.kde/share/apps/kmplayer/xine_config</filename
+> också en del förklaringar). Mätningen av processorprestanda orsakas av att alternativet <computeroutput
+>misc.memcpy_method</computeroutput
+> är inställt till <computeroutput
+>probe</computeroutput
+>. För att ta reda på vilken version av minneskopiering som är snabbast för dig, aktivera <quote
+>Visa terminalutmatning</quote
+> i menyn <quote
+>Visa</quote
+> och titta på resultatet av mätningen när du spelar någonting med Xine. Ställ in <computeroutput
+>misc.memcpy_method</computeroutput
+> till metoden med kortast tid.</para>
+ </answer>
+ </qandaentry>
+ <qandaentry>
+ <question>
+ <para
+>Några tips för att göra cdrom-enheten tystare när den används för uppspelning (inte VCD://)?</para>
+ </question>
+ <answer>
+ <para
+>Visst, prova <command
+>hdparm -E 8 /dev/cdrom</command
+> som systemadministratör, efter att ha monterat enheten. Men försäkra dig om att du dubbelkollar att <filename
+>/dev/cdrom</filename
+> pekar på cdrom-enheten. </para>
+ </answer>
+ </qandaentry>
+ </qandaset>
+
+ </chapter>
+<chapter id="credits-and-licenses">
+<title
+>Tack till och licenser</title>
+
+<para
+>&kmplayer; copyright 2002, 2003 Koos Vriezen</para>
+&underFDL; &underGPL; </chapter>
+
+&documentation.index;
+</book>
+<!--
+Local Variables:
+mode: sgml
+sgml-minimize-attributes:nil
+sgml-general-insert-case:lower
+sgml-indent-step:0
+sgml-indent-data:nil
+End:
+-->
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/icons/Makefile.am b/icons/Makefile.am
new file mode 100644
index 0000000..977567f
--- /dev/null
+++ b/icons/Makefile.am
@@ -0,0 +1,3 @@
+INCLUDES = $(all_includes)
+METASOURCES = AUTO
+KDE_ICON = AUTO
diff --git a/icons/hi128-app-kmplayer.png b/icons/hi128-app-kmplayer.png
new file mode 100644
index 0000000..dc625e3
--- /dev/null
+++ b/icons/hi128-app-kmplayer.png
Binary files differ
diff --git a/icons/hi16-app-kmplayer.png b/icons/hi16-app-kmplayer.png
new file mode 100644
index 0000000..4eec20f
--- /dev/null
+++ b/icons/hi16-app-kmplayer.png
Binary files differ
diff --git a/icons/hi22-app-kmplayer.png b/icons/hi22-app-kmplayer.png
new file mode 100644
index 0000000..9468af9
--- /dev/null
+++ b/icons/hi22-app-kmplayer.png
Binary files differ
diff --git a/icons/hi32-app-kmplayer.png b/icons/hi32-app-kmplayer.png
new file mode 100644
index 0000000..2daf7b0
--- /dev/null
+++ b/icons/hi32-app-kmplayer.png
Binary files differ
diff --git a/icons/hi48-app-kmplayer.png b/icons/hi48-app-kmplayer.png
new file mode 100644
index 0000000..594156f
--- /dev/null
+++ b/icons/hi48-app-kmplayer.png
Binary files differ
diff --git a/icons/hi64-app-kmplayer.png b/icons/hi64-app-kmplayer.png
new file mode 100644
index 0000000..130b8db
--- /dev/null
+++ b/icons/hi64-app-kmplayer.png
Binary files differ
diff --git a/icons/hisc-app-kmplayer.svgz b/icons/hisc-app-kmplayer.svgz
new file mode 100644
index 0000000..4f443b7
--- /dev/null
+++ b/icons/hisc-app-kmplayer.svgz
Binary files differ
diff --git a/kmplayer.lsm b/kmplayer.lsm
new file mode 100644
index 0000000..d13e1f6
--- /dev/null
+++ b/kmplayer.lsm
@@ -0,0 +1,14 @@
+Begin3
+Title: Kmplayer
+Version: 0.10.0c
+Entered-date:
+Description:
+Keywords:
+Author: Koos Vriezen <>
+Maintained-by: Koos Vriezen <>
+Primary-site:
+Home-page: http://kmplayer.kde.org
+Original-site:
+Platforms: Linux and other Unices
+Copying-policy: GNU Public License
+End
diff --git a/libtool b/libtool
new file mode 100755
index 0000000..0a6a5f6
--- /dev/null
+++ b/libtool
@@ -0,0 +1,7037 @@
+#! /bin/sh
+
+# libtoolT - Provide generalized library-building support services.
+# Generated automatically by (GNU kmplayer 0.9.0-pre3)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED="/bin/sed"
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="/bin/sed -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# The names of the tagged configurations supported by this script.
+available_tags=" CXX"
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host xwing:
+
+# Shell to use when invoking shell scripts.
+SHELL="/bin/sh"
+
+# Whether or not to build shared libraries.
+build_libtool_libs=yes
+
+# Whether or not to build static libraries.
+build_old_libs=no
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=no
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=no
+
+# Whether or not to optimize for fast installation.
+fast_install=yes
+
+# The host system.
+host_alias=
+host=i686-pc-linux-gnu
+
+# An echo program that does not interpret backslashes.
+echo="echo"
+
+# The archiver.
+AR="ar"
+AR_FLAGS="cru"
+
+# A C compiler.
+LTCC="gcc"
+
+# A language-specific compiler.
+CC="gcc"
+
+# Is the compiler the GNU C compiler?
+with_gcc=yes
+
+# An ERE matcher.
+EGREP="grep -E"
+
+# The linker used to build libraries.
+LD="/usr/bin/ld"
+
+# Whether we need hard or soft links.
+LN_S="ln -s"
+
+# A BSD-compatible nm program.
+NM="/usr/bin/nm -B"
+
+# A symbol stripping program
+STRIP=strip
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=file
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="dlltool"
+
+# Used on cygwin: object dumper.
+OBJDUMP="objdump"
+
+# Used on cygwin: assembler.
+AS="as"
+
+# The name of the directory that contains temporary libtool files.
+objdir=.libs
+
+# How to create reloadable object files.
+reload_flag=" -r"
+reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs"
+
+# How to pass a linker flag through the compiler.
+wl="-Wl,"
+
+# Object file suffix (normally "o").
+objext="o"
+
+# Old archive suffix (normally "a").
+libext="a"
+
+# Shared library suffix (normally ".so").
+shrext='.so'
+
+# Executable file suffix (normally "").
+exeext=""
+
+# Additional compiler flags for building library objects.
+pic_flag=" -fPIC -DPIC"
+pic_mode=default
+
+# What is the maximum length of a command?
+max_cmd_len=32768
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o="yes"
+
+# Must we lock files when doing compilation ?
+need_locks="no"
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=no
+
+# Do we need a version for libraries?
+need_version=no
+
+# Whether dlopen is supported.
+dlopen_support=yes
+
+# Whether dlopen of programs is supported.
+dlopen_self=yes
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=yes
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag="-static"
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=" -fno-builtin"
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec="\${wl}--export-dynamic"
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive"
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=""
+
+# Library versioning type.
+version_type=linux
+
+# Format of library name prefix.
+libname_spec="lib\$name"
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec="\${libname}\${release}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}"
+
+# The coded name of the library, if different from the real name.
+soname_spec="\${libname}\${release}\${shared_ext}\$major"
+
+# Commands used to build and install an old-style archive.
+RANLIB="ranlib"
+old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs\$old_deplibs~\$RANLIB \$oldlib"
+old_postinstall_cmds="\$RANLIB \$oldlib~chmod 644 \$oldlib"
+old_postuninstall_cmds=""
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=""
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=""
+
+# Commands used to build and install a shared archive.
+archive_cmds="\$CC -shared \$compiler_flags \$libobjs \$deplibs \${wl}-soname \$wl\$soname -o \$lib"
+archive_expsym_cmds="\$CC -shared \$compiler_flags \$libobjs \$deplibs \${wl}-soname \$wl\$soname \${wl}-retain-symbols-file \$wl\$export_symbols -o \$lib"
+postinstall_cmds=""
+postuninstall_cmds=""
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=""
+module_expsym_cmds=""
+
+# Commands to strip libraries.
+old_striplib="strip --strip-debug"
+striplib="strip --strip-unneeded"
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=""
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=""
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=""
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=""
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=""
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method="pass_all"
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd="\$MAGIC_CMD"
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=""
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=""
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir"
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=""
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGISTW][ABCDGISTW]*\\)[ ][ ]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2\\3 \\3/p'"
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern int \\1;/p'"
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (lt_ptr) 0},/p' -e 's/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (lt_ptr) \\&\\2},/p'"
+
+# This is the shared library runtime path variable.
+runpath_var=LD_RUN_PATH
+
+# This is the shared library path variable.
+shlibpath_var=LD_LIBRARY_PATH
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=no
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=immediate
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=yes
+
+# Flag to hardcode $libdir into a binary during linking.
+# This must work even if $libdir does not exist.
+hardcode_libdir_flag_spec="\${wl}--rpath \${wl}\$libdir"
+
+# If ld is used when linking, flag to hardcode $libdir into
+# a binary during linking. This must work even if $libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=""
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=""
+
+# Set to yes if using DIR/libNAME during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=no
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=no
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=unsupported
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=no
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=unknown
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+
+# Fix the shell variable $srcfile for the compiler.
+fix_srcfile_path=""
+
+# Set to yes if exported symbols are required.
+always_export_symbols=no
+
+# The commands to list exported symbols.
+export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols"
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=""
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+
+# Symbols that must always be exported.
+include_expsyms=""
+
+# ### END LIBTOOL CONFIG
+
+# ltmain.sh - Provide generalized library-building support services.
+# NOTE: Changing this file will not affect anything until you rerun configure.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003
+# Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Check that we have a working $echo.
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+ # Yippee, $echo works!
+ :
+else
+ # Restart under the correct shell, and then maybe $echo will work.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+$*
+EOF
+ exit 0
+fi
+
+# The name of this program.
+progname=`$echo "$0" | ${SED} 's%^.*/%%'`
+modename="$progname"
+
+# Constants.
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=1.5a
+TIMESTAMP=" (1.1240 2003/06/26 06:55:19)"
+
+default_mode=
+help="Try \`$progname --help' for more information."
+magic="%%%MAGIC variable%%%"
+mkdir="mkdir"
+mv="mv -f"
+rm="rm -f"
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
+# test EBCDIC or ASCII
+case `echo A|tr A '\301'` in
+ A) # EBCDIC based system
+ SP2NL="tr '\100' '\n'"
+ NL2SP="tr '\r\n' '\100\100'"
+ ;;
+ *) # Assume ASCII based system
+ SP2NL="tr '\040' '\012'"
+ NL2SP="tr '\015\012' '\040\040'"
+ ;;
+esac
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+# We save the old values to restore during execute mode.
+if test "${LC_ALL+set}" = set; then
+ save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+fi
+if test "${LANG+set}" = set; then
+ save_LANG="$LANG"; LANG=C; export LANG
+fi
+
+# Make sure IFS has a sensible default
+: ${IFS=" "}
+
+if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+ $echo "$modename: not configured to build any kind of library" 1>&2
+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ exit 1
+fi
+
+# Global variables.
+mode=$default_mode
+nonopt=
+prev=
+prevopt=
+run=
+show="$echo"
+show_help=
+execute_dlfiles=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+
+#####################################
+# Shell function definitions:
+# This seems to be the best place for them
+
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+win32_libid () {
+ win32_libid_type="unknown"
+ win32_fileres=`file -L $1 2>/dev/null`
+ case $win32_fileres in
+ *ar\ archive\ import\ library*) # definitely import
+ win32_libid_type="x86 archive import"
+ ;;
+ *ar\ archive*) # could be an import, or static
+ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
+ grep -E 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+ win32_nmres=`eval $NM -f posix -A $1 | \
+ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'`
+ if test "X$win32_nmres" = "Ximport" ; then
+ win32_libid_type="x86 archive import"
+ else
+ win32_libid_type="x86 archive static"
+ fi
+ fi
+ ;;
+ *DLL*)
+ win32_libid_type="x86 DLL"
+ ;;
+ *executable*) # but shell scripts are "executable" too...
+ case $win32_fileres in
+ *MS\ Windows\ PE\ Intel*)
+ win32_libid_type="x86 DLL"
+ ;;
+ esac
+ ;;
+ esac
+ $echo $win32_libid_type
+}
+
+# End of Shell function definitions
+#####################################
+
+# Parse our command line options once, thoroughly.
+while test "$#" -gt 0
+do
+ arg="$1"
+ shift
+
+ case $arg in
+ -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) optarg= ;;
+ esac
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ execute_dlfiles)
+ execute_dlfiles="$execute_dlfiles $arg"
+ ;;
+ tag)
+ tagname="$arg"
+
+ # Check whether tagname contains only valid characters
+ case $tagname in
+ *[!-_A-Za-z0-9,/]*)
+ $echo "$progname: invalid tag name: $tagname" 1>&2
+ exit 1
+ ;;
+ esac
+
+ case $tagname in
+ CC)
+ # Don't test for the "default" C tag, as we know, it's there, but
+ # not specially marked.
+ ;;
+ *)
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then
+ taglist="$taglist $tagname"
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`"
+ else
+ $echo "$progname: ignoring unknown tag $tagname" 1>&2
+ fi
+ ;;
+ esac
+ ;;
+ *)
+ eval "$prev=\$arg"
+ ;;
+ esac
+
+ prev=
+ prevopt=
+ continue
+ fi
+
+ # Have we seen a non-optional argument yet?
+ case $arg in
+ --help)
+ show_help=yes
+ ;;
+
+ --version)
+ $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+ $echo
+ $echo "Copyright (C) 2003 Free Software Foundation, Inc."
+ $echo "This is free software; see the source for copying conditions. There is NO"
+ $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+ exit 0
+ ;;
+
+ --config)
+ ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0
+ # Now print the configurations for the tags.
+ for tagname in $taglist; do
+ ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0"
+ done
+ exit 0
+ ;;
+
+ --debug)
+ $echo "$progname: enabling shell trace mode"
+ set -x
+ ;;
+
+ --dry-run | -n)
+ run=:
+ ;;
+
+ --features)
+ $echo "host: $host"
+ if test "$build_libtool_libs" = yes; then
+ $echo "enable shared libraries"
+ else
+ $echo "disable shared libraries"
+ fi
+ if test "$build_old_libs" = yes; then
+ $echo "enable static libraries"
+ else
+ $echo "disable static libraries"
+ fi
+ exit 0
+ ;;
+
+ --finish) mode="finish" ;;
+
+ --mode) prevopt="--mode" prev=mode ;;
+ --mode=*) mode="$optarg" ;;
+
+ --preserve-dup-deps) duplicate_deps="yes" ;;
+
+ --quiet | --silent)
+ show=:
+ ;;
+
+ --tag) prevopt="--tag" prev=tag ;;
+ --tag=*)
+ set tag "$optarg" ${1+"$@"}
+ shift
+ prev=tag
+ ;;
+
+ -dlopen)
+ prevopt="-dlopen"
+ prev=execute_dlfiles
+ ;;
+
+ -*)
+ $echo "$modename: unrecognized option \`$arg'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+
+ *)
+ nonopt="$arg"
+ break
+ ;;
+ esac
+done
+
+if test -n "$prevopt"; then
+ $echo "$modename: option \`$prevopt' requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+fi
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+if test -z "$show_help"; then
+
+ # Infer the operation mode.
+ if test -z "$mode"; then
+ $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
+ $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2
+ case $nonopt in
+ *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
+ mode=link
+ for arg
+ do
+ case $arg in
+ -c)
+ mode=compile
+ break
+ ;;
+ esac
+ done
+ ;;
+ *db | *dbx | *strace | *truss)
+ mode=execute
+ ;;
+ *install*|cp|mv)
+ mode=install
+ ;;
+ *rm)
+ mode=uninstall
+ ;;
+ *)
+ # If we have no mode, but dlfiles were specified, then do execute mode.
+ test -n "$execute_dlfiles" && mode=execute
+
+ # Just use the default operation mode.
+ if test -z "$mode"; then
+ if test -n "$nonopt"; then
+ $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
+ else
+ $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
+ fi
+ fi
+ ;;
+ esac
+ fi
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$execute_dlfiles" && test "$mode" != execute; then
+ $echo "$modename: unrecognized option \`-dlopen'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help="$help"
+ help="Try \`$modename --help --mode=$mode' for more information."
+
+ # These modes are in order of execution frequency so that they run quickly.
+ case $mode in
+ # libtool compile mode
+ compile)
+ modename="$modename: compile"
+ # Get the compilation command and the source file.
+ base_compile=
+ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
+ suppress_output=
+ arg_mode=normal
+ libobj=
+
+ for arg
+ do
+ case "$arg_mode" in
+ arg )
+ # do not "continue". Instead, add this to base_compile
+ lastarg="$arg"
+ arg_mode=normal
+ ;;
+
+ target )
+ libobj="$arg"
+ arg_mode=normal
+ continue
+ ;;
+
+ normal )
+ # Accept any command-line options.
+ case $arg in
+ -o)
+ if test -n "$libobj" ; then
+ $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+ exit 1
+ fi
+ arg_mode=target
+ continue
+ ;;
+
+ -static)
+ build_old_libs=yes
+ continue
+ ;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+
+ -Xcompiler)
+ arg_mode=arg # the next one goes into the "base_compile" arg list
+ continue # The current "srcfile" will either be retained or
+ ;; # replaced later. I would guess that would be a bug.
+
+ -Wc,*)
+ args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+ lastarg=
+ save_ifs="$IFS"; IFS=','
+ for arg in $args; do
+ IFS="$save_ifs"
+
+ # Double-quote args containing other shell metacharacters.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ lastarg="$lastarg $arg"
+ done
+ IFS="$save_ifs"
+ lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
+
+ # Add the arguments to base_compile.
+ base_compile="$base_compile $lastarg"
+ continue
+ ;;
+
+ * )
+ # Accept the current argument as the source file.
+ # The previous "srcfile" becomes the current argument.
+ #
+ lastarg="$srcfile"
+ srcfile="$arg"
+ ;;
+ esac # case $arg
+ ;;
+ esac # case $arg_mode
+
+ # Aesthetically quote the previous argument.
+ lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
+
+ case $lastarg in
+ # Double-quote args containing other shell metacharacters.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ lastarg="\"$lastarg\""
+ ;;
+ esac
+
+ base_compile="$base_compile $lastarg"
+ done # for arg
+
+ case $arg_mode in
+ arg)
+ $echo "$modename: you must specify an argument for -Xcompile"
+ exit 1
+ ;;
+ target)
+ $echo "$modename: you must specify a target with \`-o'" 1>&2
+ exit 1
+ ;;
+ *)
+ # Get the name of the library object.
+ [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ xform='[cCFSifmso]'
+ case $libobj in
+ *.ada) xform=ada ;;
+ *.adb) xform=adb ;;
+ *.ads) xform=ads ;;
+ *.asm) xform=asm ;;
+ *.c++) xform=c++ ;;
+ *.cc) xform=cc ;;
+ *.ii) xform=ii ;;
+ *.class) xform=class ;;
+ *.cpp) xform=cpp ;;
+ *.cxx) xform=cxx ;;
+ *.f90) xform=f90 ;;
+ *.for) xform=for ;;
+ *.java) xform=java ;;
+ esac
+
+ libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+
+ case $libobj in
+ *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
+ *)
+ $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
+ exit 1
+ ;;
+ esac
+
+ # Infer tagged configuration to use if any are available and
+ # if one wasn't chosen via the "--tag" command line option.
+ # Only attempt this if the compiler in the base compile
+ # command doesn't match the default compiler.
+ if test -n "$available_tags" && test -z "$tagname"; then
+ case $base_compile in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
+ case "$base_compile " in
+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*)
+ # The compiler in the base compile command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+ exit 1
+# else
+# $echo "$modename: using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+
+ objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+ xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$obj"; then
+ xdir=
+ else
+ xdir=$xdir/
+ fi
+ lobj=${xdir}$objdir/$objname
+
+ if test -z "$base_compile"; then
+ $echo "$modename: you must specify a compilation command" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Delete any leftover library objects.
+ if test "$build_old_libs" = yes; then
+ removelist="$obj $lobj $libobj ${libobj}T"
+ else
+ removelist="$lobj $libobj ${libobj}T"
+ fi
+
+ $run $rm $removelist
+ trap "$run $rm $removelist; exit 1" 1 2 15
+
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2*)
+ pic_mode=default
+ ;;
+ esac
+ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
+ # Calculate the filename of the output object if compiler does
+ # not support -o with -c
+ if test "$compiler_c_o" = no; then
+ output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+ lockfile="$output_obj.lock"
+ removelist="$removelist $output_obj $lockfile"
+ trap "$run $rm $removelist; exit 1" 1 2 15
+ else
+ output_obj=
+ need_locks=no
+ lockfile=
+ fi
+
+ # Lock this critical section if it is needed
+ # We use this script file to make the link, it avoids creating a new file
+ if test "$need_locks" = yes; then
+ until $run ln "$0" "$lockfile" 2>/dev/null; do
+ $show "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test "$need_locks" = warn; then
+ if test -f "$lockfile"; then
+ $echo "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit 1
+ fi
+ $echo $srcfile > "$lockfile"
+ fi
+
+ if test -n "$fix_srcfile_path"; then
+ eval srcfile=\"$fix_srcfile_path\"
+ fi
+
+ $run $rm "$libobj" "${libobj}T"
+
+ # Create a libtool object file (analogous to a ".la" file),
+ # but don't create it if we're doing a dry run.
+ test -z "$run" && cat > ${libobj}T <<EOF
+# $libobj - a libtool object file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+EOF
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test "$build_libtool_libs" = yes; then
+ # Without this assignment, base_compile gets emptied.
+ fbsd_hideous_sh_bug=$base_compile
+
+ if test "$pic_mode" != no; then
+ command="$base_compile $srcfile $pic_flag"
+ else
+ # Don't build PIC code
+ command="$base_compile $srcfile"
+ fi
+
+ if test ! -d "${xdir}$objdir"; then
+ $show "$mkdir ${xdir}$objdir"
+ $run $mkdir ${xdir}$objdir
+ status=$?
+ if test "$status" -ne 0 && test ! -d "${xdir}$objdir"; then
+ exit $status
+ fi
+ fi
+
+ if test -z "$output_obj"; then
+ # Place PIC objects in $objdir
+ command="$command -o $lobj"
+ fi
+
+ $run $rm "$lobj" "$output_obj"
+
+ $show "$command"
+ if $run eval "$command"; then :
+ else
+ test -n "$output_obj" && $run $rm $removelist
+ exit 1
+ fi
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit 1
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+ $show "$mv $output_obj $lobj"
+ if $run $mv $output_obj $lobj; then :
+ else
+ error=$?
+ $run $rm $removelist
+ exit $error
+ fi
+ fi
+
+ # Append the name of the PIC object to the libtool object file.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object='$objdir/$objname'
+
+EOF
+
+ # Allow error messages only from the first compilation.
+ suppress_output=' >/dev/null 2>&1'
+ else
+ # No PIC object so indicate it doesn't exist in the libtool
+ # object file.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object=none
+
+EOF
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test "$build_old_libs" = yes; then
+ if test "$pic_mode" != yes; then
+ # Don't build PIC code
+ command="$base_compile $srcfile"
+ else
+ command="$base_compile $srcfile $pic_flag"
+ fi
+ if test "$compiler_c_o" = yes; then
+ command="$command -o $obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ command="$command$suppress_output"
+ $run $rm "$obj" "$output_obj"
+ $show "$command"
+ if $run eval "$command"; then :
+ else
+ $run $rm $removelist
+ exit 1
+ fi
+
+ if test "$need_locks" = warn &&
+ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+ $echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit 1
+ fi
+
+ # Just move the object if needed
+ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+ $show "$mv $output_obj $obj"
+ if $run $mv $output_obj $obj; then :
+ else
+ error=$?
+ $run $rm $removelist
+ exit $error
+ fi
+ fi
+
+ # Append the name of the non-PIC object the libtool object file.
+ # Only append if the libtool object file exists.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object='$objname'
+
+EOF
+ else
+ # Append the name of the non-PIC object the libtool object file.
+ # Only append if the libtool object file exists.
+ test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object=none
+
+EOF
+ fi
+
+ $run $mv "${libobj}T" "${libobj}"
+
+ # Unlock the critical section if it was locked
+ if test "$need_locks" != no; then
+ $run $rm "$lockfile"
+ fi
+
+ exit 0
+ ;;
+
+ # libtool link mode
+ link | relink)
+ modename="$modename: link"
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ # It is impossible to link a dll without this setting, and
+ # we shouldn't force the makefile maintainer to figure out
+ # which system we are compiling for in order to pass an extra
+ # flag for every libtool invocation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll which has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -no-undefined on the libtool link line when we can be certain
+ # that all symbols are satisfied, otherwise we get a static library.
+ allow_undefined=yes
+ ;;
+ *)
+ allow_undefined=yes
+ ;;
+ esac
+ libtool_args="$nonopt"
+ base_compile="$nonopt"
+ compile_command="$nonopt"
+ finalize_command="$nonopt"
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ old_deplibs=
+ add_flags=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
+ inst_prefix_dir=
+
+ avoid_version=no
+ dlfiles=
+ dlprefiles=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ ltlibs=
+ module=no
+ no_install=no
+ objs=
+ non_pic_objects=
+ prefer_static_libs=no
+ preload=no
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+ vinfo_number=no
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ case $arg in
+ -all-static | -static)
+ if test "X$arg" = "X-all-static"; then
+ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+ $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ else
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ fi
+ build_libtool_libs=no
+ build_old_libs=yes
+ prefer_static_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test "$#" -gt 0; do
+ arg="$1"
+ base_compile="$base_compile $arg"
+ shift
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
+ ;;
+ *) qarg=$arg ;;
+ esac
+ libtool_args="$libtool_args $qarg"
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case $prev in
+ output)
+ compile_command="$compile_command @OUTPUT@"
+ finalize_command="$finalize_command @OUTPUT@"
+ ;;
+ esac
+
+ case $prev in
+ dlfiles|dlprefiles)
+ if test "$preload" = no; then
+ # Add the symbol object into the linking commands.
+ compile_command="$compile_command @SYMFILE@"
+ finalize_command="$finalize_command @SYMFILE@"
+ preload=yes
+ fi
+ case $arg in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test "$dlself" = no; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test "$prev" = dlprefiles; then
+ dlself=yes
+ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test "$prev" = dlfiles; then
+ dlfiles="$dlfiles $arg"
+ else
+ dlprefiles="$dlprefiles $arg"
+ fi
+ prev=
+ continue
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols="$arg"
+ if test ! -f "$arg"; then
+ $echo "$modename: symbol file \`$arg' does not exist"
+ exit 1
+ fi
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex="$arg"
+ prev=
+ continue
+ ;;
+ inst_prefix)
+ inst_prefix_dir="$arg"
+ prev=
+ continue
+ ;;
+ release)
+ release="-$arg"
+ prev=
+ continue
+ ;;
+ objectlist)
+ if test -f "$arg"; then
+ save_arg=$arg
+ moreargs=
+ for fil in `cat $save_arg`
+ do
+# moreargs="$moreargs $fil"
+ arg=$fil
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ # If there is no directory component, then add one.
+ case $arg in
+ */* | *\\*) . $arg ;;
+ *) . ./$arg ;;
+ esac
+
+ if test -z "$pic_object" || \
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none && \
+ test "$non_pic_object" = none; then
+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+ exit 1
+ fi
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ libobjs="$libobjs $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if test -z "$run"; then
+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+ exit 1
+ else
+ # Dry-run case.
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+ libobjs="$libobjs $pic_object"
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ fi
+ fi
+ done
+ else
+ $echo "$modename: link input file \`$save_arg' does not exist"
+ exit 1
+ fi
+ arg=$save_arg
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case $arg in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ $echo "$modename: only absolute run-paths are allowed" 1>&2
+ exit 1
+ ;;
+ esac
+ if test "$prev" = rpath; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) rpath="$rpath $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) xrpath="$xrpath $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ xcompiler)
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ compile_command="$compile_command $qarg"
+ finalize_command="$finalize_command $qarg"
+ continue
+ ;;
+ xlinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $wl$qarg"
+ prev=
+ compile_command="$compile_command $wl$qarg"
+ finalize_command="$finalize_command $wl$qarg"
+ continue
+ ;;
+ xcclinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ compile_command="$compile_command $qarg"
+ finalize_command="$finalize_command $qarg"
+ continue
+ ;;
+ framework)
+ case $host in
+ *-*-darwin*)
+ case "$deplibs " in
+ *" $qarg.ltframework "*) ;;
+ *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+ ;;
+ esac
+ ;;
+ esac
+ prev=
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi # test -n "$prev"
+
+ prevarg="$arg"
+
+ case $arg in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ compile_command="$compile_command $link_static_flag"
+ finalize_command="$finalize_command $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
+ continue
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -export-symbols | -export-symbols-regex)
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ $echo "$modename: more than one -exported-symbols argument is not allowed"
+ exit 1
+ fi
+ if test "X$arg" = "X-export-symbols"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -inst-prefix-dir)
+ prev=inst_prefix
+ continue
+ ;;
+
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix* | /*-*-irix*)
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ ;;
+ esac
+ continue
+ ;;
+
+ -L*)
+ dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
+ exit 1
+ fi
+ dir="$absdir"
+ ;;
+ esac
+ case "$deplibs " in
+ *" -L$dir "*) ;;
+ *)
+ deplibs="$deplibs -L$dir"
+ lib_search_path="$lib_search_path $dir"
+ ;;
+ esac
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$dir";;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+
+ -l*)
+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+ case $host in
+ *-*-cygwin* | *-*-pw32* | *-*-beos*)
+ # These systems don't actually have a C or math library (as such)
+ continue
+ ;;
+ *-*-freebsd*-gnu*)
+ # prevent being parsed by the freebsd regexp below
+ ;;
+ *-*-mingw* | *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-openbsd* | *-*-freebsd*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C and math libraries are in the System framework
+ deplibs="$deplibs System.ltframework"
+ continue
+ esac
+ elif test "X$arg" = "X-lc_r"; then
+ case $host in
+ *-*-freebsd*-gnu*)
+ # prevent being parsed by the freebsd regexp below
+ ;;
+ *-*-openbsd*)
+ # Do not include libc_r directly, use -pthread flag.
+ continue
+ ;;
+ esac
+ fi
+ deplibs="$deplibs $arg"
+ continue
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ # gcc -m* arguments should be passed to the linker via $compiler_flags
+ # in order to pass architecture information to the linker
+ # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo
+ # but this is not reliable with gcc because gcc may use -mfoo to
+ # select a different linker, different libraries, etc, while
+ # -Wl,-mfoo simply passes -mfoo to the linker.
+ -m*)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ if test "$with_gcc" = "yes" ; then
+ compiler_flags="$compiler_flags $arg"
+ fi
+ continue
+ ;;
+
+ -shrext)
+ prev=shrext
+ continue
+ ;;
+
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # in order for the loader to find any dlls it needs.
+ $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+ $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -objectlist)
+ prev=objectlist
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ $echo "$modename: only absolute run-paths are allowed" 1>&2
+ exit 1
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ continue
+ ;;
+
+ -static)
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ continue
+ ;;
+ -version-number)
+ prev=vinfo
+ vinfo_number=yes
+ continue
+ ;;
+
+ -Wc,*)
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ case $flag in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ flag="\"$flag\""
+ ;;
+ esac
+ arg="$arg $wl$flag"
+ compiler_flags="$compiler_flags $flag"
+ done
+ IFS="$save_ifs"
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ ;;
+
+ -Wl,*)
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ case $flag in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ flag="\"$flag\""
+ ;;
+ esac
+ arg="$arg $wl$flag"
+ compiler_flags="$compiler_flags $wl$flag"
+ linker_flags="$linker_flags $flag"
+ done
+ IFS="$save_ifs"
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
+ -XCClinker)
+ prev=xcclinker
+ continue
+ ;;
+
+ -framework)
+ prev=framework
+ continue
+ ;;
+
+ # Some other compiler flag.
+ -* | +*)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ add_flags="$add_flags $arg"
+ ;;
+
+ *.$objext)
+ # A standard object.
+ objs="$objs $arg"
+ ;;
+
+ *.lo)
+ # A libtool-controlled object.
+
+ # Check to see that this really is a libtool object.
+ if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ pic_object=
+ non_pic_object=
+
+ # Read the .lo file
+ # If there is no directory component, then add one.
+ case $arg in
+ */* | *\\*) . $arg ;;
+ *) . ./$arg ;;
+ esac
+
+ if test -z "$pic_object" || \
+ test -z "$non_pic_object" ||
+ test "$pic_object" = none && \
+ test "$non_pic_object" = none; then
+ $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+ exit 1
+ fi
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ if test "$pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ pic_object="$xdir$pic_object"
+
+ if test "$prev" = dlfiles; then
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $pic_object"
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ # CHECK ME: I think I busted this. -Ossama
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles $pic_object"
+ prev=
+ fi
+
+ # A PIC object.
+ libobjs="$libobjs $pic_object"
+ arg="$pic_object"
+ fi
+
+ # Non-PIC object.
+ if test "$non_pic_object" != none; then
+ # Prepend the subdirectory the object is found in.
+ non_pic_object="$xdir$non_pic_object"
+
+ # A standard non-PIC object
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ if test -z "$pic_object" || test "$pic_object" = none ; then
+ arg="$non_pic_object"
+ fi
+ fi
+ else
+ # Only an error if not doing a dry-run.
+ if test -z "$run"; then
+ $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+ exit 1
+ else
+ # Dry-run case.
+
+ # Extract subdirectory from the argument.
+ xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$xdir" = "X$arg"; then
+ xdir=
+ else
+ xdir="$xdir/"
+ fi
+
+ pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+ non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+ libobjs="$libobjs $pic_object"
+ non_pic_objects="$non_pic_objects $non_pic_object"
+ fi
+ fi
+ ;;
+
+ *.$libext)
+ # An archive.
+ deplibs="$deplibs $arg"
+ old_deplibs="$old_deplibs $arg"
+ continue
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ if test "$prev" = dlfiles; then
+ # This library was specified with -dlopen.
+ dlfiles="$dlfiles $arg"
+ prev=
+ elif test "$prev" = dlprefiles; then
+ # The library was specified with -dlpreopen.
+ dlprefiles="$dlprefiles $arg"
+ prev=
+ else
+ deplibs="$deplibs $arg"
+ fi
+ continue
+ ;;
+
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ add_flags="$add_flags $arg"
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ fi
+ done # argument parsing loop
+
+ if test -n "$prev"; then
+ $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Infer tagged configuration to use if any are available and
+ # if one wasn't chosen via the "--tag" command line option.
+ # Only attempt this if the compiler in the base link
+ # command doesn't match the default compiler.
+ if test -n "$available_tags" && test -z "$tagname"; then
+ case $base_compile in
+ # Blanks in the command may have been stripped by the calling shell,
+ # but not from the CC environment variable when configure was run.
+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) ;;
+ # Blanks at the start of $base_compile will cause this to fail
+ # if we don't check for them as well.
+ *)
+ for z in $available_tags; do
+ if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$0" > /dev/null; then
+ # Evaluate the configuration.
+ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`"
+ case $base_compile in
+ "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*)
+ # The compiler in $compile_command matches
+ # the one in the tagged configuration.
+ # Assume this is the tagged configuration we want.
+ tagname=$z
+ break
+ ;;
+ esac
+ fi
+ done
+ # If $tagname still isn't set, then no tagged configuration
+ # was found and let the user know that the "--tag" command
+ # line option must be used.
+ if test -z "$tagname"; then
+ $echo "$modename: unable to infer tagged configuration"
+ $echo "$modename: specify a tag with \`--tag'" 1>&2
+ exit 1
+# else
+# $echo "$modename: using $tagname tagged configuration"
+ fi
+ ;;
+ esac
+ fi
+
+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ fi
+
+ oldlibs=
+ # calculate the name of the file, without its directory
+ outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+ libobjs_save="$libobjs"
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$output_objdir" = "X$output"; then
+ output_objdir="$objdir"
+ else
+ output_objdir="$output_objdir/$objdir"
+ fi
+ # Create the object directory.
+ if test ! -d "$output_objdir"; then
+ $show "$mkdir $output_objdir"
+ $run $mkdir $output_objdir
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$output_objdir"; then
+ exit $status
+ fi
+ fi
+
+ # Determine the type of output
+ case $output in
+ "")
+ $echo "$modename: you must specify an output file" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ case $host in
+ *cygwin* | *mingw* | *pw32*)
+ # don't eliminate duplcations in $postdeps and $predeps
+ duplicate_compiler_generated_deps=yes
+ ;;
+ *)
+ duplicate_compiler_generated_deps=$duplicate_deps
+ ;;
+ esac
+ specialdeplibs=
+
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ libs="$libs $deplib"
+ done
+
+ if test "$linkmode" = lib; then
+ libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+ # Compute libraries that are listed more than once in $predeps
+ # $postdeps and mark them as special (i.e., whose duplicates are
+ # not to be eliminated).
+ pre_post_deps=
+ if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
+ for pre_post_dep in $predeps $postdeps; do
+ case "$pre_post_deps " in
+ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+ esac
+ pre_post_deps="$pre_post_deps $pre_post_dep"
+ done
+ fi
+ pre_post_deps=
+ fi
+
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+ case $linkmode in
+ lib)
+ passes="conv link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=no
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+ for pass in $passes; do
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan"; then
+ libs="$deplibs"
+ deplibs=
+ fi
+ if test "$linkmode" = prog; then
+ case $pass in
+ dlopen) libs="$dlfiles" ;;
+ dlpreopen) libs="$dlprefiles" ;;
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ esac
+ fi
+ if test "$pass" = dlopen; then
+ # Collect dlpreopened libraries
+ save_deplibs="$deplibs"
+ deplibs=
+ fi
+ for deplib in $libs; do
+ lib=
+ found=no
+ case $deplib in
+ -l*)
+ if test "$linkmode" != lib && test "$linkmode" != prog; then
+ $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
+ continue
+ fi
+ if test "$pass" = conv && test "$allow_undefined" = yes; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+ for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ for search_ext in .la $shrext .so .a; do
+ # Search the libtool library
+ lib="$searchdir/lib${name}${search_ext}"
+ if test -f "$lib"; then
+ if test "$search_ext" = ".la"; then
+ found=yes
+ else
+ found=no
+ fi
+ break 2
+ fi
+ done
+ done
+ if test "$found" != yes; then
+ # deplib doesn't seem to be a libtool library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ else # deplib is a libtool library
+ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+ # We need to do some special things here, and not later.
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $deplib "*)
+ if (${SED} -e '2q' $lib |
+ grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ library_names=
+ old_library=
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+ for l in $old_library $library_names; do
+ ll="$l"
+ done
+ if test "X$ll" = "X$old_library" ; then # only static version available
+ found=no
+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$ladir" = "X$lib" && ladir="."
+ lib=$ladir/$old_library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ fi
+ ;;
+ *) ;;
+ esac
+ fi
+ fi
+ ;; # -l
+ *.ltframework)
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ if test "$linkmode" = lib ; then
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ fi
+ continue
+ ;;
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test "$pass" = conv && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ ;;
+ prog)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test "$pass" = scan; then
+ deplibs="$deplib $deplibs"
+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ ;;
+ *)
+ $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test "$pass" = link; then
+ dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la) lib="$deplib" ;;
+ *.$libext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ if test "$deplibs_check_method" != pass_all; then
+ $echo
+ $echo "*** Warning: Trying to link with static lib archive $deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because the file extensions .$libext of this argument makes me believe"
+ $echo "*** that it is just a static archive that I should not used here."
+ else
+ $echo
+ $echo "*** Warning: Linking the shared library $output against the"
+ $echo "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ fi
+ continue
+ ;;
+ prog)
+ if test "$pass" != link; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test "$pass" = conv; then
+ deplibs="$deplib $deplibs"
+ elif test "$linkmode" = prog; then
+ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ newdlprefiles="$newdlprefiles $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ newdlfiles="$newdlfiles $deplib"
+ fi
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=yes
+ continue
+ ;;
+ esac # case $deplib
+ if test "$found" = yes || test -f "$lib"; then :
+ else
+ $echo "$modename: cannot find the library \`$lib'" 1>&2
+ exit 1
+ fi
+
+ # Check to see that this really is a libtool archive.
+ if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ else
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+
+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$ladir" = "X$lib" && ladir="."
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
+ # If the library was installed with an old release of libtool,
+ # it will not redefine variables installed, or shouldnotlink
+ installed=yes
+ shouldnotlink=no
+
+ # Read the .la file
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+
+ case $host in
+ *-*-darwin*)
+ # Convert "-framework foo" to "foo.ltframework" in dependency_libs
+ test -n "$dependency_libs" && dependency_libs=`$echo "X$dependency_libs" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+ ;;
+ esac
+
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan" ||
+ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+ test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+ test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+ fi
+
+ if test "$pass" = conv; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ #echo "Adding $deplib to \$deplibs"
+ deplibs="$deplib $deplibs"
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+ exit 1
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ convenience="$convenience $ladir/$objdir/$old_library"
+ old_convenience="$old_convenience $ladir/$objdir/$old_library"
+ elif test "$linkmode" != prog && test "$linkmode" != lib; then
+ $echo "$modename: \`$lib' is not a convenience library" 1>&2
+ exit 1
+ fi
+ continue
+ fi # $pass = conv
+
+
+ # Get the name of the library we link against.
+ linklib=
+ for l in $old_library $library_names; do
+ linklib="$l"
+ done
+ if test -z "$linklib"; then
+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+ exit 1
+ fi
+
+ # This library was specified with -dlopen.
+ if test "$pass" = dlopen; then
+ if test -z "$libdir"; then
+ $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
+ exit 1
+ fi
+ if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload. We also need to preload any
+ # dependent libraries so libltdl's deplib preloader doesn't
+ # bomb out in the load deplibs phase.
+ dlprefiles="$dlprefiles $lib $dependency_libs"
+ else
+ newdlfiles="$newdlfiles $lib"
+ fi
+ continue
+ fi # $pass = dlopen
+
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
+ $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+ abs_ladir="$ladir"
+ fi
+ ;;
+ esac
+ laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+
+ # Find the relevant object directory and library name.
+ if test "X$installed" = Xyes; then
+ if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ $echo "$modename: warning: library \`$lib' was moved." 1>&2
+ dir="$ladir"
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
+ else
+ dir="$libdir"
+ absdir="$libdir"
+ fi
+ else
+ dir="$ladir/$objdir"
+ absdir="$abs_ladir/$objdir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ fi # $installed = yes
+ name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+
+ # This library was specified with -dlpreopen.
+ if test "$pass" = dlpreopen; then
+ if test -z "$libdir"; then
+ $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
+ exit 1
+ fi
+ # Prefer using a static library (so that no silly _DYNAMIC symbols
+ # are required to link).
+ if test -n "$old_library"; then
+ newdlprefiles="$newdlprefiles $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ newdlprefiles="$newdlprefiles $dir/$dlname"
+ else
+ newdlprefiles="$newdlprefiles $dir/$linklib"
+ fi
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test "$linkmode" = lib; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs" # used for prog,scan pass
+ fi
+ continue
+ fi
+
+
+ if test "$linkmode" = prog && test "$pass" != link; then
+ newlib_search_path="$newlib_search_path $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=no
+ if test "$link_all_deplibs" != no || test -z "$library_names" ||
+ test "$build_libtool_libs" = no; then
+ linkalldeplibs=yes
+ fi
+
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+ esac
+ # Need to link against all dependency_libs?
+ if test "$linkalldeplibs" = yes; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
+ fi
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
+
+ if test "$linkmode,$pass" = "prog,link"; then
+ if test -n "$library_names" &&
+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var"; then
+ # Make sure the rpath contains only unique directories.
+ case "$temp_rpath " in
+ *" $dir "*) ;;
+ *" $absdir "*) ;;
+ *) temp_rpath="$temp_rpath $dir" ;;
+ esac
+ fi
+
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi # $linkmode,$pass = prog,link...
+
+ if test "$alldeplibs" = yes &&
+ { test "$deplibs_check_method" = pass_all ||
+ { test "$build_libtool_libs" = yes &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+ fi
+
+ link_static=no # Whether the deplib will be linked statically
+ if test -n "$library_names" &&
+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+ if test "$installed" = no; then
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=yes
+ fi
+ # This is a shared library
+
+ # Warn about portability, can't link against -module's on some systems (darwin)
+ if test "$shouldnotlink" = yes && test "$pass" = link ; then
+ $echo
+ if test "$linkmode" = prog; then
+ $echo "*** Warning: Linking the executable $output against the loadable module"
+ else
+ $echo "*** Warning: Linking the shared library $output against the loadable module"
+ fi
+ $echo "*** $linklib is not portable!"
+ fi
+ if test "$linkmode" = lib &&
+ test "$hardcode_into_libs" = yes; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ realname="$2"
+ shift; shift
+ libname=`eval \\$echo \"$libname_spec\"`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname="$dlname"
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin* | mingw*)
+ major=`expr $current - $age`
+ versuffix="-$major"
+ ;;
+ esac
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot="$soname"
+ soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
+ newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ $show "extracting exported symbol list from \`$soname'"
+ save_ifs="$IFS"; IFS='~'
+ eval cmds=\"$extract_expsyms_cmds\"
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ $show "generating import library for \`$soname'"
+ save_ifs="$IFS"; IFS='~'
+ eval cmds=\"$old_archive_from_expsyms_cmds\"
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n "$old_archive_from_expsyms_cmds"
+
+ if test "$linkmode" = prog || test "$mode" != relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test "$hardcode_direct" = no; then
+ add="$dir/$linklib"
+ case $host in
+ *-*-sco3.2v5* ) add_dir="-L$dir" ;;
+ *-*-darwin* )
+ # if the lib is a module then we can not link against it, someone
+ # is ignoring the new warnings I added
+ if /usr/bin/file -L $add 2> /dev/null | grep "bundle" >/dev/null ; then
+ $echo "** Warning, lib $linklib is a module, not a shared library"
+ if test -z "$old_library" ; then
+ $echo
+ $echo "** And there doesn't seem to be a static archive available"
+ $echo "** The link will probably fail, sorry"
+ else
+ add="$dir/$old_library"
+ fi
+ fi
+ esac
+ elif test "$hardcode_minus_L" = no; then
+ case $host in
+ *-*-sunos*) add_shlibpath="$dir" ;;
+ esac
+ add_dir="-L$dir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = no; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test "$hardcode_direct" = yes; then
+ add="$dir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$dir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case "$libdir" in
+ [\\/]*)
+ add_dir="-L$inst_prefix_dir$libdir $add_dir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test "$lib_linked" != yes; then
+ $echo "$modename: configuration error: unsupported hardcode properties"
+ exit 1
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+ esac
+ fi
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test "$hardcode_direct" != yes && \
+ test "$hardcode_minus_L" != yes && \
+ test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ fi
+ fi
+ fi
+
+ if test "$linkmode" = prog || test "$mode" = relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
+ if test "$hardcode_direct" = yes; then
+ add="$libdir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$libdir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ add="-l$name"
+ elif test "$hardcode_automatic" = yes; then
+ if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then
+ add="$inst_prefix_dir$libdir/$linklib"
+ else
+ add="$libdir/$linklib"
+ fi
+ else
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir="-L$libdir"
+ # Try looking first in the location we're being installed to.
+ if test -n "$inst_prefix_dir"; then
+ case "$libdir" in
+ [\\/]*)
+ add_dir="-L$inst_prefix_dir$libdir $add_dir"
+ ;;
+ esac
+ fi
+ add="-l$name"
+ fi
+
+ if test "$linkmode" = prog; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
+ fi
+ elif test "$linkmode" = prog; then
+ # Here we assume that one of hardcode_direct or hardcode_minus_L
+ # is not unsupported. This is valid on all known static and
+ # shared platforms.
+ if test "$hardcode_direct" != unsupported; then
+ test -n "$old_library" && linklib="$old_library"
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
+ else
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+ fi
+ elif test "$build_libtool_libs" = yes; then
+ # Not a shared library
+ if test "$deplibs_check_method" != pass_all; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
+
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ $echo
+ $echo "*** Warning: This system can not link to static lib archive $lib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have."
+ if test "$module" = yes; then
+ $echo "*** But as you try to build a module library, libtool will still create "
+ $echo "*** a static module, that should work as long as the dlopening application"
+ $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+ if test -z "$global_symbol_pipe"; then
+ $echo
+ $echo "*** However, this would only work if libtool was able to extract symbol"
+ $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $echo "*** not find such a program. So, this module is probably useless."
+ $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ convenience="$convenience $dir/$old_library"
+ old_convenience="$old_convenience $dir/$old_library"
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
+
+ if test "$linkmode" = lib; then
+ #if test -n "$dependency_libs" &&
+ # { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes ||
+ # test "$link_static" = yes; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) xrpath="$xrpath $temp_xrpath";;
+ esac;;
+ *) temp_deplibs="$temp_deplibs $libdir";;
+ esac
+ done
+ dependency_libs="$temp_deplibs"
+ #fi
+
+ newlib_search_path="$newlib_search_path $absdir"
+ # Link against this library
+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ if test "X$duplicate_deps" = "Xyes" ; then
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ fi
+ tmp_libs="$tmp_libs $deplib"
+ done
+
+ if test "$link_all_deplibs" != no; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) path="$deplib" ;;
+ *.la)
+ dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$deplib" && dir="."
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+ absdir="$dir"
+ fi
+ ;;
+ esac
+ if grep "^installed=no" $deplib > /dev/null; then
+ path="$absdir/$objdir"
+ else
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ if test "$absdir" != "$libdir"; then
+ # Sure, some shells/systems don't implement the -ef.
+ # Those will have to live with the warning.
+ test "$absdir" -ef "$libdir" > /dev/null 2>&1 ||
+ $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
+ fi
+ path="$absdir"
+ fi
+ depdepl=
+ case $host in
+ *-*-darwin*)
+ # we do not want to link against static libs, but need to link against shared
+ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+ if test -n "$deplibrary_names" ; then
+ for tmp in $deplibrary_names ; do
+ depdepl=$tmp
+ done
+ if test -f "$path/$depdepl" ; then
+ depdepl="$path/$depdepl"
+ fi
+ # do not add paths which are already there
+ case " $newlib_search_path " in
+ *" $path "*) ;;
+ *) newlib_search_path="$newlib_search_path $path";;
+ esac
+ path=""
+ fi
+ ;;
+ *)
+ path="-L$path"
+ ;;
+ esac
+
+ ;;
+ -l*)
+ case $host in
+ *-*-darwin*)
+ # Again, we only want to link against shared libraries
+ eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
+ for tmp in $newlib_search_path ; do
+ if test -f "$tmp/lib$tmp_libs.dylib" ; then
+ eval depdepl="$tmp/lib$tmp_libs.dylib"
+ break
+ fi
+ done
+ path=""
+ ;;
+ *) continue ;;
+ esac
+ ;;
+
+ *.ltframework)
+ case $host in
+ *-*-darwin*)
+ depdepl="$deplib"
+ ;;
+ esac
+ ;;
+
+ *) continue ;;
+ esac
+ case " $deplibs " in
+ *" $depdepl "*) ;;
+ *) deplibs="$deplibs $depdepl" ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$deplibs $path" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ dependency_libs="$newdependency_libs"
+ if test "$pass" = dlpreopen; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
+ fi
+ if test "$pass" != dlopen; then
+ if test "$pass" != conv; then
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) lib_search_path="$lib_search_path $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ fi
+
+ if test "$linkmode,$pass" != "prog,link"; then
+ vars="deplibs"
+ else
+ vars="compile_deplibs finalize_deplibs"
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ # FIXME: Pedantically, this is the right thing to do, so
+ # that some nasty dependency loop isn't accidentally
+ # broken:
+ #new_libs="$deplib $new_libs"
+ # Pragmatically, this seems to cause very few problems in
+ # practice:
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ -R*) ;;
+ *)
+ # And here is the reason: when a library appears more
+ # than once as an explicit dependence of a library, or
+ # is implicitly linked in more than once by the
+ # compiler, it is considered special, and multiple
+ # occurrences thereof are not removed. Compare this
+ # with having the same library being listed as a
+ # dependency of multiple other libraries: in this case,
+ # we know (pedantically, we assume) the library does not
+ # need to be listed more than once, so we keep only the
+ # last copy. This is not always right, but it is rare
+ # enough that we require users that really mean to play
+ # such unportable linking tricks to link the library
+ # using -Wl,-lname, so that libtool does not consider it
+ # for duplicate removal.
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
+ fi
+ # Last step: remove runtime libs from dependency_libs (they stay in deplibs)
+ tmp_libs=
+ for i in $dependency_libs ; do
+ case " $predeps $postdeps $compiler_lib_search_path " in
+ *" $i "*)
+ i=""
+ ;;
+ esac
+ if test -n "$i" ; then
+ tmp_libs="$tmp_libs $i"
+ fi
+ done
+ dependency_libs=$tmp_libs
+ done # for pass
+ if test "$linkmode" = prog; then
+ dlfiles="$newdlfiles"
+ dlprefiles="$newdlprefiles"
+ fi
+
+ case $linkmode in
+ oldlib)
+ if test -n "$deplibs"; then
+ $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
+ fi
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$rpath"; then
+ $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$xrpath"; then
+ $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
+ fi
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs="$output"
+ objs="$objs$old_deplibs"
+ ;;
+
+ lib)
+ # Make sure we only generate libraries of the form `libNAME.la'.
+ case $outputname in
+ lib*)
+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+ eval shared_ext=\"$shrext\"
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ if test "$module" = no; then
+ $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+ if test "$need_lib_prefix" != no; then
+ # Add the "lib" prefix for modules if required
+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ eval shared_ext=\"$shrext\"
+ eval libname=\"$libname_spec\"
+ else
+ libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ fi
+ ;;
+ esac
+
+ if test -n "$objs"; then
+ if test "$deplibs_check_method" != pass_all; then
+ $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
+ exit 1
+ else
+ $echo
+ $echo "*** Warning: Linking the shared library $output against the non-libtool"
+ $echo "*** objects $objs is not portable!"
+ libobjs="$libobjs $objs"
+ fi
+ fi
+
+ if test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
+ fi
+
+ set dummy $rpath
+ if test "$#" -gt 2; then
+ $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
+ fi
+ install_libdir="$2"
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test "$build_libtool_libs" = yes; then
+ # Building a libtool convenience library.
+ # Some compilers have problems with a `.al' extension so
+ # convenience libraries should have the same extension an
+ # archive normally would.
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ build_libtool_libs=convenience
+ build_old_libs=yes
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
+ fi
+ else
+
+ # Parse the version information argument.
+ save_ifs="$IFS"; IFS=':'
+ set dummy $vinfo 0 0 0
+ IFS="$save_ifs"
+
+ if test -n "$8"; then
+ $echo "$modename: too many parameters to \`-version-info'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # convert absolute version numbers to libtool ages
+ # this retains compatibility with .la files and attempts
+ # to make the code below a bit more comprehensible
+
+ case $vinfo_number in
+ yes)
+ number_major="$2"
+ number_minor="$3"
+ number_revision="$4"
+ #
+ # There are really only two kinds -- those that
+ # use the current revision as the major version
+ # and those that subtract age and use age as
+ # a minor version. But, then there is irix
+ # which has an extra 1 added just for fun
+ #
+ case $version_type in
+ darwin|linux|osf|windows)
+ current=`expr $number_major + $number_minor`
+ age="$number_minor"
+ revision="$number_revision"
+ ;;
+ freebsd-aout|freebsd-elf|sunos)
+ current="$number_major"
+ revision="$number_minor"
+ age="0"
+ ;;
+ irix|nonstopux)
+ current=`expr $number_major + $number_minor - 1`
+ age="$number_minor"
+ revision="$number_minor"
+ ;;
+ esac
+ ;;
+ no)
+ current="$2"
+ revision="$3"
+ age="$4"
+ ;;
+ esac
+
+ # Check that each of the things are valid numbers.
+ case $current in
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+ *)
+ $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit 1
+ ;;
+ esac
+
+ case $revision in
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+ *)
+ $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit 1
+ ;;
+ esac
+
+ case $age in
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+ *)
+ $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit 1
+ ;;
+ esac
+
+ if test "$age" -gt "$current"; then
+ $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit 1
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case $version_type in
+ none) ;;
+
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ major=.`expr $current - $age`
+ versuffix="$major.$age.$revision"
+ # Darwin ld doesn't like 0 for these options...
+ minor_current=`expr $current + 1`
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+
+ freebsd-aout)
+ major=".$current"
+ versuffix=".$current.$revision";
+ ;;
+
+ freebsd-elf)
+ major=".$current"
+ versuffix=".$current";
+ ;;
+
+ irix | nonstopux)
+ major=`expr $current - $age + 1`
+
+ case $version_type in
+ nonstopux) verstring_prefix=nonstopux ;;
+ *) verstring_prefix=sgi ;;
+ esac
+ verstring="$verstring_prefix$major.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test "$loop" -ne 0; do
+ iface=`expr $revision - $loop`
+ loop=`expr $loop - 1`
+ verstring="$verstring_prefix$major.$iface:$verstring"
+ done
+
+ # Before this point, $major must not contain `.'.
+ major=.$major
+ versuffix="$major.$revision"
+ ;;
+
+ linux)
+ major=.`expr $current - $age`
+ versuffix="$major.$age.$revision"
+ ;;
+
+ osf)
+ major=.`expr $current - $age`
+ versuffix=".$current.$age.$revision"
+ verstring="$current.$age.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test "$loop" -ne 0; do
+ iface=`expr $current - $loop`
+ loop=`expr $loop - 1`
+ verstring="$verstring:${iface}.0"
+ done
+
+ # Make executables depend on our current version.
+ verstring="$verstring:${current}.0"
+ ;;
+
+ sunos)
+ major=".$current"
+ versuffix=".$current.$revision"
+ ;;
+
+ windows)
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 filesystems.
+ major=`expr $current - $age`
+ versuffix="-$major"
+ ;;
+
+ *)
+ $echo "$modename: unknown library version type \`$version_type'" 1>&2
+ $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ exit 1
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=
+ ;;
+ *)
+ verstring="0.0"
+ ;;
+ esac
+ if test "$need_version" = no; then
+ versuffix=
+ else
+ versuffix=".0.0"
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test "$avoid_version" = yes && test "$need_version" = no; then
+ major=
+ versuffix=
+ verstring=""
+ fi
+
+ # Check to see if the archive will have undefined symbols.
+ if test "$allow_undefined" = yes; then
+ if test "$allow_undefined_flag" = unsupported; then
+ $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
+ build_libtool_libs=no
+ build_old_libs=yes
+ fi
+ else
+ # Don't allow undefined symbols.
+ allow_undefined_flag="$no_undefined_flag"
+ fi
+ fi
+
+ if test "$mode" != relink; then
+ # Remove our outputs, but don't remove object files since they
+ # may have been created when compiling PIC objects.
+ removelist=
+ tempremovelist=`$echo "$output_objdir/*"`
+ for p in $tempremovelist; do
+ case $p in
+ *.$objext)
+ ;;
+ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+ removelist="$removelist $p"
+ ;;
+ *) ;;
+ esac
+ done
+ if test -n "$removelist"; then
+ $show "${rm}r $removelist"
+ $run ${rm}r $removelist
+ fi
+ fi
+
+ # Now set the variables for building old libraries.
+ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+ oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+ fi
+
+ # Eliminate all temporary directories.
+ for path in $notinst_path; do
+ lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'`
+ deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'`
+ dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'`
+ done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ temp_xrpath="$temp_xrpath -R$libdir"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ if true || test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles="$dlfiles"
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) dlfiles="$dlfiles $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles="$dlprefiles"
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) dlprefiles="$dlprefiles $lib" ;;
+ esac
+ done
+
+ if test "$build_libtool_libs" = yes; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ deplibs="$deplibs System.ltframework"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-freebsd*-gnu*)
+ # Prevent $arg from being parsed by the freebsd regexp below.
+ if test "$build_libtool_need_lc" = "yes"; then
+ deplibs="$deplibs -lc"
+ fi
+ ;;
+ *-*-openbsd* | *-*-freebsd*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test "$build_libtool_need_lc" = "yes"; then
+ deplibs="$deplibs -lc"
+ fi
+ ;;
+ esac
+ fi
+
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=""
+ versuffix=""
+ major=""
+ newdeplibs=
+ droppeddeps=no
+ case $deplibs_check_method in
+ pass_all)
+ # Don't check for shared/static. Everything works.
+ # This might be a little naive. We might want to check
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behavior.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $rm conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $rm conftest
+ $LTCC -o conftest conftest.c $deplibs
+ if test "$?" -eq 0 ; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ name="`expr $i : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" -ne "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
+ set dummy $deplib_matches
+ deplib_match=$2
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: dynamic linker does not accept needed library $i."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which I believe you do not have"
+ $echo "*** because a test_compile did reveal that the linker did not use it for"
+ $echo "*** its dynamic dependency list that programs get resolved with at runtime."
+ fi
+ fi
+ else
+ newdeplibs="$newdeplibs $i"
+ fi
+ done
+ else
+ # Error occurred in the first compile. Let's try to salvage
+ # the situation: Compile a separate program for each library.
+ for i in $deplibs; do
+ name="`expr $i : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" != "0"; then
+ $rm conftest
+ $LTCC -o conftest conftest.c $i
+ # Did it work?
+ if test "$?" -eq 0 ; then
+ ldd_output=`ldd conftest`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $i "*)
+ newdeplibs="$newdeplibs $i"
+ i=""
+ ;;
+ esac
+ fi
+ if test -n "$i" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
+ set dummy $deplib_matches
+ deplib_match=$2
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: dynamic linker does not accept needed library $i."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because a test_compile did reveal that the linker did not use this one"
+ $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+ fi
+ fi
+ else
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning! Library $i is needed by this library but I was not able to"
+ $echo "*** make it link in! You will probably need to install it or some"
+ $echo "*** library that it depends on before this library will be fully"
+ $echo "*** functional. Installing it before continuing would be even better."
+ fi
+ else
+ newdeplibs="$newdeplibs $i"
+ fi
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method
+ file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ for a_deplib in $deplibs; do
+ name="`expr $a_deplib : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ # Follow soft links.
+ if ls -lLd "$potent_lib" 2>/dev/null \
+ | grep " -> " >/dev/null; then
+ continue
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib="$potent_lib"
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+ case $potliblink in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+ *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
+ | ${SED} 10q \
+ | $EGREP "$file_magic_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: linker path does not have real file for library $a_deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $echo "*** with $libname but no candidates were found. (...for file magic test)"
+ else
+ $echo "*** with $libname and none of the candidates passed a file format test"
+ $echo "*** using a file magic. Last file checked: $potlib"
+ fi
+ fi
+ else
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ fi
+ done # Gone through all deplibs.
+ ;;
+ match_pattern*)
+ set dummy $deplibs_check_method
+ match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ for a_deplib in $deplibs; do
+ name="`expr $a_deplib : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test -n "$name" && test "$name" != "0"; then
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ case " $predeps $postdeps " in
+ *" $a_deplib "*)
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ ;;
+ esac
+ fi
+ if test -n "$a_deplib" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ potlib="$potent_lib" # see symlink-check above in file_magic test
+ if eval $echo \"$potent_lib\" 2>/dev/null \
+ | ${SED} 10q \
+ | $EGREP "$match_pattern_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ fi
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ $echo
+ $echo "*** Warning: linker path does not have real file for library $a_deplib."
+ $echo "*** I have the capability to make that library automatically link in when"
+ $echo "*** you link to this library. But I can only do this if you have a"
+ $echo "*** shared version of the library, which you do not appear to have"
+ $echo "*** because I did check the linker path looking for a file starting"
+ if test -z "$potlib" ; then
+ $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
+ else
+ $echo "*** with $libname and none of the candidates passed a file format test"
+ $echo "*** using a regex pattern. Last file checked: $potlib"
+ fi
+ fi
+ else
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ fi
+ done # Gone through all deplibs.
+ ;;
+ none | unknown | *)
+ newdeplibs=""
+ tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
+ -e 's/ -[LR][^ ]*//g'`
+ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+ for i in $predeps $postdeps ; do
+ # can't use Xsed below, because $i might contain '/'
+ tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
+ done
+ fi
+ if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \
+ | grep . >/dev/null; then
+ $echo
+ if test "X$deplibs_check_method" = "Xnone"; then
+ $echo "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ $echo "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ $echo "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ fi
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ if test "$droppeddeps" = yes; then
+ if test "$module" = yes; then
+ $echo
+ $echo "*** Warning: libtool could not satisfy all declared inter-library"
+ $echo "*** dependencies of module $libname. Therefore, libtool will create"
+ $echo "*** a static module, that should work as long as the dlopening"
+ $echo "*** application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ $echo
+ $echo "*** However, this would only work if libtool was able to extract symbol"
+ $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ $echo "*** not find such a program. So, this module is probably useless."
+ $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ $echo "*** The inter-library dependencies that have been dropped here will be"
+ $echo "*** automatically added whenever a program is linked with this library"
+ $echo "*** or is declared to -dlopen it."
+
+ if test "$allow_undefined" = no; then
+ $echo
+ $echo "*** Since this library must not contain undefined symbols,"
+ $echo "*** because either the platform does not support them or"
+ $echo "*** it was explicitly requested with -no-undefined,"
+ $echo "*** libtool will only create a static version of it."
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ fi
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ case $host in
+ *-*-darwin*)
+ newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ dependency_libs=`$echo "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test "$build_libtool_libs" = yes; then
+ if test "$hardcode_into_libs" = yes; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath="$finalize_rpath"
+ test "$mode" != relink && test "$fast_install" = no && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ dep_rpath="$dep_rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ if test -n "$hardcode_libdir_flag_spec_ld"; then
+ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+ else
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath="$finalize_shlibpath"
+ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
+ # Get the real and link names of the library.
+ eval shared_ext=\"$shrext\"
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ realname="$2"
+ shift; shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+ if test -z "$dlname"; then
+ dlname=$soname
+ fi
+
+ lib="$output_objdir/$realname"
+ for link
+ do
+ linknames="$linknames $link"
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+ $show "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $run $rm $export_symbols
+ eval cmds=\"$export_symbols_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ if len=`expr "X$cmd" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ skipped_export=false
+ else
+ # The command line is too long to execute in one step.
+ $show "using reloadable object file for export list..."
+ skipped_export=:
+ fi
+ done
+ IFS="$save_ifs"
+ if test -n "$export_symbols_regex"; then
+ $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
+ $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ $show "$mv \"${export_symbols}T\" \"$export_symbols\""
+ $run eval '$mv "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
+ fi
+
+ tmp_deplibs=
+ for test_deplib in $deplibs; do
+ case " $convenience " in
+ *" $test_deplib "*) ;;
+ *)
+ tmp_deplibs="$tmp_deplibs $test_deplib"
+ ;;
+ esac
+ done
+ deplibs="$tmp_deplibs"
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ else
+ gentop="$output_objdir/${outputname}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ for xlib in $convenience; do
+ # Extract the objects.
+ case $xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "$mkdir $xdir"
+ $run $mkdir "$xdir"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ # We will extract separately just the conflicting names and we will no
+ # longer touch any unique names. It is faster to leave these extract
+ # automatically by $AR in one run.
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+ if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+ $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+ $AR t "$xabs" | sort | uniq -cd | while read -r count name
+ do
+ i=1
+ while test "$i" -le "$count"
+ do
+ # Put our $i before any first dot (extension)
+ # Never overwrite any file
+ name_to="$name"
+ while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+ do
+ name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+ done
+ $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+ $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+ i=`expr $i + 1`
+ done
+ done
+ fi
+
+ libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+ fi
+
+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ linker_flags="$linker_flags $flag"
+ fi
+
+ # Make a backup of the uninstalled library when relinking
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
+ fi
+
+ # Add all flags from the command line. We here create a library,
+ # but those flags were only added to compile_command and
+ # finalize_command, which are only used when creating executables.
+ # So do it by hand here.
+ compiler_flags="$compiler_flags $add_flags"
+ # Only add it to commands which use CC, instead of LD, i.e.
+ # only to $compiler_flags
+ #linker_flags="$linker_flags $add_flags"
+
+ # Do each of the archive commands.
+ if test "$module" = yes && test -n "$module_cmds" ; then
+ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+ eval cmds=\"$module_expsym_cmds\"
+ else
+ eval cmds=\"$module_cmds\"
+ fi
+ else
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval cmds=\"$archive_expsym_cmds\"
+ else
+ eval cmds=\"$archive_cmds\"
+ fi
+ fi
+
+ if test "X$skipped_export" != "X:" && len=`expr "X$cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # The command line is too long to link in one step, link piecewise.
+ $echo "creating reloadable object files..."
+
+ # Save the value of $output and $libobjs because we want to
+ # use them later. If we have whole_archive_flag_spec, we
+ # want to use save_libobjs as it was before
+ # whole_archive_flag_spec was expanded, because we can't
+ # assume the linker understands whole_archive_flag_spec.
+ # This may have to be revisited, in case too many
+ # convenience libraries get linked in and end up exceeding
+ # the spec.
+ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+ save_libobjs=$libobjs
+ fi
+ save_output=$output
+
+ # Clear the reloadable object creation command queue and
+ # initialize k to one.
+ test_cmds=
+ concat_cmds=
+ objlist=
+ delfiles=
+ last_robj=
+ k=1
+ output=$output_objdir/$save_output-${k}.$objext
+ # Loop over the list of objects to be linked.
+ for obj in $save_libobjs
+ do
+ eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+ if test "X$objlist" = X ||
+ { len=`expr "X$test_cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len"; }; then
+ objlist="$objlist $obj"
+ else
+ # The command $test_cmds is almost too long, add a
+ # command to the queue.
+ if test "$k" -eq 1 ; then
+ # The first file doesn't have a previous command to add.
+ eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+ else
+ # All subsequent reloadable object files will link in
+ # the last one created.
+ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
+ fi
+ last_robj=$output_objdir/$save_output-${k}.$objext
+ k=`expr $k + 1`
+ output=$output_objdir/$save_output-${k}.$objext
+ objlist=$obj
+ len=1
+ fi
+ done
+ # Handle the remaining objects by creating one last
+ # reloadable object file. All subsequent reloadable object
+ # files will link in the last one created.
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+
+ if ${skipped_export-false}; then
+ $show "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $run $rm $export_symbols
+ libobjs=$output
+ # Append the command to create the export file.
+ eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
+ fi
+
+ # Set up a command to remove the reloadale object files
+ # after they are used.
+ i=0
+ while test "$i" -lt "$k"
+ do
+ i=`expr $i + 1`
+ delfiles="$delfiles $output_objdir/$save_output-${i}.$objext"
+ done
+
+ $echo "creating a temporary reloadable object file: $output"
+
+ # Loop through the commands generated above and execute them.
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $concat_cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ libobjs=$output
+ # Restore the value of output.
+ output=$save_output
+
+ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ fi
+ # Expand the library linking commands again to reset the
+ # value of $libobjs for piecewise linking.
+
+ # Do each of the archive commands.
+ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+ eval cmds=\"$archive_expsym_cmds\"
+ else
+ eval cmds=\"$archive_cmds\"
+ fi
+
+ # Append the command to remove the reloadable object files
+ # to the just-reset $cmds.
+ eval cmds=\"\$cmds~$rm $delfiles\"
+ fi
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
+ exit 0
+ fi
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
+ $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test "$module" = yes || test "$export_dynamic" = yes; then
+ # On all known operating systems, these are identical.
+ dlname="$soname"
+ fi
+ fi
+ ;;
+
+ obj)
+ if test -n "$deplibs"; then
+ $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
+ fi
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$rpath"; then
+ $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$xrpath"; then
+ $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
+ fi
+
+ case $output in
+ *.lo)
+ if test -n "$objs$old_deplibs"; then
+ $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
+ exit 1
+ fi
+ libobj="$output"
+ obj=`$echo "X$output" | $Xsed -e "$lo2o"`
+ ;;
+ *)
+ libobj=
+ obj="$output"
+ ;;
+ esac
+
+ # Delete the old objects.
+ $run $rm $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # reload_cmds runs $LD directly, so let us get rid of
+ # -Wl from whole_archive_flag_spec
+ wl=
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+ else
+ gentop="$output_objdir/${obj}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ for xlib in $convenience; do
+ # Extract the objects.
+ case $xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "$mkdir $xdir"
+ $run $mkdir "$xdir"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ # We will extract separately just the conflicting names and we will no
+ # longer touch any unique names. It is faster to leave these extract
+ # automatically by $AR in one run.
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+ if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+ $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+ $AR t "$xabs" | sort | uniq -cd | while read -r count name
+ do
+ i=1
+ while test "$i" -le "$count"
+ do
+ # Put our $i before any first dot (extension)
+ # Never overwrite any file
+ name_to="$name"
+ while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+ do
+ name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+ done
+ $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+ $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+ i=`expr $i + 1`
+ done
+ done
+ fi
+
+ reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+ fi
+
+ # Create the old-style object.
+ reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+ output="$obj"
+ eval cmds=\"$reload_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ exit 0
+ fi
+
+ if test "$build_libtool_libs" != yes; then
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ # $show "echo timestamp > $libobj"
+ # $run eval "echo timestamp > $libobj" || exit $?
+ exit 0
+ fi
+
+ if test -n "$pic_flag" || test "$pic_mode" != default; then
+ # Only do commands if we really have different PIC objects.
+ reload_objs="$libobjs $reload_conv_objs"
+ output="$libobj"
+ eval cmds=\"$reload_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ exit 0
+ ;;
+
+ prog)
+ case $host in
+ *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
+ esac
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
+ fi
+
+ if test "$preload" = yes; then
+ if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
+ test "$dlopen_self_static" = unknown; then
+ $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
+ fi
+ fi
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+ ;;
+ esac
+
+ case $host in
+ *-*-darwin*)
+ # Don't allow lazy linking, it breaks C++ global constructors
+ if test "$tagname" = CXX ; then
+ compile_command="$compile_command ${wl}-bind_at_load"
+ finalize_command="$finalize_command ${wl}-bind_at_load"
+ fi
+ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+ compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+ ;;
+ esac
+
+ compile_command="$compile_command $compile_deplibs"
+ finalize_command="$finalize_command $finalize_deplibs"
+
+ if test -n "$rpath$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ for libdir in $rpath $xrpath; do
+ # This is the magic to use -rpath.
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$libdir";;
+ esac
+ ;;
+ esac
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath="$rpath"
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ finalize_rpath="$rpath"
+
+ if test -n "$libobjs" && test "$build_old_libs" = yes; then
+ # Transform all the library objects into standard objects.
+ compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ fi
+
+ dlsyms=
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ dlsyms="${outputname}S.c"
+ else
+ $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
+ fi
+ fi
+
+ if test -n "$dlsyms"; then
+ case $dlsyms in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist="$output_objdir/${outputname}.nm"
+
+ $show "$rm $nlist ${nlist}S ${nlist}T"
+ $run $rm "$nlist" "${nlist}S" "${nlist}T"
+
+ # Parse the name list into a source file.
+ $show "creating $output_objdir/$dlsyms"
+
+ test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
+/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* Prevent the only kind of declaration conflicts we can make. */
+#define lt_preloaded_symbols some_other_symbol
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test "$dlself" = yes; then
+ $show "generating symbol list for \`$output'"
+
+ test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ for arg in $progfiles; do
+ $show "extracting global C symbols from \`$arg'"
+ $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+ $run eval '$mv "$nlist"T "$nlist"'
+ fi
+
+ if test -n "$export_symbols_regex"; then
+ $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+ $run eval '$mv "$nlist"T "$nlist"'
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols="$output_objdir/$output.exp"
+ $run $rm $export_symbols
+ $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ else
+ $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
+ $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
+ $run eval 'mv "$nlist"T "$nlist"'
+ fi
+ fi
+
+ for arg in $dlprefiles; do
+ $show "extracting global C symbols from \`$arg'"
+ name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
+ $run eval '$echo ": $name " >> "$nlist"'
+ $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -z "$run"; then
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $mv "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if grep -v "^: " < "$nlist" |
+ if sort -k 3 </dev/null >/dev/null 2>&1; then
+ sort -k 3
+ else
+ sort +2
+ fi |
+ uniq > "$nlist"S; then
+ :
+ else
+ grep -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
+ else
+ $echo '/* NONE */' >> "$output_objdir/$dlsyms"
+ fi
+
+ $echo >> "$output_objdir/$dlsyms" "\
+
+#undef lt_preloaded_symbols
+
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr address;
+}
+lt_preloaded_symbols[] =
+{\
+"
+
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
+
+ $echo >> "$output_objdir/$dlsyms" "\
+ {0, (lt_ptr) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ fi
+
+ pic_flag_for_symtable=
+ case $host in
+ # compiling the symbol table file with pic_flag works around
+ # a FreeBSD bug that causes programs to crash when -lm is
+ # linked before any other PIC object. But we must not use
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+ case "$compile_command " in
+ *" -static "*) ;;
+ *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
+ esac;;
+ *-*-hpux*)
+ case "$compile_command " in
+ *" -static "*) ;;
+ *) pic_flag_for_symtable=" $pic_flag";;
+ esac
+ esac
+
+ # Now compile the dynamic symbol file.
+ $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+ $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+
+ # Clean up the generated files.
+ $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
+ $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
+
+ # Transform the symbol file into the correct name.
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ ;;
+ *)
+ $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
+ exit 1
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+ fi
+
+ # AIX runtime linking requires linking programs with -Wl,-brtl and libs with -Wl,-G
+ # Also add -bnolibpath to the beginning of the link line, to clear the hardcoded runpath.
+ # Otherwise, things like the -L path to libgcc.a are accidentally hardcoded by ld.
+ # This does not apply on AIX for ia64, which uses a SysV linker.
+ case "$host" in
+ ia64-*-aix5*) ;;
+ *-*-aix4* | *-*-aix5*)
+ compile_command=`$echo "X$compile_command $wl-brtl" | $Xsed -e "s/\$CC/\$CC $wl-bnolibpath/1"`
+ finalize_command=`$echo "X$finalize_command $wl-brtl" | $Xsed -e "s/\$CC/\$CC $wl-bnolibpath/1"` ;;
+ esac
+
+ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+ # Replace the output file specification.
+ compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ link_command="$compile_command$compile_rpath"
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ $show "$link_command"
+ $run eval "$link_command"
+ status=$?
+
+ # Delete the generated files.
+ if test -n "$dlsyms"; then
+ $show "$rm $output_objdir/${outputname}S.${objext}"
+ $run $rm "$output_objdir/${outputname}S.${objext}"
+ fi
+
+ exit $status
+ fi
+
+ if test -n "$shlibpath_var"; then
+ # We should set the shlibpath_var
+ rpath=
+ for dir in $temp_rpath; do
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*)
+ # Absolute path.
+ rpath="$rpath$dir:"
+ ;;
+ *)
+ # Relative path: add a thisdir entry.
+ rpath="$rpath\$thisdir/$dir:"
+ ;;
+ esac
+ done
+ temp_rpath="$rpath"
+ fi
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ fi
+
+ if test "$no_install" = yes; then
+ # We don't need to create a wrapper script.
+ link_command="$compile_var$compile_command$compile_rpath"
+ # Replace the output file specification.
+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $run $rm $output
+ # Link the executable and exit
+ $show "$link_command"
+ $run eval "$link_command" || exit $?
+ exit 0
+ fi
+
+ if test "$hardcode_action" = relink; then
+ # Fast installation is not supported
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+ $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
+ $echo "$modename: \`$output' will be relinked during installation" 1>&2
+ else
+ if test "$fast_install" != no; then
+ link_command="$finalize_var$compile_command$finalize_rpath"
+ if test "$fast_install" = yes; then
+ relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+ else
+ # fast_install is set to needless
+ relink_command=
+ fi
+ else
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+ fi
+ fi
+
+ # Replace the output file specification.
+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+ # Delete the old output files.
+ $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+ $show "$link_command"
+ $run eval "$link_command" || exit $?
+
+ # Now create the wrapper script.
+ $show "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ fi
+ done
+ relink_command="(cd `pwd`; $relink_command)"
+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Quote $echo for shipping.
+ if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
+ case $0 in
+ [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
+ *) qecho="$SHELL `pwd`/$0 --fallback-echo";;
+ esac
+ qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
+ else
+ qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Only actually do things if our run command is non-null.
+ if test -z "$run"; then
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
+ esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*)
+ exeext=.exe
+ outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
+ *) exeext= ;;
+ esac
+ case $host in
+ *cygwin* | *mingw* )
+ cwrappersource=`$echo ${objdir}/lt-${output}.c`
+ cwrapper=`$echo ${output}.exe`
+ $rm $cwrappersource $cwrapper
+ trap "$rm $cwrappersource $cwrapper; exit 1" 1 2 15
+
+ cat > $cwrappersource <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+ Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+
+ The $output program cannot be directly executed until all the libtool
+ libraries that it depends on are installed.
+
+ This wrapper executable should never be moved out of the build directory.
+ If it is, it will not operate correctly.
+
+ Currently, it simply execs the wrapper *script* "/bin/sh $output",
+ but could eventually absorb all of the scripts functionality and
+ exec $objdir/$outputname directly.
+*/
+EOF
+ cat >> $cwrappersource<<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef DIR_SEPARATOR
+#define DIR_SEPARATOR '/'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+ defined (__OS2__)
+#define HAVE_DOS_BASED_FILE_SYSTEM
+#ifndef DIR_SEPARATOR_2
+#define DIR_SEPARATOR_2 '\\'
+#endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+ if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+const char *program_name = NULL;
+
+void * xmalloc (size_t num);
+char * xstrdup (const char *string);
+char * basename (const char *name);
+char * fnqualify(const char *path);
+char * strendzap(char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+int
+main (int argc, char *argv[])
+{
+ char **newargz;
+ int i;
+
+ program_name = (char *) xstrdup ((char *) basename (argv[0]));
+ newargz = XMALLOC(char *, argc+2);
+EOF
+
+ cat >> $cwrappersource <<EOF
+ newargz[0] = "$SHELL";
+EOF
+
+ cat >> $cwrappersource <<"EOF"
+ newargz[1] = fnqualify(argv[0]);
+ /* we know the script has the same name, without the .exe */
+ /* so make sure newargz[1] doesn't end in .exe */
+ strendzap(newargz[1],".exe");
+ for (i = 1; i < argc; i++)
+ newargz[i+1] = xstrdup(argv[i]);
+ newargz[argc+1] = NULL;
+EOF
+
+ cat >> $cwrappersource <<EOF
+ execv("$SHELL",newargz);
+EOF
+
+ cat >> $cwrappersource <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+ void * p = (void *) malloc (num);
+ if (!p)
+ lt_fatal ("Memory exhausted");
+
+ return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+ return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
+;
+}
+
+char *
+basename (const char *name)
+{
+ const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ /* Skip over the disk name in MSDOS pathnames. */
+ if (isalpha (name[0]) && name[1] == ':')
+ name += 2;
+#endif
+
+ for (base = name; *name; name++)
+ if (IS_DIR_SEPARATOR (*name))
+ base = name + 1;
+ return (char *) base;
+}
+
+char *
+fnqualify(const char *path)
+{
+ size_t size;
+ char *p;
+ char tmp[LT_PATHMAX + 1];
+
+ assert(path != NULL);
+
+ /* Is it qualified already? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+ if (isalpha (path[0]) && path[1] == ':')
+ return xstrdup (path);
+#endif
+ if (IS_DIR_SEPARATOR (path[0]))
+ return xstrdup (path);
+
+ /* prepend the current directory */
+ /* doesn't handle '~' */
+ if (getcwd (tmp, LT_PATHMAX) == NULL)
+ lt_fatal ("getcwd failed");
+ size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */
+ p = XMALLOC(char, size);
+ sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path);
+ return p;
+}
+
+char *
+strendzap(char *str, const char *pat)
+{
+ size_t len, patlen;
+
+ assert(str != NULL);
+ assert(pat != NULL);
+
+ len = strlen(str);
+ patlen = strlen(pat);
+
+ if (patlen <= len)
+ {
+ str += len - patlen;
+ if (strcmp(str, pat) == 0)
+ *str = '\0';
+ }
+ return str;
+}
+
+static void
+lt_error_core (int exit_status, const char * mode,
+ const char * message, va_list ap)
+{
+ fprintf (stderr, "%s: %s: ", program_name, mode);
+ vfprintf (stderr, message, ap);
+ fprintf (stderr, ".\n");
+
+ if (exit_status >= 0)
+ exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+ va_list ap;
+ va_start (ap, message);
+ lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+ va_end (ap);
+}
+EOF
+ # we should really use a build-platform specific compiler
+ # here, but OTOH, the wrappers (shell script and this C one)
+ # are only useful if you want to execute the "real" binary.
+ # Since the "real" binary is built for $host, then this
+ # wrapper might as well be built for $host, too.
+ $run $LTCC -s -o $cwrapper $cwrappersource
+ ;;
+ esac
+ $rm $output
+ trap "$rm $output; exit 1" 1 2 15
+
+ $echo > $output "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+ # install mode needs the following variable:
+ notinst_deplibs='$notinst_deplibs'
+else
+ # When we are sourced in execute mode, \$file and \$echo are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ echo=\"$qecho\"
+ file=\"\$0\"
+ # Make sure echo works.
+ if test \"X\$1\" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+ elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
+ # Yippee, \$echo works!
+ :
+ else
+ # Restart under the correct shell, and then maybe \$echo will work.
+ exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+ fi
+ fi\
+"
+ $echo >> $output "\
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+ done
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test "$fast_install" = yes; then
+ $echo >> $output "\
+ program=lt-'$outputname'$exeext
+ progdir=\"\$thisdir/$objdir\"
+
+ if test ! -f \"\$progdir/\$program\" || \\
+ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $mkdir \"\$progdir\"
+ else
+ $rm \"\$progdir/\$file\"
+ fi"
+
+ $echo >> $output "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+ else
+ $echo \"\$relink_command_output\" >&2
+ $rm \"\$progdir/\$file\"
+ exit 1
+ fi
+ fi
+
+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $rm \"\$progdir/\$program\";
+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $rm \"\$progdir/\$file\"
+ fi"
+ else
+ $echo >> $output "\
+ program='$outputname'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ $echo >> $output "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # Export our shlibpath_var if we have one.
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $echo >> $output "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ # fixup the dll searchpath if we need to.
+ if test -n "$dllsearchpath"; then
+ $echo >> $output "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ $echo >> $output "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+"
+ case $host in
+ # Backslashes separate directories on plain windows
+ *-*-mingw | *-*-os2*)
+ $echo >> $output "\
+ exec \$progdir\\\\\$program \${1+\"\$@\"}
+"
+ ;;
+
+ *)
+ # Need to set LD_LIBRARY_PATH, to the value already
+ # computed within libtool.
+ $echo >> $output "\
+ LD_LIBRARY_PATH=\"$rpath\" exec \$progdir/\$program \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $echo >> $output "\
+ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+ exit 1
+ fi
+ else
+ # The program doesn't exist.
+ \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
+ \$echo \"This script is just a wrapper for \$program.\" 1>&2
+ $echo \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit 1
+ fi
+fi\
+"
+ chmod +x $output
+ fi
+ exit 0
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ if test "$build_libtool_libs" = convenience; then
+ oldobjs="$libobjs_save"
+ addlibs="$convenience"
+ build_libtool_libs=no
+ else
+ if test "$build_libtool_libs" = module; then
+ oldobjs="$libobjs_save"
+ build_libtool_libs=no
+ else
+ oldobjs="$old_deplibs $non_pic_objects"
+ fi
+ addlibs="$old_convenience"
+ fi
+
+ if test -n "$addlibs"; then
+ gentop="$output_objdir/${outputname}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "$mkdir $gentop"
+ $run $mkdir "$gentop"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ # Add in members from convenience archives.
+ for xlib in $addlibs; do
+ # Extract the objects.
+ case $xlib in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "$mkdir $xdir"
+ $run $mkdir "$xdir"
+ status=$?
+ if test "$status" -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ # We will extract separately just the conflicting names and we will no
+ # longer touch any unique names. It is faster to leave these extract
+ # automatically by $AR in one run.
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+ if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; renaming object files" 1>&2
+ $echo "$modename: warning: to ensure that they will not overwrite" 1>&2
+ $AR t "$xabs" | sort | uniq -cd | while read -r count name
+ do
+ i=1
+ while test "$i" -le "$count"
+ do
+ # Put our $i before any first dot (extension)
+ # Never overwrite any file
+ name_to="$name"
+ while test "X$name_to" = "X$name" || test -f "$xdir/$name_to"
+ do
+ name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"`
+ done
+ $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')"
+ $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $?
+ i=`expr $i + 1`
+ done
+ done
+ fi
+
+ oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+
+ compiler_flags="$compiler_flags $add_flags"
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+ eval cmds=\"$old_archive_from_new_cmds\"
+ else
+ eval cmds=\"$old_archive_cmds\"
+
+ if len=`expr "X$cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+ :
+ else
+ # the command line is too long to link in one step, link in parts
+ $echo "using piecewise archive linking..."
+ save_RANLIB=$RANLIB
+ RANLIB=:
+ objlist=
+ concat_cmds=
+ save_oldobjs=$oldobjs
+ # GNU ar 2.10+ was changed to match POSIX; thus no paths are
+ # encoded into archives. This makes 'ar r' malfunction in
+ # this piecewise linking case whenever conflicting object
+ # names appear in distinct ar calls; check, warn and compensate.
+ if (for obj in $save_oldobjs
+ do
+ $echo "X$obj" | $Xsed -e 's%^.*/%%'
+ done | sort | sort -uc >/dev/null 2>&1); then
+ :
+ else
+ $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2
+ $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2
+ AR_FLAGS=cq
+ fi
+ # Is there a better way of finding the last object in the list?
+ for obj in $save_oldobjs
+ do
+ last_oldobj=$obj
+ done
+ for obj in $save_oldobjs
+ do
+ oldobjs="$objlist $obj"
+ objlist="$objlist $obj"
+ eval test_cmds=\"$old_archive_cmds\"
+ if len=`expr "X$test_cmds" : ".*"` &&
+ test "$len" -le "$max_cmd_len"; then
+ :
+ else
+ # the above command should be used before it gets too long
+ oldobjs=$objlist
+ if test "$obj" = "$last_oldobj" ; then
+ RANLIB=$save_RANLIB
+ fi
+ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+ objlist=
+ fi
+ done
+ RANLIB=$save_RANLIB
+ oldobjs=$objlist
+ if test "X$oldobjs" = "X" ; then
+ eval cmds=\"\$concat_cmds\"
+ else
+ eval cmds=\"\$concat_cmds~$old_archive_cmds\"
+ fi
+ fi
+ fi
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ done
+
+ if test -n "$generated"; then
+ $show "${rm}r$generated"
+ $run ${rm}r$generated
+ fi
+
+ # Now create the libtool archive.
+ case $output in
+ *.la)
+ old_library=
+ test "$build_old_libs" = yes && old_library="$libname.$libext"
+ $show "creating $output"
+
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args @inst_prefix_dir@)"
+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+ if test "$hardcode_automatic" = yes ; then
+ relink_command=
+ fi
+ # Only create the output if not a dry run.
+ if test -z "$run"; then
+ for installed in no yes; do
+ if test "$installed" = yes; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output="$output_objdir/$outputname"i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ newdependency_libs="$newdependency_libs $libdir/$name"
+ ;;
+ *) newdependency_libs="$newdependency_libs $deplib" ;;
+ esac
+ done
+ dependency_libs="$newdependency_libs"
+ newdlfiles=
+ for lib in $dlfiles; do
+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ newdlfiles="$newdlfiles $libdir/$name"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ newdlprefiles="$newdlprefiles $libdir/$name"
+ done
+ dlprefiles="$newdlprefiles"
+ fi
+ $rm $output
+ # place dlname in correct position for cygwin
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+ esac
+ $echo > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+ if test "$installed" = no && test "$need_relink" = yes && test "$fast_install" = no; then
+ $echo >> $output "\
+relink_command=\"$relink_command\""
+ fi
+ done
+ fi
+
+ # Do a symbolic link so that the libtool archive can be found in
+ # LD_LIBRARY_PATH before the program is installed.
+ $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
+ $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
+ ;;
+ esac
+ exit 0
+ ;;
+
+ # libtool install mode
+ install)
+ modename="$modename: install"
+
+ # There may be an optional sh(1) argument at the beginning of
+ # install_prog (especially on Windows NT).
+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+ # Allow the use of GNU shtool's install command.
+ $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
+ # Aesthetically quote it.
+ arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$arg "
+ arg="$1"
+ shift
+ else
+ install_prog=
+ arg="$nonopt"
+ fi
+
+ # The real first argument should be the name of the installation program.
+ # Aesthetically quote it.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$install_prog$arg"
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=no
+ stripme=
+ for arg
+ do
+ if test -n "$dest"; then
+ files="$files $dest"
+ dest="$arg"
+ continue
+ fi
+
+ case $arg in
+ -d) isdir=yes ;;
+ -f) prev="-f" ;;
+ -g) prev="-g" ;;
+ -m) prev="-m" ;;
+ -o) prev="-o" ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*) ;;
+
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ prev=
+ else
+ dest="$arg"
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$install_prog $arg"
+ done
+
+ if test -z "$install_prog"; then
+ $echo "$modename: you must specify an install program" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ if test -n "$prev"; then
+ $echo "$modename: the \`$prev' option requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ $echo "$modename: no file or destination specified" 1>&2
+ else
+ $echo "$modename: you must specify a destination" 1>&2
+ fi
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Strip any trailing slash from the destination.
+ dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=yes
+ if test "$isdir" = yes; then
+ destdir="$dest"
+ destname=
+ else
+ destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$destdir" = "X$dest" && destdir=.
+ destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files
+ if test "$#" -gt 2; then
+ $echo "$modename: \`$dest' is not a directory" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+ fi
+ case $destdir in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case $file in
+ *.lo) ;;
+ *)
+ $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case $file in
+ *.$libext)
+ # Do the static libraries later.
+ staticlibs="$staticlibs $file"
+ ;;
+
+ *.la)
+ # Check to see that this really is a libtool archive.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ else
+ $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ library_names=
+ old_library=
+ relink_command=
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) current_libdirs="$current_libdirs $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) future_libdirs="$future_libdirs $libdir" ;;
+ esac
+ fi
+
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
+ test "X$dir" = "X$file/" && dir=
+ dir="$dir$objdir"
+
+ if test -n "$relink_command"; then
+ # Determine the prefix the user has applied to our future dir.
+ inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
+
+ # Don't allow the user to place us outside of our expected
+ # location b/c this prevents finding dependent libraries that
+ # are installed to the same prefix.
+ # At present, this check doesn't affect windows .dll's that
+ # are installed into $libdir/../bin (currently, that works fine)
+ # but it's something to keep an eye on.
+ if test "$inst_prefix_dir" = "$destdir"; then
+ $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+ exit 1
+ fi
+
+ if test -n "$inst_prefix_dir"; then
+ # Stick the inst_prefix_dir data into the link command.
+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+ else
+ relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+ fi
+
+ $echo "$modename: warning: relinking \`$file'" 1>&2
+ $show "$relink_command"
+ if $run eval "$relink_command"; then :
+ else
+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+ exit 1
+ fi
+ fi
+
+ # See the names of the shared library.
+ set dummy $library_names
+ if test -n "$2"; then
+ realname="$2"
+ shift
+ shift
+
+ srcname="$realname"
+ test -n "$relink_command" && srcname="$realname"T
+
+ # Install the shared library and build the symlinks.
+ $show "$install_prog $dir/$srcname $destdir/$realname"
+ $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
+ if test -n "$stripme" && test -n "$striplib"; then
+ $show "$striplib $destdir/$realname"
+ $run eval "$striplib $destdir/$realname" || exit $?
+ fi
+
+ if test "$#" -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ for linkname
+ do
+ if test "$linkname" != "$realname"; then
+ $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+ $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+ fi
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib="$destdir/$realname"
+ eval cmds=\"$postinstall_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ # Install the pseudo-library for information purposes.
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ instname="$dir/$name"i
+ $show "$install_prog $instname $destdir/$name"
+ $run eval "$install_prog $instname $destdir/$name" || exit $?
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ destfile="$destdir/$destfile"
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case $destfile in
+ *.lo)
+ staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
+ ;;
+ *.$objext)
+ staticdest="$destfile"
+ destfile=
+ ;;
+ *)
+ $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ if test -n "$destfile"; then
+ $show "$install_prog $file $destfile"
+ $run eval "$install_prog $file $destfile" || exit $?
+ fi
+
+ # Install the old object if enabled.
+ if test "$build_old_libs" = yes; then
+ # Deduce the name of the old-style object file.
+ staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
+
+ $show "$install_prog $staticobj $staticdest"
+ $run eval "$install_prog \$staticobj \$staticdest" || exit $?
+ fi
+ exit 0
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ destfile="$destdir/$destfile"
+ fi
+
+ # If the file is missing, and there is a .exe on the end, strip it
+ # because it is most likely a libtool script we actually want to
+ # install
+ stripped_ext=""
+ case $file in
+ *.exe)
+ if test ! -f "$file"; then
+ file=`$echo $file|${SED} 's,.exe$,,'`
+ stripped_ext=".exe"
+ fi
+ ;;
+ esac
+
+ # Do a test to see if this is really a libtool program.
+ case $host in
+ *cygwin*|*mingw*)
+ wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
+ ;;
+ *)
+ wrapper=$file
+ ;;
+ esac
+ if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
+ notinst_deplibs=
+ relink_command=
+
+ # To insure that "foo" is sourced, and not "foo.exe",
+ # finese the cygwin/MSYS system by explicitly sourcing "foo."
+ # which disallows the automatic-append-.exe behavior.
+ case $build in
+ *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+ *) wrapperdot=${wrapper} ;;
+ esac
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . ${wrapperdot} ;;
+ *) . ./${wrapperdot} ;;
+ esac
+
+ # Check the variables that should have been set.
+ if test -z "$notinst_deplibs"; then
+ $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
+ exit 1
+ fi
+
+ finalize=yes
+ for lib in $notinst_deplibs; do
+ # Check to see that each library is installed.
+ libdir=
+ if test -f "$lib"; then
+ # If there is no directory component, then add one.
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+ fi
+ libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
+ finalize=no
+ fi
+ done
+
+ relink_command=
+ # To insure that "foo" is sourced, and not "foo.exe",
+ # finese the cygwin/MSYS system by explicitly sourcing "foo."
+ # which disallows the automatic-append-.exe behavior.
+ case $build in
+ *cygwin* | *mingw*) wrapperdot=${wrapper}. ;;
+ *) wrapperdot=${wrapper} ;;
+ esac
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . ${wrapperdot} ;;
+ *) . ./${wrapperdot} ;;
+ esac
+
+ outputname=
+ if test "$fast_install" = no && test -n "$relink_command"; then
+ if test "$finalize" = yes && test -z "$run"; then
+ tmpdir="/tmp"
+ test -n "$TMPDIR" && tmpdir="$TMPDIR"
+ tmpdir="$tmpdir/libtool-$$"
+ if $mkdir "$tmpdir" && chmod 700 "$tmpdir"; then :
+ else
+ $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
+ continue
+ fi
+ file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+ relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $show "$relink_command"
+ if $run eval "$relink_command"; then :
+ else
+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+ ${rm}r "$tmpdir"
+ continue
+ fi
+ file="$outputname"
+ else
+ $echo "$modename: warning: cannot relink \`$file'" 1>&2
+ fi
+ else
+ # Install the binary that we compiled earlier.
+ file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyways
+ case $install_prog,$host in
+ */usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
+ ;;
+ esac
+ ;;
+ esac
+ $show "$install_prog$stripme $file $destfile"
+ $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
+ test -n "$outputname" && ${rm}r "$tmpdir"
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+
+ # Set up the ranlib parameters.
+ oldlib="$destdir/$name"
+
+ $show "$install_prog $file $oldlib"
+ $run eval "$install_prog \$file \$oldlib" || exit $?
+
+ if test -n "$stripme" && test -n "$striplib"; then
+ $show "$old_striplib $oldlib"
+ $run eval "$old_striplib $oldlib" || exit $?
+ fi
+
+ # Do each command in the postinstall commands.
+ eval cmds=\"$old_postinstall_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ done
+
+ if test -n "$future_libdirs"; then
+ $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
+ fi
+
+ if test -n "$current_libdirs"; then
+ # Maybe just do a dry run.
+ test -n "$run" && current_libdirs=" -n$current_libdirs"
+ exec_cmd='$SHELL $0 --finish$current_libdirs'
+ else
+ exit 0
+ fi
+ ;;
+
+ # libtool finish mode
+ finish)
+ modename="$modename: finish"
+ libdirs="$nonopt"
+ admincmds=
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for dir
+ do
+ libdirs="$libdirs $dir"
+ done
+
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ eval cmds=\"$finish_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || admincmds="$admincmds
+ $cmd"
+ done
+ IFS="$save_ifs"
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $run eval "$cmds" || admincmds="$admincmds
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ exit 0
+
+ $echo "----------------------------------------------------------------------"
+ $echo "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ $echo " $libdir"
+ done
+ $echo
+ $echo "If you ever happen to want to link against installed libraries"
+ $echo "in a given directory, LIBDIR, you must either use libtool, and"
+ $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+ $echo "flag during linking and do at least one of the following:"
+ if test -n "$shlibpath_var"; then
+ $echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
+ $echo " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ $echo " - add LIBDIR to the \`$runpath_var' environment variable"
+ $echo " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ $echo " - use the \`$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ $echo " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+ fi
+ $echo
+ $echo "See any operating system documentation about shared libraries for"
+ $echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ $echo "----------------------------------------------------------------------"
+ exit 0
+ ;;
+
+ # libtool execute mode
+ execute)
+ modename="$modename: execute"
+
+ # The first argument is the command name.
+ cmd="$nonopt"
+ if test -z "$cmd"; then
+ $echo "$modename: you must specify a COMMAND" 1>&2
+ $echo "$help"
+ exit 1
+ fi
+
+ # Handle -dlopen flags immediately.
+ for file in $execute_dlfiles; do
+ if test ! -f "$file"; then
+ $echo "$modename: \`$file' is not a file" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ dir=
+ case $file in
+ *.la)
+ # Check to see that this really is a libtool archive.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ else
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
+ continue
+ fi
+
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$file" && dir=.
+
+ if test -f "$dir/$objdir/$dlname"; then
+ dir="$dir/$objdir"
+ else
+ $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+ exit 1
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$file" && dir=.
+ ;;
+
+ *)
+ $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir="$absdir"
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic="$magic"
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ case $file in
+ -*) ;;
+ *)
+ # Do a test to see if this is really a libtool program.
+ if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
+ args="$args \"$file\""
+ done
+
+ if test -z "$run"; then
+ if test -n "$shlibpath_var"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+ fi
+
+ # Restore saved environment variables
+ if test "${save_LC_ALL+set}" = set; then
+ LC_ALL="$save_LC_ALL"; export LC_ALL
+ fi
+ if test "${save_LANG+set}" = set; then
+ LANG="$save_LANG"; export LANG
+ fi
+
+ # Now prepare to actually exec the command.
+ exec_cmd="\$cmd$args"
+ else
+ # Display what would be done.
+ if test -n "$shlibpath_var"; then
+ eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+ $echo "export $shlibpath_var"
+ fi
+ $echo "$cmd$args"
+ exit 0
+ fi
+ ;;
+
+ # libtool clean and uninstall mode
+ clean | uninstall)
+ modename="$modename: $mode"
+ rm="$nonopt"
+ files=
+ rmforce=
+ exit_status=0
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ for arg
+ do
+ case $arg in
+ -f) rm="$rm $arg"; rmforce=yes ;;
+ -*) rm="$rm $arg" ;;
+ *) files="$files $arg" ;;
+ esac
+ done
+
+ if test -z "$rm"; then
+ $echo "$modename: you must specify an RM program" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ rmdirs=
+
+ origobjdir="$objdir"
+ for file in $files; do
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$dir" = "X$file"; then
+ dir=.
+ objdir="$origobjdir"
+ else
+ objdir="$dir/$origobjdir"
+ fi
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ test "$mode" = uninstall && objdir="$dir"
+
+ # Remember objdir for removal later, being careful to avoid duplicates
+ if test "$mode" = clean; then
+ case " $rmdirs " in
+ *" $objdir "*) ;;
+ *) rmdirs="$rmdirs $objdir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if (test -L "$file") >/dev/null 2>&1 \
+ || (test -h "$file") >/dev/null 2>&1 \
+ || test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif test "$rmforce" = yes; then
+ continue
+ fi
+
+ rmfiles="$file"
+
+ case $name in
+ *.la)
+ # Possibly a libtool archive, so verify it.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ . $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ rmfiles="$rmfiles $objdir/$n"
+ done
+ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+ test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+
+ if test "$mode" = uninstall; then
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ eval cmds=\"$postuninstall_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd"
+ if test "$?" -ne 0 && test "$rmforce" != yes; then
+ exit_status=1
+ fi
+ done
+ IFS="$save_ifs"
+ fi
+
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ eval cmds=\"$old_postuninstall_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd"
+ if test "$?" -ne 0 && test "$rmforce" != yes; then
+ exit_status=1
+ fi
+ done
+ IFS="$save_ifs"
+ fi
+ # FIXME: should reinstall the best remaining shared library.
+ fi
+ fi
+ ;;
+
+ *.lo)
+ # Possibly a libtool object, so verify it.
+ if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+
+ # Read the .lo file
+ . $dir/$name
+
+ # Add PIC object to the list of files to remove.
+ if test -n "$pic_object" \
+ && test "$pic_object" != none; then
+ rmfiles="$rmfiles $dir/$pic_object"
+ fi
+
+ # Add non-PIC object to the list of files to remove.
+ if test -n "$non_pic_object" \
+ && test "$non_pic_object" != none; then
+ rmfiles="$rmfiles $dir/$non_pic_object"
+ fi
+ fi
+ ;;
+
+ *)
+ if test "$mode" = clean ; then
+ noexename=$name
+ case $file in
+ *.exe)
+ file=`$echo $file|${SED} 's,.exe$,,'`
+ noexename=`$echo $name|${SED} 's,.exe$,,'`
+ # $file with .exe has already been added to rmfiles,
+ # add $file without .exe
+ rmfiles="$rmfiles $file"
+ ;;
+ esac
+ # Do a test to see if this is a libtool program.
+ if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ relink_command=
+ . $dir/$noexename
+
+ # note $name still contains .exe if it was in $file originally
+ # as does the version of $file that was added into $rmfiles
+ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+ if test "$fast_install" = yes && test -n "$relink_command"; then
+ rmfiles="$rmfiles $objdir/lt-$name"
+ fi
+ if test "X$noexename" != "X$name" ; then
+ rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ $show "$rm $rmfiles"
+ $run $rm $rmfiles || exit_status=1
+ done
+ objdir="$origobjdir"
+
+ # Try to remove the ${objdir}s in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ $show "rmdir $dir"
+ $run rmdir $dir >/dev/null 2>&1
+ fi
+ done
+
+ exit $exit_status
+ ;;
+
+ "")
+ $echo "$modename: you must specify a MODE" 1>&2
+ $echo "$generic_help" 1>&2
+ exit 1
+ ;;
+ esac
+
+ if test -z "$exec_cmd"; then
+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
+ $echo "$generic_help" 1>&2
+ exit 1
+ fi
+fi # test -z "$show_help"
+
+if test -n "$exec_cmd"; then
+ eval exec $exec_cmd
+ exit 1
+fi
+
+# We need to display help for each of the modes.
+case $mode in
+"") $echo \
+"Usage: $modename [OPTION]... [MODE-ARG]...
+
+Provide generalized library-building support services.
+
+ --config show all configuration variables
+ --debug enable verbose shell tracing
+-n, --dry-run display commands without modifying any files
+ --features display basic configuration information and exit
+ --finish same as \`--mode=finish'
+ --help display this help message and exit
+ --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
+ --quiet same as \`--silent'
+ --silent don't print informational messages
+ --tag=TAG use configuration variables from tag TAG
+ --version print version information
+
+MODE must be one of the following:
+
+ clean remove files from the build directory
+ compile compile a source file into a libtool object
+ execute automatically set library path, then run a program
+ finish complete the installation of libtool libraries
+ install install libraries or executables
+ link create a library or an executable
+ uninstall remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
+a more detailed description of MODE.
+
+Report bugs to <bug-libtool@gnu.org>."
+ exit 0
+ ;;
+
+clean)
+ $echo \
+"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+compile)
+ $echo \
+"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -prefer-pic try to building PIC objects only
+ -prefer-non-pic try to building non-PIC objects only
+ -static always build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+ ;;
+
+execute)
+ $echo \
+"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+finish)
+ $echo \
+"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the \`--dry-run' option if you just want to see what would be executed."
+ ;;
+
+install)
+ $echo \
+"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the \`install' or \`cp' program.
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+link)
+ $echo \
+"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
+ -no-undefined declare that a library does not refer to external symbols
+ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
+ -objectlist FILE Use a list of object files found in FILE to specify objects
+ -release RELEASE specify package release information
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -static do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename. Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+uninstall)
+ $echo \
+"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+*)
+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+esac
+
+$echo
+$echo "Try \`$modename --help' for more information about other modes."
+
+exit 0
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries. Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them. This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration. But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# Libtool was configured on host xwing:
+
+# Shell to use when invoking shell scripts.
+SHELL="/bin/sh"
+
+# Whether or not to build shared libraries.
+build_libtool_libs=yes
+
+# Whether or not to build static libraries.
+build_old_libs=no
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=no
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=no
+
+# Whether or not to optimize for fast installation.
+fast_install=yes
+
+# The host system.
+host_alias=
+host=i686-pc-linux-gnu
+
+# An echo program that does not interpret backslashes.
+echo="echo"
+
+# The archiver.
+AR="ar"
+AR_FLAGS="cru"
+
+# A C compiler.
+LTCC="gcc"
+
+# A language-specific compiler.
+CC="g++"
+
+# Is the compiler the GNU C compiler?
+with_gcc=yes
+
+# An ERE matcher.
+EGREP="grep -E"
+
+# The linker used to build libraries.
+LD="/usr/bin/ld"
+
+# Whether we need hard or soft links.
+LN_S="ln -s"
+
+# A BSD-compatible nm program.
+NM="/usr/bin/nm -B"
+
+# A symbol stripping program
+STRIP=strip
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=file
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="dlltool"
+
+# Used on cygwin: object dumper.
+OBJDUMP="objdump"
+
+# Used on cygwin: assembler.
+AS="as"
+
+# The name of the directory that contains temporary libtool files.
+objdir=.libs
+
+# How to create reloadable object files.
+reload_flag=" -r"
+reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs"
+
+# How to pass a linker flag through the compiler.
+wl="-Wl,"
+
+# Object file suffix (normally "o").
+objext="o"
+
+# Old archive suffix (normally "a").
+libext="a"
+
+# Shared library suffix (normally ".so").
+shrext='.so'
+
+# Executable file suffix (normally "").
+exeext=""
+
+# Additional compiler flags for building library objects.
+pic_flag=" -fPIC -DPIC"
+pic_mode=default
+
+# What is the maximum length of a command?
+max_cmd_len=32768
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o="yes"
+
+# Must we lock files when doing compilation ?
+need_locks="no"
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=no
+
+# Do we need a version for libraries?
+need_version=no
+
+# Whether dlopen is supported.
+dlopen_support=yes
+
+# Whether dlopen of programs is supported.
+dlopen_self=yes
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=yes
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag="-static"
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=" -fno-builtin"
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec="\${wl}--export-dynamic"
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive"
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=""
+
+# Library versioning type.
+version_type=linux
+
+# Format of library name prefix.
+libname_spec="lib\$name"
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec="\${libname}\${release}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}"
+
+# The coded name of the library, if different from the real name.
+soname_spec="\${libname}\${release}\${shared_ext}\$major"
+
+# Commands used to build and install an old-style archive.
+RANLIB="ranlib"
+old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs\$old_deplibs~\$RANLIB \$oldlib"
+old_postinstall_cmds="\$RANLIB \$oldlib~chmod 644 \$oldlib"
+old_postuninstall_cmds=""
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=""
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=""
+
+# Commands used to build and install a shared archive.
+archive_cmds="\$CC -shared -nostdlib \$compiler_flags \$predep_objects \$libobjs \$deplibs \$postdep_objects \${wl}-soname \$wl\$soname -o \$lib"
+archive_expsym_cmds="\$CC -shared -nostdlib \$compiler_flags \$predep_objects \$libobjs \$deplibs \$postdep_objects \${wl}-soname \$wl\$soname \${wl}-retain-symbols-file \$wl\$export_symbols -o \$lib"
+postinstall_cmds=""
+postuninstall_cmds=""
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=""
+module_expsym_cmds=""
+
+# Commands to strip libraries.
+old_striplib="strip --strip-debug"
+striplib="strip --strip-unneeded"
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects="/usr/lib/gcc/i486-linux/3.4.4/../../../../lib/crti.o /usr/lib/gcc/i486-linux/3.4.4/crtbeginS.o"
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects="/usr/lib/gcc/i486-linux/3.4.4/crtendS.o /usr/lib/gcc/i486-linux/3.4.4/../../../../lib/crtn.o"
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=""
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps="-lstdc++ -lm -lgcc_s -lc -lgcc_s"
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path="-L/usr/lib/gcc/i486-linux/3.4.4 -L/usr/lib/gcc/i486-linux/3.4.4 -L/usr/lib/gcc/i486-linux/3.4.4/../../../../lib -L/usr/lib/gcc/i486-linux/3.4.4/../../.. -L/lib/../lib -L/usr/lib/../lib"
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method="pass_all"
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd="\$MAGIC_CMD"
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=""
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=""
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir"
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=""
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGISTW][ABCDGISTW]*\\)[ ][ ]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2\\3 \\3/p'"
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern int \\1;/p'"
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (lt_ptr) 0},/p' -e 's/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (lt_ptr) \\&\\2},/p'"
+
+# This is the shared library runtime path variable.
+runpath_var=LD_RUN_PATH
+
+# This is the shared library path variable.
+shlibpath_var=LD_LIBRARY_PATH
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=no
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=immediate
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=yes
+
+# Flag to hardcode $libdir into a binary during linking.
+# This must work even if $libdir does not exist.
+hardcode_libdir_flag_spec="\${wl}--rpath \${wl}\$libdir"
+
+# If ld is used when linking, flag to hardcode $libdir into
+# a binary during linking. This must work even if $libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=""
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=""
+
+# Set to yes if using DIR/libNAME during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=no
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=no
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=no
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=unknown
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+
+# Fix the shell variable $srcfile for the compiler.
+fix_srcfile_path=""
+
+# Set to yes if exported symbols are required.
+always_export_symbols=no
+
+# The commands to list exported symbols.
+export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols"
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=""
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=""
+
+# Symbols that must always be exported.
+include_expsyms=""
+
+# ### END LIBTOOL TAG CONFIG: CXX
+
diff --git a/mimetypes/Makefile.am b/mimetypes/Makefile.am
new file mode 100644
index 0000000..33c74d1
--- /dev/null
+++ b/mimetypes/Makefile.am
@@ -0,0 +1,5 @@
+if need_kde32_compatibility
+ KDE32MIMEDIR = audio
+endif
+
+SUBDIRS = application video $(KDE32MIMEDIR)
diff --git a/mimetypes/application/Makefile.am b/mimetypes/application/Makefile.am
new file mode 100644
index 0000000..f21b744
--- /dev/null
+++ b/mimetypes/application/Makefile.am
@@ -0,0 +1,4 @@
+mime_DATA = x-mplayer2.desktop x-kmplayer.desktop
+mimedir = $(kde_mimedir)/application
+
+EXTRA_DIST = $(mime_DATA)
diff --git a/mimetypes/application/x-kmplayer.desktop b/mimetypes/application/x-kmplayer.desktop
new file mode 100644
index 0000000..bbffcf7
--- /dev/null
+++ b/mimetypes/application/x-kmplayer.desktop
@@ -0,0 +1,47 @@
+# KDE Config File
+[Desktop Entry]
+Encoding=UTF-8
+MimeType=application/x-kmplayer
+Comment=KMPlayer Document
+Comment[af]=KMPlayer Dokument
+Comment[ar]=وثيقة KMPlayer
+Comment[bg]=Документ за KMPlayer
+Comment[br]=Teul KMPlayer
+Comment[bs]=KMPlayer dokument
+Comment[ca]=Document KMPlayer
+Comment[cs]=KMPlayer dokument
+Comment[da]=KMPlayer-dokument
+Comment[de]=KMPlayer-Datei
+Comment[el]=Έγγραφο KMPlayer
+Comment[es]=Documento de KMPlayer
+Comment[et]=KMPlayeri dokument
+Comment[fi]=KMPlayer-asiakirja
+Comment[fr]=Document de KMPlayer
+Comment[gl]=Documento de KMPlayer
+Comment[he]=מסמך KMPlayer
+Comment[hi]=केएमप्लेयर दस्तावेज
+Comment[hu]=KMPlayer-dokumentum
+Comment[it]=Documento KMPlayer
+Comment[ja]=KMPlayer ドキュメント
+Comment[ka]=KMPlayer-ის დოკუმენტი
+Comment[mk]=Документ на KMPlayer
+Comment[nb]=KMPlayer-dokument
+Comment[nl]=KMPlayer-document
+Comment[pa]=KMPlayer ਦਸਤਾਵੇਜ਼
+Comment[pt]=Documento do KMPlayer
+Comment[pt_BR]=Documento do KMplayer
+Comment[ru]=Файл KMPlayer
+Comment[sk]=Dokument KMPlayera
+Comment[sr]=KMPlayer-ов документ
+Comment[sr@Latn]=KMPlayer-ov dokument
+Comment[sv]=Kmplayer-dokument
+Comment[ta]=கேஎம்இயக்கி ஆவணம்
+Comment[th]=เอกสาร KMPlayer
+Comment[tr]=KMPlayer Belgesi
+Comment[uk]=Документ KMPlayer
+Comment[xx]=xxKMPlayer Documentxx
+Comment[zh_CN]=KMPlayer 文档
+Comment[zh_TW]=KMPlayer 文件
+Icon=kmplayer
+Type=MimeType
+X-KDE-AutoEmbed=true
diff --git a/mimetypes/application/x-mplayer2.desktop b/mimetypes/application/x-mplayer2.desktop
new file mode 100644
index 0000000..bf6e2c9
--- /dev/null
+++ b/mimetypes/application/x-mplayer2.desktop
@@ -0,0 +1,46 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=MimeType
+Comment=MS Media Format
+Comment[af]=MS Media Formaat
+Comment[ar]= ضيغة MS Media
+Comment[bg]=MS формат на медия
+Comment[br]=Furmad MS Media
+Comment[bs]=MS Media format
+Comment[ca]=Format multimèdia de Microsoft
+Comment[cs]=MS média formát
+Comment[da]=MS Medie-Format
+Comment[de]=MS-Media-Format
+Comment[el]=Μορφή πολυμέσων MS
+Comment[es]=Formato multimedia de Microsoft
+Comment[et]=MS Media vorming
+Comment[fr]=Format multimédia Microsoft
+Comment[gl]=Formato Multimédia de Microsoft
+Comment[he]=תבנית מדיה של חלונות
+Comment[hi]=एमएस मीडिया फॉर्मेट
+Comment[hu]=MS Media fájl
+Comment[it]=Formato media MS
+Comment[ja]=MS Media フォーマット
+Comment[ka]=MS Media-ის ფორმატი
+Comment[mk]=Мултимедијален формат на MS
+Comment[nb]=Microsoft Media-format
+Comment[nl]=MS mediaformaat
+Comment[pa]=MS ਮੀਡਿਆ ਫਾਰਮੈਟ
+Comment[pt]=Formato Multimédia Microsoft
+Comment[pt_BR]=Formato de Mídia MS
+Comment[ru]=Формат MS Media
+Comment[sk]=MS Media formát
+Comment[sr]=MS формат медија
+Comment[sr@Latn]=MS format medija
+Comment[sv]=MS-mediaformat
+Comment[ta]=எம்எஸ் ஊடக வடிவம்
+Comment[th]=รูปแบบ MS Media
+Comment[tr]=MS Medya Biçimi
+Comment[uk]=Формат MS Media
+Comment[xx]=xxMS Media Formatxx
+Comment[zh_CN]=MS Media 格式
+Comment[zh_TW]=MS 媒體格式
+MimeType=application/x-mplayer2
+Icon=multimedia
+Patterns=*.asx;*.ASX;*.asf;*.ASF;
+X-KDE-AutoEmbed=true
diff --git a/mimetypes/audio/Makefile.am b/mimetypes/audio/Makefile.am
new file mode 100644
index 0000000..f0302f7
--- /dev/null
+++ b/mimetypes/audio/Makefile.am
@@ -0,0 +1,4 @@
+mime_DATA =x-ms-wma.desktop
+mimedir = $(kde_mimedir)/audio
+
+
diff --git a/mimetypes/audio/x-ms-wma.desktop b/mimetypes/audio/x-ms-wma.desktop
new file mode 100644
index 0000000..6d3f508
--- /dev/null
+++ b/mimetypes/audio/x-ms-wma.desktop
@@ -0,0 +1,36 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=MimeType
+MimeType=audio/x-ms-wma
+Icon=audio
+Patterns=*.AVI;*.wma;*.WMA;
+Comment=Microsoft Audio
+Comment[af]=Microsoft Oudio
+Comment[ar]= صوت (من) ميكروسوفت
+Comment[bg]=Microsoft аудио
+Comment[br]=Klevet Microsoft
+Comment[ca]=Àudio de Microsoft
+Comment[cs]=Microsoft audio
+Comment[el]=Ήχος Microsoft
+Comment[es]=Audio de Microsoft
+Comment[fr]=Audio Microsoft (WMA)
+Comment[gl]=Áudio Microsoft
+Comment[he]=שמע של מיקרוסופט
+Comment[hi]=माइक्रोसॉफ्ट ऑडियो
+Comment[hu]=Microsoft Audio fájl
+Comment[ja]=Microsoft オーディオ
+Comment[mk]=Мајкрософт аудио
+Comment[nb]=Microsoft-lydformat
+Comment[pa]=ਮਾਈਕਰੋਸਾਫਟ ਆਡੀਓ
+Comment[pt]=Áudio Microsoft
+Comment[pt_BR]=Áudio da Microsoft
+Comment[sr]=Microsoft-ов аудио
+Comment[sr@Latn]=Microsoft-ov audio
+Comment[sv]=Microsoft ljud
+Comment[ta]=மைக்ரோசாஃப்ட் கேட்பொலி
+Comment[th]=รูปแบบเสียงของ Microsoft
+Comment[tr]=Microsoft Ses
+Comment[uk]=Microsoft аудіо
+Comment[xx]=xxMicrosoft Audioxx
+Comment[zh_CN]=微软音频
+Comment[zh_TW]=Microsoft 音效格式
diff --git a/mimetypes/video/Makefile.am b/mimetypes/video/Makefile.am
new file mode 100644
index 0000000..ab6158b
--- /dev/null
+++ b/mimetypes/video/Makefile.am
@@ -0,0 +1,9 @@
+if need_kde31_compatibility
+ KDE31MIMEDIR = kde31
+endif
+
+SUBDIRS = . $(KDE31MIMEDIR)
+
+mime_DATA = x-ms-wmp.desktop
+mimedir = $(kde_mimedir)/video
+
diff --git a/mimetypes/video/kde31/Makefile.am b/mimetypes/video/kde31/Makefile.am
new file mode 100644
index 0000000..3f9ddea
--- /dev/null
+++ b/mimetypes/video/kde31/Makefile.am
@@ -0,0 +1,4 @@
+mime_DATA =x-ms-wmv.desktop
+mimedir = $(kde_mimedir)/video
+
+
diff --git a/mimetypes/video/kde31/x-ms-wmv.desktop b/mimetypes/video/kde31/x-ms-wmv.desktop
new file mode 100644
index 0000000..1c0b285
--- /dev/null
+++ b/mimetypes/video/kde31/x-ms-wmv.desktop
@@ -0,0 +1,44 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=MimeType
+MimeType=video/x-ms-wmv
+Icon=video
+Patterns=*.avi;*.AVI;*.wmv;*.WMV;
+Comment=Microsoft AVI Video
+Comment[ar]=ميكروسوفت AVIفيديو
+Comment[bg]=Microsoft AVI видео
+Comment[br]=Video Microsoft AVI
+Comment[ca]=Vídeo AVI de Microsoft
+Comment[cs]=Microsoft AVI video
+Comment[cy]=Fideo Microsoft AVI
+Comment[de]=AVI-Video (Microsoft)
+Comment[el]=Βίντεο Microsoft AVI
+Comment[es]=Vídeo AVI de Microsoft
+Comment[fi]=Microsoft AVI -video
+Comment[fr]=Vidéo AVI Microsoft
+Comment[ga]=Físeán Microsoft AVI
+Comment[gl]=Vídeo MS AVI
+Comment[he]=קובץ וידאו AVI של מיקרוסופט
+Comment[hi]=माइक्रोसॉफ्ट एवीआई वीडियो
+Comment[hu]=Microsoft AVI videó
+Comment[it]=Video Microsoft AVI
+Comment[ja]=Microsoft AVI ビデオ
+Comment[ka]=Microsoft AVI ვიდეო
+Comment[mk]=Мајкрософт AVI-видео
+Comment[nb]=Microsoft AVI-video
+Comment[nl]=Microsoft AVI-video
+Comment[pa]=ਮਾਈਕਰੋਸਾਫਟ AVI ਵੀਡਿਓ
+Comment[pt]=Vídeo Microsoft AVI
+Comment[pt_BR]=Vídeo AVI da Microsoft
+Comment[rw]=Microsoft AVI Inyerekanamashusho
+Comment[sr]=Microsoft-ов AVI видео
+Comment[sr@Latn]=Microsoft-ov AVI video
+Comment[sv]=Microsoft AVI-video
+Comment[ta]=மைக்ரோசாஃப்ட் ஏவீஐ ஒளித்தோற்றம்
+Comment[th]=รูปแบบวิดีโอ AVI ของ Microsoft
+Comment[tr]=Microsoft AVI Görüntü
+Comment[uk]=Microsoft AVI-відео
+Comment[xx]=xxMicrosoft AVI Videoxx
+Comment[zh_CN]=微软 AVI 视频
+Comment[zh_TW]=Microsoft AVI 視像
+Comment[zu]=Microsoft AVI Vidiyo
diff --git a/mimetypes/video/x-ms-wmp.desktop b/mimetypes/video/x-ms-wmp.desktop
new file mode 100644
index 0000000..a036373
--- /dev/null
+++ b/mimetypes/video/x-ms-wmp.desktop
@@ -0,0 +1,44 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=MimeType
+MimeType=video/x-ms-wmp
+Icon=video
+Patterns=*.wmp;*.WMP;
+Comment=Microsoft AVI Video
+Comment[ar]=ميكروسوفت AVIفيديو
+Comment[bg]=Microsoft AVI видео
+Comment[br]=Video Microsoft AVI
+Comment[ca]=Vídeo AVI de Microsoft
+Comment[cs]=Microsoft AVI video
+Comment[cy]=Fideo Microsoft AVI
+Comment[de]=AVI-Video (Microsoft)
+Comment[el]=Βίντεο Microsoft AVI
+Comment[es]=Vídeo AVI de Microsoft
+Comment[fi]=Microsoft AVI -video
+Comment[fr]=Vidéo AVI Microsoft
+Comment[ga]=Físeán Microsoft AVI
+Comment[gl]=Vídeo MS AVI
+Comment[he]=קובץ וידאו AVI של מיקרוסופט
+Comment[hi]=माइक्रोसॉफ्ट एवीआई वीडियो
+Comment[hu]=Microsoft AVI videó
+Comment[it]=Video Microsoft AVI
+Comment[ja]=Microsoft AVI ビデオ
+Comment[ka]=Microsoft AVI ვიდეო
+Comment[mk]=Мајкрософт AVI-видео
+Comment[nb]=Microsoft AVI-video
+Comment[nl]=Microsoft AVI-video
+Comment[pa]=ਮਾਈਕਰੋਸਾਫਟ AVI ਵੀਡਿਓ
+Comment[pt]=Vídeo Microsoft AVI
+Comment[pt_BR]=Vídeo AVI da Microsoft
+Comment[rw]=Microsoft AVI Inyerekanamashusho
+Comment[sr]=Microsoft-ов AVI видео
+Comment[sr@Latn]=Microsoft-ov AVI video
+Comment[sv]=Microsoft AVI-video
+Comment[ta]=மைக்ரோசாஃப்ட் ஏவீஐ ஒளித்தோற்றம்
+Comment[th]=รูปแบบวิดีโอ AVI ของ Microsoft
+Comment[tr]=Microsoft AVI Görüntü
+Comment[uk]=Microsoft AVI-відео
+Comment[xx]=xxMicrosoft AVI Videoxx
+Comment[zh_CN]=微软 AVI 视频
+Comment[zh_TW]=Microsoft AVI 視像
+Comment[zu]=Microsoft AVI Vidiyo
diff --git a/mplayer_vo_x11.diff b/mplayer_vo_x11.diff
new file mode 100644
index 0000000..992ce15
--- /dev/null
+++ b/mplayer_vo_x11.diff
@@ -0,0 +1,28 @@
+--- libvo/vo_x11.c.orig Thu Dec 26 18:18:31 2002
++++ libvo/vo_x11.c Thu Dec 26 19:58:49 2002
+@@ -294,12 +294,12 @@
+ bg=WhitePixel( mDisplay,mScreen );
+ fg=BlackPixel( mDisplay,mScreen );
+
+- theCmap=vo_x11_create_colormap(&vinfo);
++ //theCmap=vo_x11_create_colormap(&vinfo);
+
+ xswa.background_pixel=0;
+ xswa.border_pixel=0;
+- xswa.colormap=theCmap;
+- xswamask=CWBackPixel | CWBorderPixel | CWColormap;
++ //xswa.colormap=theCmap;
++ xswamask=CWBackPixel | CWBorderPixel;// | CWColormap;
+
+ #ifdef HAVE_XF86VM
+ if ( vm )
+@@ -321,6 +321,9 @@
+ }
+ else
+ {
++ theCmap=vo_x11_create_colormap(&vinfo);
++ xswa.colormap=theCmap;
++ xswamask=CWBackPixel | CWBorderPixel | CWColormap;
+ if ( vo_window == None )
+ {
+ vo_window=XCreateWindow( mDisplay,mRootWin,
diff --git a/po/Makefile.am b/po/Makefile.am
new file mode 100644
index 0000000..0fa209c
--- /dev/null
+++ b/po/Makefile.am
@@ -0,0 +1 @@
+POFILES = AUTO
diff --git a/po/ar.po b/po/ar.po
new file mode 100644
index 0000000..aead5b2
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,1674 @@
+# translation of kmplayer.po to Arabic
+# translation of kmplayer.po to
+# Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+#
+# Nuriddin S. Aminagha <nuriddin@haydarlinux.org>, 2003.
+# محمد سعد Mohamed SAAD <metehyi@free.fr>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-12-21 21:02+0100\n"
+"Last-Translator: محمد سعد Mohamed SAAD <metehyi@free.fr>\n"
+"Language-Team: Arabic <doc@arabeyes.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "نورالدين شكري أمين آغا,Mohamed SAAD محمد سعد"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "nuriddin@haydarlinux.org, metehyi@free.fr"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "قراءة"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&وقفةؤقت"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&قف"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "زيادة علو الصوت"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "تخفيض علو الصوت"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% تعبئت الخابية"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: جاري القراءة"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: إيقاف القراءة"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "الشبكة"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "&نافذة جديدة"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "أمحي الخ&ط الزمني"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "إ&فتح القرص الرقمي المرئي"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&إتّصل"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "&طرفية التحكم"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "لائحة الق&راءة"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "نمط الحد الادنى"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "نمط ال&تحرير"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "أعرض القائمة المبثقة"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "اظهار قائمة اللغات"
+
+#: kmplayerapp.cpp:580
+#, fuzzy
+msgid "&Keep Width/Height Ratio"
+msgstr "حافظ على نسبة العرض/الطول"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "ملء الشاشة"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "أدوات التحكم ب Arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "فنح نافذة تطبيق جديدة"
+
+#: kmplayerapp.cpp:595
+#, fuzzy
+msgid "Opens an existing file"
+msgstr "فتح ملف موجود مسبقًا"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "فتح ملف مستعمل حديثًا"
+
+#: kmplayerapp.cpp:597
+#, fuzzy
+msgid "Closes the actual source"
+msgstr "تغلق المصدر الحقيقي"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "تخرج من التطبيق"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "تمكين/تعطيل شريط الحالة"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "تمكين/تعطيل شريط القائمة"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "جاهز."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "المصدر"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr ""
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr ""
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr ""
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "جاهز"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "جاري فتح DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "جاري فتح VCD..."
+
+#: kmplayerapp.cpp:817
+#, fuzzy
+msgid "Opening Audio CD..."
+msgstr "جاري فتح VCD..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "جاري فتح الانبوب..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "اقرء من الانبوب"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"ادخل الامر اللذي سيتيح لك استخراج تيار صوتي/مرئي\n"
+"الى stdout. كي يحوًل هذا التيار الى stdin القارء.\n"
+"\n"
+"الامر:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "جاري فتح VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "مقدمة"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "جاري فتح ملف..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "انهاء"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "جاري فتح نافذة تطبيق جديدة..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|كل الملفات"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "فتح ملف"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "حفظ ملف"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"خطأ افتتاح ملف %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "جاري إغلاق ملف..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "جاري الخروج..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "اظهار شريط القوائم مع %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "قراءة تلقائية بعد فتح DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "بدء قراءة DVD بعد فتح DVD مباشرة"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "جهاز DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "المسار إلى جهازك DVD , يجب عليك أن تملك إذن قراءة لهذا الجهاز"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "عناوين"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "فصول"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "لغة الصوت"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "عناوين فرعية"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "المصدر"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr ""
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr ""
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr ""
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "قراءة تلقائية بعد فتح VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "بدء قراءة VCD بعد فتح VCD مباشرة"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "جهاز VCD (قرص مدمج):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"حدد المسار الى جهازك CDROM/DVD ، يجب عليك أن تملك إذن قراءة لهذا الجهاز"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "مسار"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+#, fuzzy
+msgid "Audio CD"
+msgstr "شيفرة الصوت:"
+
+#: kmplayerapp.cpp:2203
+#, fuzzy, c-format
+msgid "Track %1"
+msgstr "مسار"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "انبوب"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "انبوب - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "عنوان الوصل:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "يمكنك حظر الدخول اذا كان عندك اجهزة متعددة للشبكة"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "منفذ الاستماع:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "اقصى عدد الوصلات"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "هبئة"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "شيفرة الصوت:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "معدل ثنائيات الصوت (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "شيفرة الفيديو:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "معدل ثنائيات المرئي (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "الجودة (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "العرض (بكسلات):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "الطول (بكسلات):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "إسمح للنفاذ من:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "حمًل"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "شغل"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "قيد البث"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+#, fuzzy
+msgid "Failed to end ffserver process."
+msgstr "فشل إنهاء عملية KMplayer."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:565
+#, fuzzy
+msgid "Failed to start ffmpeg."
+msgstr "فشل إنهاء عملية KMplayer."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr ""
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "العادة"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "افتح نظام الصوت"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "هندسة لينكس الصوتية المتقدمة (ALSA)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr ""
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr ""
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "هندسة لينكس الصوتية المتقدمة اصدار رقم 0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "هندسة لينكس الصوتية المتقدمة اصدار رقم 0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr ""
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr ""
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr ""
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:106
+#, fuzzy
+msgid "Video background"
+msgstr "مشغل الفيديو:"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr ""
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr ""
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:118
+#, fuzzy
+msgid "Playlist"
+msgstr "قراءة"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "نافذة المعلومات"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "لا يوجد ملف %1"
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "مستوى الصوت يساوي %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:387
+#, fuzzy
+msgid "Play&list"
+msgstr "قراءة"
+
+#: kmplayercontrolpanel.cpp:400
+#, fuzzy
+msgid "&Audio languages"
+msgstr "لغة الصوت"
+
+#: kmplayercontrolpanel.cpp:401
+#, fuzzy
+msgid "&Subtitles"
+msgstr "عناوين فرعية"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "كثافة:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "ال&وان"
+
+#: kmplayercontrolpanel.cpp:420
+#, fuzzy
+msgid "&Configure KMPlayer..."
+msgstr "تهيئ&ة KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+#, fuzzy
+msgid "Playing"
+msgstr "قراءة"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "مسجل %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "قارئى %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "مجهول"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "أ&فصل الإتصال"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+#, fuzzy
+msgid "Connecting"
+msgstr "رفضت الوصلة"
+
+#: kmplayerprocess.cpp:180
+#, fuzzy
+msgid "Failed to end player process."
+msgstr "فشل إنهاء عملية KMplayer."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr ""
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:872
+#, fuzzy
+msgid "Position pattern"
+msgstr "خيارات قراءة DVD"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:877
+#, fuzzy
+msgid "DVD language pattern"
+msgstr "خيارات قراءة DVD"
+
+#: kmplayerprocess.cpp:878
+#, fuzzy
+msgid "DVD subtitle pattern"
+msgstr "خيارات قراءة DVD"
+
+#: kmplayerprocess.cpp:879
+#, fuzzy
+msgid "DVD titles pattern"
+msgstr "خيارات قراءة DVD"
+
+#: kmplayerprocess.cpp:880
+#, fuzzy
+msgid "DVD chapters pattern"
+msgstr "خيارات قراءة DVD"
+
+#: kmplayerprocess.cpp:881
+#, fuzzy
+msgid "VCD track pattern"
+msgstr "خيارات قراءة DVD"
+
+#: kmplayerprocess.cpp:882
+#, fuzzy
+msgid "Audio CD tracks pattern"
+msgstr "خيارات قراءة DVD"
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "حجم الخابية:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "ك. بايت"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr ""
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr ""
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "الخيارات العامة"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "جهاز المرئي:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "جهاز الصوت:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "الإسم:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "العرض:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "الطول:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "لا تبدأ التشغيل فورأً"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "إبدء التشغيل فقط بعد نقر زر بدء التشغيل"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr ""
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "القناة"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "الذبذبة (ميغا هيرتز)"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"أنت على الإستعداد لإزالة هذا الجهاز من قائمة المصدر.\n"
+"المتابعة ؟"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "أكّد"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "السائق:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l or bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "الجهاز:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "المسار إلى جهازك المرئي ، مثل /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "إمسح..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "عام"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "جهاز التلفزة"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "التلفزة"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "التلفزة"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "التلفزة: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "الجهاز موجود حاليًا."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "لم يعثر على جهاز."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr ""
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr ""
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "منفذ الإتصال:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "سلًم المقياس"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "المظهر للاستعمال عند مشاهدة ال-VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "أ&فصل الإتصال"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr ""
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr ""
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr ""
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr ""
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr ""
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr ""
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr ""
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr ""
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr ""
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr ""
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr ""
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr ""
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr ""
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr ""
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr ""
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr ""
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "لم أجد المضيف"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "الإتصال مرفوض"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "المنفذ:"
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr ""
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "لائحة القراءة"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "علو الصوت:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "الملف لفتحه"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "غير مسمَّى"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "لا شيئ"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&أنسخ إلى الحافظة"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "أعرض ال&كلّ"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "التفضيلات"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "المظاهر"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "مخرجات"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "تسجيل"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "قوابس المخرجات"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr ""
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "النافذة"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "حافظ على نسبة القياس"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr ""
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "تذكر قياس النافذة عند الخروج"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "إبدأ دومآ ثابت القياس"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "حلقة تكرار"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "يجعل العرض الحالي يتكرر حلقيآ"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr ""
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "السماح باسقاط الاطارات لكي يتحسن تزامن الصوت مع المرئي"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "لوحة التحكم"
+
+#: pref.cpp:242
+#, fuzzy
+msgid "Show config button"
+msgstr "اظهار أزرار التحكم"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "اظهار زر لائحة القراءة"
+
+#: pref.cpp:245
+#, fuzzy
+msgid "Add a playlist button to the control buttons"
+msgstr "إخفاء تلقائي لأزرار التحكم"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "اظهار زر التسجيل"
+
+#: pref.cpp:247
+#, fuzzy
+msgid "Add a record button to the control buttons"
+msgstr "إخفاء تلقائي لأزرار التحكم"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "اظهار زر البثً"
+
+#: pref.cpp:249
+#, fuzzy
+msgid "Add a broadcast button to the control buttons"
+msgstr "إخفاء تلقائي لأزرار التحكم"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr ""
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "الألوان"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "أأ بب تت"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "الموقع:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "موقع العنصر القابل للقراءة"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr ""
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "استعمل قارئ المرئيات:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "عرض حزام الشبكة"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+#, fuzzy
+msgid "Preferred bitrate:"
+msgstr "معدل الثنائيات المفضل:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "معدل الثنائيات الاقصى:"
+
+#: pref.cpp:401
+#, fuzzy
+msgid "Output file:"
+msgstr "مخرجات"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr ""
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "المصدر الحالي"
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "مسجل"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr ""
+
+#: pref.cpp:419
+msgid "&No"
+msgstr ""
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr ""
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr ""
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "الوقت (ثواني):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "قف التسجيل"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "ابداء التسجيل"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "المصدر الحالي:"
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "نمط"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "مطابق للمصدر"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "العادة"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr ""
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr ""
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr ""
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr ""
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"تقوم بتعيين مشغل الفيديو. المستحسن هو XVideo, أو, إذا لم تكن مدعومة, X11, الذي "
+"هو أبطأ."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "مشغل المرئيات:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "مشغل الصوت:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "سريع"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "جودة تلقائية"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr ""
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr ""
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "التعيين التمهيدي المعتاد"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr ""
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "إستعادة التعيينات ؟"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr ""
+
+#: viewarea.cpp:1360
+#, fuzzy
+msgid "Fullscreen"
+msgstr "ملء الشاشة"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "المقياس:"
diff --git a/po/be.po b/po/be.po
new file mode 100644
index 0000000..17bc956
--- /dev/null
+++ b/po/be.po
@@ -0,0 +1,1628 @@
+# translation of kmplayer.po to Belarusian (Official spelling)
+#
+# Darafei Praliaskouski <komzpa@licei2.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-04-03 19:33+0300\n"
+"Last-Translator: Darafei Praliaskouski <komzpa@licei2.com>\n"
+"Language-Team: Belarusian (Official spelling) <i18n@mova.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>"
+"=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Дарафей Праляскоўскі"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "komzpa@licei2.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr ""
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Паўза"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Спыніць"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Гучней"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Цішэй"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr ""
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr ""
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr ""
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Новае &акно"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Ачысціць &гісторыю"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Злучыцца"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr ""
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr ""
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr ""
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr ""
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr ""
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr ""
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr ""
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr ""
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr ""
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr ""
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Адкрывае нядаўна ўжыты файл"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr ""
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Выходзіць з праграмы"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr ""
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr ""
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Гатовы."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr ""
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr ""
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr ""
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr ""
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr ""
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Яшчэ..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr ""
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Гатовы"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr ""
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr ""
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr ""
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr ""
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr ""
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Адкрыццё файла..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Выйсці"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr ""
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Усе файлы"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Адкрыць файл"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Запісаць файл"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Закрыццё файла..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr ""
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr ""
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr ""
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr ""
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr ""
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr ""
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr ""
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Крыніца"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr ""
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Наступны"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr ""
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Угору"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr ""
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr ""
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Аудыа-CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Дарожка %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Фармат:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Загрузіць"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Запусціць"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr ""
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Аўтаматычна"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Адкрытая гукавая сістэма (OSS)"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Адмысловая архітэктура гуку Linux (ALSA)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr ""
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Аблегчаны гукавы дэман (ESD)"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr ""
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr ""
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr ""
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr ""
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr ""
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr ""
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr ""
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr ""
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr ""
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr ""
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr ""
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Спіс прайгравання"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr ""
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr ""
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Спіс прайгр&авання"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Кантраст:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Яркасць:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Колер:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Насычанасць:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr ""
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Прайграванне"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Невядомы"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Адключаны"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Далучаюся"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr ""
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr ""
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr ""
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "кБ"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr ""
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr ""
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Агульныя параметры"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr ""
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr ""
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr ""
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Назва:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr ""
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr ""
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr ""
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr ""
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr ""
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Канал"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Пацвярджэнне"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr ""
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr ""
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Прылада:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr ""
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr ""
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Агульныя"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr ""
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr ""
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr ""
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr ""
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr ""
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr ""
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr ""
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr ""
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr ""
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr ""
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr ""
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr ""
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr ""
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr ""
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr ""
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr ""
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr ""
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr ""
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr ""
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr ""
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr ""
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr ""
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr ""
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr ""
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr ""
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Порт"
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr ""
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr ""
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Гучнасць:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr ""
+
+#: main.cpp:36
+msgid "file to open"
+msgstr ""
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "безназоўны"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "няма"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr ""
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr ""
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Настаўленні"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr ""
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Вывад"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr ""
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr ""
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr ""
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr ""
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr ""
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Акно"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr ""
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr ""
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Паўтараць"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr ""
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr ""
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr ""
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr ""
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr ""
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr ""
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr ""
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr ""
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr ""
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr ""
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr ""
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Колеры"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr ""
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Адрас:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr ""
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr ""
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr ""
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr ""
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr ""
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr ""
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr ""
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr ""
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr ""
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Не"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr ""
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr ""
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr ""
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr ""
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr ""
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr ""
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Фармат"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr ""
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Асаблівы"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr ""
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr ""
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr ""
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr ""
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr ""
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr ""
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Хутка"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr ""
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr ""
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr ""
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr ""
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr ""
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr ""
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr ""
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Поўны экран"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr ""
diff --git a/po/br.po b/po/br.po
new file mode 100644
index 0000000..ce0a99f
--- /dev/null
+++ b/po/br.po
@@ -0,0 +1,1644 @@
+# KDE breton translation
+# Thierry Vignaud <tvignaud@mandriva.com>, 2004-2005
+msgid ""
+msgstr ""
+"Project-Id-Version: kdeextragear-2/kmplayer.po\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2004-09-20 15:44+0200\n"
+"Last-Translator: Thierry Vignaud <tvignaud@mandriva.com>\n"
+"Language-Team: br <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Thierry Vignaud, Jañ-Mai Drapier"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "tvignaud@mandriva.com, jdrapier@club-internet.fr"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "S&eniñ"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Ehan"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Plaenaozañ"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Kreskiñ an nerzh"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Izelaat an nerzh"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr ""
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer : emaon o seniñ"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "GWIAD"
+
+#: kmplayerapp.cpp:234
+#, fuzzy
+msgid "Most Recent"
+msgstr "Nevez"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Prenestr &Nevez"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Goullonderiñ an &istor"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Digeriñ an DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Digeriñ ar VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+#, fuzzy
+msgid "&Open Audio CD"
+msgstr "&Digeriñ ar VCD"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Kevreañ"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "L&etrin"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Rollc'hoa&ri"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr ""
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "&Mod aozañ"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Disoukez ar meuziad yezh"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr ""
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "Skramm &leun"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr ""
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr ""
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Digeriñ ur restr a zo c'hoazh"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr ""
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr ""
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Kuitaat a ra ar meziant"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Kuzhat/Diskouez ar varenn stad"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr ""
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Prest."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "T&arzh"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "Furcher &DVD"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "CD &klevet"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Eilañ amañ"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Mui ..."
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "Furchal an DVD ..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Prest"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Emaon o tigeriñ an DVD ..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Emaon o tigeriñ ar VCD ..."
+
+#: kmplayerapp.cpp:817
+#, fuzzy
+msgid "Opening Audio CD..."
+msgstr "Emaon o tigeriñ ar VCD ..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Emaon o tigeriñ an VDR ..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Digoradur"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Emaon o tigeriñ ur restr ..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Er-maez"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr ""
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Pep restr"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Digeriñ ur Restr"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Enrollañ ar restr"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Fazi en ur digeriñ ar restr %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Emaon o serriñ ar restr ..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Emaon o kuitaat ..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Diskouez barenn al lañser gant %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "D&ilec'hiañ amañ"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Strollad nevez"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&Lemel an dra"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Pignit"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "&Diskennit"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Trobarzhell an DVD :"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Titloù"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Pennadoù"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "Yezh &son"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Istitloù"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Tarzh"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&A heul"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Gwrizienn"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Huel"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Trobarzhell VCD (CDROM) device :"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Roudenn "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "CD klevet"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Roudenn %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Korzenn gehentiñ"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Furmad :"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Kodek klevet :"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Feur klevet (kbit) :"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Kodek video :"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Feur video (kbit) :"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Perzh-mat (1-31) :"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Ledander (piksel) :"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Uhelder (piksel) :"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Kargañ"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Loc'hañ"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Skignañ"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profiloù"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"N'hell ket bet loc'het ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "N'hell ket bet loc'het ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "ServijerFF"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Emgefreek"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound System"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr ""
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr ""
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Liv drekleur ar roll tonioù"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Liv war-c'horre ar roll tonioù"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Liv drekleur al letrin"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Tra bev ar roll tonioù"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Liv war-c'horre al letrin"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Liv drekleur video"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Drekleur ar gorre gwell"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Drekleur ar brenestr titouroù"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Liv war-c'horre prenestr an titouroù"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Roll tonioù"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Prenestr titouriñ"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "N'eus ket ur restr %1."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "An dolzennad zo %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Seniñ gant"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Let&rin"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Roll tonioù"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Yezhioù &son"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Istitloù"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Dargemm :"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Tarzhad :"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "&Livioù"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Kefluniañ KMPlayer ..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "N'eo ket bev"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Krubuilh"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Emaon o seniñ"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Soner %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Dianav"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Digevreet"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Emaon o kevreañ"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr ""
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Sil ment"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Sil krubuilh"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Sil lec'hiadur"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Sil meneger"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Sil yezh an DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Sil istitl an DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Sil titloù an DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Sil roudenn VCD"
+
+#: kmplayerprocess.cpp:882
+#, fuzzy
+msgid "Audio CD tracks pattern"
+msgstr "Sil roudenn VCD"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "Urzhiad MPlayer :"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Arventennoù al linenn urzhiañ :"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Ment ar grubuilh :"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "ko"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr ""
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr ""
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Dibarzhoù hollek"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Trobarzhell video :"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Trobarzhell klevet :"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Anv :"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Ledander :"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Uhelder :"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Ne senit ket diouzhtu"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr ""
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr ""
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanol"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Frekañs (Mhz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Kadarnaat"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Sturier :"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr ""
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Trobarzhell :"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr ""
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Dezrannit ..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Pennañ"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "trobarzhell tv"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV : "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "C'hoazh eo an drobarzhell."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Trobarzhell ebet."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Porzh XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Porzh gehentiñ :"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Skeulaet"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Dig&evreañ"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "Stokell VDR Mat eo"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr ""
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr ""
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "Stokell VDR ruz"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "Stokell VDR gwer"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "Stokell VDR melen"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "Stokell VDR glas"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "Stokell VDR 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "Stokell VDR 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "Stokell VDR 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "Stokell VDR 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "Stokell VDR 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "Stokell VDR 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "Stokell VDR 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "Stokell VDR 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "Stokell VDR 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "Stokell VDR 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "N'eo ket bet kavet an ostiz"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Kevreadenn disteuleret"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Urzhiad VDR diouzoc'h"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Porzh "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Rollc'hoari"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Tolzennad :"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "restr da zigeriñ"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "anv ebet"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "hini ebet"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Eilañ d'ar golver"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Diskouez an holl re"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Dibaboù"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr ""
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Ezkas"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Oc'h enrollañ"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Lugentoù ezkas"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr ""
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Prenestr"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr ""
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Ensoc'hañ e barlenn ar reizhiad"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "A-zol"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr ""
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr ""
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Panell ren"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Diskouez nozel ar gefluniadur"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Diskouez nozel ar roll tonioù"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr ""
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Diskouez nozel an enrolladur"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr ""
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Diskouez an nozel skignañ"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr ""
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr ""
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Livioù"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Lec'hiadur :"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Istitl :"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Implijit ar soner film :"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/e"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Feur uhelañ :"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Restr ezkas :"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr ""
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Tarzh red :"
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Flëut pigos"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr ""
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&N'eo ket"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr ""
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "G&oude"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Eur (Eilennoù) :"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr ""
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr ""
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Tarzh red :"
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Furmadiñ"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr ""
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Diouzhoc'h"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Arventennoù Mencoder :"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Arventennoù FFMpeg :"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Sturier video :"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Sturier klevet :"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Buan"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr ""
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr ""
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr ""
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr ""
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr ""
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Adkorañ ar gefluniadur ?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Skramm leun"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Skeulaet :"
+
+#~ msgid "Disks"
+#~ msgstr "Pladennoù"
+
+#~ msgid "empty"
+#~ msgstr "goullo"
+
+#~ msgid "tv://"
+#~ msgstr "tv://"
+
+#~ msgid "Could not start process "
+#~ msgstr "N'em eus ket loc'hañ an argerzh."
diff --git a/po/bs.po b/po/bs.po
new file mode 100644
index 0000000..8b58de9
--- /dev/null
+++ b/po/bs.po
@@ -0,0 +1,1842 @@
+# translation of kmplayer.po to Bosnian
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# Senad Uka <senaduka"bih.net.ba>, 2003
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2003-08-09 16:20+0200\n"
+"Last-Translator: Senad Uka <senaduka@bih.net.ba>\n"
+"Language-Team: Bosnian <lokal@lugbih.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.1\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Senad Uka (Strašni :)))"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "senaduka@bih.net.ba"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Izvedi"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pauza"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Stop"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr ""
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr ""
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% Popuni keš"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Izvodi"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Prestani izvođenje"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr ""
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr ""
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Novi prozor"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr ""
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "O&tvori DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Otvori VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+#, fuzzy
+msgid "&Open Audio CD"
+msgstr "&Otvori VCD"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Otvori \"pipe\"..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr ""
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr ""
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr ""
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr ""
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr ""
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:579
+#, fuzzy
+msgid "Show Language Menu"
+msgstr "Audio &jezik"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Održi odnos širina/dužina"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Cijeli ekran"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Kontrola umjetnina"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Otvara novi aplikacijski prozor"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Otvara postojeću datoteku"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Otvara nedavno korištenu datoteku"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Zatvara izvor"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Izlaz iz aplikacije"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Uključuje/isključuje statusnu traku"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Uključuje/isključuje traku sa izbornicima"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Spreman."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "Iz&vor"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr ""
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr ""
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "Postavke za izvođenje DVD-a"
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Spreman"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Otvaram DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Otvaram VCD..."
+
+#: kmplayerapp.cpp:817
+#, fuzzy
+msgid "Opening Audio CD..."
+msgstr "Otvaram VCD..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Otvaram \"pipe\" ..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Čitaj iz \"pipe-a\""
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+#, fuzzy
+msgid "Opening VDR..."
+msgstr "Otvaram DVD..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr ""
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Otvaram datoteku..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr ""
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Otvaram novi aplikacijski prozor ..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Sve datoteke"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Otvori datoteku"
+
+#: kmplayerapp.cpp:1333
+#, fuzzy
+msgid "Save File"
+msgstr "Otvori datoteku"
+
+#: kmplayerapp.cpp:1337
+#, fuzzy
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr "Otvaram datoteku..."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Zatvaram datoteku..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Izlazim..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Prikazi traku sa izbornicima sa %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Automatsko izvođenje poslje otvaranja DVD-a"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Počinje izvođenje DVD a odmah poslije otvaranja"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD uređaj"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Put do DVD uređaja, morate imati dozvolu za sa čitanje ovog uređaja (+r)"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Naslovi"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Poglavlja"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "Audio &jezik"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Podnaslov"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Izvor"
+
+#: kmplayerapp.cpp:2006
+#, fuzzy
+msgid "DVDNav"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr ""
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr ""
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr ""
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Automatsko izvođenje poslije otvaranja VCD-a"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Počinje izvođenje VCD-a odmah poslje otvaranja VCD-a"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CDROM) uređaj"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr "Put do vašeg CDROM/DVD uređaja, morate imati dozvolu za čitanje"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+#, fuzzy
+msgid "Track "
+msgstr "&Staze"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+#, fuzzy
+msgid "Audio CD"
+msgstr "Audio kodek"
+
+#: kmplayerapp.cpp:2203
+#, fuzzy, c-format
+msgid "Track %1"
+msgstr "&Staze"
+
+#: kmplayerapp.cpp:2254
+#, fuzzy
+msgid "Pipe"
+msgstr "Pipe - %1"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Pipe - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Adresa povezivanja:"
+
+#: kmplayerbroadcast.cpp:162
+#, fuzzy
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Ako imate više mrežnih uređaja, možete ograničiti pristup."
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Port na kojem se sluša:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Maksimalni broj konekcija:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Maksimalna propusnost (kbit)"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Privremena datoteka"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Veličina privremene datoteke (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Format:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Samo avi, mpeg i rm se mogu izvoditi pomoću mplayer-a"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Audio kodek"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Audio bit rate (kbit)"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Audio učestalost uzorka(Hz)"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Video kodek"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Video bit rate (kbit)"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Kvalitet (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Učestalost sličica (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Veličina gop-a (šta god to znači):"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Širina (piksela):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Dužina (piksela):"
+
+#: kmplayerbroadcast.cpp:225
+#, fuzzy
+msgid "Allow access from:"
+msgstr "Dozvoli pristup od:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+"'IP adresa' ili 'početna IP adresa - krajnja IP adresa' za više IP adresa"
+
+#: kmplayerbroadcast.cpp:232
+#, fuzzy
+msgid "Host/IP or IP Range"
+msgstr "Host/IP ili Interval IP adresa"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Emitovanje"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Nisam uspio da ugasim ffserver proces."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Nisam uspio pokrenuti ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Nisam uspio pokrenuti ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr ""
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "Ručno"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr ""
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr ""
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr ""
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr ""
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr ""
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr ""
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr ""
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr ""
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr ""
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr ""
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr ""
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr ""
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:106
+#, fuzzy
+msgid "Video background"
+msgstr "Video kodek"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr ""
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr ""
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:118
+#, fuzzy
+msgid "Playlist"
+msgstr "&Izvedi"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr ""
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr ""
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, fuzzy, c-format
+msgid "Volume is %1"
+msgstr "Glasnoća:"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:387
+#, fuzzy
+msgid "Play&list"
+msgstr "&Izvedi"
+
+#: kmplayercontrolpanel.cpp:400
+#, fuzzy
+msgid "&Audio languages"
+msgstr "Audio &jezik"
+
+#: kmplayercontrolpanel.cpp:401
+#, fuzzy
+msgid "&Subtitles"
+msgstr "&Podnaslov"
+
+#: kmplayercontrolpanel.cpp:402
+#, fuzzy
+msgid "Contrast:"
+msgstr "Format:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Podesi KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+#, fuzzy
+msgid "Playing"
+msgstr "&Izvedi"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1402
+#, fuzzy
+msgid "Player %1 %2"
+msgstr "KMPlayer"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr ""
+
+#: kmplayerprocess.cpp:180
+#, fuzzy
+msgid "Failed to end player process."
+msgstr "Nisam uspio ugasiti MPlayer proces."
+
+#: kmplayerprocess.cpp:377
+#, fuzzy
+msgid "&MPlayer"
+msgstr "KMPlayer"
+
+#: kmplayerprocess.cpp:870
+#, fuzzy
+msgid "Size pattern"
+msgstr "Uzorak veličine:"
+
+#: kmplayerprocess.cpp:871
+#, fuzzy
+msgid "Cache pattern"
+msgstr "Uzorak keša:"
+
+#: kmplayerprocess.cpp:872
+#, fuzzy
+msgid "Position pattern"
+msgstr "Uzorak veličine:"
+
+#: kmplayerprocess.cpp:873
+#, fuzzy
+msgid "Index pattern"
+msgstr "Uzorak indeksa:"
+
+#: kmplayerprocess.cpp:874
+#, fuzzy
+msgid "Reference URL pattern"
+msgstr "Uzorak keša:"
+
+#: kmplayerprocess.cpp:875
+#, fuzzy
+msgid "Reference pattern"
+msgstr "Uzorak keša:"
+
+#: kmplayerprocess.cpp:876
+#, fuzzy
+msgid "Start pattern"
+msgstr "Start uzorak:"
+
+#: kmplayerprocess.cpp:877
+#, fuzzy
+msgid "DVD language pattern"
+msgstr "DVD jezični uzorak"
+
+#: kmplayerprocess.cpp:878
+#, fuzzy
+msgid "DVD subtitle pattern"
+msgstr "DVD uzorak podtitlova"
+
+#: kmplayerprocess.cpp:879
+#, fuzzy
+msgid "DVD titles pattern"
+msgstr "DVD uzorak titlova:"
+
+#: kmplayerprocess.cpp:880
+#, fuzzy
+msgid "DVD chapters pattern"
+msgstr "DVD uzorak poglavlja"
+
+#: kmplayerprocess.cpp:881
+#, fuzzy
+msgid "VCD track pattern"
+msgstr "Uzorak VCD staza"
+
+#: kmplayerprocess.cpp:882
+#, fuzzy
+msgid "Audio CD tracks pattern"
+msgstr "Uzorak VCD staza"
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "Unesi komandu:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Dodatni komandnolinijski argumenti:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Veličina keša:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Izgradi novi indeks kad je moguće"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Dozvoljava pretraživanje u indeksiranim datotekama (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Opće postavke"
+
+#: kmplayerprocess.cpp:978
+#, fuzzy
+msgid "MPlayer"
+msgstr "KMPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr ""
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr ""
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Video uređaj"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Audio uređaj"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Ime:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Dužina:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Visina:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Nemoj odmah izvoditi"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Počni sa izvođenjem samo poslije klikanja na Izvedi (play) dugme"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norma:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanal"
+
+#: kmplayertvsource.cpp:100
+#, fuzzy
+msgid "Frequency (MHz)"
+msgstr "Frekvencija"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Ovaj uređaj će biti obrisan iz \"Izvori\" izbornika\n"
+"Nastaviti?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Potvrdi"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Drajver"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "lažni, v4l ili bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Uređaj:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Put do vašeg video uređaja, npr. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Skeniraj..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Opće"
+
+#: kmplayertvsource.cpp:246
+#, fuzzy
+msgid "tv device"
+msgstr "DVD uređaj"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Uređaj već prisutan"
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Uređaj nije pronađen"
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr ""
+
+#: kmplayervdr.cpp:90
+#, fuzzy
+msgid "XVideo port"
+msgstr "Video kodek"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr ""
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr ""
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr ""
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr ""
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+#, fuzzy
+msgid "VDR"
+msgstr "VCD"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr ""
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+#, fuzzy
+msgid "VDR Key Channels"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:250
+#, fuzzy
+msgid "VDR Key Menu"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:251
+#, fuzzy
+msgid "VDR Key Red"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:252
+#, fuzzy
+msgid "VDR Key Green"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:253
+#, fuzzy
+msgid "VDR Key Yellow"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:254
+#, fuzzy
+msgid "VDR Key Blue"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:259
+#, fuzzy
+msgid "VDR Key 0"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:260
+#, fuzzy
+msgid "VDR Key 1"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:261
+#, fuzzy
+msgid "VDR Key 2"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:262
+#, fuzzy
+msgid "VDR Key 3"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:263
+#, fuzzy
+msgid "VDR Key 4"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:264
+#, fuzzy
+msgid "VDR Key 5"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:265
+#, fuzzy
+msgid "VDR Key 6"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:266
+#, fuzzy
+msgid "VDR Key 7"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:267
+#, fuzzy
+msgid "VDR Key 8"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:268
+#, fuzzy
+msgid "VDR Key 9"
+msgstr "Kanal"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr ""
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr ""
+
+#: kmplayervdr.cpp:752
+#, fuzzy
+msgid "X&Video"
+msgstr "Video kodek"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr ""
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Glasnoća:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "datoteka koju treba otvoriti"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr ""
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr ""
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr ""
+
+#: pref.cpp:67
+#, fuzzy
+msgid "Preferences"
+msgstr "KMPlayer postavke"
+
+#: pref.cpp:82
+#, fuzzy
+msgid "Looks"
+msgstr "Ponavljaj"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Izlaz"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr ""
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr ""
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr ""
+
+#: pref.cpp:124
+#, fuzzy
+msgid "Output Plugins"
+msgstr "Plugini za izlaz"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Postprocesiranje"
+
+#: pref.cpp:208
+#, fuzzy
+msgid "Window"
+msgstr "Novi prozor"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Zadrži odnos veličine"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Kad je uključeno, film će zadržati odnos dimenzija\n"
+"kada prozor promijeni veličinu."
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr ""
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+#, fuzzy
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Kad je uključeno, film će zadržati odnos dimenzija\n"
+"kada prozor promijeni veličinu."
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Ponavljaj"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Čini da se trenutni film ponavlja"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Dozvoli ispuštanje sličica"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Dozvoljava ispuštanje pojedinih sličica radi bolje audio/video sinhronizacije"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr ""
+
+#: pref.cpp:242
+#, fuzzy
+msgid "Show config button"
+msgstr "Prikaži kontrolna dugmad"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+#, fuzzy
+msgid "Show playlist button"
+msgstr "Prikaži dugme za emitovanje"
+
+#: pref.cpp:245
+#, fuzzy
+msgid "Add a playlist button to the control buttons"
+msgstr "Dodaje dugme za emitovanje u kontrolna dugmad"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Prikaži dugme za snimanje"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Dodaj dugme za snimanje u kontrolnu dugmad"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Prikaži dugme za emitovanje"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Dodaje dugme za emitovanje u kontrolna dugmad"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Vrijeme naprijed/nazad pretraživanja"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr ""
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr ""
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr ""
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+#, fuzzy
+msgid "Sub title:"
+msgstr "&Podnaslov"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr ""
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr ""
+
+#: pref.cpp:379
+#, fuzzy
+msgid "Maximum bitrate:"
+msgstr "Maksimalna propusnost (kbit)"
+
+#: pref.cpp:401
+#, fuzzy
+msgid "Output file:"
+msgstr "Izlaz"
+
+#: pref.cpp:406
+#, fuzzy
+msgid "Start &Recording"
+msgstr "Start uzorak:"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr ""
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr ""
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr ""
+
+#: pref.cpp:419
+msgid "&No"
+msgstr ""
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr ""
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr ""
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr ""
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr ""
+
+#: pref.cpp:452
+#, fuzzy
+msgid "Start Recording"
+msgstr "Start uzorak:"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr ""
+
+#: pref.cpp:543
+#, fuzzy
+msgid "Format"
+msgstr "Format:"
+
+#: pref.cpp:544
+#, fuzzy
+msgid "Same as source"
+msgstr "Izvor"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Ručno"
+
+#: pref.cpp:548
+#, fuzzy
+msgid "Mencoder arguments:"
+msgstr "Dodatni komandnolinijski argumenti:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr ""
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+#, fuzzy
+msgid "FFMpeg arguments:"
+msgstr "Dodatni komandnolinijski argumenti:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr ""
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Podešava video drajver. Preporučen je XVideo, ili, ako nije podržan, X11 - koji "
+"je sporiji."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Video drajver"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Audio drajver"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Omogući korištenje filtera za postprocesiranje"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Onemogući psotprocesiranje kada se gleda TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Brzi"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Horizontalno deblokiranje"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Auto kvalitet"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Chrominance filtriranje"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Vertikalno deblokiranje"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Dering filter"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Auto osvjetljenost/kontrast"
+
+#: pref.cpp:753
+#, fuzzy
+msgid "Stretch luminance to full range"
+msgstr "Razvuci osvjetljenost na najviše"
+
+#: pref.cpp:762
+#, fuzzy
+msgid "Temporal noise reducer"
+msgstr "Vremenski smanjivač buke:"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Linearni \"blend deinterlacer\""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Linearni \"interpolating deinterlacer\""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Kubični \"interpolating deinterlacer\""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Median deinterlacer"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "FFmpeg deinterlacer"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Omogući mplayerove uobičajene filtere za postprocesiranje"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr "Omogući ručno izabrani filter za postprocesiranje"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Omogući mplazerov brzi filter za postprocesiranje"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "Filter se koristi ako ima dovoljno procesorske snage"
+
+#: pref.cpp:828
+#, fuzzy
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Razvlači osvjetljenost na puni raspon (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Ručno napravljeni odabir"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Deinterlaciram"
+
+#: pref.cpp:837
+#, fuzzy
+msgid "Reset Settings?"
+msgstr "Opcionalna podešavanja"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Sve će vaše postavke biti prepisane uobičajenim.\n"
+"Molim potvrdite.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr ""
+
+#: viewarea.cpp:1360
+#, fuzzy
+msgid "Fullscreen"
+msgstr "&Cijeli ekran"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "Filter se koristi ako ima dovoljno procesorske snage"
+
+#, fuzzy
+#~ msgid "Could not start process "
+#~ msgstr "Ne mogu pokrenuti MPlayer"
+
+#~ msgid "postProcessing"
+#~ msgstr "postProcesiranje"
+
+#~ msgid "disablePostProcessingAutomatically"
+#~ msgstr "onemogućiPostProcesiranjeAutomatski"
+
+#~ msgid "Ok"
+#~ msgstr "U redu"
+
+#, fuzzy
+#~ msgid "Channels"
+#~ msgstr "Kanal"
+
+#, fuzzy
+#~ msgid "Setup"
+#~ msgstr "&Stop"
+
+#, fuzzy
+#~ msgid "Red"
+#~ msgstr "Spreman"
+
+#, fuzzy
+#~ msgid "Custom ..."
+#~ msgstr "Ručno"
+
+#~ msgid "&Show Console Output"
+#~ msgstr "&Prikaži izlaz konzole"
+
+#~ msgid "Show console output"
+#~ msgstr "Prikaži izlaz konzole"
+
+#~ msgid "Shows output from mplayer before and after playing the movie"
+#~ msgstr "Prikazuje izlaz mplayer-a prije i poslije izvođenja filma"
+
+#, fuzzy
+#~ msgid "Output Pattern Matching"
+#~ msgstr "Pogađanje uzoraka"
+
+#~ msgid "Small buttons will be shown above statusbar to control movie"
+#~ msgstr "Mala dugmad će biti prikazana iznad statusne trake za kontrolu filma"
+
+#~ msgid "Auto hide control buttons"
+#~ msgstr "Automatski sakri kontrolna dugmad"
+
+#~ msgid "When checked, control buttons will get hidden automatically"
+#~ msgstr "Kada je uključeno, kontrolna dugmad će biti sakrivena automatski"
+
+#~ msgid "Show position slider"
+#~ msgstr "Pokaži klizač pozicije"
+
+#~ msgid "When enabled, will show a seeking slider under the control buttons"
+#~ msgstr "Kad je uključeno, prikazaće se klizač za pretraživanje ispod kontrolnih dugmadi"
+
+#~ msgid "KMPlayer: Error"
+#~ msgstr "KMPlayer: Greška"
+
+#, fuzzy
+#~ msgid "Advanced (MPlayer)"
+#~ msgstr "Napredno"
+
+#~ msgid "URL:"
+#~ msgstr "URL: "
+
+#~ msgid "Modem (32k)"
+#~ msgstr "Modem (32k)"
+
+#~ msgid "ISDN (64k)"
+#~ msgstr "ISDN (64k)"
+
+#~ msgid "ISDN2 (128k)"
+#~ msgstr "ISDN2 (128k)"
+
+#~ msgid "LAN (1024k)"
+#~ msgstr "LAN (1024k)"
+
+#~ msgid "Broadcasting (ffserver)"
+#~ msgstr "Emitovanje (ffserver)"
+
+#~ msgid "ACL"
+#~ msgstr "ACL"
+
+#~ msgid "Optimize for:"
+#~ msgstr "Optimiziraj za:"
+
+#~ msgid "Leave field empty for default with this format"
+#~ msgstr "Ostavite polje prazno za uobičajenu postavku za ovaj format"
+
+#~ msgid "VCD Playing Options"
+#~ msgstr "Postavke za izvođenje VCD-a"
+
+#~ msgid "TV Options"
+#~ msgstr "TV postavke"
+
+#~ msgid "Access Lists"
+#~ msgstr "Lista pristupa"
+
+#~ msgid "Video & Audio Output Options"
+#~ msgstr "Postavke video i audio izlaza"
+
+#~ msgid "Advanced Options"
+#~ msgstr "Napredne postavke"
+
+#~ msgid "Postprocessing Options"
+#~ msgstr "Opcije postprocesiranja"
+
+#~ msgid "Failed to end ffmpeg process."
+#~ msgstr "Nisam uspio da ugasim ffmpeg proces"
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..5437b9d
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,1679 @@
+# translation of kmplayer.po to Catalan
+# Antoni Bella Pérez <bella5@teleline.es>, 2003, 2005, 2006, 2007.
+# Albert Astals Cid <astals11@terra.es>, 2004, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-02-26 12:53+0100\n"
+"Last-Translator: Antoni Bella Pérez <bella5@teleline.es>\n"
+"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Antoni Bella Pérez"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "bella5@teleline.es"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Reprodueix"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pausa"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "A&tura"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Apuja el volum"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Abaixa el volum"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% el cau és ple"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: S'està reproduint"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Atura la reproducció"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Més recent"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Repertoris persistents"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "&Finestra nova"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Neteja la &història"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Obre DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Obre VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Obre CD àudio"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Obre contingut..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Connecta"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "C&onsola"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Re&produeix la llista"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Mode mínim"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "Mode d'&edició"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Sincronitza a&mb el repertori"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Mostra el menú emergent"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Mostra el menú de l'idioma"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Mantenir la proporció amplada/alçada"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "Pantalla &completa"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Control &Arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Obre una nova finestra de l'aplicació"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Obre un fitxer ja existent"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Obre un fitxer usat recentment"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Tanca la font actual"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Surt de l'aplicació"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Habilita/deshabilita la barra d'estat"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Habilita/deshabilita la barra de menú"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Llest."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Font"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "Navegador de &DVD"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "CD &àudio"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Afegeix a la llista"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Afegeix al nou &grup"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Copia aquí"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "&Vídeo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Més..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "Navega pel DVD..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Llest"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "S'està obrint el DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "S'està obrint el VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "S'està obrint CD d'àudio..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "S'està obrint el contingut..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Llegeix des del contingut"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Introduïu un comandament que enviarà un flux d'àudio/vídeo a la sortida\n"
+"estàndard. Aquest serà enviat a l'entrada estàndard del reproductor.\n"
+"\n"
+"Comandament:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "S'està obrint el VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Intro"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "S'està obrint el fitxer..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Surt"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "S'està obrint una nova finestra de l'aplicació..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Tots els fitxers"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Obre fitxer"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Desa fitxer"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Error mentre s'obria el fitxer %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "S'està tancant el fitxer..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "S'està sortint..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Mostra la barra de menú amb %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Mou aquí"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Grup nou"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "Es&borra ítem"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Mou amunt"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Mou a&vall"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Reprodueix automàticament després d'obrir un DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Inicia la reproducció DVD després d'obrir-lo correctament"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Dispositiu DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "Ruta cap al vostre dispositiu DVD, haureu de tenir permís de lectura"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Discs òptics"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - Disc compacte d'àudio"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Disc compacte de vídeo"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Disc de vídeo digital"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Títols"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Capítols"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&Idioma de l'àudio"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Subtítols"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Font"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Següent"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "A&rrel"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Amunt"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Reprodueix automàticament després d'obrir un VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Inicia la reproducció VCD després d'obrir-lo correctament"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Dispositiu VCD (CDROM):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Ruta cap al vostre dispositiu CDROM/DVD, haureu de tenir permís de lectura"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Pistes"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "CD àudio"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Pista %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Contingut"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Contingut - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Adreça bind:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Si teniu múltiples dispositius de xarxa, podeu limitar-ne l'accés"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Escolta al port:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Màxim de connexions:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Màxim ample de banda (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Fitxer temporal d'alimentació:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Mida del fitxer d'alimentació (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Format:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "L'mplayer tan sols reprodueix avi, mpeg i rm"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Còdec de l'àudio:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Tassa de bits de so (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Freqüència de mostreig de l'àudio (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Còdec de vídeo:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Tassa de bits de vídeo (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Qualitat (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Freqüència de refresc (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Mida optima:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Amplada (píxels):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Alçada (píxels):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Permetre l'accés des de:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "\"IP única\" o \"primera_IP última_IP\" per als rangs d'IP"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Màquina/IP o rang d'IP"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Càrrega"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Inici"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Difusió"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Perfils"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "No ha estat possible finalitzar el procés ffserver."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"No ha estat possible iniciar el procés ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "No ha estat possible iniciar el procés ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Auto"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Sistema de so obert (OSS)"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia per capes"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Arquitectura avançada de so Linux"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Sintetitzador anàleg de temps real"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "Connector de l'equip d'àudio JACK"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Dimoni de so de primer pla"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Arquitectura avançada de so Linux v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Arquitectura avançada de so Linux v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Usa els valors per omissió del programa base"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Repertori al darrera"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Repertori al davant"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Consola al darrera"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Ítem actiu al repertori"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Consola al davant"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Vídeo al darrera"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Àrea de vista al darrera"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Finestra informativa al darrera"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Finestra informativa al davant"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Repertori"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Finestra informativa"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "El fitxer %1 no existeix."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "El fitxer per a subtítols %1 no existeix."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "El volum és %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "Re&produeix amb"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Con&sola"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Repertori"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Idiomes de l'à&udio"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Subtítols"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Contrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Brillantor:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Matís:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Saturació:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Co&lors"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Configura KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Edita í&tem del repertori"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "No s'està executant"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "S'està desant al cau"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "S'està reproduint"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Gravar %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Reproduir %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Desconegut"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "S'està desconnectat"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "S'està connectant"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "No ha estat possible finalitzar el procés reproducció."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Patró de mida"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Patró de cau"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Patró de posició"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Patró de l'índex"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Patró URL de referència"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Patró de referència"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Patró de l'inici"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Patró de l'idioma del DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Patró de subtítols del DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Patró de títols del DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Patró de capítols del DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Patró de pistes de l'VCD"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Patró de pistes del CD àudio"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "Comandament de MPlayer:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Arguments addicionals de la línia de comandaments:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Mida del cau:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Genera un nou índex quan sigui possible"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Permet cercar en fitxers indexats (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Opcions generals"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Dispositiu de vídeo:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Dispositiu d'àudio:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Nom:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Amplada:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Alçada:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "No reproduir immediatament"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr ""
+"Tan sols iniciar la reproducció després de fer clic al botó de reproducció"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norma:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Canal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Freqüència (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Us disposeu a eliminar aquest dispositiu del menú Font.\n"
+"S'ha de continuar?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Confirma"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Controlador:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l o bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Dispositiu:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Ruta cap al vostre dispositiu de vídeo, p.ex. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Escaneja..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "General"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "Dispositiu de TV"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Televisió"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "El dispositiu ja està present."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "No s'ha trobat cap dispositiu."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Port de XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Port base de la extensió de X Video.\n"
+"Si es deixa per omissió (0), s'usarà el primer port disponible. Tot i que si es "
+"disposa de vàries instàncies de XVideo, potser haureu d'indicar aquí el port a "
+"usar.\n"
+"Per a més informació mireu la sortida de 'xvinfo'"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Port de comunicació:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Port de comunicació amb el VDR. Per omissió és el 2001.\n"
+"Si useu un altre port, amb l'opció '-p' de 'vdr', també l'haureu d'indicar "
+"aquí."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Escalat"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Aspecte a usar quan es veu el VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Des&connecta"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "Tecla de Amunt del VDR"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "Tecla de Avall del VDR"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "Tecla de Retorn del VDR"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "Tecla de Bé del VDR"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "Tecla de Configuració del VDR"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "Tecla de canals del VDR"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "Tecla de Menú del VDR"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "Tecla Vermella del VDR"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "Tecla Verd del VDR"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "Tecla Groga del VDR"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "Tecla Blava del VDR"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "Tecla 0 del VDR"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "Tecla 1 del VDR"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "Tecla 2 del VDR"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "Tecla 3 del VDR"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "Tecla 4 del VDR"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "Tecla 5 del VDR"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "Tecla 6 del VDR"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "Tecla 7 del VDR"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "Tecla 8 del VDR"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "Tecla 9 del VDR"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "No s'ha trobat el servidor remot"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Connexió refusada"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Comandament a mida del VDR"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Podeu enviar comandaments al VDR.\n"
+"Introduïu 'HELP' per a veure una llista de comandaments.\n"
+"Podeu veure la resposta del VDR a la finestra de la consola.\n"
+"\n"
+"Comandament VDR:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Repertori"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Volum:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "fitxer a obrir"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "sense nom"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "cap"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[atributs]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Copia al portapapers"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Mostra-ho tot"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Preferències"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Aparença"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Sortida"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Gravació"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Connectors de sortida"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Post-processament"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Finestra"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Mantenir les proporcions"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Si està marcat, la pel·lícula mantindrà les seves proporcions\n"
+"quan es redimensioni la finestra"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Ancora a la safata del sistema"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Quan està marcada, s'afegirà una icona de KMPlayer a la safata del sistema.\n"
+"Quan hi feu clic, ocultarà la finestra principal de KMPlayer i manllevarà el "
+"botó de KMPlayer de la barra de tasques."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Auto amida a la grandària dels vídeos"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Quan està marcat, KMPlayer amidarà el vídeo\n"
+"a les seves mides originals"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "En sortir recorda la grandària de la finestra"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Inicia sempre amb la grandària fixa"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Repetició"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Repeteix la pel·lícula actual"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Permetre la pèrdua de fotogrames"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Permet que es perdin fotogrames per a una millor sincronització de l'àudio i "
+"vídeo"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Estableix automàticament el volum a l'inici"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Quan es seleccioni una nova font, el volum serà establert d'acord al control "
+"del volum"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "A l'inici auto estableix els colors"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"Quan es comenci a reproduir una pel·lícula , els colors seran establerts "
+"d'acord als controls de color"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Plafó de control"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Mostra el botó de configuració"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Afegeix un botó del qual apareixerà un menú de configuració"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Mostra el botó de repertori"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Afegeix un botó de repertori als botons de control"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Mostra el botó de gravació"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Afegeix un botó de gravació als botons de control"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Mostra el botó de difusió"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Afegeix un botó de difusió als botons de control"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Temps en la recerca endavant/endarrere:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Colors"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Localització:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Localització de l'ítem reproduïble"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Subtítol:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+"Localització opcional d'un fitxer que contingui els subtítols de la URL de a "
+"dalt"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Habilita el suport \"Clic per a reproduir\""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Suport per a pàgines WEB amb una imatge d'inici"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Usa el reproductor de pel·lícules:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Ample de banda de la xarxa"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Algunes vegades és possible escollir entre diversos fluxos indicant una taxa de "
+"bits en particular.\n"
+"Aquesta opció estableix quant ample de banda preferiu usar per al vídeo."
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Algunes vegades és possible escollir entre diversos fluxos indicant una taxa de "
+"bits en particular.\n"
+"Aquesta opció estableix l'ample de banda màxim disponible per al vídeo."
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "Taxa de bits preferida:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/seg"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Taxa de bits màxima:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Fitxer de sortida:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Inicia la &gravació"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Font actual: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Gravador"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "So pregravat automàtic"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&No"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Quan finalitzi la gravació"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&Després"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Temps (segons):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Atura la gravació"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Inicia la gravació"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Font actual: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Format"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "El mateix que la font"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "A mida"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Arguments per a mencoder:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Arguments per a FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Configura el controlador de vídeo. Es recomana XVideo, o, si no està suportat, "
+"X11, tot i que és més lent."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Controlador de vídeo:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Controlador de l'àudio:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Habilita l'ús dels filtres de post-processament"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Deshabilita l'ús dels filtres de post-processament al veure TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Ràpid"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Desbloqueig horitzontal"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Qualitat automàtica"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Filtrat de la crominància"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Desbloqueig vertical"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Filtre dering"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Brillantor/contrast automàtic"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Estendre la lluminositat a tot el rang"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Redueix el soroll temporal"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Desentrellaçador del degradat lineal"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Desentrellaçador de la interpolació lineal"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Desentrellaçador de la interpolació cúbica"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Desentrellaçador de la mitjana"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "Desentrellaçador de FFmpeg"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Habilita els filtres de post-processament predefinits per l'mplayer"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Habilita els filtres de post-processament personalitzats (Veure la pestanya "
+"Preconfiguració a mida)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Habilita els filtres ràpids de post-processament de l'mplayer"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "S'usarà el filtre si hi ha prou CPU"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Estendre la lluminositat a tot el rang (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Preconfiguració a mida"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Desentrellaçat"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Restablir les opcions?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Us disposeu a sobreescriure totes les vostres configuracions amb els\n"
+"valors per omissió.\n"
+"Si us plau, confirmeu-ho.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Pantalla completa"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Escalat:"
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 0000000..21eb8a9
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,1665 @@
+# translation of kmplayer.po to Czech
+#
+# Ivo Jánský <Ivo.Jansky@seznam.cz>, 2003.
+# Lukáš Tinkl <lukas@kde.org>, 2003, 2004, 2005, 2006.
+# Klara Cihlarova <koty@seznam.cz>, 2005.
+# Jakub Friedl <jfriedl@suse.cz>, 2005.
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-08-12 14:12+0200\n"
+"Last-Translator: Lukáš Tinkl <lukas@kde.org>\n"
+"Language-Team: Czech <cs@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>"
+"=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Ivo Jánský,Klára Cihlářová,Jakub Friedl"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "Ivo.Jansky@seznam.cz,koty@seznam.cz,jfriedl@suse.cz"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Přehrát"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pauza"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "Za&stavit"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Zvýšit hlasitost"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Snížit hlasitost"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% Cache plné"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Přehrávám"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMplayer: Konec přehrávání"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Nejnovější"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Trvalé seznamy skladeb"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Nové &okno"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Vyčistit &historii"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Otevřít DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Otevřít VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+#, fuzzy
+msgid "&Open Audio CD"
+msgstr "&Otevřít VCD"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Otevřít routu..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Připojit"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "K&onzole"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Sezna&m skladeb"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Minimální režim"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "&Editační režim"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "S&ynchronizovat se seznamem skladeb"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Zobrazit rozbalovací nabídku"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Zobrazit jazykovou nabídku"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "Ponechat &poměr šířka/výška"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "Na &celou obrazovku"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Ovládání &Arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Otevře nové okno aplikace"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Otevře existující soubor"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Otevře nedávno použitý soubor"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Zavře aktuální zdroj"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Ukončí aplikaci"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Povolí/zakáže stavovou lištu"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Povolí/zakáže lištu menu"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Připraven."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "Zdr&oj"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD navigátor"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "Přid&at do seznamu"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Přid&at do nové skupiny"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "Vi&deo"
+
+#: kmplayerapp.cpp:751
+#, fuzzy
+msgid "More..."
+msgstr "Více..."
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "DVD Navigace ..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Připraven"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Otevírání DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Otevírání VCD..."
+
+#: kmplayerapp.cpp:817
+#, fuzzy
+msgid "Opening Audio CD..."
+msgstr "Otevírání VCD..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Otevírání roury..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Číst z roury"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Otevírání VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Úvod"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Otevírám soubor..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Ukončit"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Otevírám nové okno aplikace..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Všechny soubory"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Otevřít soubor"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Uložit soubor"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Chyba při otevírání souboru %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Uzavírám soubor..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Ukončuji..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Zobrazit lištu menu s %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Automaticky přehrávat po otevření DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Začít přehrávat DVD okamžitě po otevření DVD"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD zařízení:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "Cesta k vašemu DVD zařízení, musíte mít práva pro čtení ze zařízení"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Tituly"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Kapitoly"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "Jazyk &zvuku"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Titulky"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Zdroj"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Další"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Kořen"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "Nahor&u"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Automaticky přehrát po otevření VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Začít přehrávat VCD okamžitě po otevření VCD"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CDROM) zařízení:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Cesta k vašemu CDROM/DVD zařízení, musíte mít práva na čtení ze zařízení"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Stopa "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+#, fuzzy
+msgid "Audio CD"
+msgstr "Zvukový kodek:"
+
+#: kmplayerapp.cpp:2203
+#, fuzzy, c-format
+msgid "Track %1"
+msgstr "Stopa "
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Roura"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Roura - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Adresa připojení:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Pokud máte několik síťových zařízení, tak můžete limitovat přístup"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Poslouchat na portu:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Maximum připojení:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Maximální šířka pásma (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Dočasný doplňovací soubor:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Velikost souboru plnění (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Formát:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Pouze avi, mpeg a rm jsou vhodné pro mplayer playback"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Zvukový kodek:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Bit rate zvuku (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Vzorkovací frekvence zvuku (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Video kodek:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Video bit rate (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Kvalita (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Frekvence rámců (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Velikost Gop:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Šířka (pixelů):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Výška (pixelů):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Povolit přístup z:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'Jedna IP' nebo počáteční IP-koncová IP pro IP rozsah"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Hostitel/IP nebo IP rozsah"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Načíst"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Spustit"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Vysílání"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profily"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Ukončení procesu ffserver selhalo."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Spuštění ffserver selhalo.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Spuštění ffmpeg selhalo."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "Vlastní"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "OSS (Open Sound System)"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "ALSA (Advanced Linux Sound Architecture)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analogový real-time synthetizátor"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "ALSA (Advanced Linux Sound Architecture) v 0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "ALSA (Advanced Linux Sound Architecture) v 0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Barva pozadí seznamu"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Barva popředí seznamu"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Barva pozadí konzole"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Barva aktivní položky seznamu skladeb"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Barva popředí konzole"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Barva pozadí videa"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Barva pozadí oblasti přehrávání"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Barva pozadí informačního okna"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Barva popředí informačního okna"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Seznam skladeb"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Informační okno"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Soubor %1 neexistuje."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Soubor s titulky %1 neexistuje."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Hlasitost je %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Přehrát pomocí"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Kon&zole"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Seznam sk&ladeb"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "J&azyky zvuku"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Titulky"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kontrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Jas:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Tón:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Nasycení:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "&Barvy"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Nastavit KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Uprav&it položku seznamu skladeb"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Není spuštěno"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Ukládání do mezipaměti"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Přehrávání"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Rekordér %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Přehrávač %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Neznámé"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "Odpo&jit"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+#, fuzzy
+msgid "Connecting"
+msgstr "&Připojit"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Ukončení procesu přehrávače selhalo."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Vzor velikosti"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Vzor cache"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Vzor pozice"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Vzor indexu"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Vzor odkazu na URL"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Vzor odkazu"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Vzor začátku"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Vzor jazyka DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Vzor titulků DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Vzor titulů DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Vzor kapitol DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Vzor stop VCD"
+
+#: kmplayerprocess.cpp:882
+#, fuzzy
+msgid "Audio CD tracks pattern"
+msgstr "Vzor stop VCD"
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Další argumenty příkazového řádku:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Velikost cache:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Sestavit nový index, když to bude možné"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Povolit vyhledávání v indexovaných souborech (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Obecné volby"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Video zařízení:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Zvukové zařízení:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Jméno:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Šířka:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Výška:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Nepřehrávat ihned"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Začít přehrávat pouze po stisknutí tlačítka Přehrát"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norma:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanál"
+
+#: kmplayertvsource.cpp:100
+#, fuzzy
+msgid "Frequency (MHz)"
+msgstr "Frekvence"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Chystáte se odebrat toto zařízení z menu Zdroj?\n"
+"Pokračovat?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Potvrdit"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Ovladač:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l nebo bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Zařízení:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Cesta k vašemu video zařízení, tj. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Prohledat..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Obecné"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "TV zařízení"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Zařízení je již přítomné."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Žádné zařízení nebylo nalezeno."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo port"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Komunikační port:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Měřítko"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Poměr při přehrávání VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Odpo&jit"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr ""
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr ""
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr ""
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr ""
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr ""
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr ""
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR klávesa 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR klávesa 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR klávesa 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR klávesa 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR klávesa 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR klávesa 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR klávesa 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR klávesa 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR klávesa 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR klávesa 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Hostitel nenalezen"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Spojení odmítnuto"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Vlastní VDR příkaz"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Seznam skladeb"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Hlasitost:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "soubor k otevření"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "nepojmenované"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[vlastnosti]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "Z&kopírovat do schránky"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Zobrazit vše"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Nastavení"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Vzhled"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Výstup"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Nahrávání"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Výstupní pluginy"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Postprocessing"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Okno"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Ponechat poměr velikostí"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Pokud zaškrtnete, film si zachová svůj poměr\n"
+"velikosti, pokud bude upravena velikost okna"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Zapustit do panelu"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Automaticky změnit velikost podle videa"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Pokud zaškrtnete, KMPlayer rozšíří okno na velikost\n"
+"filmu."
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Zapamatovat si velikost okna při ukončení"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Vždy spustit s pevnou velikostí"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Smyčka"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Vytvoří smyčku ze současného filmu"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Povolit zahazování rámců"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "Povolit zahazování rámců pro lepší synchronizaci zvuku a obrazu"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Automatické nastavení hlasitosti při startu"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Automaticky nastavit barvy při spuštění"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Ovládací panel"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Zobrazit tlačítko nastavení"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Zobrazit tlačítko seznamu skladeb"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Přidat tlačítko seznamu skladeb mezi ovládací tlačítka"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Zobrazit tlačítko záznamu"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Přidat tlačítko záznamu mezi ovládací tlačítka"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Zobrazit tlačítko vysílání"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Přidat tlačítko vysílání mezi ovládací tlačítka"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Vpřed/Vzad čas prohledávání:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Barvy"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "ÁáBbCcĎď"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Umístění:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Umístění přehrávatelných souborů"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Titulky:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Povolit podporu 'Kliknout pro přehráni'"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Použít přehrávač filmů:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Průchodnost sítě"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+#, fuzzy
+msgid "Preferred bitrate:"
+msgstr "Preferovaný datový tok:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Maximální datový tok:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Výstupní soubor:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Začí&t nahrávat"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Současný zdroj: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Rekordér"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Automatické přehrávání"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Ne"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Když bude nahrávání dokončeno"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "P&o"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Čas (sekund):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Zastavit nahrávání"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Začít nahrávat"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Současný zdroj: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Formát"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Stejné jako zdroj"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Vlastní"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mencoder argumenty:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMpeg argumenty:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Nastaví video ovladač. Doporučené je XVideo, nebo, pokud není podporováno, X11, "
+"které je pomalejší."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Video ovladač:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Zvukový ovladač:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Povolit použití postprocessing filtrů"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Zakázat použití postprocessingu při sledování TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Rychle"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Horizontální odblokování"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Automatická kvalita"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Filtrování barevnosti"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Vertikální odblokování"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Automaticky jas/kontrast"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Povolit výchozí postprocessing filtry mplayeru"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Povolit uživatelské postprocessing filtry (Viz Vlastní nastavení -záložka)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Povolit rychlé postprocessing filtry mplayeru"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "Filtr je použit, pokud není dostatek CPU"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Vlastní nastavení"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Prokládání"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Obnovit nastavení?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Chystáte se přepsat všechna nastavení výchozími.\n"
+"Prosím potvrďte.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Celá obrazovka"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Měřítko:"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "Filtr je použit, pokud není dostatek CPU"
diff --git a/po/csb.po b/po/csb.po
new file mode 100644
index 0000000..ecde68d
--- /dev/null
+++ b/po/csb.po
@@ -0,0 +1,1666 @@
+# translation of kmplayer.po to Kashubian
+#
+# Michôł Òstrowsczi <michol@linuxcsb.org>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-10-11 18:16+0200\n"
+"Last-Translator: Michôł Òstrowsczi <michol@linuxcsb.org>\n"
+"Language-Team: Kashubian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Michôł Òstrowsczi"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "michol@linuxcsb.org"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "G&rôj"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Paùza"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Stop"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Głosni"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Cëszi"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "Wëfùlowanié pòdrãczny pamiãcy [%]"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Granié"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Zatrzëmôj granié"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "Séc"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Nônowszé"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Stójne lëstë grania"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "No&wé òkno"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Wëczëszczë &historëjã"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "Òtemknij &DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "Òtemknij &VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "Òtemknij platã &CD z mùzyką"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "Òtemknij &rérã..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Pòłączë"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "Te&rminal"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Òdëgrôj &lëstã"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Minimalny trib"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "Trib &edicëji"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Synchronizëjë &z lëstą grania"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Pòkażë pòdrãczné menu"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Pòkażë jãzëkòwé menu"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "Ùtrzëmôj &proporcëjë òbrôzu"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Fùlekranowi trib"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Kòntrola Arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Zrëszë nowé òkno programù"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Òtekmnij lopk"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Òtemknij pòprzednié"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Zasztëkôj aktualny zdrój"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Zakùńczë programã"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Pòkażë/zatacë lëstëw stónu"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Pòkażë/zatacë lëstëw menu"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Parôt."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Zdrój"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "Nawigatora &DVD"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "Plata &z mùzykã"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Dodôj do lëstë"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Dodôj w nowi &grëpie"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Skòpérëjë tùwò"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "W&ideò"
+
+#: kmplayerapp.cpp:751
+#, fuzzy
+msgid "More..."
+msgstr "Wicy..."
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "Òtemknij disk DVD..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Parôt"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Òtmekanié DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Òtmekanié VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Òtmekanié mùzyczny platë CD..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Òtmekanié rérë..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Czëtanié z rérë"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Pòdôj pòlét, chtërnë przeczérëjë strëgã aùdio/wideò\n"
+"do sztandardowégò wińdzënia. Bãdze òno sparłãczone ze sztandardowim wéńdzeniém "
+"òdgrëwôcza.\n"
+"\n"
+"Pòlét:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Òtmekanié VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Wstãp"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Òtmekanié lopkù..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Wińdzenié"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Òtmeknié nowégò òkna programù..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Wszëtczé lopczi"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Òtemknij lopk"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Zapiszë lopk"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Wëstãpiła fela òbczas òtmekaniô lopkù %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Zasztëkòwónié lopkù..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Kùńczenié..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Pòkażë lëstëw menu z %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Przeniese tuwò"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Nowô grëpa"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&Rëmôj element"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "Przëniesë w &górã"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Przëniesë w &dół"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Aùtomatne granie pò òtemkniãcu DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Granié DVD zarôzkù pò jegò òtemkniãcu"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Ùrzãdzenié DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Stegna przistãpù do ùrzãdzenia DVD. Abë grac nót je miec prawò òdczëtania z DVD"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Òpticzne disczi"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - mùzyczny disk"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - disk wideò"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - cyfrowi disk wideò"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Title"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Rozdzéle"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&Jãzëk aùdio"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Nôpisë"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Zdrój"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Zôstne"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Przédne"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&W górã"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Aùtomatne granié pò òtemkniãcu VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Granié pò òtemkniãcu diskù VCD"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Ùrzãdzenié VCD (CDROM):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Stegna przistãpù do ùrzãdzenia CDROM/DVD. Abë grac nót je miec prawò do òdczëtu"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Stegna "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Mùzyczna plata CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Stegna %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Réra"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Réra - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Przëpiszë adresã:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+"Na przëtrôfk mieniô wielu sécowëch interfejsów, mòżlewé je ògrańczenié "
+"przistãpù"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Pòrt nasłëchù:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Maksymalna lëczba pòłączeniów:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Maksymalna szérz pasma (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Timczasowi lopk pòdôwków:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Miara lopkù pòdôwków (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Fòrmat:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Programa MPlayer mòże òtmekac blós lopczi AVI, MPEG a RM"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Kòdek aùdio:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Chùtkòsc przesélu zwãkù (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Czãstotlëwòsc próbkòwaniô zwãkù (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Kòdek wideò:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Chùtkòsc przesélu wideò (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Kwalitet (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Czãstotlëwòsc ramów (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Miara GOP:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Szérz (w pikselach):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Wëżô (w pikselach):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Zezwòlë na przistãp z:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'Adresa IP' abò dlô krézu IP 'sztartowô-adresa kùńcowô-adresa'"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Numer IP, miono kòmpùtra abò kréz IP"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Zladëjë"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Sztart"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Nadôwanié"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profile"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Zasztëkónié procesu ffserwer nie darzëło sã."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Nie je mòżno zrëszëc ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Nie je mòżno zrëszëc ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Aùto"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound System"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analog Real-Time Synthesizer"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK Audio Connection Kit"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Brëkùjë domëslnëch nastôwów przédnegò programù"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Spòdlé lëstë grania"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Farwa tekstu lëstë grania"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Spòdlé terminala"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Aktiwny element lëstë grania"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Farwa tekstu terminala"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Spòdlé klipu wideò"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Spòdlé òbéndë filmù"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Spòdlé wëdowiédnegò òkna"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Farwa tekstu wëdowiédnegò òkna"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Lësta grania"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Wëdowiédne òkno"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Nié mô lopkù %1."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Nié mô lopkù nôpisów %1."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Głosnosc: %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Grôj z"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Te&rminal"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Lësta grania"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "&Jãzëczi aùdio"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Nôpisë"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kòntrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Jasnota:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Farwa:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Domiklëna:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "&Farwë"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Kònfigùracëja KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Editëjë elementë &lëstë grania"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Zascygòwóny"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Bùforowanié"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Granié"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Nagrëwarka %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Òdgëwôcz %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Nieznóny"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "Rozłączë"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Pòłączë"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Zasztëkanié procesu grania nie darzëło sã."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Mùster miarë"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Mùster pòdrãczny pamiãcë"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Mùster pòłożenia"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Mùster indeksu"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Mùster zdrojowé adresë URL"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Mùster tikania"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Startowi mùster"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Mùster jãzëka DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Mùster nôpisów DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Mùster titlów DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Mùster rozdzélów DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Mùster stegnów VCD"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Mùster stegnów mùzyczny platë CD"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "Pòlét MPlayer:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Dodôwne argùmentë pòlétu:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Miara pòdrãczny pamiãcë:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Zrobi nowi indeks (eżle je to mòżlewi)"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Pòzwòli na przëszëkanié indeksowónëch lopków (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Òglowi òptacëjë"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Ùrzãdzenié wideò:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Ùrzãdzenié aùdio:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Miono:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Szérz:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Wiżô:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Wëłączë aùtomante granié"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Granié blós pò nacësniãcym knąpë startu"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norma:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Czãstotlëwòsc (MHz)"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Rëmôsz to ùrzãdzenié z zdrojów menu.\n"
+"Dali?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Pòcwierdzë"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Czérownik:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l abò bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Ùrzãdzenié:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Stegna do Twòjegò ùrzãdzeniô wideò, np. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Skanëjë..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Òglowi"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "ùrzãdzenié tv"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Telewzérnik"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Ùrzãdzenié ju je."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Nie je nalazłé ùrzãdzenié."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "Skanera TV"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Pòrt XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Przédny pòrt rozcygnieniô X Video.\n"
+"Na przëtrôfk domëslnegò nastôwù (0), wëzwëskóny òstanié pierszi wòlny pòrt. "
+"Eżle môsz zwieloną instalacëjã XVideo, mùszësz tuwò zdefiniowac, chtërën pòrt "
+"nót je brëkòwac.\n"
+"Abë òbaczëc wicy wëdowiédzë zrëszë pòlét 'xvinfo'"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Kòmùnikacjowi pòrt:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Kòmùnikacjowi pòrt do VDR. Domëslny je numer pòrtu 2001.\n"
+"Eżle brëkùjesz jinëgò, z òptacëją '-p' mùszësz nastôwic gò téż tuwò."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Skala"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Skale òbrôzu do òbzéraniô VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "&Rozłączë"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "Klucz wëżi (VDR)"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "Klucz niżi (VDR)"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "Pòprzédni klucz (VDR)"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "Klucz OK (VDR)"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "Klucz nastôwów (VDR)"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "Klucz kanalów (VDR)"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "Klucz menu (VDR)"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "Czerwòny klucz (VDR)"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "Zélony klucz (VDR)"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "Żółti klucz (VDR)"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "Niebiesczi klucz (VDR)"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "Klucz 0 (VDR)"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "Klucz 1(VDR)"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "Klucz 2(VDR)"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "Klucz 3(VDR)"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "Klucz 4 (VDR)"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "Klucz 5 (VDR)"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "Klucz 6 (VDR)"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "Klucz 7 (VDR)"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "Klucz 8 (VDR)"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "Klucz 9 (VDR)"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Kòmpùtr nie òstał nalazłi"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Nie je mòżno pòłączëc sã z serwerã"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Jiny pòlét VDR"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Je mòżno przesłac pòlétë do VDR.\n"
+"Wpiszë 'HELP' abë òbaczëc lëstã przistãpnëch pòlétów.\n"
+"Òdpòwiesc VDR je mòżno òbezdrzëc w òknie terminala.\n"
+"\n"
+"Pòlét VDR:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Pòrt "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Lësta grania"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Głosnosc:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "lopk do òtemkniãcô"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "bez miona"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "felëjë"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[atribùtë]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Kòpiejë do schòwë"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Pòkażë wszëtkò"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Nastôwë"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Wëzdrzatk"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Wińdzenié"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Zapisënk"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Wińdzeniowi pluginsë"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Postprocessing"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Òkno"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Ùtrzëmôj propòrcëjë"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Eżle na òptacëjô je włączonô to propòrcëjë miarów\n"
+"filmù nie zmieniają sã pò zmianié miarów òkna"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Dokùjë na systemòwim panelu"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Eżle na òptacëjô je włączonô, ikòna programù KMplayer bãdze wsôdzona na "
+"systemòwim panelu.\n"
+"Przédne òkno programù a téż knąpa na lëstwie pòlétów bãdą zatacone."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Aùtomatne skalowanié miarë"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Eżle na òptacëjô je włączonô, KMPlayer aùtomatnie zmienia\n"
+"propòrcëjë filmù pò jegò zrëszenim"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Zapiszë wielgòsc òkna przë wińdzenim"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Zrëszôj ze stałą miarą"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Zôdzerzga"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Robi òdgrëwanié filmù w zôdzerzdżi"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Pòzwòlë na przepùszczanié ramów"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Pòzwòlë na przepùszczanié ramów, żebë pòlepszëc synchronizacëjã òbrôzu ze zwãkã"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Aùtomatnô równiô głosnoscë przë zrëszanim"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Aùtomatny nastôw farwów przë zrëszanim"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Panel kòntrolë"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Pòkażë knąpã nastôwów"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Dodôj knąpã wëskrzëniwającą menu nastôwów"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Pòkażë knąpã lëstë òdgrëwaniô"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Dodôj knąpã lëstë òdgëwaniô do kòntrolnëch knąpów"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Pòkażë knąpã nagrëwaniô"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Dodôj knąpã nagrëwaniô do kòntrolnëch knąpów"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Pòkażë knąpã nadawaniô"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Dodôj knąpã nadawaniô do kòntrolnëch knąpów"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Czas przewijaniô do przódka/nazôd:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Farwë"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Pòłożenié:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Pòłóżenié medium do òdgraniô"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Nôpisë:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr ""
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr ""
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr ""
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr ""
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr ""
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr ""
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr ""
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Nié"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr ""
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr ""
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr ""
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr ""
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr ""
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr ""
+
+#: pref.cpp:543
+msgid "Format"
+msgstr ""
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr ""
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr ""
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr ""
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr ""
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr ""
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr ""
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Chùtczi"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr ""
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr ""
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr ""
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr ""
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr ""
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr ""
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Fùlekran"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Skala:"
diff --git a/po/cy.po b/po/cy.po
new file mode 100644
index 0000000..c1ba9c4
--- /dev/null
+++ b/po/cy.po
@@ -0,0 +1,1694 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: ../cy/messages//kdeextragear-2/kmplayer.po\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2004-09-20 15:44+0200\n"
+"Last-Translator: Thierry Vignaud <tvignaud@mandrakesoft.com>\n"
+"Language-Team: cy <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "KD wrth KGyfieithu"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "kyfieithu@dotmon.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "C&hwarae"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Seibio"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Aros"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Cynyddu'r Lefel Sŵn"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Lleihau'r Lefel Sŵn"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr ""
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr ""
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "GWE"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "&Ffenestr Newydd"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Clirio'r &Hanes"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Cysylltu "
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "T&erfynell"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr ""
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr ""
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr ""
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "&Modd Golygu"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr ""
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Sgrîn Lawn"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr ""
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Agor ffenestr gymhwysiad newydd"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr ""
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Agor ffeil a ddefnyddiwyd yn ddiweddar"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr ""
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Terfynu'r cymhwysiad"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Galluogi/analluogi'r bar cyflwr"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr ""
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Parod."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "T&arddiad"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr ""
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr ""
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr ""
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "F&ideo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr ""
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Parod"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr ""
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr ""
+
+#: kmplayerapp.cpp:817
+#, fuzzy
+msgid "Opening Audio CD..."
+msgstr "Agor ffeil..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+#, fuzzy
+msgid "Opening VDR..."
+msgstr "Agor ffeil..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr ""
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Agor ffeil..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Terfynu"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Yn agor ffenestr gymhwysiad newydd..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Pob Ffeil"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Agor Ffeil"
+
+#: kmplayerapp.cpp:1333
+#, fuzzy
+msgid "Save File"
+msgstr "Agor Ffeil"
+
+#: kmplayerapp.cpp:1337
+#, fuzzy
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr "Agor ffeil..."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Yn cau ffeil..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Terfynu..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr ""
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr ""
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr ""
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr ""
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr ""
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr ""
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Tarddiad"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr ""
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Nesaf"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Gwraidd"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "I &Fyny"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr ""
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2101
+#, fuzzy
+msgid "Track "
+msgstr "&Traciau"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:2203
+#, fuzzy, c-format
+msgid "Track %1"
+msgstr "&Traciau"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Peipen"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Porth gwrando:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Fformat:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Llwytho"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Dechrau"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Proffeiliau"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr ""
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "Addasiedig"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Cysawd Sain Agored"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Saernïaeth Uwch Sain Linux"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr ""
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Ellyll Sain Enlightened"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr ""
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr ""
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr ""
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr ""
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr ""
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr ""
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr ""
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr ""
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr ""
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr ""
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr ""
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Rhestr chwarae:"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr ""
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Nid yw'r ffeil %1 mewn bod."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, fuzzy, c-format
+msgid "Volume is %1"
+msgstr "Lefel Sain:"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "T&erfynell"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Rhestr chwarae:"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Cyferbyniant :"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Disgleirdeb:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Arlliw :"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Dirlawnder:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Ll&iwiau"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr ""
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Ddim yn rhedeg"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Yn chwarae"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1402
+#, fuzzy
+msgid "Player %1 %2"
+msgstr "MPlayer"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Anhysbys"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "Dat&gysylltu"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1859
+#, fuzzy
+msgid "Connecting"
+msgstr "&Cysylltu "
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr ""
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Maint storfa :"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr ""
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr ""
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Dewisiadau Cyffredinol"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr ""
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Enw:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Lled:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Taldra:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr ""
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr ""
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr ""
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Sianel"
+
+#: kmplayertvsource.cpp:100
+#, fuzzy
+msgid "Frequency (MHz)"
+msgstr "Amlder"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Cadarnhau"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Gyrrydd:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr ""
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Dyfais:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr ""
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Syllu ..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Cyffredinol"
+
+#: kmplayertvsource.cpp:246
+#, fuzzy
+msgid "tv device"
+msgstr "Dyfais:"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr ""
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr ""
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr ""
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Heb ganfod dyfais."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr ""
+
+#: kmplayervdr.cpp:90
+#, fuzzy
+msgid "XVideo port"
+msgstr "Porth gwrando:"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr ""
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Chwyddo"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr ""
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr ""
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+#, fuzzy
+msgid "VDR"
+msgstr "DVD"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Dat&gysylltu"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+#, fuzzy
+msgid "VDR Key Channels"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:250
+#, fuzzy
+msgid "VDR Key Menu"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:251
+#, fuzzy
+msgid "VDR Key Red"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:252
+#, fuzzy
+msgid "VDR Key Green"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:253
+#, fuzzy
+msgid "VDR Key Yellow"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:254
+#, fuzzy
+msgid "VDR Key Blue"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:259
+#, fuzzy
+msgid "VDR Key 0"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:260
+#, fuzzy
+msgid "VDR Key 1"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:261
+#, fuzzy
+msgid "VDR Key 2"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:262
+#, fuzzy
+msgid "VDR Key 3"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:263
+#, fuzzy
+msgid "VDR Key 4"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:264
+#, fuzzy
+msgid "VDR Key 5"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:265
+#, fuzzy
+msgid "VDR Key 6"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:266
+#, fuzzy
+msgid "VDR Key 7"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:267
+#, fuzzy
+msgid "VDR Key 8"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:268
+#, fuzzy
+msgid "VDR Key 9"
+msgstr "Sianel"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Ni chanfuwyd y gwesteiwr"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Gwrthodwyd y cysylltiad"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Porth "
+
+#: kmplayervdr.cpp:752
+#, fuzzy
+msgid "X&Video"
+msgstr "F&ideo"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr ""
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Lefel Sain:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr ""
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "ffeil i agor"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "di-enw"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Copïo i'r Gludfwrdd"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "Dangos &Pob Un"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Hoffterau"
+
+#: pref.cpp:82
+#, fuzzy
+msgid "Looks"
+msgstr "Cylchu"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Allbwn"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr ""
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr ""
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr ""
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr ""
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr ""
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Ffenestr"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr ""
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Docio yn y cafn cysawd"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Cylchu"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr ""
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr ""
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr ""
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr ""
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr ""
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr ""
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr ""
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr ""
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr ""
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr ""
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr ""
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Lliwiau"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr ""
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Lleoliad:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr ""
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr ""
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr ""
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr ""
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Ffeil allbwn :"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr ""
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr ""
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr ""
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr ""
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Nage"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr ""
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "A&r ôl"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr ""
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr ""
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr ""
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr ""
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Fformat"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr ""
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Addasiedig"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr ""
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr ""
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr ""
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr ""
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr ""
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr ""
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Cyflym"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr ""
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr ""
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr ""
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr ""
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr ""
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr ""
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr ""
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Sgrîn-lawn"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Chwyddo :"
+
+#~ msgid "empty"
+#~ msgstr "gwag"
+
+#~ msgid "Escape"
+#~ msgstr "Esc"
+
+#~ msgid "Up"
+#~ msgstr "I fyny"
+
+#~ msgid "Down"
+#~ msgstr "I Lawr"
+
+#~ msgid "Ok"
+#~ msgstr "Iawn"
+
+#~ msgid "Channels"
+#~ msgstr "Sianeli"
+
+#~ msgid "Setup"
+#~ msgstr "Ffurfweddu"
+
+#~ msgid "Menu"
+#~ msgstr "Dewislen"
+
+#~ msgid "Red"
+#~ msgstr "Coch"
+
+#~ msgid "Green"
+#~ msgstr "Gwyrdd"
+
+#~ msgid "Yellow"
+#~ msgstr "Melyn"
+
+#~ msgid "Blue"
+#~ msgstr "Glas"
+
+#, fuzzy
+#~ msgid "Custom ..."
+#~ msgstr "Addasiedig"
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 0000000..639553c
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,1682 @@
+# Danish translation of kmplayer
+# Copyright (C).
+#
+# Erik Kjær Pedersen <erik@binghamton.edu>, 2003, 2004, 2005, 2006, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-01-27 09:45-0500\n"
+"Last-Translator: Erik Kjær Pedersen <erik@binghamton.edu>\n"
+"Language-Team: Danish <dansk@klid.dk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Erik Kjær Pedersen"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "erik@binghamton.edu"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "S&pil"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pause"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Stop"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Forøg lydstyrken"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Formindsk lydstyrken"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% Cache fyldt"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Spiller"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Stop med at spille"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Nyligste"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Bevarede spillelister"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Nyt &vindue"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Ryd &historik"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "Å&bn dvd"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "Å&bn VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "Å&bn lyd-cd"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "Å&bn pipe..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Forbind"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "&Konsol"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Spille&liste"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Minimal tilstand"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "R&edigeringstilstand"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Synkronisér &med spilleliste"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Vis sammenhængsafhængig menu"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Vis sprogmenu"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Behold Bredde/Højde-forhold"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Fuldskærm"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Arts-kontrol"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Åbner nyt programvindue"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Åbner en eksisterende fil"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Åbner en nyligt brugt fil"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Lukker den aktuelle kilde"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Afslutter programmet"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Slår statuslinjen til/fra"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Aktiverer/deaktiverer menulinjen"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Klar."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Kilde"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&Dvd"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&Dvd Navigator"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Lyd-CD"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Tilføj til liste"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Tilføj i ny &gruppe"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Kopiér herhen"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Mere..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "Dvd-navigation..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Parat"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Åbner dvd..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Åbner VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Åbner lyd-cd..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Åbner pipe..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Læs fra pipe"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Indtast en kommando som udsender en lyd- eller videostrøm til\n"
+"standarduddata. Den sendes videre til afspillerens standardinddata.\n"
+"\n"
+"Kommando:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Åbner vdr..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Introduktion"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Åbner fil..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Afslut"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Åbner et nyt programvindue..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Alle filer"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Åbn fil..."
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Gem fil"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Fejl da filen %1 skulle åbnes.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Lukker fil..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Går ud..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Vis menulinje med %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Flyt hertil"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Ny gruppe"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "S&let punkt"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Flyt opad"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Flyt &nedad"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Spil af sig selv efter åbning af dvd"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Begynd med at afspille dvd'en umiddelbart efter den er åbnet"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Dvd-enhed:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "Sti til din dvd-enhed, du skal have læserettigheder til denne enhed"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Optiske diske"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "Dvd"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "Cdrom - Lydkompaktdisk"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Videokompaktdisk"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "Dvd - Digital videodisk"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Titler"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Kapitler"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "Lyd-&sprog"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Undertekster"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Kilde"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DvdNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Næste"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Root"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Op"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Spil af sig selv efter åbning af en VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Begynd at spille VCD'en umiddelbart efter at have åbnet den"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CDROM) enhed:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Sti til din cd-rom/dvd-enhed, du skal have læserettigheder til denne enhed"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Spor"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Lyd-cd"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Spor %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Pipe"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Pipe - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Bind-adresse:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Hvis du har flere netværksenheder, kan du begrænse adgangen"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Lytteport:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Maksimalt antal forbindelser:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Maksimal båndbredde (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Midlertidig feed-fil:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Feed-fil-størrelse (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Format:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Kun avi, mpeg og rm virker for mplayer-afspilning"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Lyd-codec:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Lyd-bitrate (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Lyd sample rate (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Videokodere:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Video bitrate (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Kvalitet (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Ramme-rate (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Gop størrelse:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Bredde (pixel):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Højde (pixels):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Tillad adgang fra:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'Single IP' eller 'start-IP end-IP' for IP-områder"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Vært/IP eller IP-område"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Indlæs"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Start"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Broadcasting"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profiler"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Mislykkedes at afslutte ffserver-proces."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Mislykkedes at starte ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Mislykkedes at starte ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Auto"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Åbent lydsystem"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simpelt DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Avanceret Linux lydarkitektur (ALSA)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analog realtids-synthesizer"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK Audio Connection Kit"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Avanceret Linux lydarkitektur (ALSA) v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Avanceret Linux lydarkitektur (ALSA) v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Brug underliggende programs standarder"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Spillelistens baggrund"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Spillelistens forgrund"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Terminalens baggrund"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Spillelistens aktive punkt"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Terminalens forgrund"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Videoens baggrund"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Visningsområdets baggrund"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Infovinduets baggrund"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Infovinduets forgrund"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Spilleliste"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Informationsvindue"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Filen %1 eksisterer ikke."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Undertekstfilen %1 eksisterer ikke."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Lydstyrke er %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "S&pil med"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "&Konsol"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Spille&liste"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Lyd-&sprog"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Undertekster"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kontrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Lysstyrke:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Farvetone:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Mætningsgrad:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "F&arver"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Indstil KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Redigér &punkt i spillelisten"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Kører ikke"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Buffering"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Spiller"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Optager %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Spiller %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Ukendt"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Afbrudt"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Forbinder"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Mislykkedes at afslutte Player-proces."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Størrelsesmønster"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Cache-mønster"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Positionsmønster"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Indeksmønster"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Reference URL-mønster"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Reference-mønster"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Start-mønster"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Dvd-sprogmønster"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Dvd-undertekstmønster"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Dvd-titelmønster"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Dvd-kapitelmønster"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "VCD-Spormønster"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "lyd-cd's spormønster"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "MPlayer kommando:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Yderligere kommandolinje argumenter:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Cache-størrelse:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Byg nyt indeks når det er muligt"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Tillader søgning i indekserede filer (AVI'er)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Generelle indstillinger"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&Gstreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Video-enhed:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Lyd-enhed:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Navn:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Bredde:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Højde:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Spil ikke med det samme"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Start kun på at spille efter klik på spille tasten"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norm:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Frekvens (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Du er ved at fjerne denne enhed fra kildemenuen.\n"
+"Fortsæt?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Bekræft"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Driver:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l eller bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Enhed:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Sti til din video-enhed, f.eks. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Skan..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Generelt"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "tv-enhed"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Television"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Enhed allerede til stede."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Ingen enhed fundet."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo port"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Basisport for Xvideo-udvidelsen.\n"
+"Hvis standardværdien efterlades (0), bruges den første tilgængelige port. Hvis "
+"du imidlertid har flere udgaver af Xvideo, skal du måske sørge for porten som "
+"skal bruges her.\n"
+"Se udskriften fra 'xvinfo' for mere information."
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Kommunikationsport:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Kommunikationsport for VDR. Standard er port 2001.\n"
+"Hvis du bruger en anden port med flaget '-p' for 'vdr', skal du også angive den "
+"her."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Skala"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Proportioner der bruges ved visning af VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "&Afbryd forbindelse"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR-tast opad"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR-tast nedad"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR-tast tilbage"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR-tast o.k."
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR-tasteindstilling"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "Vdr nøglekanaler"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR-tastemenu"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR-tast rød"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR-tast grøn"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR-tast gul"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR-tast blå"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR-tast 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR-tast 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR-tast 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR-tast 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR-tast 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR-tast 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR-tast 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR-tast 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR-tast 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR-tast 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Vært ikke fundet"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Forbindelse afslået"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Egen VDR-kommando"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Du kan sende kommandoen til din VDR.\n"
+"Indtast 'HELP' for at se en liste med tilgængelige kommandoer.\n"
+"Du kan se svaret fra din VDR i terminalvinduet.\n"
+"\n"
+"VDR-kommando:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port"
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Spilleliste"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Lydstyrke:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "fil at åbne"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "unavngiven"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "ingen"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[egenskaber]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Kopiér til klippebordet"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Vis alle"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Indstillinger"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Udseende"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Output"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Optager"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Output-plugin"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Efterbehandling"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Vindue"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Behold størrelsesforhold"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Når dette er afkrydset, vil filmen beholde sine relative størrelser\n"
+"når et vinduets størrelse ændres"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Dok i statusfelt"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Når dette er markeret, vil en ikon for KMPlayer blive tilføjet til "
+"statusfeltet.\n"
+"Når den klikkes vil det skjule KMPlayer's hovedvindue og fjerne KMPlayer's "
+"opgavelinjeknap."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Automatisk størrelsesændring til videostørrelser"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Når dette er afkrydset, vil KMPlayer ændre størrelse til filmens\n"
+"når en video startes"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Husk vinduestørrelse ved afslutning"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Start altid med fast størrelse"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Løkke"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Får den aktuelle film til at køre i løkke"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Tillad droppede rammer"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "Tillad droppede rammer for bedre lyd- og video-synkronisation"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Indstil lydstyrken automatisk ved start"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Når en ny kilde vælges, indstilles lydstyrken ifølge lydstyrkekontrollen"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Indstil farver automatisk ved start"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr "Når en film starter, indstilles farver ifølge farvekontrollerne"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Kontrolpanel"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Vis config-knap"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Tilføj en knap som viser en indstillingsmenu"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Vis spilleliste-knap"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Tilføj en spilleliste-knap til kontrolknapperne"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Vis indspilningsknap"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Tilføj en indspilningsknap til kontrol-tasterne"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Vis broadcast knap"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Tilføj en broadcast-knap til kontroltasterne"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Fremad/tilbage søgetid: "
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Farver"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Sted:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Stedet for det spilbare punkt"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Undertekst:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "Stedet for valgfri fil som indeholder undertekster for URL'en ovenfor"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Aktivér 'Klik for at spille' startbilleder:"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Støtte for URL'er som har et startbillede"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Brug filmafspiller:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Netværksbåndbredde"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Sommetider er det muligt at vælge mellem forskellige strømme, givet en bestemt "
+"bitrate.\n"
+"Dette tilvalg indstiller hvor meget båndbredde du vil bruge for video."
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Sommetider er det muligt at vælge mellem forskellige strømme, givet en bestemt "
+"bitrate.\n"
+"Dette tilvalg indstiller maksimal båndbredde du har tilgængelig for video."
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "Ønsket bithastighed:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Maksimal bitrate:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Uddata-fil:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Start &optagelse"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Denne kilde:"
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Optager"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Auto-afspilning"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Ingen"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Når optagelsen er færdig"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "E&fter"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Tid (sekunder):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Stop optagelse"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Start optagelse"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Denne kilde:"
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Format"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Samme som kilde"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Brugerdefineret"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mencode-argumenter:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMpeg-argumenter:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Sætter video-driver. XVideo anbefales, men hvis den ikke er understøttet kan "
+"X11 bruges. Den er imidlertid langsommere."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Video-driver:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Lyd-driver:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Aktivér brug af efterbehandlingsfiltre"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Deaktivér brug af efterbehandling når du ser tv/dvd"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Hurtig"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Vandret deblocking"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Auto-kvalitet"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Krominans filtrering"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Lodret deblocking"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Dering-filter"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Auto-lysstyrke/kontrast"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Stræk luminans til fuldt område"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Temporal støjreduktion"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Lineær blandings-deinterlacer"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Lineær interpolerende deinterlacer"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Kubisk interpolerende deinterlacer"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Middel deinterlacer"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "FFmpeg deinterlacer"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Aktivér mplayer's standard-efterbehandlingsfiltre"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Aktivér brugervalgte efterbehandlingsfiltre (Se: Brugervalgt preset -tab)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Aktivér mplayer's hurtige efterbehandlingsfiltre"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "Filter bruges hvis der ikke er nok CPU"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Strækker luminans til det fulde område (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Brugervalgt preset"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Deinterlace"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Nulstil indstillinger?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Du er ved at få alle dine indstillinger overskrevet med de oprindelige.\n"
+"Bekræft venligst.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Fuldskærm"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Skala:"
+
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "Filter bruges hvis der ikke er nok CPU"
+
+#~ msgid "empty"
+#~ msgstr "tom"
+
+#~ msgid "tv://"
+#~ msgstr "tv://"
+
+#~ msgid "Escape"
+#~ msgstr "Esc"
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..1ad0459
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,1696 @@
+# translation of kmplayer.po to German
+# translation of kmplayer.po to
+# Copyright (C)
+#
+# Nico Walden <nico@mantei.net>, 2003.
+# Thomas Diehl <thd@kde.org>, 2003.
+# René Landert <rene.landert@bluewin.ch>, 2005, 2006.
+# Rene Landert <rene.landert@bluewin.ch>, 2005, 2006.
+# Thomas Reitelbach <tr@erdfunkstelle.de>, 2006.
+# Thomas Ohms <t.ohms@freenet.de>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-03-27 13:52+0200\n"
+"Last-Translator: Thomas Ohms <t.ohms@freenet.de>\n"
+"Language-Team: German <kde-i18n-de@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+">\n"
+">\n"
+">\n"
+">\n"
+">\n"
+">\n"
+">\n"
+">\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Nico Walden,Thomas Diehl,René Landert"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "nico@mantei.net,thd@kde.org,rene.landert@bluewin.ch"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Wiedergabe"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pause"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Stopp"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Lautstärke erhöhen"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Lautstärke verringern"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% Zwischenspeicher"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Läuft"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Wiedergabe anhalten"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Zuletzt verwendet"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Dauerhafte Wiedergabelisten"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Neues &Fenster"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "&Verlaufsspeicher leeren"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&DVD öffnen"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&VCD öffnen"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Audio-CD öffnen"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Umleitung öffnen ..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Verbinden"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "&Konsole"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "&Wiedergabeliste"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Minimaler Modus"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "&Bearbeitungsmodus"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Abgleichen &mit Wiedergabeliste"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Aufklappmenü anzeigen"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Sprachmenü anzeigen"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Größenverhältnis beibehalten"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Vollbild"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Arts-Kontrolle"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Öffnet ein neues Anwendungsfenster"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Öffnet eine vorhandene Datei"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Öffnet eine zuletzt benutzte Datei"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Aktuelle Quelldatei schließen"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Beendet das Programm"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Aktiviert/Deaktiviert die Statusleiste"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Aktiviert/Deaktiviert die Menüleiste"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Bereit."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Quelle"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD-Navigator"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Audio-CD"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "Zur &Liste hinzufügen"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Zu neuer &Gruppe hinzufügen"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "Hierher &kopieren"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Mehr ..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "DVD-Steuerung..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Bereit"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "DVD wird geöffnet ..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "VCD wird geöffnet ..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Audio-CD wird geöffnet ..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Umleitung wird geöffnet ..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Aus Umleitung lesen"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Geben Sie einen Befehl ein, der einen Audio-/Videodatenstrom auf die "
+"Standardausgabe\n"
+"ausgibt. Dieser wird dann auf die Standardeingabe von KMPlayer umgeleitet.\n"
+"\n"
+"Befehl:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "VDR wird geöffnet ..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Einleitung"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Datei wird geöffnet ..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Beenden"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Neues Anwendungsfenster wird geöffnet ..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Alle Dateien"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Datei öffnen"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Datei speichern"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Fehler beim Öffnen der Datei %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Datei wird geschlossen ..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Verlassen ..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Menüleiste mit %1 anzeigen"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Hierher verschieben"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Neue Gruppe"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "Eintrag &entfernen"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "Nach &oben"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Nach &unten"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Automatische Wiedergabe nach Öffnen der DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Beginnt direkt nach dem Öffnen mit dem Abspielen der DVD"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD-Schnittstelle:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "Pfad zum DVD-Gerät. Der Benutzer muss dafür Leserechte besitzen"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Optische Medien"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - Audio Compact Disk"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Video Compact Disk"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Digital Video Disk"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Titel"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Kapitel"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "Audio-&Sprache"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Untertitel"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Quelle"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Nächstes"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Basis"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "Nach &oben"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Automatische Wiedergabe nach Öffnen der VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Direkt nach dem Öffnen mit Wiedergabe der VCD beginnen"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD- bzw. CDROM-Schnittstelle:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr "Pfad zum CDROM/DVD-Gerät. Der Benutzer muss dafür Leserechte besitzen"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Stück "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Audio-CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Stück %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Umleitung"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Umleitung - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Bind-Adresse:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+"Falls Sie über mehrere Netzanschlüsse verfügen, können Sie den Zugang "
+"beschränken"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Zu überwachender Port:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Max. Anzahl Verbindungen:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Maximale Bandbreite (Kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Temporäre Eingabedatei:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Größe der Eingabedatei (KB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Format:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Mit der MPlayer-Wiedergabe funktionieren nur AVI, MPEG und RM"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Audio-Codec:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Audio-Bitrate (Kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Audio-Abtastrate (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Video-Codec:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Video-Bitrate (Kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Qualität (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Bildwiederholrate (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Gop-Größe:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Breite (Pixel):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Höhe (Pixel):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Zugriff erlauben von:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+"Einzelne IP-Adresse oder \"Start-Adresse End-Adresse\", falls ganze Bereiche "
+"erfasst werden sollen"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Rechner/IP-Adresse oder Adressbereich"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Laden"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Starten"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Broadcasting"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profile"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Fehler beim Beenden des ffserver-Prozesses."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Fehler beim Starten des ffserver-Prozesses.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Fehler beim Starten von ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Automatisch"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "OSS (Open Sound System)"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "SDL (Simple DirectMedia Layer)"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "ALSA (Advanced Linux Sound Architecture)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analoger Echtzeit-Synthesizer"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "Jack Audio-Verbindungs-Kit"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Dämon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "ALSA (Advanced Linux Sound Architecture) v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "ALSA (Advanced Linux Sound Architecture) v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Voreinstellungen der Treiber verwenden"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Wiedergabelisten-Hintergrund"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Wiedergabelisten-Vordergrund"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Konsole-Hintergrund"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Aktives Stück in Wiedergabeliste"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Konsole-Vordergrund"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Video-Hintergrund"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Ansichtsbereich-Hintergrund"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Infofenster-Hintergrund"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Infofenster-Vordergrund"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Wiedergabeliste"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Infofenster"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Datei %1 existiert nicht."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Die Datei %1 des Untertitels existiert nicht."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Lautstärke ist %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Wiedergeben mit"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Kon&sole"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Wiedergabeliste"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "&Audio-Sprachen"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Untertitel"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kontrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Helligkeit:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Farbton:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Sättigung:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "&Farben"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&KMPlayer einrichten ..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "&Eintrag der Wiedergabeliste bearbeiten"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Nicht gestartet"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Pufferung"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Wiedergabe"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Aufnahmegerät %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Wiedergabegerät %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "Adresse (URL)"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Getrennt"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "Adresse (URL) - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Verbindung wird hergestellt"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Fehler beim Beenden des Player-Prozesses."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Größenmuster"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Zwischenspeicher-Muster"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Positionsmuster"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Indexmuster"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Referenzmuster für Adresse (URL)"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Referenzmuster"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Startmuster"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "DVD Sprachmuster"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "DVD Untertitelmuster"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "DVD Titelmuster"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "DVD Kapitelmuster"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "VCD Titelmuster"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Audio-CD Titelmuster"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "MPlayer-Befehl:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Zusätzliche Befehlszeilenargumente:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Zwischenspeicher-Größe:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "KB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Neuen Index aufbauen, falls möglich"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Suche in indexierten Dateien ermöglichen (AVIs)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Allgemeine Einstellungen"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Video-Gerät:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Audio-Gerät:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Name:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Breite:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Höhe:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Nicht sofort wiedergeben"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Abspielen erst nach Drücken des Wiedergabeknopfs starten"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norm:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Frequenz (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Das Gerät wird aus dem Quellen-Menü zu entfernt.\n"
+"Fortfahren?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Bestätigen"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Treiber:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "Dummy, v4l oder bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Gerät:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Pfad zur Video-Gerätedatei, z. B. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Durchsuchen ..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Allgemein"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "TV-Schnittstelle"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Fernsehen"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Gerät ist bereits vorhanden."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Kein Gerät gefunden."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TV Scanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo-Port"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Basis-Port der XVideo-Erweiterung.\n"
+"Wenn auf dem Standard belassen (0), wird der erste verfügbare Port benutzt. "
+"Wenn Sie mehrere XVideo-Instanzen haben, muss der zu verwendende Port angegeben "
+"werden.\n"
+"Beachten Sie die Ausgabe von 'xvinfo' für weitere Informationen"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Kommunikations-Port:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Kommunikations-Port mit VDR. Der Standard-Port ist 2001.\n"
+"Bei Verwendung eines andern Ports, mit der Option '-p' von 'vdr', müssen Sie "
+"diesen hier ebenfalls einstellen."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Skala"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Bildseitenverhältnis beim Betrachten von VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Verbindung &trennen"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR-Taste Nach Oben"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR-Taste Nach Unten"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR-Taste Zurück"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR-Taste OK"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR-Taste Einstellung"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR-Taste Kanäle"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR-Taste Menü"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR-Taste Rot"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR-Taste Grün"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR-Taste Gelb"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR-Taste Blau"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR-Taste 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR-Taste 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR-Taste 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR-Taste 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR-Taste 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR-Taste 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR-Taste 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR-Taste 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR-Taste 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR-Taste 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Rechner nicht gefunden"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Verbindungsaufbau abgelehnt"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Benutzerdefinierter VDR-Befehl"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Sie können Befehle an VDR übergeben.\n"
+"Geben Sie 'HELP' ein, um eine Liste der verfügbaren Befehle zu sehen.\n"
+"VDR-Antworten können in der Konsole gesehen werden.\n"
+"\n"
+"VDR-Befehl:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Wiedergabeliste"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Lautstärke:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "Zu öffnende Datei"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "unbenannt"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "Keine"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[Attribute]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "In die &Zwischenablage kopieren"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Alles anzeigen"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Einstellungen"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Aussehen"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Ausgabe"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Aufnahme"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Ausgabe-Module"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Nachbearbeitung"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Fenster"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Größenverhältnis beibehalten"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Wenn diese Einstellung aktiviert ist, behält der Film sein vorgegebenes "
+"Größenverhältnis bei, auch wenn die Fenstergröße verändert wird"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Im Systembereich der Kontrollleiste andocken"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Falls diese Einstellung aktiviert ist, wird KMPlayer als Symbol zur "
+"Kontrolleiste hinzugefügt. \n"
+"Durch das Anklicken wird das Hauptfenster von KMPlayer verborgen und der "
+"Programmleisten-Knopf von KMPlayer entfernt."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Automatische Anpassung an Video-Größen"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Wenn diese Einstellung aktiviert ist, passt KMPlayer beim Starten des Videos "
+"seine Größe an die Filmgröße an"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Fenstergröße beim Beenden speichern"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Immer mit fester Größe starten"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Schleife"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Endlosschleife für derzeitigen Film"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Frame-Auslassungen zulassen"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Auslassen von Frames zur besseren Audio- und Video-Synchronisierung zulassen"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Automatisches Setzen der Lautstärke beim Start"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Wenn eine neue Quelle ausgewählt wird, so wird die Lautstärke entsprechend dem "
+"Lautstärkeregler angepasst"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Automatisches Setzen der Farbe beim Start"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"Beim Starten eines Films, werden die Farben entsprechend den Farbschiebereglern "
+"eingestellt"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Kontrollleiste"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Einrichtungsknopf anzeigen"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Fügt einen Knopf hinzu, der ein Einrichtungsmenü einblendet"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Wiedergabelistenknopf anzeigen"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Wiedergabelistenknopf zu den Kontrollknöpfen hinzufügen"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Aufnahmeknopf anzeigen"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Aufnahmeknopf zu den Kontrollknöpfen hinzufügen"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Broadcastknopf anzeigen"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Broadcastknopf zu den Kontrollknöpfen hinzufügen"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Vorwärts/Rückwärts-Suchzeit:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Farben"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Pfad:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Speicherort des abzuspielenden Stücks"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Untertitel:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "Optionaler Speicherort der Datei mit den Untertiteln der obigen URL"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "\"Klick für Wiedergabe\"-Unterstützung aktivieren"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Unterstützung für Internetseiten mit einem Startbild"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Für Film-Wiedergabe verwenden:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Netzwerk-Bandbreite"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Manchmal ist es möglich, zwischen verschiedenen Datenströmen mit "
+"unterschiedlichen Bitraten zu wählen.\n"
+"Diese Option bestimmt die Bandbreite, die bevorzugt für das Video verwendet "
+"werden soll."
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Manchmal ist es möglich, zwischen verschiedenen Datenströmen mit "
+"unterschiedlichen Bitraten auszuwählen.\n"
+"Diese Option bestimmt die maximale Bandbreite, die für das Video zur Verfügung "
+"stehen soll."
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "Bevorzugte Bitrate:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "Kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Maximale Bitrate:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Ausgabedatei:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "&Aufnahme starten"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Aktuelle Quelle: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Aufnahmegerät"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Automatische Wiedergabe"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Nein"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "Nach &Abschluss der Aufnahme"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&Danach"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Zeit (Sekunden):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Aufnahme stoppen"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Aufnahme starten"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Aktuelle Quelle: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Format"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Gleich wie Quelle"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Benutzerdefiniert"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mencoder-Parameter:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMpeg-Parameter:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Stellt den Video-Treiber ein. Empfohlen wird XVideo oder (bei fehlender "
+"Unterstützung des Formats) das langsamere X11."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Video-Treiber:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Audio-Treiber:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Nachbearbeitungsfilter aktivieren"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Nachbearbeitung bei TV/DVD-Wiedergabe deaktivieren"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Schnell"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Horizontales Entblocken"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Auto-Qualität"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Farbwert-Filterung"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Vertikales Entblocken"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Dering-Filter"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Autom. Helligkeit/Kontrast"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Helligkeit auf volles Spektrum erweitern"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Zeitweise Rauschen reduzieren"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Deinterlace-Filter mit linearem Überblenden"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Deinterlace-Filter mit linearem Interpolieren"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Deinterlace-Filter mit kubischem Interpolieren"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Median-Deinterlace-Filter"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "FFmpeg-Deinterlace-Filter"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Mplayers Standard-Nachbearbeitungsfilter aktivieren"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Eigene Nachbearbeitungsfilter aktivieren (siehe Karteikarte: "
+"Benutzer-Voreinstellungen)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Mplayers schnelle Nachbearbeitungsfilter aktivieren"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "Filter wird bei ausreichender Prozessor-Kapazität verwendet"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Helligkeit auf volles Spektrum erweitern (0...255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Benutzer-Voreinstellungen"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Deinterlacing"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Einstellungen zurücksetzen?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Sie sind im Begriff, alle Einstellungen auf die Vorgaben zurückzusetzen.\n"
+"Bitte bestätigen.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Vollbild"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Skala:"
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..ba24b47
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,1687 @@
+# translation of kmplayer.po to
+# translation of kmplayer.po to Greek
+# Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+#
+# Stergios Dramis <sdramis@egnatia.ee.auth.gr>, 2004.
+# Spiros Georgaras <sng@hellug.gr>, 2005, 2006, 2007.
+# Toussis Manolis <manolis@koppermind.homelinux.org>, 2005, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-06-19 10:13+0300\n"
+"Last-Translator: Spiros Georgaras <sng@hellug.gr>\n"
+"Language-Team: Greek <i18ngr@lists.hellug.gr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);X-Generator: KBabel 1.10\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Στέργιος Δράμης,Κουζινόπουλος Χάρης,Τούσης Μανώλης,Σπύρος Γεωργαράς"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+"sdramis@egnatia.ee.auth.gr,haris@mpa.gr,manolis@koppermind.homelinux.org,"
+"sng@hellug.gr"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Αναπαραγωγή"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Παύση"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Σταμάτημα"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Αύξηση έντασης"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Μείωση έντασης"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% λανθάνουσα μνήμη γεμάτη"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: αναπαραγωγή"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: σταμάτημα αναπαραγωγής"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "ΙΣΤΟΣ"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Πρόσφατο"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Μόνιμες λίστες"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Νέο &παράθυρο"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Καθαρισμός &ιστορικού"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "Ά&νοιγμα DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "Ά&νοιγμα VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "Ά&νοιγμα CD ήχου"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "Ά&νοιγμα διασωλήνωσης..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Σύνδεση"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "Κ&ονσόλα"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "&Λίστα αναπαραγωγής"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Απλοποιημένη λειτουργία"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "&Επεξεργασία κατάστασης"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Συγχρονισμός &με τη λίστα αναπαραγωγής"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Εμφάνιση αναδυόμενου μενού"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Εμφάνιση μενού γλώσσας"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Διατήρηση αναλογιών πλάτους/ύψους"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Πλήρης οθόνη"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Έλεγχος &arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Ανοίγει ένα νέο παράθυρο της εφαρμογής"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Ανοίγει ένα υπάρχον αρχείο"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Ανοίγει ένα πρόσφατα χρησιμοποιημένο αρχείο"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Κλείνει την πραγματική πηγή"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Κλείνει την εφαρμογή"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Ενεργοποιεί/απενεργοποιεί τη γραμμή κατάστασης"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Ενεργοποιεί/απενεργοποιεί τη γραμμή μενού"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Έτοιμο."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Πηγή"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "Περιηγητής &DVD"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "CD ή&χου"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Προσθήκη στη λίστα"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Προσθήκη νέας &ομάδας"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Αντιγραφή εδώ"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Περισσότερα..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "Πλοήγηση DVD..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Έτοιμο"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Άνοιγμα DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Άνοιγμα VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Άνοιγμα CD ήχου..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Άνοιγμα διασωλήνωσης..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Ανάγνωση από διασωλήνωση"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Δώστε μία εντολή που θα εξάγει μία ροή ήχου/βίντεο\n"
+"στην τυπική έξοδο. Αυτό θα οδηγηθεί στην κανονική είσοδο ενός αναπαραγωγέα.\n"
+"\n"
+"Εντολή:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Άνοιγμα VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Εισαγωγή"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Άνοιγμα αρχείου..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Έξοδος"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Άνοιγμα ενός νέου παραθύρου της εφαρμογής..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Όλα τα αρχεία"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Άνοιγμα αρχείου"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Αποθήκευση αρχείου"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Σφάλμα κατά το άνοιγμα του αρχείου %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Κλείσιμο αρχείου..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Έξοδος..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Εμφάνιση γραμμής μενού με %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Μετακίνηση εδώ"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Νέα ομάδα"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&Διαγραφή αντικειμένου"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Μετακίνηση πάνω"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Μετακίνηση &κάτω"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Αυτόματη αναπαραγωγή μετά το άνοιγμα του DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Έναρξη αναπαραγωγής του DVD αμέσως μετά το άνοιγμα του DVD"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Συσκευή DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Διαδρομή για τη συσκευή DVD, πρέπει να έχετε δικαιώματα ανάγνωσης σε αυτή τη "
+"συσκευή"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Δίσκοι"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - Δίσκος ήχου"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Δίσκος βίντεο"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Δίσκος ψηφιακού βίντεο"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Τίτλοι"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Κεφάλαια"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&Γλώσσα ήχου"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Υπότιτλοι"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Πηγή"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Επόμενο"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Βάση"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Πάνω"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Αυτόματη αναπαραγωγή μετά το άνοιγμα ενός VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Έναρξη της αναπαραγωγής του VCD αμέσως μετά το άνοιγμα του VCD"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Συσκευή VCD (CDROM):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Διαδρομή για τη συσκευή CDROM/DVD σας, πρέπει να έχετε δικαιώματα ανάγνωσης σε "
+"αυτή τη συσκευή"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Κομμάτι "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "CD ήχου"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Κομμάτι %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Διασωλήνωση"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Διασωλήνωση - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Διεύθυνση σύνδεσης:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Αν έχετε πολλές συσκευές δικτύου, μπορείτε να περιορίσετε την πρόσβαση"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Θύρα ακρόασης:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Μέγιστες συνδέσεις:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Μέγιστο εύρος ζώνης (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Προσωρινό αρχείο τροφοδότησης:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Μέγεθος αρχείου τροφοδότησης (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Μορφή:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Μόνο avi, mpeg και rm λειτουργούν για αναπαραγωγή με το mplayer"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Κωδικοποιητής ήχου:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Ρυθμός bit ήχου (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Ρυθμός δειγματοληψίας ήχου (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Κωδικοποιητής βίντεο:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Ρυθμός bit βίντεο (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Ποιότητα (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Ρυθμός καρέ (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Μέγεθος κομματιού βίντεο:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Πλάτος (εικονοστοιχεία):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Ύψος (εικονοστοιχεία):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Επιτρέπεται η πρόσβαση από:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'Ένα IP' ή 'αρχικό-IP τελικό-IP' για εύρος IP"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "IP υπολογιστή ή εύρος IP"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Φόρτωση"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Εκκίνηση"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Εκπομπή"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Προφίλ"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Αδυναμία τερματισμού της διεργασίας ffserver."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Αδυναμία εκκίνησης του ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Αδυναμία εκκίνησης του ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Αυτόματο"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound System"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analog Real-Time Synthesizer"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK σύστημα συνδέσεων ήχου"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Χρήση των προκαθορισμένων του συστήματος υποστήριξης"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Φόντο λίστας αναπαραγωγής"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Προσκήνιο·λίστας αναπαραγωγής"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Φόντο κονσόλας"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Ενεργό αντικείμενο λίστας"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Προσκήνιο κονσόλας"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Φόντο βίντεο"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Φόντο περιοχής προβολής"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Φόντο παραθύρου πληροφοριών"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Προσκήνιο παραθύρου πληροφοριών"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Λίστα αναπαραγωγής"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Παράθυρο πληροφοριών"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Το αρχείο %1 δεν υπάρχει."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Το αρχείο υποτίτλων %1 δεν υπάρχει."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Η ένταση είναι %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Αναπαραγωγή με"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Κο&νσόλα"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Λίστα αναπαραγωγής"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "&Γλώσσες ήχου"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Υπότιτλοι"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Αντίθεση:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Φωτεινότητα:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Απόχρωση:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Κορεσμός:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "&Χρώματα"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Ρύθμιση KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Επεξεργασία αν&τικειμένου λίστας"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Δεν εκτελείται"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Φόρτωση"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Αναπαραγωγή"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Εγγραφέας %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Αναπαραγωγέας %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Άγνωστο"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Αποσυνδέθηκε"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Σύνδεση"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Αδυναμία τερματισμού της διεργασίας αναπαραγωγέα."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Μοτίβο μεγέθους"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Μοτίβο λανθάνουσας μνήμης"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Μοτίβο θέσης"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Μοτίβο ευρετηρίου"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Μοτίβο URL αναφοράς"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Μοτίβο αναφοράς"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Μοτίβο εκκίνησης"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Μοτίβο γλώσσας DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Μοτίβο υποτίτλων DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Μοτίβο τίτλων DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Μοτίβο κεφαλαίων DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Μοτίβο κομματιών VCD"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Μοτίβο κομματιών CD ήχου"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "Εντολή του MPlayer:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Επιπρόσθετες παράμετροι γραμμής εντολών:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Μέγεθος λανθάνουσας μνήμης:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Κατασκευή νέου ευρετηρίου όταν είναι δυνατό"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Επιτρέπει την αναζήτηση σε αρχεία με ευρετήριο (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Γενικές επιλογές"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr "&Ice Ape"
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Συσκευή βίντεο:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Συσκευή ήχου:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Όνομα:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Πλάτος:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Ύψος:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Όχι άμεση αναπαραγωγή"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Εκκίνηση αναπαραγωγής μόνο μετά το πάτημα του κουμπιού αναπαραγωγή"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Καν:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Κανάλι"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Συχνότητα (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Πρόκειται να αφαιρέσετε αυτή τη συσκευή από το μενού πηγή.\n"
+"Συνέχεια;"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Επιβεβαίωση"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Οδηγός:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l ή bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Συσκευή:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Διαδρομή για τη συσκευή βίντεο σας, π.χ. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Σάρωση..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Γενικά"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "συσκευή TV"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Τηλεόραση"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Η συσκευή ήδη υπάρχει."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Δε βρέθηκε συσκευή."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "Σάρωση TV"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Θύρα XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Βασική θύρα της επέκτασης X Video\n"
+"Αν αφεθεί στην προκαθορισμένη τιμή (0), θα χρησιμοποιηθεί η πρώτη διαθέσιμη "
+"θύρα. Αν όμως έχετε πολλαπλές διεργασίες XVideo, ίσως θα πρέπει να καθορίσετε "
+"εδώ τη θύρα που θα χρησιμοποιηθεί.\n"
+"Για περισσότερες πληροφορίες δείτε την έξοδο της εντολής 'xvinfo'"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Θύρα επικοινωνίας:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Θύρα επικοινωνίας με το VDR. Η προκαθορισμένη θύρα είναι η 2001.\n"
+"Αν χρησιμοποιείτε μια άλλη θύρα, με την επιλογή '-p' του 'vdr', πρέπει να τη "
+"δηλώσετε και εδώ."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Κλίμακα"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Αναλογίες για χρήση με την προβολή VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Απ&οσύνδεση"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "Πάνω πλήκτρο VDR"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "Κάτω πλήκτρο VDR"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "Πίσω πλήκτρο VDR"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "Πλήκτρο VDR εντάξει"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "Πλήκτρο ρύθμισης VDR"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "Πλήκτρων καναλιών VDR"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "Πλήκτρο μενού VDR"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "Κόκκινο πλήκτρο VDR"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "Πράσινο πλήκτρο VDR"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "Κίτρινο πλήκτρο VDR"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "Μπλε πλήκτρο VDR"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "Πλήκτρο 0 VDR"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "Πλήκτρο 1 VDR"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "Πλήκτρο 2 VDR"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "Πλήκτρο 3 VDR"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "Πλήκτρο 4 VDR"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "Πλήκτρο 5 VDR"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "Πλήκτρο 6 VDR"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "Πλήκτρο 7 VDR"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "Πλήκτρο 8 VDR"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "Πλήκτρο 9 VDR"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Ο υπολογιστής δε βρέθηκε"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Η σύνδεση απορρίφθηκε"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Προσαρμοσμένη εντολή VDR"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Μπορείτε να περάσετε εντολές στο VDR.\n"
+"Εισάγετε 'HELP' για να δείτε μια λίστα των διαθέσιμων εντολών.\n"
+"Μπορείτε να δείτε την απάντηση του VDR στην κονσόλα.\n"
+"\n"
+"Εντολή VDR:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Θύρα "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Λίστα αναπαραγωγής"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Ένταση:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "αρχείο για άνοιγμα"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "ανώνυμο"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "κανένα"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[ιδιότητες]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Αντιγραφή στο πρόχειρο"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Εμφάνιση όλων"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Προτιμήσεις"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Εμφανίσεις"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Έξοδος"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Εγγραφή"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Πρόσθετα εξόδου"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Μεταεπεξεργασία"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Παράθυρο"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Διατήρηση αναλογίας μεγέθους"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Όταν επιλεγεί, η ταινία θα διατηρήσει την αναλογία διαστάσεών της\n"
+"όταν το παράθυρο αλλάξει μέγεθος"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Προσάρτηση στο πλαίσιο συστήματος"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Όταν ενεργοποιηθεί, ένα εικονίδιο του KMPlayer θα προστεθεί στο πλαίσιο "
+"συστήματος.\n"
+"Όταν του κάνετε κλικ θα κρύψει το κύριο παράθυρο του KMPlayer και θα αφαιρέσει "
+"το κουμπί γραμμής εργασιών του."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Αυτόματη αλλαγή μεγέθους σε μεγέθη βίντεο"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Όταν ενεργοποιηθεί, το KMPlayer θα αλλάξει το μέγεθος σε μεγέθη βίντεο\n"
+"κατά την έναρξη του βίντεο"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Απομνημόνευση μεγέθους παραθύρου κατά την έξοδο"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Έναρξη πάντα με σταθερό μέγεθος"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Επανάληψη"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Ορίζει την επανάληψη της τρέχουσας ταινίας"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Επιτρέπεται η απόρριψη καρέ"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Επιτρέπει την απόρριψη καρέ για καλύτερο συγχρονισμό μεταξύ ήχου και βίντεο"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Αυτόματη ρύθμιση της έντασης ήχου κατά την εκκίνηση"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Όταν επιλεγεί μια νέα τιμή, η ένταση θα οριστεί σύμφωνα με τον συστατικό "
+"ελέγχου έντασης"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Αυτόματη ρύθμιση των χρωμάτων κατά την εκκίνηση"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"Όταν αρχίσει μία ταινία, τα χρώματα θα ρυθμιστούν ανάλογα με την τιμή των "
+"ολισθητών για τα χρώματα"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Πίνακας ελέγχου"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Εμφάνιση κουμπιού ρύθμισης"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Προσθήκη ενός κουμπιού για την ανάδυση ενός μενού ρύθμισης"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Εμφάνιση κουμπιού λίστας"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Προσθήκη ενός κουμπιού λίστας αναπαραγωγής στα κουμπιά ελέγχου"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Εμφάνιση κουμπιού εγγραφής"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Προσθήκη ενός κουμπιού εγγραφής στα κουμπιά ελέγχου"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Εμφάνιση κουμπιού εκπομπής"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Προσθήκη ενός κουμπιού εκπομπής στα κουμπιά ελέγχου"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Χρόνος αναζήτησης μπροστά/πίσω:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Χρώματα"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Τοποθεσία:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Τοποθεσία του αντικειμένου για αναπαραγωγή"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Υπότιτλος:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+"Προαιρετική τοποθεσία ενός αρχείου που περιέχει τους υπότιτλους του παραπάνω "
+"URL"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Ενεργοποίηση υποστήριξης 'Κλικ για αναπαραγωγή'"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Υποστήριξη ιστοσελίδων που έχουν αρχική εικόνα"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Χρήση αναπαραγωγέα ταινιών:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Εύρος δικτύου"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Μερικές φορές είναι δυνατή η επιλογή μεταξύ διαφορετικών ροών με δοσμένο ένα "
+"ρυθμό bit.\n"
+"Αυτή η επιλογή ορίζει το εύρος που επιθυμείτε να χρησιμοποιήσετε για το βίντεο."
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Μερικές φορές είναι δυνατή η επιλογή μεταξύ διαφορετικών ροών με δοσμένο ένα "
+"ρυθμό bit.\n"
+"Αυτή η επιλογή ορίζει το εύρος που επιθυμείτε να χρησιμοποιήσετε για το βίντεο."
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "Προτεινόμενος ρυθμός bit:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Μέγιστο εύρος ζώνης (kbit):"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Αρχείο εξόδου:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Εκκίνηση &εγγραφής"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Τρέχουσα πηγή: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Εγγραφέας"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Αυτόματη αναπαραγωγή"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "Ό&χι"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "Ό&ταν τελειώσει η εγγραφή"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&Μετά"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Χρόνος (δευτερόλεπτα):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Σταμάτημα εγγραφής"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Εκκίνηση εγγραφής"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Τρέχουσα πηγή: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Μορφή"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Ίδια όπως η πηγή"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Προσαρμογή"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Παράμετροι mencoder:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Παράμετροι FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Ορίζει τον οδηγό βίντεο. Προτεινόμενος είναι ο XVideo, ή αν δεν υποστηρίζεται, "
+"ο X11, που είναι πιο αργός."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Οδηγός βίντεο:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Οδηγός ήχου:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Ενεργοποίηση της χρήσης φίλτρων μεταεπεξεργασίας"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Απενεργοποίηση της χρήσης μεταεπεξεργασίας για παρακολούθηση TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Γρήγορο"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Οριζόντια αφαίρεση κομματιών"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Αυτόματη ποιότητα"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Φιλτράρισμα χρώματος"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Κατακόρυφη αφαίρεση κομματιών"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Φίλτρο αφαίρεσης δακτυλίων"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Αυτόματη φωτεινότητα/αντίθεση"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Επέκταση φωτεινότητας στο πλήρες εύρος"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Χρονικός μειωτής θορύβου"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Απόπλεξη γραμμικής ανάμειξης"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Απόπλεξη γραμμικής παρεμβολής"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Απόπλεξη κυβικής παρεμβολής"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Απόπλεξη διαμέσου"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "Απόπλεξη FFmpeg"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Ενεργοποίηση των προκαθορισμένων φίλτρων μεταεπεξεργασίας του mplayer"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Ενεργοποίηση προσαρμοσμένων φίλτρων μεταεπεξεργασίας (Δείτε: καρτέλα "
+"προσαρμοσμένη ρύθμιση)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Ενεργοποίηση των γρήγορων φίλτρων μεταεπεξεργασίας του mplayer"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "Το φίλτρο χρησιμοποιείται αν υπάρχει επαρκής ΚΜΕ"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Επεκτείνει τη φωτεινότητα στο πλήρες εύρος (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Προσαρμοσμένη προεπιλογή"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Απόπλεξη"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Επαναφορά ρυθμίσεων;"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Πρόκειται να επαναφέρετε όλες τις ρυθμίσεις σας στις προκαθορισμένες.\n"
+"Παρακαλώ επιβεβαιώστε.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Πλήρης οθόνη"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Κλίμακα:"
diff --git a/po/en_GB.po b/po/en_GB.po
new file mode 100644
index 0000000..1417ae9
--- /dev/null
+++ b/po/en_GB.po
@@ -0,0 +1,1685 @@
+# translation of kmplayer.po to British English
+# Copyright (C) 2003,2004, 2005, 2007 Free Software Foundation, Inc.
+# Malcolm Hunter <malcolm.hunter@gmx.co.uk>, 2003,2004.
+# Jonathan Riddell <kde-en-gb@jriddell.org>, 2003.
+# Andrew Coles <andrew_coles@yahoo.co.uk>, 2004, 2005, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-01-09 16:00+0000\n"
+"Last-Translator: Andrew Coles <andrew_coles@yahoo.co.uk>\n"
+"Language-Team: British English <kde-en-gb@kde.me.uk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Jonathan Riddell"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "kde-en-gb@jriddell.org"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "P&lay"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pause"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Stop"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Increase Volume"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Decrease Volume"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% Cache fill"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Playing"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Stop Playing"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Most Recent"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Persistent Playlists"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "New &Window"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Clear &History"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Open DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Open VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Open Audio CD"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Open Pipe..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Connect"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "C&onsole"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Pla&y List"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Minimal mode"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "&Edit mode"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Sync &with playlist"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Show Popup Menu"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Show Language Menu"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Keep Width/Height Ratio"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Full Screen"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Arts Control"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Opens a new application window"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Opens an existing file"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Opens a recently used file"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Closes the actual source"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Quits the application"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Enables/disables the statusbar"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Enables/disables the menubar"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Ready."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "S&ource"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD Navigator"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Audio CD"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Add to list"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Add in new &Group"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Copy here"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+#, fuzzy
+msgid "More..."
+msgstr "More ..."
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "DVD Navigation ..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Ready"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Opening DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Opening VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Opening Audio CD..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Opening pipe..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Read From Pipe"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Opening VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Intro"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Opening file..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Exit"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Opening a new application window..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|All Files"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Open File"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Save File"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Error opening file %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Closing file..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Exiting..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Show Menubar with %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Move here"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "New group"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&Delete item"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Move up"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Move &down"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Auto play after opening DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Start playing DVD right after opening DVD"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD device:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "Path to your DVD device, you must have read rights to this device"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Optical Disks"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - Audio Compact Disk"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Video Compact Disk"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Digital Video Disk"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Titles"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Chapters"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "Audio &Language"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&SubTitles"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Source"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Next"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Root"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Up"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Auto play after opening a VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Start playing VCD right after opening VCD"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CDROM) device:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Path to your CDROM/DVD device, you must have read rights to this device"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Track "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Audio CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Track %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Pipe"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Pipe - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Bind address:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "If you have multiple network devices, you can limit access"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Listen port:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Maximum connections:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Maximum bandwidth (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Temporary feed file:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Feed file size (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Format:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Only avi, mpeg and rm work for mplayer playback"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Audio codec:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Audio bit rate (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Audio sample rate (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Video codec:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Video bit rate (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Quality (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Frame rate (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Gop size:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Width (pixels):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Height (pixels):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Allow access from:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'Single IP' or 'start-IP end-IP' for IP ranges"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Host/IP or IP Range"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Load"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Start"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Broadcasting"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profiles"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Failed to end ffserver process."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Failed to start ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Failed to start ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Auto"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound System"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analogue Real-Time Synthesiser"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK Audio Connection Kit"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Use back-end defaults"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Playlist background"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Playlist foreground"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Console background"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Playlist active item"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Console foreground"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Video background"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Viewing area background"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Info window background"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Info window foreground"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Playlist"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Info window"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "File %1 does not exist."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Sub title file %1 does not exist."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Volume is %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Play with"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Con&sole"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Play&list"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "&Audio languages"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Subtitles"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Contrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Brightness:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Hue:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Saturation:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Co&lours"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Configure KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Edit playlist &item"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Not Running"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Buffering"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Playing"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Recorder %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Player %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Unknown"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "Disonnected"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Connecting"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Failed to end player process."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Size pattern"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Cache pattern"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Position pattern"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Index pattern"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Reference URL pattern"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Reference pattern"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Start pattern"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "DVD language pattern"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "DVD subtitle pattern"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "DVD titles pattern"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "DVD chapters pattern"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "VCD track pattern"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Audio CD tracks pattern"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "MPlayer command:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Additional command line arguments:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Cache size:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Build new index when possible"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Allows seeking in indexed files (AVIs)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "General Options"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Video device:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Audio device:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Name:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Width:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Height:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Do not immediately play"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Only start playing after clicking the play button"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norm:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Channel"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Frequency (MHz)"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"You're about to remove this device from the Source menu.\n"
+"Continue?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Confirm"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Driver:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l or bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Device:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Path to your video device, eg. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Scan..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "General"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "tv device"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Television"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Device already present."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "No device found."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo port"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Communication port:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Scale"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Aspects to use when viewing VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Dis&connect"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR Key Up"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR Key Down"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR Key Back"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR Key Ok"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR Key Setup"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR Key Channels"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR Key Menu"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR Key Red"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR Key Green"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR Key Yellow"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR Key Blue"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR Key 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR Key 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR Key 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR Key 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR Key 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR Key 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR Key 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR Key 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR Key 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR Key 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Host not found"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Connection refused"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Custom VDR command"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Play List"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Volume:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "file to open"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "unnamed"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "none"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[attributes]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Copy to Clipboard"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Show all"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Preferences"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Looks"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Output"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Recording"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Output Plugins"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Postprocessing"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Window"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Keep size ratio"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"When ticked, movie will keep its aspect ratio\n"
+"when window is resized"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Dock in system tray"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"When ticked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Auto resize to video sizes"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"When ticked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Remember window size on exit"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Always start with fixed size"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Loop"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Makes current movie loop"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Allow framedrops"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "Allow dropping frames for better audio and video synchronisation"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Auto set volume on start"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Auto set colours on start"
+
+#: pref.cpp:236
+#, fuzzy
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"When a movie start, the colours will be set according the sliders for colours"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Control Panel"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Show config button"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Add a button that will popup a config menu"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Show playlist button"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Add a playlist button to the control buttons"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Show record button"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Add a record button to the control buttons"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Show broadcast button"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Add a broadcast button to the control buttons"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Forward/backward seek time:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Colours"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Location:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Location of the playable item"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Sub title:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "Optional location of a file containing the subtitles of the URL above"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Enable 'Click to Play' support"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Support for WEB pages having a start image"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Use movie player:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Network bandwidth"
+
+#: pref.cpp:373
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Sometimes it's possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would like to spend for video"
+
+#: pref.cpp:375
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Sometimes it's possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you can spend for video"
+
+#: pref.cpp:376
+#, fuzzy
+msgid "Preferred bitrate:"
+msgstr "Prefered bitrate:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Maximum bitrate:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Output file:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Start &Recording"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Current source: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Recorder"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Auto Playback"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&No"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&When recording finished"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "A&fter"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Time (seconds):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Stop Recording"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Start Recording"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Current Source: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Format"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Same as source"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Custom"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mencoder arguments:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMpeg arguments:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Video driver:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Audio driver:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Enable use of postprocessing filters"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Disable use of postprocessing when watching TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Fast"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Horizontal deblocking"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Auto quality"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Chrominance filtering"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Vertical deblocking"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Dering filter"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Auto brightness/contrast"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Stretch luminance to full range"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Temporal noise reducer"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Linear blend deinterlacer"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Linear interpolating deinterlacer"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Cubic interpolating deinterlacer"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Median deinterlacer"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "FFmpeg deinterlacer"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Enable mplayer's default postprocessing filters"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr "Enable custom postprocessing filters (See: Custom preset -tab)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Enable mplayer's fast postprocessing filters"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "Filter is used if there's enough CPU"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Stretches luminance to full range (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Custom Preset"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Deinterlacing"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Reset Settings?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Fullscreen"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Scale:"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "Filter is used if there's enough CPU"
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..978129f
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,1715 @@
+# translation of kmplayer.po to Spanish
+# Translation of kmplayer to Castilian aka Spanish
+# This file is distributed under the same license as the KMPlayer package.
+# Copyright (C) 2003 Quique <quique@sindominio.net>
+#
+# Quique <quique@sindominio.net>, 2003, 2004.
+# Pablo Pita Leira <pablo.pita@kdemail.net>, 2004, 2005.
+# Carlos Mayo Hernandez <carlos.mayo@hispalinux.es>, 2005.
+# Miguel Perez Ibars <mpi79470@alu.um.es>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-03-19 14:57+0100\n"
+"Last-Translator: Miguel Perez Ibars <mpi79470@alu.um.es>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Carlos Mayo Hernández, Quique, Pablo Pita Leira, Miguel Pérez Ibars"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+"carlos.mayo@hispalinux.es, quique@sindominio.net, pablo.pita@kdemail.net, "
+"mpi79470@alu.um.es"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Reproducir"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pausa"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Detener"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Aumentar volumen"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Disminuir volumen"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% llenado de la caché"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Reproduciendo"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Detener la reproducción"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "&Ventana nueva"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Borrar &Historial"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Abrir DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Abrir VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+#, fuzzy
+msgid "&Open Audio CD"
+msgstr "&Abrir VCD"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Abrir flujo..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Conectar"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "C&onsola"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Lista de &reproducción"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Modo mínimo"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "Modo de &edición"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Sincronizar &con lista de reproducción"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Mostrar menú emergente"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Mostrar menú de idioma"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Mantener la proporción anchura/altura"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "Pantalla &completa"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Control de &Arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Abre una nueva ventana de la aplicación"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Abre un archivo ya existente"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Abre un archivo usado recientemente"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Cierra la fuente actual"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Sale de la aplicación"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Habilita/deshabilita la barra de estado"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Habilita/deshabilita la barra de menú"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Preparado."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Origen"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "Navegador &DVD"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "Navegación del DVD..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Preparado"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Abriendo el DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Abriendo el VCD..."
+
+#: kmplayerapp.cpp:817
+#, fuzzy
+msgid "Opening Audio CD..."
+msgstr "Abriendo el VCD..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Abriendo flujo..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Leer de un flujo"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Introduzca un comando que enviará un flujo de audio/video a la salida\n"
+"estándar. Este se pasará a la entrada estándar de un reproductor.\n"
+"\n"
+"Comando:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Abriendo el VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Introducción"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Abriendo archivo..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Salida"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Abriendo una nueva ventana de la aplicación..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Todos los archivos"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Abrir archivo"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Guardar archivo"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Error al abrir el archivo %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Cerrando archivo..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Saliendo..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Mostrar la barra de menú con %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Reproducir automáticamente tras abrir el DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Empezar a reproducir el DVD inmediatamente después de abrirlo"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Dispositivo DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Ruta a su dispositivo DVD, usted debe tener permisos de lectura sobre este "
+"dispositivo"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Títulos"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Capítulos"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&Idioma de audio"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Subtítulos"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Origen"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Siguiente"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Raíz"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Arriba"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Reproducir automáticamente tras abrir un VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Empezar a reproducir el VCD inmediatamente después de abrirlo"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Dispositivo VCD (CDROM):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Ruta a su dispositivo CDROM/DVD, usted debe tener permisos de lectura sobre "
+"este dispositivo"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Pistas"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+#, fuzzy
+msgid "Audio CD"
+msgstr "Codec de audio:"
+
+#: kmplayerapp.cpp:2203
+#, fuzzy, c-format
+msgid "Track %1"
+msgstr "Pistas"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Flujo"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Flujo - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Dirección de 'bind':"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Si tiene varios dispositivos de red, puede limitar el acceso"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Puerto a escuchar:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Máximo de conexiones:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Máximo de ancho de banda (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Archivo de alimentación temporal:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Tamaño del archivo de alimentación (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Formato:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "mplayer sólo reproduce avi, mpeg y rm"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Codec de audio:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Tasa de bits de audio (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Frecuencia de muestreo de audio (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Codec de vídeo:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Tasa de bits de vídeo (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Calidad (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Frecuencia de refresco (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Tamaño de 'gop':"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Anchura (pixels):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Altura (pixels):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Permitir el acceso desde:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'IP única' o 'primera_IP última_IP' para intervalos de IP"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Máquina/IP o intervalo de IP"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Carga"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Inicio"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Retransmisión"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Perfiles"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "No fue posible terminar el proceso ffserver."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"No fue posible iniciar ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "No fue posible iniciar ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "Personalizado"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound System"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analog Real-Time Synthesizer"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v.0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Utilizar valores del programa base"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Fondo de la lista de reproducción"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Primer plano de la lista"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Fondo de la consola"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Elemento activo de la lista"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Fondo de la consola"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Fondo del video"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Fondo del área de visión"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Fondo de la ventana de información"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Primer plano de la ventana de información"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Lista de reproducción"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Ventana de información"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "El archivo %1 no existe."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "El archivo de subtítulos %1 no existe."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Volumen es %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "Re&producir con"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Con&sola"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Lista de reproducción"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "&Idiomas de audio"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Subtítulos"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Contraste:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Brillo:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Tono:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Saturación:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Co&lores"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Configurar KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Editar &elemento de la lista de reproducción"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Sin ejecución"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Buffering"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Reproduciendo"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Grabadora %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Reproductor %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "Des&conectar"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+#, fuzzy
+msgid "Connecting"
+msgstr "&Conectar"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "No fue posible terminar el proceso de reproducción."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Patrón de tamaño"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Patrón de caché"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Patrón de posición"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Patrón de índice"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Patrón de URL de referencia"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Patrón de referencia"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Patrón de inicio"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Patrón de idioma del DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Patrón de subtítulos del DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Patrón de títulos del DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Patrón de capítulos del DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Patrón de pistas del VCD"
+
+#: kmplayerprocess.cpp:882
+#, fuzzy
+msgid "Audio CD tracks pattern"
+msgstr "Patrón de pistas del VCD"
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Argumentos adicionales de línea de órdenes:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Tamaño del caché:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Construir un nuevo índice cuando sea posible"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Permite buscar en archivos indexados (AVIs)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Opciones generales"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Dispositivo de vídeo:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Dispositivo de audio:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Nombre:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Anchura:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Altura:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "No reproducir inmediatamente"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr ""
+"Iniciar la reproducción únicamente al pulsar sobre el botón de reproducción"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norma:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Canal"
+
+#: kmplayertvsource.cpp:100
+#, fuzzy
+msgid "Frequency (MHz)"
+msgstr "Frecuencia"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Se dispone a eliminar este dispositivo del menú Fuentes.\n"
+"¿Continuar?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Controlador:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l o bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Dispositivo:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Ruta a su dispositivo de vídeo, ejemplo, /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Explorar..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "General"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "Dispositivo de tv"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Dispositivo ya presente."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "No se ha encontrado ningún dispositivo."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Puerto de XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Puerto base de la extensión de X Video.\n"
+"Si se deja por omisión (0), se usará el primer puerto disponible. Sin embargo "
+"si dispone de varias instancias de XVideo, puede que tenga que indicar aquí el "
+"puerto a utilizar.\n"
+"Ver la salida de 'xvinfo' para más información."
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Puerto de comunicación:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Puerto de comunicación con el VDR. por omisión es el 2001.\n"
+"Si usa otro puerto, con la opción '-p' de 'vdr', debe indicarlo aquí también."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Escala"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Aspecto a usar cuando se ve un VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Des&conectar"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "Tecla de Arriba del VDR"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "Tecla de Abajo del VDR"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "Tecla de Retorno del VDR"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "Tecla de OK del VDR"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "Tecla de Configuración del VDR"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "Tecla de canales del VDR"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "Tecla de Menú del VDR"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "Tecla Roja del VDR"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "Tecla Verde del VDR"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "Tecla Amarilla del VDR"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "Tecla Azul del VDR"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "Tecla 0 del VDR"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "Tecla 1 del VDR"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "Tecla 2 del VDR"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "Tecla 3 del VDR"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "Tecla 4 del VDR"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "Tecla 5 del VDR"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "Tecla 6 del VDR"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "Tecla 7 del VDR"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "Tecla 8 del VDR"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "Tecla 9 del VDR"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Servidor no encontrado"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Conexión rechazada"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Comando personalizado del VDR"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Puede enviar comandos al VDR.\n"
+"Introduzca 'HELP' (ayuda) para ver una lista de comandos.\n"
+"Puede ver la respuesta del VDR en la ventana de la consola.\n"
+"\n"
+"Comando VDR:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Puerto "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Lista de reproducción"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Volumen:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "archivo a abrir"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "sin nombre"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[atributos]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Copiar al portapapeles"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Mostrar todos"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Preferencias"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Apariencias"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Salida"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Grabación"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Complementos (plugins) de salida"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Post-procesamiento"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Ventana"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Mantener las proporciones"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Si está marcado, la película conserva sus proporciones\n"
+"cuando se redimensiona la ventana"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Anclar en la bandeja del sistema"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Cuando está marcado, se añadirá un icono de KMPlayer a la bandeja del sistema.\n"
+"Cuando se pulse, ocultará la ventana principal de KMPlayer y quitará el botón "
+"de KMPlayer de la barra de tareas."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Redimensionar automáticamente al tamaño del vídeo"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Si está marcado, KMPlater se redimensionará al tamaño de la película\n"
+"cuando comience el vídeo"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Recordar el tamaño de la ventana al salir"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Comenzar siempre en un tamaño fijo"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Repetir"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Repite la película actual"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Permitir la pérdida de fotogramas"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Permitir que se pierdan fotogramas para una mejor sincronización de audio y "
+"vídeo"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Auto establecer volumen al comienzo"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Cuando se seleccione una nueva fuente, se pondrá el volumen de acuerdo al "
+"control del volumen"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Establecer colores automáticamente al inicio"
+
+#: pref.cpp:236
+#, fuzzy
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"Cuando se seleccione una nueva fuente, se pondrá el volumen de acuerdo al "
+"control del volumen"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Panel de control"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Mostrar el botón de configuración"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Añadir un botón para emerger el menú de configuración"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Mostrar el botón de la lista de reproducción"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Añadir un botón de lista de reproducción al control de botones."
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Mostrar el botón de grabación"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Añadir un botón de grabación a los botones de control"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Mostrar el botón de retransmisión"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Añadir un botón de retransmisión a los botones de control"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Tiempo de avance/retroceso:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Colores"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Ubicación:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Ubicación del elemento a reproducir"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Subtítulos:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+"Ubicación opcional de un archivo que contiene los subtítulos de la URL de "
+"arriba."
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Habilitar soporte para 'Pulse para reproducir'"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Soporte para página WEB que tienen una imagen de inicio"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Utilizar el reproductor de películas:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Ancho de banda de la red"
+
+#: pref.cpp:373
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Algunas veces es posible elegir entre varios flujos dado una tasa de bits "
+"particular.\n"
+"Esta opción establece cúanto ancho de banda desearía utilizar para el video."
+
+#: pref.cpp:375
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Algunas veces es posible elegir entre varios flujos dado una tasa de bits "
+"particular.\n"
+"Esta opción establece cúanto ancho de banda puede utilizar para el vídeo."
+
+#: pref.cpp:376
+#, fuzzy
+msgid "Preferred bitrate:"
+msgstr "Tasa de bits preferida:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Tasa de bits máxima:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Archivo de salida:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Empezar la g&rabación"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Fuente actual: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Grabador"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Reproducción automática"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&No"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Cuando finalice la grabación"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&Después de"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Tiempo (segundos):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Detener la grabación"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Iniciar la grabación"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Fuente actual: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Formato"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "El mismo que el origen"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Personalizado"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Argumentos de mencoder:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Argumentos de FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Configura el controlador de vídeo. Se recomienda XVideo, o, si no está "
+"soportado, X11, que es más lento."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Controlador de vídeo:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Controlador de audio:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Habilitar el uso de los filtros de post-procesamiento"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Deshabilitar el uso de los filtros de post-procesamiento al ver TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Rápido"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Desbloqueo horizontal"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Calidad automática"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Filtrado de crominancia"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Desbloqueo vertical"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Filtro dering"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Brillo/contraste automático"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Extender la luminancia a todo el intervalo"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Reductor de ruido temporal"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Desentrelazador de degradado lineal"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Desentrelazador de interpolación lineal"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Desentrelazador de interpolación cúbica"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Desentrelazado de mediana"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "Desentrelazador FFmpeg"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Habilitar los filtros de post-procesamiento predefinidos de mplayer"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Habilitar los filtros de post-procesamiento personalizados (Vea la solapa "
+"Preconfiguración personalizada)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Activar los filtros rápidos de post-procesamiento de mplayer"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "Se usa el filtro si hay suficiente CPU"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Extiende la luminancia a todo el intervalo (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Preconfiguración personalizada"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Desentrelazado"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "¿Reestablecer la configuración?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Se dispone a sobreescribir todas sus configuraciones con los valores "
+"predeterminados.\n"
+"Por favor, confirme.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Pantalla completa"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Escala:"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "Se usa el filtro si hay suficiente CPU"
+
+#~ msgid "empty"
+#~ msgstr "vacio"
+
+#~ msgid "tv://"
+#~ msgstr "tv://"
diff --git a/po/et.po b/po/et.po
new file mode 100644
index 0000000..3f7aca5
--- /dev/null
+++ b/po/et.po
@@ -0,0 +1,1666 @@
+# translation of kmplayer.po to Estonian
+#
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+# Marek Laane <bald@starman.ee>, 2003-2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-09-23 21:16+0300\n"
+"Last-Translator: Marek Laane <bald@starman.ee>\n"
+"Language-Team: Estonian <kde-et@linux.ee>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Marek Laane"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "bald@starman.ee"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "Esitus"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Paus"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Stopp"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Heli juurde"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Heli maha"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% puhvrist täidetud"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: mängib"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: mängimine peatatud"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Kõige viimane"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Püsivad esitusnimekirjad"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "&Uus aken"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Pu&hasta ajalugu"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Ava DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Ava VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Ava audio CD"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Ava toru..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "Ü&henda"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "K&onsool"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Es&itusnimekiri"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Minimaalne režiim"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "&Redigeerimisrežiim"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Sünkroniseeri &esitusnimekirjaga"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Näita hüpikmenüüd"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Näita keelemenüüd"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Hoia alles kõrguse/laiuse suhe"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Täisekraan"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Arts kontroll"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Avab uue rakenduse akna"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Avab olemasoleva faili"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Avab viimati kasutatud faili"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Sulgeb käesoleva allika"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Väljub rakendusest"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Lülitab olekuriba sisse/välja"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Lülitab menüüriba sisse/välja"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Valmis."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "A&llikas"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD navigaator"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Audio CD"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "Lis&a nimekirja"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Lisa ude &gruppi"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Kopeeri siia"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Rohkem..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "DVD liikumine..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Valmis"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "DVD avamine..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "VCD avamine..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Audio CD avamine..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Toru avamine..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Torust lugemine"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Kirjuta käsk, millega audio/videovoog saadetakse standardväljundisse (stdout).\n"
+"Sealt suunatakse see edasi mängija standardsisendisse.\n"
+"\n"
+"Käsk:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "VDR avamine..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Sissejuhatus"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Faili avamine..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Välju"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Uue akna avamine..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Kõik failid"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Faili avamine"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Faili salvestamine"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Viga faili %1 avamisel.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Faili sulgemine..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Väljumine..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Näita %1 menüüriba"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Liiguta siia"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Uus grupp"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&Kustuta element"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Liiguta üles"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "L&iiguta alla"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Automaatne esitus pärast DVD avamist"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "DVD esitus algab kohe pärast DVD avamist"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD seade:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "DVD seadme asukoht, sul peab olema õigus seadet kasutada (lugeda)"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Optilised plaadid"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - kompaktaudioplaat"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - kompaktvideoplaat"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - digitaalvideoplaat"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Tiitlid"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Peatükid"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "Audio&keel"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Subtiitrid"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Allikas"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Järgmine"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Juur"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "Ü&les"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Automaatne esitus pärast VCD avamist"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "VCD esitus algab kohe pärast VCD avamist"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CDROM) seade:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr "CD-ROM/DVD seadme asukoht, sul peab olema õigus seda kasutada (lugeda)"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Rada "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Audio CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Rada %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Toru"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Toru - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Bind aadress:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Kui sul on mitu võrguseadet, võid piirata ligipääsu"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Jälgitav port:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Maks. ühendusi:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Maks. koormus (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Ajutine kanalifail:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Kanalifaili suurus (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Vorming:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Mplayeri taasesituseks sobib ainult avi, mpeg ja rm"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Audiokoodek:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Audio bitikiirus (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Audio diskreetimissagedus (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Videokoodek:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Video bitikiirus (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Kvaliteet (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Kaadrisagedus (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Pildigrupi (gop) suurus:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Laius (pikslit):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Kõrgus (pikslit):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Ligipääs on lubatud:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'Üksik IP' või 'algus-IP lõpp-IP' IP vahemike puhul"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Masin/IP või IP vahemik"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Lae"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Käivita"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Teler"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profiilid"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Protsessi ffserver lõpetamine ebaõnnestus."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Ffserveri käivitamine ebaõnnestus.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Ffmpegi käivitamine ebaõnnestus."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Automaatne"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "OSS (Open Sound System)"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "ALSA (Advanced Linux Sound Architecture)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analoogreaalajasüntesaator (aRts)"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK Audio Connection Kit"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "ESD (Enlightened Sound Daemon)"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "ALSA (Advanced Linux Sound Architecture) v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "ALSA (Advanced Linux Sound Architecture) v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Taustaporgrammi vaikeväärtuse kasutamine"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Esitusnimekirja taust"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Esitusnimekirja esiplaan"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Konsooli taust"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Esitusnimekirja aktiivne element"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Konsooli esiplaan"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Video taust"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Vaateala taust"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Infoakna taust"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Infoakna esiplaan"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Esitusnimekiri"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Infoaken"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Faili %1 ei ole olemas."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Subtiitrifaili %1 ei ole olemas."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Helitugevus on %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Mängi kasutades"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Kon&sool"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Esitusnimekiri"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Audio&keeled"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Subtiitrid"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kontrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Heledus:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Toon:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Värviküllastus:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Vä&rvid"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&KMPlayeri seadistamine..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "&Muuda esitusnimekirja kirjet"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Ei tööta"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Puhverdamine"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Esitus"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Salvestaja %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Mängija %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Tundmatu"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Lahutatud"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Ühendumine"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Mängija protsessi lõpetamine ebaõnnestus."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "M&Player"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Suuruse muster"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Puhvri muster"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Asukoha muster"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Indeksi muster"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Viite URL-i muster"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Viite muster"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Alguse muster"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "DVD keele muster"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "DVD subtiitrite muster"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "DVD tiitlite muster"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "DVD peatükkide muster"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "VCD raja muster"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Audio CD raja muster"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "MPlayeri käsk:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Täiendavad käsurea argumendid:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Puhvri suurus:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Uue indeksi loomine, kui võimalik"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Lubab otsida indekseeritud failides (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Üldised valikud"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr "&Ice Ape"
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Videoseade:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Heliseade:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Nimi:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Laius:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Kõrgus:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Ei käivitata kohe"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Mängima hakatakse alles pärast nupule vajutamist"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Suhe:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Sagedus (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Kavatsed selle seadme allikate menüüst eemaldada.\n"
+"Kas tõesti jätkata?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Kinnitus"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Draiver:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "fiktiivne: v4l või bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Seade:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Videoseadme asukoht, nt. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Otsi..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Üldine"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "TV-seade"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Televisioon"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Seade on juba olemas."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Seadet ei leitud."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo port"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"X Video laiendi põhiport.\n"
+"Kui jätta kehtima vaikeväärtus (0), kasutatakse esimest kättesaadavat porti. "
+"Kui sul töötab aga mitu XVideo protsessi, tuleks siin anda kasutatav port.\n"
+"Vaata täpsemat infot käsu 'xvinfo' väljundist."
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Kommunikatsiooniport:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"VDR-iga suhtlemise port. Vaikimisi 2001.\n"
+"Kui kasutad muud porti käsu 'vdr' võtmega '-p', tuleb see samuti siin anda."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Mastaap"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "VDR-i vaatamisel kasutatav mastaap"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "La&huta"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR Key Up"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR Key Down"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR Key Back"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR Key Ok"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR Key Setup"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR Key Channels"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR Key Setup"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR Key Red"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR Key Green"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR Key Yellow"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR Key Blue"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR Key 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR Key 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR Key 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR Key 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR Key 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR Key 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR Key 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR Key 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR Key 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR Key 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Masinat ei leitud"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Ühendusest keelduti"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Kohandatud VDR käsk"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"VDR-ile on võimalik edastada käske.\n"
+"Kirjuta 'HELP', kui soovid näha kõiki võimalikke käske.\n"
+"VDR-i reageerimist näeb konsooliaknas.\n"
+"\n"
+"VDR käsk:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Esitusnimekiri"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Helitugevus:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "avatav fail"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "nimetu"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "puudub"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[atribuudid]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Kopeeri lõikepuhvrisse"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Näita kõiki"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Seadistused"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Vaated"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Väljund"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Salvestamine"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Väljundpluginad"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Järeltöötlus"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Aken"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Formaat säilitatakse"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Sisselülitamisel säilitatakse akna suuruse\n"
+"muutmisel filmi formaat"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Dokkimine süsteemsesse salve"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Sisselülitamisel lisatakse süsteemsesse salve KMPlayeri ikoon.\n"
+"Sellel klõpsates peidetakse KMPlayeri peaaken ja eemaldatakse rakenduse ikoon "
+"tegumiribalt."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Suuruse automaatne muutmine video põhjal"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Sisselülitamisel muudab KMPlayer video käivitamisel\n"
+"vajaduse korral filmi suurust"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Akna suuruse meeldejätmine väljumisel"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Alati käivitatakse kindla suurusega"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Kordus"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Sisselülitamisel korratakse käesolevat filmi"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Kaadrite vahelejätu lubamine"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Lubab kaadreid vahele jätta audio ja video paremaks sünkroniseerimiseks"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Helitugevuse automaatne määramine käivitamisel"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Uue allika valimisel määratakse helitugevus automaatselt vastavalt helitugevuse "
+"määrangule"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Värvide automaatne määramine käivitamisel"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr "Filmi alustamisel määratakse värvid vastavalt värviliuguritele"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Juhtimispaneel"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Seadistamisnupu näitamine"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Lisatakse nupp, mis avab seadistusmenüü"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Esitusnimekirja nupu näitamine"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Juhtnuppudele lisatakse esitusnimekirja nupp"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Salvestamisnupu näitamine"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Juhtnuppudele lisatakse salvestamisnupp"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Telerinupu näitamine"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Juhtnuppudele lisatakse telerinupp"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Edasi/tagasiotsingu aeg:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Värvid"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Asukoht:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Esitatava elemendi asukoht"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Subtiitrid:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+"Lisavõimalusena faili asukoht, mis sisaldab ülaltoodud URL-i subtiitreid"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "'Klõps mängimiseks' toetus"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Veebilehekülgede toetus, mis lubavad esitust käivitada"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Kasutatakse filmimängijat:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Võrgu ribalaius"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Mõnikord on võimalik vastavalt bitikiirusele valida erinevate voogude vahel.\n"
+"Siin saab määrata, kui palju ribalaiust soovid videole eraldada."
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Mõnikord on võimalik vastavalt bitikiirusele valida erinevate voogude vahel.\n"
+"Siin saab määrata maksimaalse videole eraldatava ribalaiuse."
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "Eelistatud bitikiirus:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Maks. bitikiirus:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Väljundfail:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Alusta &salvestamist"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Käesolev allikas: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Salvestaja"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Automaatne taasesitus"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Ei"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Kui salvestamine on lõpetatud"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&Pärast"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Aeg (sek):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Peata salvestamine"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Alusta salvestamist"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Käesolev allikas: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Vorming"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Sama mis allikal"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Kohandatud"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mencoderi argumendid:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMpeg argumendid:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Määrab videodraiveri. Soovitatav on XVideo või kui see ei ole toetatud, siis "
+"X11, mis on aeglasem."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Videodraiver:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Audiodraiver:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Järeltöötluse filtrid on lubatud"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Järeltöötlus on keelatud TV/DVD vaatamisel"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Kiire"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Blokieemaldus (horisontaalne)"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Automaatne kvaliteet"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Värvuse filtreerimine"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Blokieemaldus (vertikaalne)"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Nurgapuhastusfilter"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Automaatne heledus/kontrast"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Heledus täisulatuses"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Ajutise müra taandamine"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Ülerealaotuse eemaldaja (lineaarne blending)"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Ülerealaotuse eemaldaja (lineaarne interpolatsioon)"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Ülerealaotuse eemaldaja (kolmanda astme interpolatsioon)"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Ülerealaotuse eemaldaja (mediaan)"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "Ülerealaotuse eemaldaja (FFmpeg)"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Mplayeri järeltöötluse vaikefiltrite lubamine"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr "Kohandatud järeltöötluse filtrite lubamine (vaata kaarti 'Kohandatud')"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Mplayeri kiire järeltöötluse filtrite lubamine"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "Filtrit kasutatakse, kui CPU-l võhma jätkub"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Heledust kasutatakse täisulatuses (0...255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Kohandamisvalikud"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Kihilisuse eemaldamine"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Kas lähtestada seadistused?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Soovisid anda kõigile oma seadistusele vaikeväärtused.\n"
+"Palun kinnita oma siirast soovi.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Täisekraan"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Mastaap:"
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..8f81eaa
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,1678 @@
+# translation of kmplayer.po to Finnish
+# Teemu Rytilahti <teemu.rytilahti@kde-fi.org>, 2003.
+# Niklas Laxström <niklas.laxstrom+kdetrans@gmail.com>, 2006.
+# Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-04-14 22:25+0300\n"
+"Last-Translator: Niklas Laxström <niklas.laxstrom+kdetrans@gmail.com>\n"
+"Language-Team: Finnish <kde-i18n-fi-discussion@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Teemu Rytilahti,Niklas Laxström"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "teemu.rytilahti@kde-fi.org,niklas.laxstrom+kdetrans@gmail.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Soita"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Tauko"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Pysäytä"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Lisää äänenvoimakkuutta"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Vähennä äänenvoimakkuutta"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% välimuistissa"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Soitetaan"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Lopeta soittaminen"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Uusi &ikkuna"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Tyhjennä &historia"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Avaa DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Avaa VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+#, fuzzy
+msgid "&Open Audio CD"
+msgstr "&Avaa VCD"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Avaa putki..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Yhdistä"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "K&omentotuloste"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "&Soittolista"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Vähimmäistila"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr ""
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Näytä ponnahdusvalikko"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Näytä kielivalikko"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Säilytä kuvasuhde"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Kokoruututila"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Arts-hallinta"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Avaa uuden ohjelmaikkunan"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Avaa olemassa olevan tiedoston"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Avaa viimeaikaisen tiedoston"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Sulkee lähdetiedoston"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Sammuttaa ohjelman"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Näyttää tai piilottaa tilarivi"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Näyttää tai piilottaa valikorivi"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Valmiina"
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Media"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD-navigoija"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "DVD-navigointi..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Valmiina"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Avataan DVD:tä..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Avataan VCD:tä..."
+
+#: kmplayerapp.cpp:817
+#, fuzzy
+msgid "Opening Audio CD..."
+msgstr "Avataan VCD:tä..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Avataan putkea..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Lue putkesta"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Avataan VDR:ää..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Intro"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Avataan tiedostoa..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Lopeta"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Avataan uutta ohjelmaikkunaa..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Kaikki tiedostot"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Avaa tiedosto"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Tallenna tiedosto"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Tiedoston %1 avaus epäonnistui.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Suljetaan tiedostoa..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Lopetetaan..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr ""
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Soita automaattisesti DVD-levyn avauksen jälkeen"
+
+#: kmplayerapp.cpp:1708
+#, fuzzy
+msgid "Start playing DVD right after opening DVD"
+msgstr "Aloita soittaminen automaattisesti DVD:n avaamisen jälkeen"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD-laite:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Polku DVD-laitteeseesi. Sinulla täytyy olla lukuoikeudet tähän laitteeseen"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Otsikot"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Kappaleet"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&Puhuttu kieli"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Tekstitykset"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Lähde"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Seuraava"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Juuri"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Ylös"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2069
+#, fuzzy
+msgid "Start playing VCD right after opening VCD"
+msgstr "Aloita soittaminen automaattisesti VCD:n avaamisen jälkeen"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CDROM)-laite:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+#, fuzzy
+msgid "Track "
+msgstr "&Kappaleet"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+#, fuzzy
+msgid "Audio CD"
+msgstr "Äänikoodekki:"
+
+#: kmplayerapp.cpp:2203
+#, fuzzy, c-format
+msgid "Track %1"
+msgstr "&Kappaleet"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Putki"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Putki - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Kuunneltava portti:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Yhteyksien enimmäismäärä:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Muoto:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Mplayer tukee vain avi-, mpeg- ja rm-tiedostomuotoja"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Äänikoodekki:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Äänen bittinopeus (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Äänen näytteenottotaajuus (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Videokoodekki:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Videon bittinopeus (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Laatu (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Leveys (pikseleinä):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Korkeus (pikseleinä):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "ffserver-prosessin lopettaminen epäonnistui."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"ffserver-sovelluksen käynnistäminen epäonnistui.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "ffmpeg-sovelluksen käynnistäminen epäonnistui."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr ""
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "Oma"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound System"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analog Real-Time Synthesizer"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Soittolistan tausta"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Soittolistan edusta"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Komentoikkunan tausta"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Soittolistan aktiivinen nimeke"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Komentoikkunan tausta"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Videon tausta"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Näkymän tausta"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Tietoikkunan tausta"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Tietoikkunan edusta"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Soittolista"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Tietoikkuna"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Tiedosta %1 ei ole olemassa."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Tekstitystiedostoa %1 ei ole."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Äänenvoimakkuus on %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Soita ohjelmalla"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Komentotulo&ste"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Soitto&lista"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "&Puhekieli"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Tekstitys"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kontrasti:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Kirkkaus:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Vä&rit"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&KMPlayerin asetukset..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Muokkaa soittolista&nimikettä"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "ei ole päällä"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "puskuroi"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Soitto"
+
+#: kmplayerpartbase.cpp:1384
+#, fuzzy
+msgid "Recorder %1 %2"
+msgstr "Nauhoittaja"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Soitinohjelma %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Tuntematon"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "&Katkaise yhteys"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "Verkko-osoite: %1"
+
+#: kmplayerpartbase.cpp:1859
+#, fuzzy
+msgid "Connecting"
+msgstr "&Yhdistä"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Soitinprosessin sulkeminen epäonnistui."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Välimuistikoko:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Rakenna uusi indeksi, kun mahdollista"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Salli indeksoiduista (AVI-) tiedostoista hakeminen"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Yleiset asetukset"
+
+#: kmplayerprocess.cpp:978
+#, fuzzy
+msgid "MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Videolaite:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Äänilaite:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Nimi:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Leveys:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Korkeus:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Älä soita heti"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Aloita soittaminen vain, kun soita-painiketta napsautetaan"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr ""
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanava"
+
+#: kmplayertvsource.cpp:100
+#, fuzzy
+msgid "Frequency (MHz)"
+msgstr "Taajuus"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Vahvista"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Ajuri:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l tai bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Laite:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Videolaitteen polku. Esim. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Etsi..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Yleiset"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr ""
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Laite on jo olemassa."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Laitteita ei löytynyt."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr ""
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr ""
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr ""
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Kuvasuhde"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+#, fuzzy
+msgid "VDR"
+msgstr "VCD"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "&Katkaise yhteys"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR Key Up"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR Key Down"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR Key Back"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR Key Ok"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR Key Setup"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR Key Channels"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR Key Menu"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR Key Red"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR Key Green"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR Key Yellow"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR Key Blue"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR Key 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR Key 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR Key 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR Key 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR Key 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR Key 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR Key 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR Key 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR Key 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR Key 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr ""
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr ""
+
+#: kmplayervdr.cpp:752
+#, fuzzy
+msgid "X&Video"
+msgstr "Videokoodekki:"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Soittolista"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Äänenvoimakkuus:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "avattava tiedosto"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "nimetön"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Kopioi leikepöydälle"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Näytä kaikki"
+
+#: pref.cpp:67
+#, fuzzy
+msgid "Preferences"
+msgstr "KMPlayerin asetukset"
+
+#: pref.cpp:82
+#, fuzzy
+msgid "Looks"
+msgstr "Toista"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Tuloste"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Nauhoitetaan"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+#, fuzzy
+msgid "Output Plugins"
+msgstr "Tulosteliitännäiset"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Jälkikäsittely"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Ikkuna"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Säilytä kuvasuhde"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Jos valittuna, elokuva säilyttää kuvasuhteen\n"
+"kun ikkunan kokoa muutetaan"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr ""
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+#, fuzzy
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Jos valittuna, elokuva säilyttää kuvasuhteen\n"
+"kun ikkunan kokoa muutetaan"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Toista"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr ""
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Salli kuvapudotukset"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Hallintapaneeli"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Näytä hallintapainike"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+#, fuzzy
+msgid "Show playlist button"
+msgstr "Näytä hallintanappulat"
+
+#: pref.cpp:245
+#, fuzzy
+msgid "Add a playlist button to the control buttons"
+msgstr "Lisää nauhoituspainikkeen hallintapainikkeisiin"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Näytä nauhoituspainike"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Lisää nauhoituspainikkeen hallintapainikkeisiin"
+
+#: pref.cpp:248
+#, fuzzy
+msgid "Show broadcast button"
+msgstr "Näytä hallintanappulat"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr ""
+
+#: pref.cpp:256
+#, fuzzy
+msgid "Forward/backward seek time:"
+msgstr "Eteenpäin/taaksepäin hakuaika (sec.)"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Värit"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Sijainti:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Soitettavan kohteen sijainti"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Tekstitys:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Käytä ”Soita napsautuksella” -tukea"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Käytä soitinta:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Verkon kaistanleveys"
+
+#: pref.cpp:373
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Joskus on mahdollista valita useammasta eri bittinopeuden virrasta sopivin. "
+"Tässä voit määritellä kuinka paljon kaistaa videokäytölle annetaan."
+
+#: pref.cpp:375
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Joskus on mahdollista valita useammasta eri bittinopeuden virrasta sopivin. "
+"Tässä voit määritellä kuinka paljon kaistaa videokäytölle annetaan."
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Enimmäisbittinopeus:"
+
+#: pref.cpp:401
+#, fuzzy
+msgid "Output file:"
+msgstr "Tulostetiedosto:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Aloita &nauhoittaminen"
+
+#: pref.cpp:411
+#, fuzzy
+msgid "Current source: "
+msgstr "Nykyinen lähde: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Nauhoittaja"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Automaattinen toisto"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Ei"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Kun nauhoitus on valmis"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&Jälkeen"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Aika (sekunneissa):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Lopeta nauhoitus"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Aloita nauhoitus"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Nykyinen lähde: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Muoto"
+
+#: pref.cpp:544
+#, fuzzy
+msgid "Same as source"
+msgstr "Sama kuin lähde"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Oma"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mencoder-parametrit:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMpeg-parametrit:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Videoajuri:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Ääniajuri:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Nopea"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Automaattinen laatu"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr ""
+
+#: pref.cpp:732
+#, fuzzy
+msgid "Dering filter"
+msgstr "Avataan tiedostoa..."
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Automaattinen kirkkaus/kontrasti"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr ""
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr ""
+
+#: pref.cpp:837
+#, fuzzy
+msgid "Reset Settings?"
+msgstr "Lisäasetukset"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Olet aikoissa korvata kaikki asetuksesi oletuksilla.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr ""
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Kokonäyttötila"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr ""
+
+#~ msgid "empty"
+#~ msgstr "tyhjä"
+
+#~ msgid "tv://"
+#~ msgstr "tv://"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..980351a
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,1691 @@
+# translation of kmplayer.po to Français
+# traduction de kmplayer.po en Français
+# translation of kmplayer.po to
+#
+# Matthieu Robin <kde@macolu.org>, 2003, 2004.
+# Robert Jacolin <rjacolin@ifrance.com>, 2003.
+# Matthieu Robin <kde@macolu.org>, 2004, 2005.
+# Yannick Torres <yannick.torres@keliglia.com>, 2005, 2006.
+# Nicolas Ternisien <nicolas.ternisien@gmail.com>, 2005.
+# Yannick Torrès <yannick.torres@keliglia.com>, 2006, 2007.
+# Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-01-27 12:10+0100\n"
+"Last-Translator: Yannick Torrès <yannick.torres@keliglia.com>\n"
+"Language-Team: Français <fr@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Matthieu Robin,Nicolas Ternisien,Yannick Torrès"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "kde@macolu.org,nicolas.ternisien@gmail.com,yannick.torres@keliglia.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Lecture"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pause"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Arrêt"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Augmenter le volume"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Diminuer le volume"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% du cache rempli"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer : lecture en cours"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer : arrêt de la lecture"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Le plus récent"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Listes de lecture persistantes"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Nou&velle fenêtre"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Effacer l'&historique"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Ouvrir un DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Ouvrir un VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Ouvrir un CD audio"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Ouvrir un tube..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Connecter"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "C&onsole"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "&Liste de lecture"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Mode minimaliste"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50 %"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100 %"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150 %"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "&Mode édition"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "&Synchronisation avec la liste de lecture"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Montrer le menu"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Montrer le menu de sélection de langue"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Conserver le rapport largeur/hauteur"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "Plein &écran"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Contrôle d'&arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Ouvre une nouvelle fenêtre"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Ouvre un fichier existant"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Ouvre un fichier récemment utilisé"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Ferme la source actuelle"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Quitte l'application"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Active / désactive la barre d'état"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Active / désactive la barre de menu"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Prêt."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "S&ource"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "Navigateur &DVD"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "CD &audio"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Ajouter à la liste"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Ajouter dans un nouveau &groupe"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Copier ici"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&idéo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Plus..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "Navigation DVD..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Prêt"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Ouverture du DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Ouverture du VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Ouverture d'un CD audio..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Ouverture du tube..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Lire du tube"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Saisissez une commande qui enverra un flux audio / vidéo sur la sortie "
+"standard. Elle sera redirigée vers l'entrée standard d'un lecteur.\n"
+"\n"
+"Commande :"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Ouverture du VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Intro"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Ouverture du fichier..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Sortie"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Ouverture d'une nouvelle fenêtre..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Tous les fichiers"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Ouvrir un fichier"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Enregistrer le fichier"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Erreur lors de l'ouverture du fichier %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Fermeture du fichier..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Fermeture..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Afficher la barre de menu avec %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Déplacer ici"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Nouveau groupe"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&Effacer l'élément"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Monter"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "&Descendre"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Lire automatiquement après l'ouverture d'un DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Commence à lire le DVD juste après l'avoir ouvert"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Lecteur de DVD : "
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Chemin vers votre lecteur de DVD, vous devez avoir les droits de lecture sur ce "
+"périphérique"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Disques optiques"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - Compact Disque Audio"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Compact Disque Vidéo"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Disque Vidéo Digital"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Titres"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Chapitres"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&Langue de la piste audio"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Sous-titres"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Source"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "Navigation DVD"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Suivant"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Racine"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "Plus ha&ut"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Lire automatiquement après l'ouverture d'un VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Commence à lire le VCD juste après l'avoir ouvert"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Lecteur de VCD (CD-Rom) : "
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Chemin vers votre lecteur de CD-Rom / DVD, vous devez avoir les droits de "
+"lecture sur ce périphérique"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Piste "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "CD audio"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Piste %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Tube"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Tube - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Adresse d'écoute :"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Si vous avez plusieurs interfaces réseaux, vous pouvez limiter l'accès"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Port à écouter : "
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Nombre maximal de connexions : "
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Bande passante maximale (kbit) : "
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Fichier d'alimentation provisoire :"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Taille du fichier d'alimentation (en ko) :"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Format : "
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ""
+"Seuls l'avi, le mpeg et le rm fonctionnent pour la lecture avec mplayer"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Codec audio : "
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Débit audio (kbit) : "
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Fréquence audio (Hz) : "
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Codec vidéo : "
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Débit vidéo (kbit) : "
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Qualité (1-31) : "
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Images par seconde (Hz) : "
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Taille du GOP&nbsp;:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Largeur (pixels) : "
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Hauteur (pixels) : "
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Autoriser l'accès depuis :"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "« IP seule » ou « IP de début IP de fin » pour les plages d'IP"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Hôte / IP ou plage d'IP"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Charger"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Démarrer"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Diffusion"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profils"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Impossible de terminer le processus ffserver."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Impossible de démarrer ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Impossible de démarrer ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Automatique"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound System"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture (ALSA)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analog Real-Time Synthesizer"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "Kit de connexion audio JACK"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Utiliser les valeurs par défaut du backend"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Couleur d'arrière-plan de la liste de lecture"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Couleur de premier-plan de la liste de lecture"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Couleur d'arrière-plan de la console"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Couleur de l'élément courant de la liste de lecture"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Couleur de premier-plan de la console"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Couleur d'arrière-plan de la vidéo"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Couleur d'arrière-plan de l'espace de visualisation"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Couleur d'arrière-plan de la fenêtre d'information"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Couleur de premier-plan de la fenêtre d'information"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Liste de lecture"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Fenêtre d'information"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Le fichier %1 n'existe pas."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Le fichier de sous-titres %1 n'existe pas."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Le volume est %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "Jouer a&vec"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Con&sole"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Liste de lecture"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "&Langue de la piste audio"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Sous-titres"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Contraste :"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Luminosité :"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Teinte :"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Saturation :"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Cou&leurs"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Configurer KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Éditer l'élément &de la liste de lecture"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Actuellement à l'arrêt"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Mise en mémoire tampon"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Lecture"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Enregistreur %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Lecteur %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Déconnecter"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Connexion"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Impossible de terminer le processus du lecteur."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Chaîne de taille :"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Chaîne de cache :"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Chaîne de position"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Chaîne d'index :"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Chaîne d'URL référence :"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Chaîne de référence :"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Chaîne de démarrage :"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Chaîne de langue DVD :"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Chaîne de sous-titre DVD :"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Chaîne de titre DVD :"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Chaîne de chapitre DVD :"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Chaîne de piste VCD :"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Masque pour les pistes du CD audio"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "Commande MPlayer :"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Arguments additionnels pour la ligne de commande : "
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Taille du cache : "
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "ko"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Construire un nouvel index lorsque c'est possible"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Autorise la recherche dans les fichiers indexés (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Options générales"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Périphérique vidéo : "
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Périphérique audio : "
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Nom : "
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Largeur : "
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Hauteur : "
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Ne pas lire tout de suite"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Ne commencer à lire qu'après avoir appuyé sur le bouton « Lecture »"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norme : "
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Canal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Fréquence (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Vous êtes sur le point d'enlever ce périphérique du menu « source ».\n"
+"Continuer ?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Confirmer"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Pilote : "
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l ou bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Périphérique : "
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Chemin vers votre carte TV, par exemple /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Rechercher..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Général"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "Périphérique TV"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Télévision"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV : "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Le périphérique est déjà présent."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Aucun périphérique trouvé."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Port XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Le port de base de l'extension X Video.\n"
+"Si le choix par défaut (0) est laissé, le premier port disponible sera utilisé. "
+"Cependant, si vous avez plusieurs instances XVideo, vous aurez peut-être besoin "
+"d'indiquer ici le port à utiliser.\n"
+"Consultez la sortie de la commande « xvinfo » pour plus d'informations."
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Port de communication :"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Le port de communication avec VDR. Par défaut, il s'agit du port 2001.\n"
+"Si vous utilisez un autre port, avec l'option « -p » de « vdr », vous devez "
+"l'indiquer ici."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Échelle"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Aspects à utiliser lors de l'affichage de VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Dé&connecter"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "Touche haut de VDR"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "Touche bas de VDR"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "Touche retour de VDR"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "Touche Ok de VDR"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "Touche configuration de VDR"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "Touche canaux de VDR"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "Touche menu de VDR"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "Touche rouge de VDR"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "Touche verte de VDR"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "Touche jaune de VDR"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "Touche bleue de VDR"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "Touche 0 de VDR"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "Touche 1 de VDR"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "Touche 2 de VDR"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "Touche 3 de VDR"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "Touche 4 de VDR"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "Touche 5 de VDR"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "Touche 6 de VDR"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "Touche 7 de VDR"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "Touche 8 de VDR"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "Touche 9 de VDR"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Hôte non trouvé"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Connexion refusée"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Commande VDR personnalisée"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Vous pouvez passer des commandes à VDR.\n"
+"Saisissez « HELP » pour voir la liste des commandes disponibles.\n"
+"Vous pouvez voir la réponse de VDR dans la fenêtre de la console.\n"
+"\n"
+"Commande VDR :"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Liste de lecture"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Volume : "
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "fichier à ouvrir"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "sans nom"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "aucun"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[attributs]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Copier vers le presse-papiers"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Tout montrer"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Préférences"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Allure"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Sortie"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Enregistrement en cours"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Modules de sortie"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Post-traitement"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Fenêtre"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Conserver le rapport de taille"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Lorsque cette case est cochée, la vidéo conserve ses proportions\n"
+"lorsque la fenêtre est redimensionnée"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Placer dans la boîte à miniatures"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Lorsque cette case est cochée, une icône de KMPlayer sera ajoutée dans la boîte "
+"à miniatures.\n"
+"Lorsque vous cliquerez dessus, la fenêtre principale de KMPlayer sera cachée et "
+"le bouton KMPlayer de la barre des tâches sera supprimé."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Ajuster automatiquement aux dimensions de la vidéo"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Lorsque cette case est cochée, KMPlayer redimensionnera\n"
+"la fenêtre aux dimensions de la vidéo lors du démarrage de la vidéo"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Enregistrer la taille de la fenêtre en quittant"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Toujours démarrer à une taille fixe"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Boucle"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Fait tourner la vidéo actuelle en boucle"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Autoriser le saut d'images"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Autoriser le saut d'images pour une meilleure synchronisation audio et vidéo"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Régler automatiquement le volume au démarrage"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Lorsqu'une nouvelle source est sélectionnée, le volume sera réglé en accord "
+"avec le contrôleur de volume."
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Régler automatiquement les couleurs au démarrage"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"Lorsqu'une vidéo commence, les couleurs seront réglées en accord avec le "
+"contrôleur de couleurs"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Panneau de contrôle"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Afficher le bouton de configuration"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Ajouter un bouton qui affichera un menu de configuration"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Afficher le bouton de liste de lecture"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Ajouter un bouton de liste de lecture aux boutons de contrôle"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Afficher le bouton d'enregistrement"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Ajouter un bouton d'enregistrement aux boutons de contrôle"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Afficher le bouton de diffusion"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Ajouter un bouton de diffusion aux boutons de contrôle"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Intervalle d'avance / retour rapide :"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Couleurs"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Emplacement :"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Emplacement de l'élément à jouer"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Sous-titres :"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+"Emplacement optionnel du fichier contenant les sous-titres de l'URL ci-dessous"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Activer la prise en charge du « Cliquez pour lire »"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Support des pages WEB ayant une image de démarrage"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Utiliser le lecteur de vidéos :"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Bande passante du réseau"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Quelques fois, il est possible de choisir entre plusieurs flux pour un débit "
+"particulier.\n"
+"Cette option définit la quantité de bande passante que vous voulez allouer pour "
+"la vidéo."
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Quelques fois, il est possible de choisir entre plusieurs flux pour un débit "
+"particulier.\n"
+"Cette option définit la quantité de bande passante que vous pouvez allouer pour "
+"la vidéo."
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "Débit préféré :"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "ko/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Bande passante maximale :"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Fichier de sortie :"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Démarrer l'en&registrement"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Source actuelle : "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Enregistreur"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Lecture automatique"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Non"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Lorsque l'enregistrement est terminé"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "A&près"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Temps (secondes) :"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Arrêter l'enregistrement"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Démarrer l'enregistrement"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Source actuelle : "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Format"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Identique à la source"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Personnalisé"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Arguments de MEncoder :"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Arguments de FFMpeg :"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Règle le pilote vidéo. XVideo est recommandé s'il est pris en charge, X11 étant "
+"plus lent."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Pilote vidéo : "
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Pilote audio : "
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Activer l'usage des filtres de post-traitement"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+"Désactiver l'usage des filtres de post-traitement pour la TV et les DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Rapide"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Dégagement horizontal"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Qualité automatique"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Filtrage de la chrominance"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Dégagement vertical"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Filtre de rendu"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Luminosité / contraste automatique"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Étendre la luminance à la gamme complète"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Réducteur de bruit temporel :"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Désentrelacement par mélange linéaire"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Désentrelacement par interpolation linéaire"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Désentrelacement par interpolation cubique"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Désentrelacement médian"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "Désentrelacement FFmpeg"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Activer les filtres de post-traitement par défaut de mplayer"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Activer les filtres de post-traitement personnalisés (voir l'onglet "
+"« Préréglages personnalisés »)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Activer les filtres de post-traitement rapides de mplayer"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "Le filtre est utilisé s'il y a assez de puissance CPU disponible"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Étend la luminance à la gamme complète (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Préréglages personnalisés"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Désentrelacement"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Réinitialiser les paramètres ?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Vous êtes sur le point d'écraser tous vos paramètres avec ceux par défaut.\n"
+"Veuillez confirmer.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Plein écran"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Échelle :"
diff --git a/po/ga.po b/po/ga.po
new file mode 100644
index 0000000..dc097db
--- /dev/null
+++ b/po/ga.po
@@ -0,0 +1,1667 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: kdeextragear-2/kmplayer.po\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2004-12-03 14:52-0500\n"
+"Last-Translator: Kevin Patrick Scannell <scannell@SLU.EDU>\n"
+"Language-Team: ga <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Séamus Ó Ciardhuáin,Kevin Scannell"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "seoc at iolfree dot ie,scannell at slu dot edu"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "S&einn"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Sos"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Stad"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Níos Airde"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Níos Lú"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% Taisce líonta"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Ag Seinm"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Éirigh as Sheinm"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "GRÉASÁN"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "&Fuinneog Nua"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Glan an &Stair"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Oscail DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Oscail VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Oscail CD Fuaime"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Oscail Píopa..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Nasc"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "C&onsól"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Sei&nmliosta"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Mód íosta"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "Mód &eagarthóireachta"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr ""
+
+# "I" under Main -> Amharc
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "Scáileán &Iomlán"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Rialú &Arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Oscail fuinneog nua fheidhmchláir"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Oscail comhad atá ann"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr ""
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr ""
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Éirigh as an bhfeidhmchlár"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Cumasaigh/díchumasaigh an barra stádais"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Cumasaigh/díchumasaigh an barra roghchláir"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Réidh."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "F&oinse"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr ""
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "F&íseán"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr ""
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Réidh"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "DVD á oscailt..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "VCD á oscailt..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "CD Fuaime á oscailt..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Píopa á oscailt..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Léigh Ó Phíopa"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "VDR á Oscailt..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr ""
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Comhad á oscailt..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Scoir"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Fuinneog nua fheidhmchlár á oscailt..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Gach Comhad"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Oscail Comhad"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Sábháil Comhad"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Earráid agus comhad %1 á oscailt.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Comhad á dhúnadh..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Ag scor..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Taispeáin an Barra Roghchláir le %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Seinn go huathoibríoch i ndiaidh an DVD a oscailt"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Gléas DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Teideil"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Caibidlí"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr ""
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Fotheideil"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Foinse"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr ""
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Ar Aghaidh"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Fréamh"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "S&uas"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Seinn go huathoibríoch i ndiaidh VCD a oscailt"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Gléas VCD (CDROM):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Amhrán "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "CD Fuaime"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Amhrán %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Píopa"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Píopa - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Seoladh ceangailte:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Port cloisteála:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Formáid:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "(Dí-)chomhbhrú fuaime:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Ráta giotán fuaime (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Ráta samplála fuaime (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "(Dí-)chomhbhrú físe:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Ráta giotán físe (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Cáilíocht (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Ráta fráma (Hz)"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Leithead (picteilíní):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Airde (picteilíní):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Luchtaigh"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Tosaigh"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Craolachán"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Próifílí"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Uathoibríoch"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Córas Fuaime Oscailte"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr ""
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Sintéiseoir Analógach Fíor-Ama"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr ""
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr ""
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr ""
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr ""
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr ""
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr ""
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr ""
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr ""
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr ""
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Seinmliosta"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr ""
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Níl an comhad %1 ann."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Airde: %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Seinn le"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Con&sól"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Seinm&liosta"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Fotheideil"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Codarsnacht:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Gile:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Lí:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Sáithiú:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Da&thanna"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Cumraigh KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Níl sé ag rith"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Á Mhaolánú"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Á Sheinm"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Taifeadán %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Seinnteoir %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Anaithnid"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Dínasctha"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Ag Nascadh"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr ""
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "Ordú MPlayer:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr ""
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr ""
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Roghanna Ginearálta"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Gléas Físe:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Gléas fuaime:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Ainm:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Leithead:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Airde:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Ná seinn láithreach"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr ""
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr ""
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Cainéal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Minicíocht (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Dearbhaigh"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Tiománaí:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l nó bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Gléas:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Conair do ghléis físe, m.sh. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Scan..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Ginearálta"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "Gléas tv"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr ""
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr ""
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr ""
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Port XFíseán"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr ""
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Scála"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "&Dínasc"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr ""
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr ""
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr ""
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr ""
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr ""
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr ""
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr ""
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr ""
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr ""
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr ""
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr ""
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr ""
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr ""
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr ""
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr ""
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr ""
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Ní bhfuarthas an t-óstríomhaire"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Nasc diúltaithe"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Físeán"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Seinmliosta"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Airde:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "comhad le hoscailt"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "gan ainm"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Cóipeáil go dtí an Ghearrthaisce"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Taispeáin Uile"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Sainroghanna"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr ""
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Aschur"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Á Thaifeadh"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr ""
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Iarphróiseáil"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Fuinneog"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr ""
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr ""
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Lúb"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr ""
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr ""
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr ""
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr ""
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr ""
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr ""
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr ""
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr ""
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr ""
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr ""
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr ""
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Dathanna"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr ""
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Suíomh:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr ""
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr ""
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Uasráta giotán:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Aschomhad:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr ""
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Foinse reatha: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Taifeadán"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Athsheinm Uathoibríoch"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Ná Déan"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr ""
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "T&ar éis"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Am (soicindí):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr ""
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr ""
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Foinse reatha: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Formáid"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr ""
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Saincheaptha"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr ""
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Argóintí FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Tiománaí físe:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Tiománaí fuaime:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Tapa"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Díbhlocáil chothrománach"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Uathcháilíocht"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Scagadh crómanais"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Díbhlocáil ingearach"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Scagaire Dering"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr ""
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "Díchrosfhíodóir FFmpeg"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Réamhshocrú Saincheaptha"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Díchrosfhí"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Athshocraigh na Socruithe?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Scáileán Iomlán"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Scála:"
+
+#~ msgid "empty"
+#~ msgstr "folamh"
+
+#~ msgid "tv://"
+#~ msgstr "tv://"
+
+#~ msgid "Escape"
+#~ msgstr "Éalúchán"
+
+#~ msgid "Up"
+#~ msgstr "Suas"
+
+#~ msgid "Down"
+#~ msgstr "Síos"
+
+#~ msgid "Ok"
+#~ msgstr "OK"
+
+#~ msgid "Channels"
+#~ msgstr "Cainéil"
+
+#~ msgid "Setup"
+#~ msgstr "Socrú"
+
+#~ msgid "Menu"
+#~ msgstr "Roghchlár"
+
+#~ msgid "Red"
+#~ msgstr "Dearg"
+
+#~ msgid "Green"
+#~ msgstr "Glas"
+
+#~ msgid "Yellow"
+#~ msgstr "Buí"
+
+#~ msgid "Blue"
+#~ msgstr "Gorm"
+
+#~ msgid "Custom ..."
+#~ msgstr "Saincheaptha ..."
diff --git a/po/gl.po b/po/gl.po
new file mode 100644
index 0000000..b75515a
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,1692 @@
+# translation of kmplayer.po to Galician
+#
+# mvillarino <mvillarino@users.sourceforge.net>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-08-24 20:19+0200\n"
+"Last-Translator: mvillarino <mvillarino@users.sourceforge.net>\n"
+"Language-Team: Galician <trasno@ceu.fi.udc.es>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "mvillarino"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "mvillarino@users.sourceforge.net"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Reproducir"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pausa"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Parar"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Aumentar o Volume"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Diminuir o Volume"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% Caché chea"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Reproducindo"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Parar Reproduzón"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Os Mais Recentes Recentes"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Listas de Reproduzón Persistentes"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Nova &Fiestra"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Limpar o &Histórico"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Abrir DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Abrir VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Abrir CD de Música"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Abrir Pipe..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Conectar"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "C&onsola"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Lista de Reprodu&zón"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Modo mínimo"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "Modo &Edizón"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Sincronizar cola &Lista de Reproduizón"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Mostrar o Menu Contextual"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Mostrar o Menu de Idiomas"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "Manter as &Proporzóns"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Pantalla Completa"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Control de &Arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Abre unha nova fiestra da aplicazón"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Abre un ficheiro existente"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Abre un ficheiro utilizado recentemente"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Pecha o ficheiro actual"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Sai da aplicazón"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Activa/desactiva a barra de estado"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Activa/desactiva a barra de menu"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Listo."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Orixe"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "Navegador de &DVDs"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Audio CD"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Engadir á Lista"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Engadir nun &grupo novo"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Copiar aqui"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "&Vídeo"
+
+#: kmplayerapp.cpp:751
+#, fuzzy
+msgid "More..."
+msgstr "Mais ..."
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "Navegazón no DVD..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Listo"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Abrindo DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Abrindo VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "A abrir CD de Música..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Abrindo pipe..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Ler dun Pipe"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Indique un comando que enviará un stream de áudio/vídeo\n"
+"a stdout. Isto será transmitido por un pipe\n"
+"ao stdin do leitor.\n"
+"\n"
+"Comando:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Abrindo VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Intro"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Abrindo o ficheiro..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Sair"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Abrindo unha nova fiestra da aplicazón..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Todos os Ficheiros"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Abrir Ficheiro"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Guardar Ficheiro"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Erro ao abrir o ficheiro %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Pechando ficheiro..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Saindo..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Mostrar a Barra de Menu con %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Mover para aqui"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Novo grupo"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Reproducir automaticamente despois de aceder ao DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Reproducir automaticamente despois de abrir o DVD"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Dispositivo DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "Localizazón do seu DVD, debe ter permisos de leitura neste dispositivo"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Discos ópticos"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - Discos Compactos de Música"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Discos Compactos de Vídeo"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Disco de Vídeo Dixital"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Títulos"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Capítulos"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "Idioma do &Áudio"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Subtítulos"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Orixe"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "Segui&nte"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Raiz"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "S&ubir"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Reproducir automaticamente despois de aceder ao VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Reproducir automaticamente despois de abrir o VCD"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Dispositivo VCD (CDROM):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Localizazón do seu dispositivo de CDROM/DVD, debe ter permisos de leitura neste "
+"dispositivo"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Pista "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "CD de Música"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Pista %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Pipe"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Pipe - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Enderezo co que conectar:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Se ten várias interfaces de rede, poderá limitar o aceso"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Porto de escoita:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Número máximo de conexóns:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Ancho de banda máximo (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Ficheiro de alimentazón temporal:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Tamaño do ficheiro de alimentazón (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Formato:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Só os formatos AVI, MPEG e RM funcionan para reproduzón con mplayer"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Codec de áudio:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Bitrate do áudio (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Taxa de mostraxe de áudio (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Codec do vídeo:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Bitrate do vídeo (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Calidade (131):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Taxa de refresco (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Tamaño do gop:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Largura (pontos):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Altura (pontos):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Permitir aceso desde:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'IP Único' ou 'IP-inicial IP-final' para un rango de IPs"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Máquina/IP ou rango de IPs"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Carregar"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Início"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Transmisión"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Perfis"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Erro ao rematar o proceso do ffserver."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Non foi posíbel iniciar o ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Non foi posíbel iniciar ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "Personalizado"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound System"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analog Realtime Synthesizer"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v.0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Utilizar as predefinizóns da infra-estrutura"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Cor de fondo da lista de reproduzón"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Cor de texto da lista de reproduzón"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Cor de fondo da consola"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Item activo da lista de reproduzón"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Cor de texto da consola"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Cor de fondo do vídeo"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Cor de fondo da área de visualizazón"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Cor de fondo da fiestra de informazón"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Cor de texto da fiestra de informazón"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Lista de Reproduzón"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Fiestra de informazón"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "O ficheiro %1 non existe."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "O ficheiro de subtítulos %1 non existe."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "O Volume está a %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "Re&producir con"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Con&sola"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Lis&ta de Reproduzón"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Idioma&as do áudio"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Subtítulos"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Contraste:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Brillo:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Ton:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Saturazón:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Core&s"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Configurar KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Editar &ítem da lista"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Non Executando"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Carregando no Buffer"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Reproducindo"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Gravador %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Reprodutor %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Descoñecido"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "Des&conectar"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+#, fuzzy
+msgid "Connecting"
+msgstr "&Conectar"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Erro ao rematar o proceso de reproduzón."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Patrón do tamaño"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Patrón da caché"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Patrón da posizón"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Patrón do índice"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Patrón da URL de referéncia"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Patrón de referéncia"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Patrón de início"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Patrón do idioma do DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Patrón dos subtítulos do DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Patrón dos títulos do DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Patrón dos capítulos do DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Patrón das pistas do VCD"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Padrón das pistas do CD de música"
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Argumentos adicionais da liña de comando:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Tamaño da caché:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Construir novo índice cando sexa posíbel"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Permite procurar en ficheiros indexados (AVIs)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Opzóns Xerais"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Dispositivo de vídeo:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Dispositivo de áudio:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Nome:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Largura:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Altura:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Non reproducir imediatamente"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Iniciar a reproduzón só após premer no botón de iniciar"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norma:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Canal"
+
+#: kmplayertvsource.cpp:100
+#, fuzzy
+msgid "Frequency (MHz)"
+msgstr "Frecuéncia"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Está a piques de eliminar este dispositivo do menu Fontes.\n"
+"Continuar?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Confirmazón"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Controlador:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l ou bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Dispositivo:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Localizazón do dispositivo de vídeo, p. ex. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Examinar..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Xeral"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "dispositivo de tv"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Televisión"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Dispositivo xa presente."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Non se atopou nengun dispositivo."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "AnalisadorTV"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Porto de XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Porto base da extensión X Video.\n"
+"Se deixa valor por omissión (0), usará-se o primeiro porto disponíbel. Porén se "
+"tivese várias instáncias de XVideo pode ter que indicar o porto a utilizar.\n"
+"Vexa o resultado de 'xvinfo' para mais informazón"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Porto de comunicazón:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Porto de comunicazón co VDR. O porto por omisión é 2001.\n"
+"Se utiliza outro porto, coa opzón '-p' de 'vdr', debe configurá-lo aqui."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Escala"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Proporzóns a utilizar ao ver VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Des&conectar"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR Tecla Subir"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR Tecla Baixar"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR Tecla Atrás"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR Tecla Ok"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR Tecla Configurazón"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR Tecla Canais"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR Tecla Menu"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR Tecla Vermella"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR Tecla Verde"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR Tecla Amarela"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR Tecla Azul"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR Tecla 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR Tecla 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR Tecla 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR Tecla 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR Tecla 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR Tecla 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR Tecla 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR Tecla 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR Tecla 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR Tecla 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Servidor non encontrado"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Conexón rexeitada"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Comando VDR personalizado"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Pode pasar comandos ao VDR.\n"
+"Escreba 'HELP' para ver unha lista de comandos disponíbeis.\n"
+"Pode ver a resposda do VDR na fiestra da consola.\n"
+"\n"
+"Comando VDR:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Porto "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Lista de Reproduzón"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Volume:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "ficheiro a abrir"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "sen nome"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "nengun"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[atributos]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Copiar para o Porta-Retallos"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "Mo&strar todo"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Preferéncias"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Apariéncia"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Saída"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Gravando"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Plugins de Saída"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Pós-procesamento"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Fiestra"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Manter as proporzóns"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Cando se habilite, o filme manterá a proporzón horizontal-vertical\n"
+"ao cambiar o tamaño da fiestra"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Acoplar na bandexa do sistema"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Cando a habilite, engadirá-se un ícone de KMPlayer á bandexa do sistema.\n"
+"Cando prema nel, esconderá a fiestra principal de KMPlayer e eliminará o botón "
+"de KMPlayer da barra de tarefas."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Dimensionar automaticamente ao tamaño do vídeo"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Cando a habilite, KMPlayer adoptará o tamaño do filme\n"
+"cando este comece"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Recordar o tamaño da fiestra ao sair"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Comezar sempre con tamaño fixo"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Ciclo"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Repete o filme actual"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Permitir a perda de fotogramas"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Permite quitar fotogramas da imaxe para mellorar a sincronizazón entre o áudio "
+"e o vídeo"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Configurar automaticamente o volume no início"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Cando escolla unha nova fonte, o volume será configurado de acordo con o "
+"control de volume"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Auto configurar as cores no início"
+
+#: pref.cpp:236
+#, fuzzy
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"Cando un filme comeza, as cores serán axustadas conforme ás barras de "
+"deslizamento das cores"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Painel de Control"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Mostrar o botón de configurazón"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Engadir un botón que mostra un menu de configurazón"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Mostrar o botón da lista de reproduzón"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Engade un botón para a lista de reproduzón aos botóns de control"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Mostrar o botón de gravazón"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Engade un botón de gravazón aos botóns de control"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Mostrar o botón de difusión"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Engade un botón de difusión aos botóns de control"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Tempo de avanze/retroceso:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Cores"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Localizazón:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Localizazón do item a reproducir"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Subtítulo:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "Localizazón opcional dun ficheiro cos subtítulos do URL de acima"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Habilitar o soporte 'Prema para reproducir'"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Suporte para as páxinas Web que teñan unha imaxe inicial"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Utilizar o reprodutor de filmes:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Ancho de banda da rede"
+
+#: pref.cpp:373
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Algunhas veces é posíbel escoller entre vários streams con base nun bitrate "
+"determinado.\n"
+"Esta opzón permite definir canto ancho de banda desexa gastar para o vídeo"
+
+#: pref.cpp:375
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Algunhas veces é posíbel escoller entre vários streams con base nun bitrate "
+"determinado.\n"
+"Esta opzón permite definir canto ancho de banda pode gastar para o vídeo"
+
+#: pref.cpp:376
+#, fuzzy
+msgid "Preferred bitrate:"
+msgstr "Bitrate preferido:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Bitrate máximo:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Ficheiro de saída:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Iniciar a G&ravazón"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Fonte actual: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Gravador"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Auto-reproduzón"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Non"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Cando remate a gravazón"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "A&pós"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Tempo (segundos):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Parar a Gravazón"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Iniciar a Gravazón"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Fonte Actual: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Formato"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Idéntico ao da orixen"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Personalizado"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Argumentos de mencoder:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Argumentos de FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Escolle o controlador de vídeo. Recomenda-se o XVideo, ou, se este non está "
+"suportado, o X11, que é mais lento."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Controlador de vídeo:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Controlador de áudio:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Habilitar o uso dos filtros de pós-procesamento"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Desabilitar o uso dos filtros de pós-procesamento ao ver TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Rápido"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Desbloqueo horizontal"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Calidade automática"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Filtro de cromináncia"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Desbloqueo vertical"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Filtro de Dering"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Brillo/contraste automático"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Axustar a lumináncia ao rango completo"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Redutor de ruído temporal"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Desentrelazamento por mistura linear"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Desentrelazamento por interpolazón linear"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Desentrelazamento por interpolazón cúbica"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Desentrelazamento pola mediana"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "Desentrelazamento FFmpeg"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Activa os filtros de pós-procesamento predefinidos de mplayer"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Activa os filtros de pós-procesamento personalizados (Vexa: pestana "
+"Predefinizóns)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Activa os filtros rápidos de pós-procesamento de mplayer"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "O filtro é usado se ten CPU abondo"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Axusta a lumináncia ao rango completo (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Predefinizóns"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Desentrelazamento"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Anular Configurazón?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Está a piques de sobrescreber todos os seus axustes cos valores "
+"predeterminados.\n"
+"Por favor confirme-o.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Pantalla Completa"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Escala:"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "O filtro é usado se ten CPU abondo"
diff --git a/po/he.po b/po/he.po
new file mode 100644
index 0000000..609d8c5
--- /dev/null
+++ b/po/he.po
@@ -0,0 +1,1688 @@
+# translation of kmplayer.po to hebrew
+# translation of kmplayer.po to HEBREW
+# Assaf Gillat <gillata@gmail.com>, 2005,2006.
+# Diego Iastrubni <elcuco@kde.org>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-09-30 21:07+0200\n"
+"Last-Translator: Assaf Gillat\n"
+"Language-Team: hebrew <kde-il@yahoogroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "אסף גילת"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "gillata@gmail.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&נגן"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "ה&שהה"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&עצור"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "העלה עוצמת קול"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "הפחת עוצמת קול"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% מילוי חוצץ"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "נגן KMPlayer: מנגן"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "נגן KMPlayer: עצירת ניגון"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "האחרון ביותר"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "רשימות ניגון קבועות"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "חלון &חדש"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "נקה &היסטוריה"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&פתח תקליטור DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&פתח תקליטור וידאו VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&פתח תקליטור שמע"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&פתח צינור (Pipe)..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "ה&תחבר"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "מ&סוף"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "רשימת &ניגון"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "מצב מינימלי"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "מצב &עריכה"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "&סנכרן עם רשימת הניגון"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "הצג תפריט קופץ"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "הצג תפריט שפות"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "שמור &יחס רוחב/אורך"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "מסך מ&לא"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "בקרת &Arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "פותח חלון יישום חדש"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "פותח קובץ קיים"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "פותח קובץ שנעשה בו שימוש לאחרונה"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "סוגר את המקור הממשי"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "יוצא מהיישום"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "מפעיל/מבטל את סרגל המצב"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "מפעיל/מבטל את סרגל התפריטים"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "מוכן."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "מ&קור"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "תקליטור &DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "ניווט ב-&DVD"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "תקליטור וידאו V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&טלויזיה"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "תקליטור &שמע"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&הוסף לרשימה"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "הוסף ב&קבוצה חדשה"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "ה&עתק לכאן"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "&וידאו"
+
+#: kmplayerapp.cpp:751
+#, fuzzy
+msgid "More..."
+msgstr "עוד..."
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "ניווט ב-DVD ..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "מוכן"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "פותח DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "פותח VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "פותח תקליטור שמע..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "פותח צינור..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "קריאה מצינור"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"הכנס פקודה שתוציא זרם שידור של שמע/וידאו\n"
+"אל הפלט הסטנדרטי. פלט זה יעבור בצינור לקלט הסטנדרטי של הנגן.\n"
+"\n"
+"פקודה:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "פותח VDR (הקלטה של וידאו).."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "פתיח"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "פותח קובץ..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "יציאה"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "פותח חלון יישום חדש..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|כל הקבצים"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "פתיחת קובץ"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "שמירת קובץ"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"שגיאה בזמן פתיחת קובץ %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "סגירת קובץ..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "יציאה..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "הראה את סרגל התפריטים עם %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "הבא לכאן"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "קבוצה חדשה"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&מחק פריט"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "הזז ל&מעלה"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "הזז למ&טה"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "ניגון אוטומטי אחרי פתיחת תקליטור DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "התחל ניגון DVD אחרי פתיחת תקליטור DVD"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "התקן DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "נתיב להתקני ה-DVD שלך, חובה שיהיו לך הרשאות כתיבה להתקן זה"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "דיסק אופטי"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "תקליטור CDROM - תקליטור שמע"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "תקליטור VCD - תקליטור וידאו"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "תקליטור DVD - תקליטור וידאו דיגיטלי"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&כותרות"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&פרקים"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&שפות שמע"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "כ&תוביות"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "מקור"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "ניווט DVD"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "ה&בא"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&שורש"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "למ&עלה"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "ניגון אוטומטית אחרי פתיחת תקליטור וידאו VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "התחל ניגון DVD אחרי פתיחת תקליטור VCD"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "התקן VCD (נגן תקליטורים):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr "נתיב להתקן CDROM/DVD, חובה שיהיו לך הרשאות קריאה להתקן זה"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "רצועה"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "תקליטור שמע"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "רצועה %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "צינור"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "צינור - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "כתובת לקישור:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "אם יש לך התקני רשת מרובים, אתה יכול להגביל גישה"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "יציאת האזנה:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "חיבורי מרביים:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "רוחב פס מרבי (קילו־סיביות):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "קובץ הזנה זמני:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "גודל קובץ הזנה (קילובייט):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "תבנית:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "רק קבצי avi, mpeg ו rm עובדים ב-mplayer"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "מקודד שמע:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "קצב סיביות של שמע (קילו־סיביות):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "קצב דגימה של שמע (הרץ):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "מקודד וידאו:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "קצב סיביות של וידאו (קילו־סיביות)"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "איכות (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "קצב מסגרות (הרץ):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "גודל Gop:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "רוחב (פיקסלים):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "גובה (פיקסלים):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "הרשה גישה מ:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+"\"כתובת IP בודדת\" או \"תחילת כתובת IP סיום כתובת IP\" עבור טווח כתובות"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "שרת מארח/IP או טווח כתובות IP"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "טען"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "התחל"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "שידור"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "פרופילים"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "כישלון בסיום תהליך ffserver."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"כישלון בהתחלת תהליך ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "כישלון בהתחלת תהליך ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "אוטומטי"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "פתח מערכת שמע"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "שכבה פשוטה של מדיה ישירה (SDL)"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "ארכיטקטורה מתקדמת של לינוקס (ALSA)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "סינטיסייזר אנלוגי בזמן אמת (ARts)"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "ערכת חיבור שמע של JACK"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "דמון שמע נאור (ESD)"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "ארכיטקטורה מתקדמת של לינוקס גרסה 0.5 (ALSA)"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "ארכיטקטורה מתקדמת של לינוקס גרסה 0.9 (ALSA)"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "השתמש בברירות המחדל של מנוע הניגון"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "רקע רשימת הניגון"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "קידמת רשימת הניגון"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "רקע המסוף"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "הפריט הפעיל ברשימת הניגון"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "קידמת המסוף"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "רקע הוידאו"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "רקע אזור התצוגה"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "רקע חלון המידע"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "קידמת חלון המידע"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "רשימת ניגון"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "חלון מידע"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "הקובץ %1 לא קיים."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "קובץ כתובית %1 לא קיים."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "עוצמת הקול היא %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "נ&גן בעזרת"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "מ&סוף"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&רשימת ניגון"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "&שפות שמע"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "כ&תוביות"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "חדות:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "בהירות:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "גוון:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "רוויה:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "&צבעים:"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&הגדר את KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "ערוך &פריט רשימת ניגון"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "לא רץ"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "מכניס לחוצץ"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "מנגן"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "מקליט %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "נגן %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "לא ידוע"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "כתובת/נתיב"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "מנותק"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "כתובת/נתיב - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "מתחבר"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "כישלון בסיום תהליך הניגון."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "תבנית גודל"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "תבנית מטמון"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "תבנית מיקום"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "תבנית אינדקס"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "תבנית קישור כתובת"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "תבנית קישור"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "תחילת תבנית"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "תבנית שפת DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "תבנית כתובית DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "תבנית כותרות DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "תבנית פרקים של DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "תבנית רצועות של תקליטור וידאו VCD"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "תבנית רצועות של תקליטור שמע"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "פקודת MPlayer:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "פרמטרי שורת פקודה נוספים:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "גודל מטמון:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "ק\"ב"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "בנה אינדקס חדש אם אפשרי"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "אפשר סריקה בקבצים בעלי אינדקס (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "אפשרויות כלליות"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "התקן וידאו:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "התקן שמע:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "שם:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "רוחב:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "אורך:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "אל תנגן מיידית"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "התחל ניגון רק אחרי לחיצה על לחצן הניגון"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "נורמה:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "ערוץ"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "תדירות (MHz)"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"אתה הולך להסיר את ההתקן מתפריט המקור.\n"
+"האם להמשיך?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "ווידוא"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "סוג התקן:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "מזויף, v4l או bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "התקן:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "נתיב להתקן הוידאו שלך, למשל dev/video0/"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "סורק..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "כללי"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "התקן טלויזיה"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "טלויזיה"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "טלוויזיה"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "טלוויזיה:"
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "ההתקן כבר קיים."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "לא נמצא התקן."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "סורק תחנות טלויזיה"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "יציאת XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"היציאה הבסיסית של הרחבת XVideo.\n"
+"אם תשאיר את ברירת המחדל (0), יעשה שימוש ביציאה הראשונה הזמינה. למרות זאת אם יש "
+"לך הפעלות XVideo מרובות, אתה עשוי להצטרך לספק את היציאה לשימוש כאן.\n"
+"ראה את הפלט מ \"xvinfo\" למידע נוסף"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "יציאת תקשורת:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"יציאת התקשורת של VDR. ברירת המחדל היא יציאה 2001.\n"
+"אם אתה משתמש ביציאה אחרת, עם אפשרות \"-p\" של \"VDR\", אתה חייב לקבוע אותה גם."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "יחס"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "יחס התמונה לשימוש בזמן צפייה ב-VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "&נתק"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "מקש VDR למעלה"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "מקש VDR למטה"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "מקש VDR אחורה"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "מקש VDR לאישור"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "מקש VDR לכיוון"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "מקש VDR לערוצים"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "מקש VDR לתפריט"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "מקש VDR אדום"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "מקש VDR ירוק"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "מקש VDR צהוב"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "מקש VDR כחול"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "מקש נומרי 0 של ה-VDR"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "מקש נומרי 1 של ה-VDR"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "מקש נומרי 2 של ה-VDR"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "מקש נומרי 3 של ה-VDR"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "מקש נומרי 4 של ה-VDR"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "מקש נומרי 5 של ה-VDR"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "מקש נומרי 6 של ה-VDR"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "מקש נומרי 7 של ה-VDR"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "מקש נומרי 8 של ה-VDR"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "מקש נומרי 9 של ה-VDR"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "שרת מארח לא נמצא"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "החיבור נדחה"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "פקודה מותאמת אישית של ה-VDR"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"אתה יכול להעביר פקודות למקליט הוידאו (VDR).\n"
+"הכנס \"HELP\" על מנת לראות רשימה של פקודות זמינות.\n"
+"תוכל לראות את תגובת VDR בחלון המסוף.\n"
+"\n"
+"פקודת VDR:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "יציאה"
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "רשימת ניגון"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "עוצמת קול:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "הקובץ לפתיחה"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "ללא שם"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "ללא"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[מאפיינים]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "ה&עתק ללוח העריכה"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "הצג ה&כל"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "העדפות"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "מבטים"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "פלט"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "מקליט"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "תוספי פלט"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "קדם־עיבוד"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "חלון"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "שמור יחס גודל"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"כאשר מסומן, הסרט ישמור על יחס התמונה שלו\n"
+"כאשר תשנה את גודל החלון"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "עגון במגש המערכת"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"כאשר מסומן, הסמל של KMPlayer יוסף למגש המערכת.\n"
+"כאשר תלחץ עליו הוא יחביא את החלון המרכזי של KMPlayer ויסיר את KMPlayer מסרגל "
+"המשימות."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "אוטומטי שנה לגודל הוידאו"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"כאשר מסומן, KMPlayer ישנה את גודל הסרט\n"
+"כאשר הוידאו יתחיל"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "שמור את גודל החלון ביציאה"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "התחל תמיד בגודל קבוע"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "לולאה"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "עשה שהסרט הנוכחי יכנס ללולאה"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "אפשר זריקת מסגרות"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "אפשר זריקת מסגרות עבור סנכרון טוב יותר של שמע לוידאו"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "קביעת עוצמת קול בפתיחה"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr "כאשר נבחר מקור חדש, עוצמת הקול תקבע לפי פקד עוצמת הקול"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "קביעת צבעים אוטומטית בהתחלה"
+
+#: pref.cpp:236
+#, fuzzy
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr "כאשר סרט מתחיל, הצבעים יקבעו בהתאם למחווני הצבעים"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "לוח בקרה"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "הצג כפתור הגדרות"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "הוסף כפתור שיקפיץ את תפריט ההגדרות"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "הצג את כפתור רשימת הניגון"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "הוסף כפתור רשימת ניגון אל כפתורי הבקרה"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "הצג את כפתור ההקלטה"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "הוסף כפתור הקלטה לכפתורי הבקרה"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "הצג כפתור שידור"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "הוסף כפתור שידור לכפתורי הבקרה"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "זמן סריקה של קדימה/אחורה:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "צבעים"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "מיקום:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "המיקום של הפריט לניגון"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "כתובית:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "מיקום אפשרי לשם הקובץ המכיל את הכתוביות של הכתובות מלמעלה"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "הפעל תמיכה ב-\"לחץ לניגון\""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "תמיכה עבור עמודי WEB בעלי תמונה פתיחה"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "מנוע הניגון שבשימוש:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "רוחב הפס של הרשת"
+
+#: pref.cpp:373
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"לפעמים זה אפשרי לבחור בין קטעים בעלי קצב סיביות שונה.\n"
+"אפשרות זאת קובעת כמה רוחב פס אתה רוצה להקצות לוידאו."
+
+#: pref.cpp:375
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"לפעמים זה אפשרי לבחור בין קטעים בעלי קצב סיביות שונה.\n"
+"אפשרות זאת קובעת כמה רוחב פס אתה יכול להקצות לוידאו."
+
+#: pref.cpp:376
+#, fuzzy
+msgid "Preferred bitrate:"
+msgstr "קצב סיביות רצוי:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "ק\"ב/ש"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "קצב סיביות מרבי:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "קובץ פלט:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "התחל ה&קלטה"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "מקור נוכחי:"
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "מקליט"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "ניגון אוטומטי"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&לא"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&כאשר הקלטה הסתיימה"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&אחרי"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "זמן (שניות):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "הפסק הקלטה"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "התחל הקלטה"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "מקור נוכחי:"
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "תבנית"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "כמו המקור"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "מותאמים אישית"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "פרמטרים של Mencoder:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "נגן MPlayer - &שמור זרם שידור כ-dump"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "פרמטרים של FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"קבע התקן וידאו. המומלץ הוא XVideo, או, אם הוא לא נתמך, X11, שהוא איטי יותר."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "התקן וידאו:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "התקן שמע:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "הפעל שימוש במסנן קדם־עיבוד"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "בטל שימוש בקדם־עיבוד בזמן צפייה בטלויזיה/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "מהיר"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "מסנן deblocking אופקי"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "איכות אוטומטית"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "מסנן צבע (Chrominance)"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "מסנן deblocking אנכי"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "מסנן Dering"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "חדות/בהירות אוטומטית"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "מתח תאורה (luminance) לטווח מלא"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "מפחית רעש אקראי"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Linear blend deinterlacer"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Linear interpolating deinterlacer"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Cubic interpolating deinterlacer"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Median deinterlacer"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "FFmpeg deinterlacer"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "הפעל את מסנני ברירת המחדל של קדם־העיבוד של mplayer"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"הפעל מסנני קדם־עיבוד מותאמים אישית (ראה: כרטיסיית \"אפשרויות קבועות מותאמות "
+"אישית\")"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "הפעל את מסנני קדם־העיבוד המהירים של mplayer"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "המסנן יהיה בשימוש אם יש מספיק כוח מעבד"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "מותח את התאורה (luminance) לטווח מלא (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "אפשרויות קבועות מותאמות אישית"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "שזירה (Deinterlacing)"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "אפס אפשרויות?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"אתה עומד לשכתב את כל האפשרויות להגדרות ברירת המחדל.\n"
+"אנא אשר.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "מקליט וי&דאו (VDR)"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "מסך מלא"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "יחס:"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "המסנן יהיה בשימוש אם יש מספיק כוח מעבד"
+
+#~ msgid "empty"
+#~ msgstr "ריק"
+
+#~ msgid "tv://"
+#~ msgstr "tv://"
+
+#~ msgid "Escape"
+#~ msgstr "Escape"
diff --git a/po/hi.po b/po/hi.po
new file mode 100644
index 0000000..b6cceeb
--- /dev/null
+++ b/po/hi.po
@@ -0,0 +1,1735 @@
+# SOME DESCRIPTIVE TITLE.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2005-02-04 15:52+0530\n"
+"Last-Translator: Ravishankar Shrivastava <raviratlami@gmail.com>\n"
+"Language-Team: indlinux-hindi <indlinux-hindi@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "रविशंकर श्रीवास्तव"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "raviratlami@yahoo.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "बजाएँ (&l)"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "ठहरें (&P)"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "रूकें (&S)"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr ""
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr ""
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% कैश फिल"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "के-एमप्लेयर: बज रहा है"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "के-एमप्लेयर: बजाना बंद करें"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "वेब"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "नया विंडो (&W)"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr ""
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "डीवीडी खोलें (&O)"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "वीसीडी खोलें (&O)"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+#, fuzzy
+msgid "&Open Audio CD"
+msgstr "वीसीडी खोलें (&O)"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "पाइप खोलें... (&O)"
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "जुड़ें (&C)"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "कंसोल (&o)"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "गीत सूची (&y)"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr ""
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr ""
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:579
+#, fuzzy
+msgid "Show Language Menu"
+msgstr "ऑडियो भाषा (&L)"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "चौड़ाई/ऊँचाई रेशो बनाए रखें (&K)"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "पूरा स्क्रीन (&F)"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "एआरटीएस नियंत्रण (&A)"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "नया अनुप्रयोग विंडो खोलता है"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "एक मौजूदा फ़ाइल को खोलता है"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "हाल ही में उपयोग में आया फ़ाइल खोलता है"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "वास्तविक स्रोत बन्द करता है"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "अनुप्रयोग से बाहर होता है"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "स्थिति-पट्टी सक्षम/अक्षम करता है"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "मेन्यू-पट्टी सक्षम/अक्षम करता है"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "तैयार."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "स्रोत (&o)"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "डीवीडी (&D)"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "डीवीडी नेविगेटर (&D)"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "वीसीडी (&C)"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "टीवी (&T)"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "वीडियो (&i)"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "डीवीडी नेविगेशन..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "तैयार"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "डीवीडी खोला जा रहा है..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "वीसीडी खोला जा रहा है..."
+
+#: kmplayerapp.cpp:817
+#, fuzzy
+msgid "Opening Audio CD..."
+msgstr "वीसीडी खोला जा रहा है..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "पाइप खोला जा रहा है..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "पाइप से पढ़ें"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "वीडीआर खोला जा रहा है..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr ""
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "फ़ाइल खोला जा रहा है..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr ""
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "नया अनुप्रयोग विंडो खोला जा रहा है..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr ""
+
+#: kmplayerapp.cpp:1314
+#, fuzzy
+msgid "Open File"
+msgstr "फ़ाइल खोला जा रहा है..."
+
+#: kmplayerapp.cpp:1333
+#, fuzzy
+msgid "Save File"
+msgstr "फ़ाइल खोला जा रहा है..."
+
+#: kmplayerapp.cpp:1337
+#, fuzzy
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr "फ़ाइल खोला जा रहा है..."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "फ़ाइल बंद किया जा रहा है..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "बाहर हो रहे हैं..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "%1 के साथ मेन्यू-पट्टी दिखाएँ"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "डीवीडी खोलने के बाद स्वचालित बजाएँ"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "डीवीडी खोलने के तुरंत बाद डीवीडी बजाएँ"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "डीवीडी उपकरण:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"आपके डीवीडी उपकरण का पथ, इस उपकरण के लिए आपके पास पढ़ने का अधिकार होना चाहिए."
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "डीवीडी"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "टाइटल्स (&T)"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "अध्याय (&C)"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "ऑडियो भाषा (&L)"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "उपशीर्षक (&S)"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "स्रोत"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "डीवीडीएनएवी"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr ""
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "रूट (&R)"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "ऊपर (&U)"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "वीसीडी खोलने के बाद स्वचालित बजाएँ"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "वीसीडी खोलने के तुरंत बाद वीसीडी बजाएँ"
+
+#: kmplayerapp.cpp:2070
+#, fuzzy
+msgid "VCD (CDROM) device:"
+msgstr "डीवीडी उपकरण:"
+
+#: kmplayerapp.cpp:2072
+#, fuzzy
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"आपके डीवीडी उपकरण का पथ, इस उपकरण के लिए आपके पास पढ़ने का अधिकार होना चाहिए."
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+#, fuzzy
+msgid "VCD"
+msgstr "वीसीडी (&C)"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr ""
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+#, fuzzy
+msgid "Audio CD"
+msgstr "ऑडियो उपकरण:"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr ""
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:165
+#, fuzzy
+msgid "Listen port:"
+msgstr "एक्सवीडियो पोर्ट"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:204
+#, fuzzy
+msgid "Format:"
+msgstr "फॉर्मेट"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:215
+#, fuzzy
+msgid "Audio codec:"
+msgstr "ऑडियो उपकरण:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:218
+#, fuzzy
+msgid "Video codec:"
+msgstr "वीडियो उपकरण:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:222
+#, fuzzy
+msgid "Gop size:"
+msgstr "कैश आकार:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:224
+#, fuzzy
+msgid "Height (pixels):"
+msgstr "ऊँचाईः"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+#, fuzzy
+msgid "Failed to end ffserver process."
+msgstr "प्लेयर प्रक्रिया बन्द करने में असफल."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:565
+#, fuzzy
+msgid "Failed to start ffmpeg."
+msgstr "प्लेयर प्रक्रिया बन्द करने में असफल."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr ""
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "मनपसंद"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr ""
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr ""
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr ""
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr ""
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr ""
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr ""
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr ""
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "एक्सवीआई-डिक्स"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+#, fuzzy
+msgid "XVideo"
+msgstr "एक्स-वीडियो (&V)"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr ""
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr ""
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr ""
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:106
+#, fuzzy
+msgid "Video background"
+msgstr "वीडियो उपकरण:"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr ""
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr ""
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:118
+#, fuzzy
+msgid "Playlist"
+msgstr "गीत सूची (&y)"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr ""
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "फ़ाइल %1 अस्तित्व में नहीं है."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "सब टाइटल फ़ाइल %1 मौज़ूद नहीं है."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, fuzzy, c-format
+msgid "Volume is %1"
+msgstr "आवाज़ निर्धारक:"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "के साथ बजाएँ (&P)"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "कंसोल (&s)"
+
+#: kmplayercontrolpanel.cpp:387
+#, fuzzy
+msgid "Play&list"
+msgstr "गीत सूची (&y)"
+
+#: kmplayercontrolpanel.cpp:400
+#, fuzzy
+msgid "&Audio languages"
+msgstr "ऑडियो भाषा (&L)"
+
+#: kmplayercontrolpanel.cpp:401
+#, fuzzy
+msgid "&Subtitles"
+msgstr "उपशीर्षक (&S)"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "कंट्रास्टः"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "चमकीलापनः"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "वर्ण:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "संतृप्ति:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "रंग: (&l)"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "केएम-प्लेयर कॉन्फ़िगर करें... (&C)"
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+#, fuzzy
+msgid "Playing"
+msgstr "बजाएँ (&l)"
+
+#: kmplayerpartbase.cpp:1384
+#, fuzzy
+msgid "Recorder %1 %2"
+msgstr "रेकॉर्डर"
+
+#: kmplayerpartbase.cpp:1402
+#, fuzzy
+msgid "Player %1 %2"
+msgstr "एम-प्लेयर"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "अज्ञात"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "यूआरएल"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "डिस्कनेक्ट हों (&c)"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "यूआरएल - %1"
+
+#: kmplayerpartbase.cpp:1859
+#, fuzzy
+msgid "Connecting"
+msgstr "जुड़ें (&C)"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "प्लेयर प्रक्रिया बन्द करने में असफल."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "एम-प्लेयर (&M)"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "आकार पैटर्न"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "कैश पैटर्न"
+
+#: kmplayerprocess.cpp:872
+#, fuzzy
+msgid "Position pattern"
+msgstr "स्थान पैटर्न"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "अनुक्रमणिका पैटर्न"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "संदर्भ यूआरएल पैटर्न"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "संदर्भ पैटर्न"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "प्रारंभ पैटर्न"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "डीवीडी भाषा पैटर्न"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "डीवीडी सबटाइटल पैटर्न"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "डीवीडी टाइटल पैटर्न"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "डीवीडी अध्याय पैटर्न"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "वीसीडी ट्रैक पैटर्न"
+
+#: kmplayerprocess.cpp:882
+#, fuzzy
+msgid "Audio CD tracks pattern"
+msgstr "वीसीडी ट्रैक पैटर्न"
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "कमांड भरें:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "अतिरिक्त कमांड पंक्ति आर्गुमेंट्स"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "कैश आकार:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "कि.बा."
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "जहाँ संभव हो नई अनुक्रमणिका बनाएँ"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "अनुक्रम में जमाई गई फ़ाइलों में देखने दें (एवीआई)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "सामान्य विकल्प"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "एम-प्लेयर"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "एक्साइन (&X)"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "जी-स्ट्रीमर (&G)"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "वीडियो उपकरण:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "ऑडियो उपकरण:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "नाम:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "चौडाईः"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "ऊँचाईः"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "तत्काल नहीं बजाएँ"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "सिर्फ तब बजाएँ जब बजाएँ बटन पर क्लिक करें."
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "सामा:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "चैनेल"
+
+#: kmplayertvsource.cpp:100
+#, fuzzy
+msgid "Frequency (MHz)"
+msgstr "आवृत्ति"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"आप इस उपकरण को स्रोत मेन्यू से मिटाने जा रहे हैं.\n"
+"जारी रखें?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "पक्का करें"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "ड्राइवर:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "डमी, v4l or bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "उपकरणः"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "आपके वीडियो उपकरण का पथ, उदा. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "स्कैन..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "सामान्य"
+
+#: kmplayertvsource.cpp:246
+#, fuzzy
+msgid "tv device"
+msgstr "डीवीडी उपकरण:"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "टीवी"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "टीवी:"
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "उपकरण पहले से ही मौजूद है"
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "कोई उपकरण नहीं मिला."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "टीवी-स्केनर"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "एक्सवीडियो पोर्ट"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "कम्यूनिकेशन पोर्ट:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "स्केल"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "जब वीडीआर देखा जा रहा हो तो आस्पेक्ट"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "वीडीआर"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "डिस्कनेक्ट हों (&c)"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "वीडीआर कुंजी ऊपर"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "वीडीआर कुंजी नीचे"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "वीडीआर कुंजी पिछला"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "वीडीआर कुंजी ठीक"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "वीडीआर कुंजी सेटअप"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "वीडीआर कुंजी चैनल्स"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "वीडीआर कुंजी मेन्यू"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "वीडीआर कुंजी लाल"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "वीडीआर कुंजी हरा"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "वीडीआर कुंजी पीला"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "वीडीआर कुंजी नीला"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "वीडीआर कुंजी 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "वीडीआर कुंजी 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "वीडीआर कुंजी 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "वीडीआर कुंजी 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "वीडीआर कुंजी 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "वीडीआर कुंजी 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "वीडीआर कुंजी 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "वीडीआर कुंजी 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "वीडीआर कुंजी 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "वीडीआर कुंजी 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "होस्ट नहीं मिला"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "कनेक्शन अस्वीकृत"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "मनपसंद वीडीआर कमांड"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "पोर्ट"
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "एक्स-वीडियो (&V)"
+
+#: kmplayerview.cpp:190
+#, fuzzy
+msgid "Play List"
+msgstr "गीत सूची (&y)"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "आवाज़ निर्धारक:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "केएम-प्लेयर"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "खोलने हेतु फ़ाइलें"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr ""
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "क्लिपबोर्ड पर नकल बनाएँ (&C)"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr ""
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "प्राथमिकताएँ"
+
+#: pref.cpp:82
+#, fuzzy
+msgid "Looks"
+msgstr "लूप"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "आउटपुट"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "रेकॉर्डिंग"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "एम-एनकोडर"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "एफ़एफ़-एमपीईजी"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "आउटपुट प्लगइन्स"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "पोस्टप्रोसेसिंग"
+
+#: pref.cpp:208
+#, fuzzy
+msgid "Window"
+msgstr "नया विंडो (&W)"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "आकार अनुपात बनाए रखें"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"जब चेक किया जाता है, फिल्म अपने ऑस्पेक्ट रेशो को तब बनाए रखती है\n"
+" जब विंडो को नया आकार दिया जाता है"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr ""
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+#, fuzzy
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"जब चेक किया जाता है, फिल्म अपने ऑस्पेक्ट रेशो को तब बनाए रखती है\n"
+" जब विंडो को नया आकार दिया जाता है"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "लूप"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "वर्तमान फ़िल्म का लूप बनाता है"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "फ्रेमड्रॉप्स स्वीकारें"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"बेहतर ऑडियो तथा वीडियो सिंक्रोनाइज़ेशन के लिए ड्रापिंग फ्रेम्स स्वीकारें"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr ""
+
+#: pref.cpp:242
+#, fuzzy
+msgid "Show config button"
+msgstr "रेकॉर्ड बटन दिखाएँ"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+#, fuzzy
+msgid "Show playlist button"
+msgstr "ब्रॉडकास्ट बटन दिखाएँ"
+
+#: pref.cpp:245
+#, fuzzy
+msgid "Add a playlist button to the control buttons"
+msgstr "कंट्रोल बटनों में ब्राडकास्ट बटन जोड़ें"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "रेकॉर्ड बटन दिखाएँ"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "नियंत्रण बटनों में रेकॉर्ड बटन जोड़ें"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "ब्रॉडकास्ट बटन दिखाएँ"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "कंट्रोल बटनों में ब्राडकास्ट बटन जोड़ें"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "फॉरवर्ड/बैकवर्ड सीक टाइम:"
+
+#: pref.cpp:276
+#, fuzzy
+msgid "Colors"
+msgstr "रंग: (&l)"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr ""
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "स्थानः"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "सब टाइटल:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "'बजाने के लिए क्लिक करें' समर्थन सक्षम करें"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "मूवी प्लेयर इस्तेमाल करें:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr ""
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr ""
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "आउटपुट फ़ाइलः"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "रेकॉर्डिंग प्रारंभ करें"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "वर्तमान स्रोत:"
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "रेकॉर्डर"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "स्वचालित प्लेबैक"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "नहीं (&N)"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "जब रेकॉर्डिंग सम्पन्न हो जाए (&W)"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "के बाद (&f)"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "समय (सेकण्ड):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "रेकॉर्ड करना बन्द करें"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "रेकॉर्ड करना प्रारंभ करें"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "वर्तमान स्रोत:"
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "फॉर्मेट"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "स्रोत जैसे ही"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "मनपसंद"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "मेनकॉर्डर आर्गुमेंट्सः"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "एम-एनकोडर (&M)"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "एम-प्लेयर -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "एफएफएमपीईजी आर्गुमेंट्सः"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "एफ़एफ़-एमपीईजी (&F)"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "वीडियो ड्राइवर:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "ऑडियो ड्राइवर:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "पोस्टप्रोसेसिंग फ़िल्टर्स के इस्तेमाल सक्षम करें"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "जब टीवी/डीवीडी देखा जा रहा हो तो पोस्टप्रोसेसिंग को अक्षम करें"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "तेज"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "आड़ा डीब्लॉकिंग"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "स्वचालित गुण"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "क्रोमिनेंस फ़िल्टरिंग"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "खड़ा डीब्लॉकिंग"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "डेरिंग फ़िल्टर"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "स्वचालित चमकीलापन/कंट्रास्ट"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "चमकीलापन को पूरे रेन्ज में खींचता है"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "टेम्पोरल नॉइस रिड्यूसर"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "लीनियर ब्लेंड डीइंटरलेसर"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "लीनियर इंटरपोलेटिंग डीइंटरलेसर"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "क्यूबिक इंटरपोलेटिंग डीइंटरलेसर"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "मेडियन डीइंटरलेसर"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "एफ़एफ़-एमपीईजी डीइंटरलेसर"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "एम-प्लेयर के डिफ़ॉल्ट पोस्टप्रोसेसिंग फ़िल्टर्स को सक्षम करें"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"मनपसंद पोस्टप्रोसेसिंग फ़िल्टर्स को सक्षम करें (देखें: मनपसंद प्रीसेट -टैब)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "एम-प्लेयर के तीव्र पोस्टप्रोसेसिंग फ़िल्टर्स को सक्षम करें"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "जब पर्याप्त सीपीयू हो तो फ़िल्टर इस्तेमाल करें"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "चमकीलापन को पूरे रेन्ज में खींचता है (0...255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "मनपसंद प्रीसेट"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "डीइंटरलेसिंग"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "विन्यास रीसेट करें?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "वीडीआर (&R)"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "पूर्ण स्क्रीन"
+
+#: viewarea.cpp:1391
+#, fuzzy
+msgid "Scale:"
+msgstr "स्केल"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "जब पर्याप्त सीपीयू हो तो फ़िल्टर इस्तेमाल करें"
+
+#~ msgid "Escape"
+#~ msgstr "एस्केप"
+
+#, fuzzy
+#~ msgid "Could not start process "
+#~ msgstr "एमप्लेयर चालू नहीं कर सका."
+
+#~ msgid "VDR Custom Command"
+#~ msgstr "वीडीआर मनपसंद कमांड"
+
+#~ msgid "Up"
+#~ msgstr "ऊपर"
+
+#~ msgid "Down"
+#~ msgstr "नीचे"
+
+#~ msgid "Ok"
+#~ msgstr "ठीक"
+
+#~ msgid "Channels"
+#~ msgstr "चैनल्स"
+
+#~ msgid "Setup"
+#~ msgstr "सेटअप"
+
+#~ msgid "Menu"
+#~ msgstr "मेन्यू"
+
+#~ msgid "Red"
+#~ msgstr "लाल"
+
+#~ msgid "Green"
+#~ msgstr "हरा"
+
+#~ msgid "Yellow"
+#~ msgstr "पीला"
+
+#~ msgid "Blue"
+#~ msgstr "नीला"
+
+#~ msgid "Custom ..."
+#~ msgstr "मनपसंद..."
+
+#~ msgid "postProcessing"
+#~ msgstr "पोस्टप्रोसेसिंग"
+
+#~ msgid "disablePostProcessingAutomatically"
+#~ msgstr "डिसेबल-पोस्ट-प्रोसेसिंग-ऑटोमेटिकली"
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 0000000..07eec3f
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,1680 @@
+# Tamas Szanto <tszanto@mol.hu>, 2003.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: KDE 3.5\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2005-11-27 11:11+0100\n"
+"Last-Translator: Tamas Szanto <tszanto@interware.hu>\n"
+"Language-Team: Hungarian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Szántó Tamás"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "tszanto@interware.hu"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "Le&játszás"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Szünet"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "Á&llj"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "A hangerő csökkentése"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "A hangerő csökkentése"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% gyorsítótár-telítettség"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: lejátszás"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: a lejátszás leállítása"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Legújabb"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Megmaradó lejátszólisták"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Ú&j ablak"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Az előzmények tör&lése"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "DVD megnyi&tása"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "VCD megnyi&tása"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "Hang-CD megnyi&tása"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "Cső megny&itása..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Csatlakozás"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "Kon&zol"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "L&ejátszólista"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Egyszerű mód"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "&Szerkesztési mód"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Szinkr&onizálás a lejátszólistával"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Felbukanó menü megjelenítése"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Nyelv&választó menü megjelenítése"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "A kép&arány megőrzése"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Teljes képernyős mód"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "aRts-&vezérlő"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Új alkalmazásablak megnyitása"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Megnyit egy már létező fájlt"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Egy nemrég használt fájl megnyitása"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Bezárja az aktuális fájlt"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Kilépés az alkalmazásból"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Az állapotsor engedélyezése/letiltása"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "A menüsor ki-be kapcsolása"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Kész."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "F&orrás"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD-navigátor"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Hang-CD"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "H&ozzáadás a listához"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Hozzáadás új &csoportban"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "Másolás &ide"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "&Videó"
+
+#: kmplayerapp.cpp:751
+#, fuzzy
+msgid "More..."
+msgstr "Egyéb..."
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "DVD-navigáció..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Kész"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "DVD megnyitása..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "VCD megnyitása..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Hang-CD megnyitása..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Cső megnyitása..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Olvasás csőből"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Adjon meg egy parancsot, amely hang-és képanyagot küld a standard\n"
+"kimenetre. Ezeket az adatokat fogadja a lejátszóprogram a standard bemeneten.\n"
+"\n"
+"Parancs:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "VDR megnyitása..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Bemutató"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Fájl megnyitása..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Kilépés"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Új alkalmazásablak megnyitása..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Minden fájl"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Fájl megnyitása"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Fájl mentése"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Hiba történt a következő fájl megnyitásakor: %1\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "A fájl bezárása..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Kilépés..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "A menüsor megjelenítése - %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Mozgatás ide"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Új csoport"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&Törlés"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Felfelé"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "&Lefelé"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "A lejátszás automatikus megkezdése DVD megnyitásakor"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "A program automatikusan megkezdi a megnyitott DVD-k lejátszását"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD-eszköz:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "A DVD-eszköz elérési útja, olvasási jog szükséges hozzá"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Optikai lemezek"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "Hang-CD"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "Video-CD"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "Sza&kaszok"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "Fe&jezetek"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "H&angsávok"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "Feli&ratok"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Forrás"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Következő"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Gyökér"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Fel"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "A lejátszás automatikus elkezdése VCD megnyitásakor"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "A lejátszás automatikusan elkezdődik egy VCD megnyitásakor"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CD-ROM)-eszköz:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr "A CD-ROM/DVD-eszköz elérési útja, írási jogosultság szükséges hozzá"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Szám "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Hang-CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "%1. szám"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Cső"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Cső - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Kapcsolódási cím:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+"Ha több hálózati kártya található a gépben, itt korlátozható a hozzáférés"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Port:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "A kapcsolatok max. száma:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Maximális sávszélesség (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Ideiglenes adagolási fájl:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Adagolási fájlméret (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Formátum:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Csak AVI, MPEG és RM formátum használható visszajátszáshoz"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Hangmeghajtó:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "A hang bitrátája (kbit/s):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "A hang mintavételi frekvenciája (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Videokodek:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Video-bitráta (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Minőség (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "A képkockák száma (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "A 'gop' mérete:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Szélesség (képpont):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Magasság (képppont):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Hozzáférés engedélyezése innen:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'Cím' vagy 'Kezdőcím Zárócím' alakú IP-cím vagy -címtartomány"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Gépnév/IP-cím vagy -címtartomány"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Betöltés"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Indítás"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Sugárzás"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profilok"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Nem sikerült bezárni az ffserver folyamatot."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Nem sikerült elindítani az ffserver folyamatot.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Nem sikerült elindítani az ffmpeg folyamatot."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Automatikus"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "OSS"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "ALSA"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "aRts"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK Audio Connection Kit"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "ESD"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "ALSA 0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "ALSA 0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "A lejátszómotor alapértelmezése"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "A lejátszólista háttérszíne"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "A lejátszólista előtérszíne"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "A konzol háttérszíne"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "A lejátszólista aktív elemeinek színe"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "A konzol előtérszíne"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "A videóanyag háttérszíne"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "A nézeti terület háttérszíne"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Az információs ablak háttérszíne"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Az információs ablak előtérszíne"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Lejátszólista"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Információs ablak"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Nem létezik %1 nevű fájl."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Nem létezik %1 nevű feliratfájl."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Hangerő: %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "Lejátszás &ezzel"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Kon&zol"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "L&ejátszólista"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "H&angok"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "Feli&ratok"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kontraszt:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Fényerő:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Árnyalat:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Telítettség:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Színe&k"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "A KMPlayer b&eállítása..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "A lejátszólista egy &elemének szerkesztése"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Nem fut"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Pufferelés"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Lejátszás"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Felvevő %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Lejátszó %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Ismeretlen"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "Nincs kapcsolat"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Csatlakozás"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Nem sikerült bezárni a lejátszási folyamatot."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "A méret mintája"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "A gyorstár mintája"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "A pozíció mintája"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Indexminta"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "A hivatkozási URL mintája"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "A hivatkozás mintája"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "A kezdet mintája:"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "A DVD-nyelvek mintája"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "A DVD-feliratok mintája"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "A DVD-szakaszok mintája"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "A DVD-fejezetek mintája"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "A VCD-sávok mintája"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "A hang-CD számainak mintája"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "MPlayer-parancs:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "További parancssori argumentumok:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "A gyorsítótár mérete:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Új index létrehozása, ha lehetséges"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Engedélyezi a keresést indexelt fájlokban (pl. AVI-kban)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Általános beállítások"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Videomeghajtó:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Hangmeghajtó:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Név:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Szélesség:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Magasság:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Nem kell azonnal elkezdeni a lejátszást"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "A lejátszás csak a Lejátszás gomb lenyomása után kezdődjön"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norma:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Csatorna"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Frekvencia (MHz)"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Az eszköz el lesz távolítva a Forrás menüből.\n"
+"Folytatni szeretné a műveletet?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Megerősítés"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Meghajtó:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l vagy bsdbt848 lehet"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Eszköz:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "A videoeszköz elérési útja, pl. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Keresés..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Általános"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "TV-eszköz:"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Televízió"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Az eszköz már fel van véve."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Nem található eszköz."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TV-kereső"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo-port"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Az XVideo kiterjesztés alapportja.\n"
+"Ha az alapértelmezésen marad (0), az első szabad port lesz felhasználva. Ha "
+"több XVideo-példány aktív a gépen, akkor esetleg szükség lehet egy konkrét port "
+"megadására.\n"
+"Részletes információ kapható az 'xvinfo' parancs kiadásával."
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Kommunikációs port:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"A VDR kommunikációs portja. Az alapértelmezett érték: 2001.\n"
+"Ha más portot használ a vdr '-p' opciójánál, azt itt is meg kell adni."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Képarány"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "VDR nézése esetén a képarány"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "A kapcsolat &bontása"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR - Felfelé"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR - Lefelé"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR - Vissza"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR - OK"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR - Beállítás"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR - Csatornák"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR - Menü"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR - Vörös"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR - Zöld"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR - Sárga"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR - Kék"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR - 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR - 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR - 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR - 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR - 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR - 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR - 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR - 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR - 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR - 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "A gép nem található"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "A csatlakozás nem engedélyezett"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Egyéni VDR-parancs"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Parancsokat lehet átadni a VDR-nek.\n"
+"A 'HELP' beírásával listázhatók ki a parancsok.\n"
+"A VDR válasza a konzolablakban látható.\n"
+"\n"
+"VDR-parancs:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Lejátszólista"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Hangerő:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "a megnyitandó fájl"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "névtelen"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "nincs"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[attribútumok]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "Másolás a &vágólapra"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "Minden meg&jelenítése"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "A KMPlayer beállításai"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Megjelenés"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Kimenet"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Felvétel"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Kimeneti bővítőmodulok"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Utófeldolgozás"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Ablak"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "A képarány megőrzése"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Ha ez az opció be van jelölve, ablak átméretezésekor a\n"
+"program megőrzi a képarányt"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Dokkolás a paneltálcába"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Ha ez be van jelölve, a KMPlayer ikonja meg fog jelenni a paneltálcán.\n"
+"Ha rákattint erre az ikonra, a KMPlayer főablaka és feladatlista-bejegyzése "
+"elrejtődik."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Automatikus méretezés a videó méretére"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Ha ez be van jelölve, videólejátszás kezdetekor\n"
+"az ablak felveszi a videó méretét"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Az ablakméret elmentése kilépéskor"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Rögzített méret használata"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Végtelenített lejátszás"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "A film végtelenített módon lesz lejátszva"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Képkocka-eldobás engedélyezése"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"A képkocka-kihagyás engedélyezése a jobb kép- és hangszinkronizáció érdekében"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "A hangerő automatikus beállítása programinduláskor"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Új forrás kiválasztásakor a hangerő be lesz állítva a hangerőbeállításnál "
+"megadott értékekre"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "A színek automatikus beállítása induláskor"
+
+#: pref.cpp:236
+#, fuzzy
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"A lejátszás megkezdésekor a színek a csúszkákkal beállított értékekre állnak be"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Vezérlőpult"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Beállítás gomb megjelenítése"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Beállítás gomb felvétele a vezérlőgombok közé"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Lejátszólista gomb megjelenítése"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Lejátszólista gomb felvétele a vezérlőgombok közé"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Felvétel gomb megjelenítése"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Felvétel gomb felvétele a vezérlőgombok közé"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Sugárzás gomb megjelenítése"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Sugárzás gomb felvétele a vezérlőgombok közé"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Léptetési idő előre- ill. hátrafelé:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Színek"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Hely:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "A lejátszandó elem helye"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Felirat:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "A fenti URL-hez tartozó feliratfájl címe (opcionális)"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "A 'Lejátszás kattintásra' funkció engedélyezése"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Indítóképes weboldalak kezelése"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Videólejátszó használata:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Hálózati sávszélesség"
+
+#: pref.cpp:373
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Néha lehet választani több sugárzás közül egy bitráta kiválasztásával.\n"
+"Itt lehet megadni a videólejátszás preferált sávszélességét."
+
+#: pref.cpp:375
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Néha lehet választani több sugárzás közül egy bitráta kiválasztásával.\n"
+"Itt lehet megadni a videólejátszás max. sávszélességét."
+
+#: pref.cpp:376
+#, fuzzy
+msgid "Preferred bitrate:"
+msgstr "Preferált bitráta:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Maximális bitráta:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Kimeneti fájl:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "A felvétel elke&zdése"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Az aktuális forrás: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Felvevő"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Automatikus lejátszás"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Nem"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "Am&ikor a felvétel befejeződött"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&Utána"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Idő (s):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "A felvétel leállítása"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "A felvétel megkezdése"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Az aktuális forrás: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Formátum"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Ugyanaz, mint a forrás"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Egyéni"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "A Mencoder argumentumai:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Az FFMpeg argumentumai:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"A videomeghajtó beállítása. XVideo az ajánlott érték, ha az nem használható, "
+"akkor a lassabb X11Shm-et célszerű választani."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Videomeghajtó:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Hangmeghajtó:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Az utófeldolgozási szűrők bekapcsolása"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "TV/DVD nézésekor az utófeldolgozás letiltása"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Gyors"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Vízszintes blokkmentesítés"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Automatikus minőségbeállítás"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Krominancia-szűrés"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Függőleges blokkmentesítés"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Dering-szűrő"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Automatikus fényesség és kontraszt"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "A luminancia kiterjesztése a teljes tartományra"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Ideiglenes zajcsökkentő"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Lineáris kevert váltottsor-megszüntetés"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Lineáris interpolációs váltottsor-megszüntetés"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Harmadfokú interpolációs váltottsor-megszüntetés"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Medián váltottsor-megszüntetés"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "FFmpeg váltottsor-megszüntetés"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Bekapcsolja az MPlayer alapértelmezett utófeldolgozási szűrőit"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Egyéni utófeldolgozási szűrők használata (lásd az Egyéni alapérték lapot)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Az MPlayer gyors utófeldolgozási szűrőinek bekapcsolása"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "Ha van elég CPU-teljesítmény, a program használja a szűrőt"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Kiterjeszti a luminanciát a teljes tartományra (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Egyéni érték"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Váltottsor-megszüntetés"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Alapállapotba szeretné hozni a beállításokat?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"A mostani beállítások felül lesznek írva az alapértelmezett értékekkel.\n"
+"Biztosan ezt szeretné?\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Teljes képernyős mód"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Méret:"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "Ha van elég CPU-teljesítmény, a program használja a szűrőt"
diff --git a/po/is.po b/po/is.po
new file mode 100644
index 0000000..e76b928
--- /dev/null
+++ b/po/is.po
@@ -0,0 +1,1622 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr ""
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr ""
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr ""
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr ""
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr ""
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr ""
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr ""
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr ""
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr ""
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr ""
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr ""
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr ""
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr ""
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr ""
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr ""
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr ""
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr ""
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr ""
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr ""
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr ""
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr ""
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr ""
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr ""
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr ""
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr ""
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr ""
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr ""
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr ""
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr ""
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr ""
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr ""
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr ""
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr ""
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr ""
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr ""
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr ""
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr ""
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr ""
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr ""
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr ""
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr ""
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr ""
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr ""
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr ""
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr ""
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr ""
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr ""
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr ""
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr ""
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr ""
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr ""
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr ""
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr ""
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr ""
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr ""
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr ""
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr ""
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr ""
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr ""
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr ""
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr ""
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr ""
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr ""
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr ""
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr ""
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr ""
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr ""
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr ""
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr ""
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr ""
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr ""
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr ""
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr ""
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr ""
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr ""
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr ""
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr ""
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr ""
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr ""
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr ""
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr ""
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr ""
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr ""
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr ""
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr ""
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr ""
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr ""
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr ""
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr ""
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr ""
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr ""
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr ""
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr ""
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr ""
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr ""
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr ""
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr ""
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr ""
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr ""
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr ""
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr ""
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr ""
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr ""
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr ""
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr ""
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr ""
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr ""
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr ""
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr ""
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr ""
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr ""
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr ""
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr ""
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr ""
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr ""
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr ""
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr ""
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr ""
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr ""
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr ""
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr ""
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr ""
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr ""
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr ""
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr ""
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr ""
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr ""
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr ""
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr ""
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr ""
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr ""
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr ""
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr ""
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr ""
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr ""
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr ""
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr ""
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr ""
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr ""
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr ""
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr ""
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr ""
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr ""
+
+#: main.cpp:36
+msgid "file to open"
+msgstr ""
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr ""
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr ""
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr ""
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr ""
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr ""
+
+#: pref.cpp:85
+msgid "Output"
+msgstr ""
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr ""
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr ""
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr ""
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr ""
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr ""
+
+#: pref.cpp:208
+msgid "Window"
+msgstr ""
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr ""
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr ""
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr ""
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr ""
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr ""
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr ""
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr ""
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr ""
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr ""
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr ""
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr ""
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr ""
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr ""
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr ""
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr ""
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr ""
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr ""
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr ""
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr ""
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr ""
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr ""
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr ""
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr ""
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr ""
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr ""
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr ""
+
+#: pref.cpp:419
+msgid "&No"
+msgstr ""
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr ""
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr ""
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr ""
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr ""
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr ""
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr ""
+
+#: pref.cpp:543
+msgid "Format"
+msgstr ""
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr ""
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr ""
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr ""
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr ""
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr ""
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr ""
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr ""
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr ""
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr ""
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr ""
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr ""
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr ""
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr ""
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr ""
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr ""
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr ""
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr ""
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr ""
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..30581d8
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,1802 @@
+# translation of kmplayer.po to Italian
+# Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+#
+# Pino Toscano <toscano.pino@tiscali.it>, 2003.
+# Federico Zenith <zenith@chemeng.ntnu.no>, 2003, 2004, 2005, 2006, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-06-12 20:45+0200\n"
+"Last-Translator: Federico Zenith <zenith@chemeng.ntnu.no>\n"
+"Language-Team: Italian <kde-i18n-it@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Federico Zenith,Pino Toscano"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "zenith@chemeng.ntnu.no"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Riproduci"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pausa"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Interrompi"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Alza il volume"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Abbassa il volume"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% cache piena"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Riproduzione"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Riproduzione interrotta"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Più recenti"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Scalette persistenti"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Nuova &finestra"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Pulisci la &cronologia"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Apri DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Apri VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Apri CD audio"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Apri pipe..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Connetti"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "C&onsole"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "&Scaletta"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Modalità minima"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "Modalità di &modifica"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Sincroni&zza con scaletta"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Mostra menu a comparsa"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Mostra menu delle lingue"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Mantieni proporzioni"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "A &tutto schermo"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Controllo &Arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Apre una nuova finestra dell'applicazione"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Apre un file esistente"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Apre un file usato recentemente"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Chiude l'origine attuale"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Esce dall'applicazione"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Abilita/disabilita la barra di stato"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Abilita/disabilita la barra dei menu"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Pronto."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Origine"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "Navigatore &DVD"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "CD &audio"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Aggiungi all'elenco"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Aggiungi in un nuovo &gruppo"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Copia qui"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Altro..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "Navigazione DVD..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Pronto"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Apertura del DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Apertura del VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Apertura del CD audio..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Apertura della pipe..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Leggi dalla pipe"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Inserisci un comando che produrrà un flusso audio/video\n"
+"a stdout. Ciò sarà inviato direttamente allo stdin di un lettore.\n"
+"\n"
+"Comando:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Apertura VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Introduzione"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Apertura del file..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Uscita"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Apertura di una nuova finestra dell'applicazione..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Tutti i file"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Apri file"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Salva file"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Errore in apertura del file %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Chiusura del file..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Uscita..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Mostra la barra dei menu con %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Sposta qui"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Nuovo gruppo"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&Elimina elemento"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Sposta in alto"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Sposta in &basso"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Riproduci automaticamente dopo l'apertura di un DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Inizia a riprodurre un DVD appena dopo la sua apertura"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Dispositivo DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Percorso al dispositivo DVD, devi avere i permessi di lettura su questo "
+"dispositivo"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Dischi ottici"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - Audio Compact Disk"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Video Compact Disk"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Digital Video Disk"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Titoli"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Capitoli"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&Lingua dell'audio"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Sottotitoli"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Sorgente"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Prossimo"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "P&rincipale"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "S&u"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Riproduci automaticamente dopo l'apertura di un VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Avvia la riproduzione di un VCD appena dopo la sua apertura"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Dispositivo VCD (CDROM):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Percorso al dispositivo CDROM/DVD, devi avere i permessi di lettura su questo "
+"dispositivo"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Traccia "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "CD audio"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Traccia %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Pipe"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Pipe - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Indirizzo bind:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Se hai più dispositivi di rete, puoi limitarne l'accesso"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Porta d'ascolto:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Connessioni massime:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Massima larghezza di banda (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "File temporaneo di avanzamento:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Dimensione del file di avanzamento (kByte):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Formato:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Solo avi, mpeg e rm possono essere riprodotti con MPlayer"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Codec audio:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Bit rate dell'audio (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Campionamento dell'audio (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Codec video:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Bit rate del video (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Qualità (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Fotogrammi al secondo (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Dimensione di Gop:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Larghezza (pixel):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Altezza (pixel):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Permetti accesso da:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'IP singolo', o 'IP iniziale IP finale' per gli intervalli IP"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "IP dell'host o intervallo IP"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Carica"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Avvia"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Trasmissione"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profili"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Impossibile terminare il processo ffserver."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Impossibile avviare ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Impossibile avviare ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Automatico"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Sistema sonoro aperto (OSS)"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Strato semplice DirectMedia (SDL)"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Architettura Sonora Avanzata di Linux"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Sintetizzatore analogico in tempo reale"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "Kit di connessione audio JACK"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Demone del suono Enlightened (EsounD)"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Architettura Sonora Linux Avanzata v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Architettura Sonora Linux Avanzata v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Usa i valori predefiniti per l'interfaccia"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Sfondo della scaletta"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Primo piano della scaletta"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Sfondo della console"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Elemento attivo della scaletta"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Primo piano della console"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Sfondo del video"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Sfondo dell'area di visualizzazione"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Sfondo della finestra delle informazioni"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Primo piano della finestra delle informazioni"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Scaletta"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Finestra delle informazioni"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Il file %1 non esiste."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Il file di sottotitoli %1 non esiste."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Il volume è %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "Ri&produci con"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Con&sole"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Sca&letta"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Lingue dell'&audio"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Sottotitoli"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Contrasto:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Luminosità:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Tonalità:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Saturazione:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Co&lori"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Configura KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Mod&ifica elemento della scaletta"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Non in esecuzione"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Memorizzazione nel buffer"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Riproduzione"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Registratore %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Lettore %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Sconosciuto"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Disconnesso"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Connessione"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Impossibile terminare il processo di lettura."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Schema dimensione"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Schema cache"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Schema posizione"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Schema indice"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Schema URL di riferimento"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Schema di riferimento"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Schema avvio"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Schema lingue DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Schema sottotitoli DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Schema titoli DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Schema capitoli DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Schema tracce VCD"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Schema tracce CD audio"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "Comando MPlayer:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Argomenti aggiuntivi a riga di comando:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Dimensione della cache:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Costruisci un nuovo indice quando possibile"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Permetti ricerca nei file con indice (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Opzioni generali"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr "&Ice Ape"
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Dispositivo video:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Dispositivo audio:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Nome:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Larghezza:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Altezza:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Non riprodurre immediatamente"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Avvia la riproduzione solo dopo aver fatto clic sul pulsante Riproduci"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Standard:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Canale"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Frequenza (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Stai per rimuovere questo dispositivo dal menu Origine.\n"
+"Continuare?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Conferma"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Driver:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l o bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Dispositivo:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Percorso al dispositivo video, p.e. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Cerca..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Generale"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "Dispositivo TV"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Televisione"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Dispositivo già presente."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Nessun dispositivo trovato."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Porta XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Base della porta dell'estensione X Video.\n"
+"Se lasciata al valore predefinito (0), sarà usata la prima porta disponibile. "
+"Però, se hai più utenze XVideo, potresti dover fornire qui la porta da usare.\n"
+"Vedi l'output di 'xvinfo' per maggiori informazioni"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Porta di comunicazione:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Porta di comunicazione con VDR. Il valore predefinito è la porta 2001.\n"
+"Se usi un'altra porta, con l'opzione '-p' di 'vdr', devi impostarla anche qui."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Scala"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Proporzioni da usare quando si guarda un VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Dis&connetti"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "Tasto su VDR"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "Tasto giù VDR"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "Tasto indietro VDR"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "Tasto Ok VDR"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "Configurazione dei tasti VDR"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "Tasto canali VDR"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "Tasto menu VDR"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "Tasto rosso VDR"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "Tasto verde VDR"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "Tasto giallo VDR"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "Tasto blu VDR"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "Tasto 0 VDR"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "Tasto 1 VDR"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "Tasto 2 VDR"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "Tasto 3 VDR"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "Tasto 4 VDR"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "Tasto 5 VDR"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "Tasto 6 VDR"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "Tasto 7 VDR"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "Tasto 8 VDR"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "Tasto 9 VDR"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Host non trovato"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Connessione rifiutata"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Comando personalizzato VDR"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Puoi passare comandi a VDR.\n"
+"Inserisci 'HELP' per vedere un elenco di comandi disponibili.\n"
+"Puoi vedere la risposta VDR nella finestra della console.\n"
+"\n"
+"Comando VDR:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Porta "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Scaletta"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Volume:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "file da aprire"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "senza nome"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "nessuno"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[attributi]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Copia agli appunti"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "Mo&stra tutti"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Preferenze"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Aspetti"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Output"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Registrazione"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Plugin di output"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Postprocessing"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Finestra"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Mantieni proporzioni"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Se selezionata, i filmati manterranno le loro proporzioni\n"
+"dopo il ridimensionamento della finestra"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Aggancia al vassoio di sistema"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Quando segnato, sarà aggiunta un'icona di KMPlayer al vassoio di sistema.\n"
+"Quando ci farai clic, la finestra principale di KMPlayer sarà nascosta e il "
+"pulsante della barra dalle applicazioni di KMPlayer sarà rimosso."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Ridimensiona automaticamente alle dimensioni del video"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Se selezionata, KMPlayer si ridimensionerà\n"
+"alle dimensioni del filmato all'avvio del video"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Memorizza le dimensioni della finestra all'uscita"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Avvia sempre con una dimensione fissa"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Ciclo"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Fa sì che il filmato corrente si ripeta ciclicamente"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Permetti la perdita di frame"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Permetti la perdita di frame per una miglior sincronizzazione tra audio e video"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Imposta automaticamente il volume all'avvio"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Quando viene selezionata una nuova sorgente, il volume sarà impostato secondo "
+"il controllo del volume"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Imposta automaticamente i colori all'avvio"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"Quando parte un filmato, i colori saranno impostati secondo i cursori dei "
+"colori"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Pannello di controllo"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Mostra pulsante di configurazione"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Aggiungi un pulsante che farà apparire un menu di configurazione"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Mostra pulsante della scaletta"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Aggiungi un pulsante della scaletta ai pulsanti di controllo"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Mostra pulsante di registrazione"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Aggiungi un pulsante di registrazione ai pulsanti di controllo"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Mostra pulsante di trasmissione"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Aggiungi un pulsante di trasmissione ai pulsanti di controllo"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Tempo di ricerca in avanti/indietro:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Colori"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Posizione:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Posizione dell'elemento riproducibile"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Sottotitoli:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "Posizione opzionale di un file contenente i sottotitoli dell'URL sopra"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Attiva supporto 'clic e riproduci'"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Supporto per le pagine Web con un'immagine d'avvio"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Lettore multimediale da usare:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Banda di rete"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"A volte è possibile scegliere tra diversi flussi a seconda del bitrate.\n"
+"Questa opzione imposta quanta banda preferisci usare per il video."
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"A volte è possibile scegliere tra diversi flussi a seconda del bitrate.\n"
+"Questa opzione imposta la banda massima che hai a disposizione per il video."
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "Bitrate preferito:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Bitrate massimo:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "File di output:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Inizia a &registrare"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Sorgente attuale: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Registratore"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Riproduzione automatica"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&No"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Alla fine della registrazione"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&Dopo"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Tempo (secondi):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Ferma la registrazione"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Inizia la registrazione"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Sorgente corrente: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Formato"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Come la sorgente"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Personalizzato"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Argomenti di MEncoder:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Argomenti di FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Imposta il driver video. Si raccomanda XVideo o, se non supportato, X11, che è "
+"più lento."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Driver video:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Driver audio:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Abilita l'uso dei filtri di postprocessing"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Disabilita l'uso di postprocessing durante la visione di TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Veloce"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Deblocking orizzontale"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Qualità automatica"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Filtro crominanza"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Deblocking verticale"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Filtro di deringing"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Luminosità/contrasto automatici"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Allarga la luminanza a intervallo pieno"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Riduttore rumore temporale"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Deinterlacciatore miscela lineare"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Deinterlacciatore interpolazione lineare"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Deinterlacciatore interpolazione cubica"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Deinterlacciatore mediano"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "Deinterlacciatore FFmpeg"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Abilita i filtri predefiniti di postprocessing di MPlayer"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Abilita filtri di postprocessing personalizzati (vedi scheda Impostazioni "
+"personalizzate)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Abilita i filtri veloci di postprocessing di MPlayer"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "Il filtro è usato se c'è abbastanza CPU"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Allarga la luminanza a intervallo pieno (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Impostazioni personalizzate"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Deinterlacciamento"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Azzerare impostazioni?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Stai per sovrascrivere le impostazioni con i valori predefiniti.\n"
+"Prego confermare.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "A tutto schermo"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Scala:"
+
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "Il filtro è usato se c'è abbastanza CPU"
+
+#~ msgid "Disks"
+#~ msgstr "Dischi"
+
+#~ msgid "empty"
+#~ msgstr "vuoto"
+
+#~ msgid "tv://"
+#~ msgstr "tv://"
+
+#~ msgid "Escape"
+#~ msgstr "Esc"
+
+#~ msgid "Could not start process "
+#~ msgstr "Impossibile avviare il processo "
+
+#~ msgid "Default from MPlayer Config File"
+#~ msgstr "Valore predefinito dal file di configurazione di MPlayer"
+
+#~ msgid "postProcessing"
+#~ msgstr "postProcessing"
+
+#~ msgid "disablePostProcessingAutomatically"
+#~ msgstr "disattivaAutomaticamentePostProcessing"
+
+#~ msgid "VDR Custom Command"
+#~ msgstr "Comando personalizzato VDR"
+
+#~ msgid "Up"
+#~ msgstr "Su"
+
+#~ msgid "Down"
+#~ msgstr "Giù"
+
+#~ msgid "Ok"
+#~ msgstr "Ok"
+
+#~ msgid "Channels"
+#~ msgstr "Canali"
+
+#~ msgid "Setup"
+#~ msgstr "Configurazione"
+
+#~ msgid "Menu"
+#~ msgstr "Menu"
+
+#~ msgid "Red"
+#~ msgstr "Rosso"
+
+#~ msgid "Green"
+#~ msgstr "Verde"
+
+#~ msgid "Yellow"
+#~ msgstr "Giallo"
+
+#~ msgid "Blue"
+#~ msgstr "Blu"
+
+#~ msgid "Custom ..."
+#~ msgstr "Personalizzato..."
+
+#~ msgid "Xine"
+#~ msgstr "Xine"
+
+#~ msgid "&Show Console Output"
+#~ msgstr "Mo&stra output della console"
+
+#~ msgid "Show console output"
+#~ msgstr "Mostra output della console"
+
+#~ msgid "Shows output from mplayer before and after playing the movie"
+#~ msgstr "Mostra l'output di MPlayer prima e dopo la riproduzione di un filmato"
+
+#~ msgid "Output Pattern Matching"
+#~ msgstr "Confronto schemi di output"
+
+#~ msgid "Small buttons will be shown above statusbar to control movie"
+#~ msgstr "Dei piccoli pulsanti saranno mostrati sopra la barra di stato per controllare il filmato"
+
+#~ msgid "Auto hide control buttons"
+#~ msgstr "Nascondi automaticamente i pulsanti di controllo"
+
+#~ msgid "When checked, control buttons will get hidden automatically"
+#~ msgstr "Se selezionata, i pulsanti di controllo si nasconderanno automaticamente"
+
+#~ msgid "Show position slider"
+#~ msgstr "Mostra barra di posizione"
+
+#~ msgid "When enabled, will show a seeking slider under the control buttons"
+#~ msgstr "Se questa opzione è abilitata, viene mostrata una barra di ricerca sopra i pulsanti di controllo"
+
+#~ msgid "KMPlayer: Error"
+#~ msgstr "KMPlayer: Errore"
+
+#, fuzzy
+#~ msgid "Advanced (MPlayer)"
+#~ msgstr "Avanzato"
+
+#~ msgid "URL:"
+#~ msgstr "URL:"
+
+#~ msgid "Modem (32k)"
+#~ msgstr "Modem (32k)"
+
+#~ msgid "ISDN (64k)"
+#~ msgstr "ISDN (64k)"
+
+#~ msgid "ISDN2 (128k)"
+#~ msgstr "ISDN2 (128k)"
+
+#~ msgid "LAN (1024k)"
+#~ msgstr "LAN (1024k)"
+
+#~ msgid "Broadcasting (ffserver)"
+#~ msgstr "Trasmissione (ffserver)"
+
+#~ msgid "ACL"
+#~ msgstr "ACL"
+
+#~ msgid "Optimize for:"
+#~ msgstr "Ottimizza per:"
+
+#~ msgid "Leave field empty for default with this format"
+#~ msgstr "Lascia il campo vuoto per il valore predefinito con questo formato"
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..5ea18e0
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,1657 @@
+# translation of kmplayer.po to Japanese
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Ryuichi Kakuda <ryuk@user.script.nu>, 2004.
+# Yukiko Bando <ybando@k6.dion.ne.jp>, 2006, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-01-14 23:00+0900\n"
+"Last-Translator: Yukiko Bando <ybando@k6.dion.ne.jp>\n"
+"Language-Team: Japanese <Kdeveloper@kde.gr.jp>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 3.1.3\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Ryuichi Kakuda,Yukiko Bando"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "ryuk@user.script.nu,ybando@k6.dion.ne.jp"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "再生(&L)"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "一時停止(&P)"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "停止(&S)"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "音量を上げる"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "音量を下げる"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% キャッシュされました"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: 再生中"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: 停止中"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "最も最近使用したもの"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "持続的プレイリスト"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "新しいウィンドウ(&W)"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "履歴をクリア(&H)"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "DVD を開く(&O)"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "ビデオ CD を開く(&O)"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "オーディオ CD を開く(&O)"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "Pipe を開く(&O)..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "接続(&C)"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "コンソール(&O)"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "プレイリスト(&Y)"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "最小モード"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "編集モード(&E)"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "プレイリストと同期(&W)"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "ポップアップメニューを表示"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "言語メニューを表示"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "縦横比を維持(&K)"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "フルスクリーン(&F)"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Arts コントロール(&A)"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "新しいアプリケーションウィンドウを開く"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "既存のファイルを開く"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "最近使用したファイルを開く"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "ソースを閉じる"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "アプリケーションを終了"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "ステータスバーを有効/無効に"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "メニューバーを有効/無効に"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "待機中"
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "ソース(&O)"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "DVD ナビゲータ(&D)"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "ビデオ CD(&C)"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "テレビ(&T)"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "オーディオ CD(&A)"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "リストに追加(&A)"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "新しいグループに追加(&G)"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "ここにコピー(&C)"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "ビデオ(&I)"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "その他..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "DVD ナビゲーション..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "待機中"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "DVD を開いています..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "ビデオ CD を開いています..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "オーディオ CD を開いています..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Pipe を開いています..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Pipe から読み込み"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"オーディオ/ビデオストリームを標準出力に出力するコマンド\n"
+"を入力します。これはプレーヤの標準入力にパイプされます。\n"
+"\n"
+"コマンド:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "VDR を開いています..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "イントロ"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "ファイルを開いています..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "終了"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "新しいアプリケーションウィンドウを開いています..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|すべてのファイル"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "ファイルを開く"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "ファイルを保存"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"ファイル %1 を開く際にエラー\n"
+"%2"
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "ファイルを閉じています..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "終了します..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "%1 でメニューバーを表示"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "ここに移動"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "新規グループ"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "アイテムを削除(&D)"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "上に移動(&M)"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "下に移動(&D)"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "DVD を開いたらすぐに再生する"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "DVD を開いたら自動的に再生を開始します。"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD デバイス:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "DVD デバイスへのパス。このデバイスの読み取り権限が必要です。"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "光ディスク"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - オーディオコンパクトディスク"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - ビデオコンパクトディスク"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - デジタルビデオディスク"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "タイトル(&T)"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "チャプタ(&C)"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "音声の言語(&L)"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "字幕(&S)"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "ソース"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "次(&N)"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "ルート(&R)"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "上へ(&U)"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "ビデオ CD を開いたらすぐに再生する"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "ビデオ CD を開いたら自動的に再生を開始します。"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "ビデオ CD (CD-ROM) デバイス:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr "CDROM/DVD デバイスへのパス。このデバイスの読み取り権限が必要です。"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "ビデオ CD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "トラック "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "オーディオ CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "トラック %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Pipe"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Pipe - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "バインドアドレス:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "複数のネットワークデバイスがある場合、アクセスを制限できます。"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "待ち受けポート:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "最大接続数:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "最大帯域幅 (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "一時フィードファイル:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "フィードファイルのサイズ (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "フォーマット:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "mplayer で再生できるのは avi, mpg, rm だけです。"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "オーディオコーデック:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "オーディオビットレート (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "オーディオサンプリングレート (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "ビデオコーデック:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "ビデオビットレート (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "クオリティ (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "フレームレート (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Gop サイズ:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "幅 (ピクセル):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "高さ (ピクセル):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "アクセス許可:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "「単一の IP」または IP レンジの場合は「開始 IP 終了 IP」"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "ホスト/IP または IP レンジ"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "読込"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "開始"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "放送"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "プロファイル"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "ffsetver プロセスの終了に失敗しました。"
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"ffserver の開始に失敗しました。\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "ffmpeg の開始に失敗しました。"
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "自動"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound System (OSS)"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer (SDL)"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture (ALSA)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "アナログリアルタイムシンセサイザ"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK Audio Connection Kit"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened サウンドデーモン"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture (ALSA) v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture (ALSA) v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "バックエンドの標準設定を使う"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "プレイリストの背景"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "プレイリストの前景"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "コンソールの背景"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "プレイリストのアクティブなアイテム"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "コンソールの前景"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "ビデオの背景"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "表示ウィンドウの背景"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "情報ウィンドウの背景"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "情報ウィンドウの前景"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "プレイリスト"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "情報ウィンドウ"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "ファイル %1 は存在しません。"
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "字幕ファイル %1 は存在しません。"
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "音量: %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "再生プレーヤ(&P)"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "コンソール(&S)"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "プレイリスト(&L)"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "音声の言語(&A)"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "字幕(&S)"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "コントラスト:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "輝度:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "色相:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "彩度:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "色(&L)"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "KMPlayer を設定(&C)..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "プレイリストのアイテムを編集(&I)"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "実行していません"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "バッファ中"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "再生中"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "レコーダー %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "プレーヤ %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "不明"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "切断"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "接続"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "player プロセスの終了に失敗しました。"
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "サイズ パターン"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "キャッシュ パターン"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "ポジション パターン"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "インデックス パターン"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "リファレンス URL パターン"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "リファレンス パターン"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "開始 パターン"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "DVD 言語 パターン"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "DVD 字幕 パターン"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "DVD タイトル パターン"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "DVD チャプタ パターン"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "VCD トラック パターン"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "オーディオ CD トラック パターン"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "MPlayer コマンド:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "追加のコマンドライン引数:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "キャッシュサイズ:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "可能なときは新しいインデックスを作成する"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "インデックスファイル (AVI) でのシークを許可する"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "一般オプション"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "ビデオデバイス:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "オーディオデバイス:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "名前:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "幅:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "高さ:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "すぐに再生しない"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "再生ボタンを押すまでは再生を開始しません。"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "規格:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "チャンネル"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "周波数 (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"このデバイスをソースメニューから削除しようとしています。\n"
+"続けますか?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "確認"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "ドライバ:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "ダミー、v4l または bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "デバイス:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "ビデオデバイスへのパス。例: /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "スキャン..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "全般"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "テレビデバイス"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "テレビ"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "テレビ"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "テレビ: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "デバイスは既にあります。"
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "デバイスが見つかりません。"
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "テレビスキャナ"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo ポート"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"X Video エクステンションのポートベース。\n"
+"標準の (0) にしておくと、利用可能な最初のポートが使用されます。複数の XVideo "
+"インスタンスがある場合は、ここで使用するポートを指定する必要があるかもしれません。\n"
+"詳しくは 'xvinfo' の出力を見てください。"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "通信ポート:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"VDR と通信するポート。標準のポートは 2001。\n"
+"'vdr' の '-p' オプションで別のポートを使用する場合は、それもここで設定してください。"
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "縦横比"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "VDR を見るときの縦/横の比率"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "切断(&C)"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR キー 上"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR キー 下"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR キー 戻る"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR キー OK"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR キー 設定"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR キー チャンネル"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR キー メニュー"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR キー 赤"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR キー 緑"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR キー 黄"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR キー 青"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR キー 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR キー 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR キー 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR キー 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR キー 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR キー 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR キー 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR キー 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR キー 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR キー 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "ホストが見つかりません"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "接続を拒否されました"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "カスタム VDR コマンド"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"VDR にコマンドを送ることができます。\n"
+"利用可能なコマンドを見るには 'HELP' と入力してください。\n"
+"VDR の応答はコンソールウィンドウに表示されます。\n"
+"\n"
+"VDR コマンド:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "ポート "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "プレイリスト"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "音量:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "開くファイル"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "名前なし"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "なし"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[属性]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "クリップボードにコピー(&C)"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "すべて表示(&S)"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "設定"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "外観"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "出力"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "レコーディング"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "出力プラグイン"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "後処理"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "ウィンドウ"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "サイズの比率を維持"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr "これにチェックを入れると、ウィンドウのサイズを変更したときに動画の縦/横の比率を維持します。"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "システムトレイにドッキング"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"これにチェックを入れると、KMPlayer のアイコンがシステムトレイに表示されます。そのアイコンをクリックすると KMPlayer "
+"のメインウィンドウが非表示になり、タスクバーのエントリも消えます。"
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "自動的に動画のサイズに合わせる"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr "これにチェックを入れると、動画の再生を開始したときに KMPlayer のウィンドウサイズが自動的に動画のサイズになります。"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "終了時にウィンドウのサイズを記憶する"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "常に固定サイズで開始する"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "ループ"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "現在の動画を繰り返します。"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "フレームドロップを許可する"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "オーディオとビデオのより良い同期のためにフレームドロップを許可します。"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "開始時に自動的に音量を設定する"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr "新しいソースが選択されたときに、音量コントロールに従って音量を設定します。"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "開始時に自動的に色を設定する"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr "動画の再生を開始したときに、色のスライダーに従って色を設定します。"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "コントロールパネル"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "設定ボタンを表示"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "設定メニューを表示するボタンを追加します。"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "プレイリストボタンを表示"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "コントロールボタンにプレイリストボタンを追加します。"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "録音ボタンを表示"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "コントロールボタンに録音ボタンを追加します。"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "放送ボタンを表示"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "コントロールボタンに放送ボタンを追加します。"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "前方/後方シーク時間:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "色"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "場所:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "再生可能なアイテムの場所"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "字幕:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "上の URL の字幕を含むファイルの任意の場所"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "「クリックで再生」サポートを有効にする"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "開始画像を持つウェブページのサポート"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "使用する動画プレーヤ:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "ネットワーク帯域幅"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"ビットレートの異なる数種類のストリームから選択できる場合があります。\n"
+"このオプションは、ビデオにどれだけの帯域幅を割り当てるかを設定します。"
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"ビットレートの異なる数種類のストリームから選択できる場合があります。\n"
+"このオプションは、ビデオに最大でどれだけの帯域幅が使用可能かを設定します。"
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "優先するビットレート:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/秒"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "最大ビットレート:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "出力ファイル:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "レコーディング開始(&R)"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "現在のソース: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "レコーダー"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "自動再生"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "しない(&N)"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "レコーディング終了時(&W)"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "後で(&F)"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "時間 (秒):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "レコーディングを停止"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "レコーディングを開始"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "現在のソース: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "フォーマット"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "ソースと同じ"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "カスタム"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mencoder の引数:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMpeg の引数:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr "ビデオドライバを設定します。推奨は XVideo または (これがサポートされていない場合) X11。X11 の方が遅い。"
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "ビデオドライバ:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "オーディオドライバ:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "後処理フィルタを有効にする"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "TV / DVD を見ているときは後処理フィルタを無効にする"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "高速"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "自動画質"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr ""
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "輝度/コントラスト自動調整"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "輝度を全帯域に拡張する"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "一時的ノイズ低減"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "MPlayer 標準の後処理フィルタを使います。"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr "ユーザ定義の後処理フィルタを使います。カスタムプリセットタブで設定してください。"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "MPlayer の高速後処理フィルタを使います。"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "フィルタは CPU に余裕がある場合に使用"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "輝度を全帯域 (0..255) に拡張します。"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "カスタムプリセット"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "インターレース解除"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "設定をリセットしますか?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"すべての設定を標準の値で上書きしようとしています。\n"
+"確認してください。\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "フルスクリーン"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "スケール:"
diff --git a/po/ka.po b/po/ka.po
new file mode 100644
index 0000000..bdc76a4
--- /dev/null
+++ b/po/ka.po
@@ -0,0 +1,1710 @@
+# translation of kmplayer.po to Georgian
+#
+# Rusudan Tsiskreli <tsiskreli@gmail.com>, 2006.
+# George Machitidze <giomac@gmail.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-08-13 14:50+0400\n"
+"Last-Translator: George Machitidze <giomac@gmail.com>\n"
+"Language-Team: Georgian <guiasher@mes.gov.ge>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "რუსუდან ცისკრელი, გიორგი მაჩიტიძე"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "tsiskreli@gmail.com, giomac@gmail.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&დაკვრა"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&პაუზა"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&გაჩერება"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "ხმის აწევა"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "ხმის ჩაწევა"
+
+#: kmplayer_part.cpp:563
+#, fuzzy
+msgid "% Cache fill"
+msgstr "% ქეშის შევსება"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: იკვრება"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: დაკვრის გაჩერება"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "უკანასკნელი"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "ახალი &ფანჯარა"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "ის&ტორიის წაშლა"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "DVD-ს &გახსნა"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "VCD-ს &გახსნა"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+#, fuzzy
+msgid "&Open Audio CD"
+msgstr "VCD-ს &გახსნა"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "მილის &გახსნა..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&დაკავშირება"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "კ&ონსოლი"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "სიის დაკვ&რა"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "მინიმალური რეჟიმი"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "&რედაქტირების რეჟიმი"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "სინქრონიზაცია &რეპერტუართან"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "მხტუნავი მენიუს ჩვენება"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "ენის მენიუს ჩვენება"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "სიგანის/სიმაღლის დონის &დატოვება"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&მთელს ეკრანზე"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Arts-ის მართვა"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "ხსნის პროგრამის ახალ ფანჯარას"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "ხსნის არსებულ ფაილს"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "ხსნის უკანასკნელად გამოყენებულ ფაილს"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "ხურავს აქტუალურ სყაროს"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "ხურავს პროგრამას"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr ""
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr ""
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "მზადაა."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&წყარო"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD ნავიგაცია"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&ტელევიზორი"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "სიაში დ&ამატება"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "ახალ ჯ&გუფში დამატება"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "ვ&იდეო"
+
+#: kmplayerapp.cpp:751
+#, fuzzy
+msgid "More..."
+msgstr "მეტი ..."
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "DVD ნავიგაცია..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "მზადა"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "DVD-ის გახსნა..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "VCD-ის გახსნა..."
+
+#: kmplayerapp.cpp:817
+#, fuzzy
+msgid "Opening Audio CD..."
+msgstr "VCD-ის გახსნა..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "მილის გახსნა..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "მილიდან წაკითხვა"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "VDR-ის გახსნა..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "შესავალი"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "ფაილის გახსნა..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "გამოსვლა"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "ახალი პროგრამის ფანჯრის გახსნა..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|ყველა ფაილი"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "ფაილის გახსნა"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "ფაილის შენახვა"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"შეცდომა %1 ფაილის გახსნისას.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "ფაილის დახურვა..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "გამოსვლა..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "მენიუს ზოლის ჩვენება %1-ით"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "აქ გადმოტანა"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "ახალი ჯგუფი"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "DVD-ის გახსნის შემდეგ ავტომატურად დაკვრა"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "DVD-ის გახსნის შემდეგ DVD-ის უმალვე დაკვრა"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD მოწყობილობა:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"გეზი თქვენი DVD მოწყობილობისაკენ, თქვენ ამ მოწყობილობის წაკითხვის უფლება უნდა "
+"გქონდეთ"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "ოპტიკური დისკები"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+#, fuzzy
+msgid "CDROM - Audio Compact Disk"
+msgstr "VCD - Video Compact Disk"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Video Compact Disk"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Digital Video Disk"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&სათაურები"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&თავები"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "ხმის &ენა"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&სუბტიტრები"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "წყარო"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&შემდეგი"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&სათაო"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&ზევით"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "VCDი-ს გახსნის შემდეგ ავტომატურად დაკვრა"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "VCD-ის გახსნის შემდეგ VCD-ის უმალვე დაკვრა"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CDROM) მოწყობილობა:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"გეზი თქვენი CDROM/DVD მოწყობილობისკენ, თქვენ ამ მოწყობილობის წაკითხვის უფლება "
+"უნდა გქონდეთ"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "ჩანაწერი "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+#, fuzzy
+msgid "Audio CD"
+msgstr "აუდიო კოდეკი:"
+
+#: kmplayerapp.cpp:2203
+#, fuzzy, c-format
+msgid "Track %1"
+msgstr "ჩანაწერი "
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "მილი"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "მილი - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "მისამართის მიბმა:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "თუ მრავალი ქსელური მოწყობილობა გაქვთ, შეგიძლიათ წვდომა შეზღუდოთ"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "მოსასმენი პორტი:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "მაქსიმალური კავშირები:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "მაქსიმალური გამტარობა (კბიტ):"
+
+#: kmplayerbroadcast.cpp:177
+#, fuzzy
+msgid "Temporary feed file:"
+msgstr "დროებითი არხის ფაილი:"
+
+#: kmplayerbroadcast.cpp:181
+#, fuzzy
+msgid "Feed file size (kB):"
+msgstr "არხის ფაილის ზომა (კბ):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "ფორმატი:"
+
+#: kmplayerbroadcast.cpp:212
+#, fuzzy
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "მხოლოდ avi, mpeg და rm მუშაობს mplayer დასაკრავად"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "აუდიო კოდეკი:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "ვიდეო კოდეკი:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "ხარისხი (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "კადრების სიხშირე (ჰც):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "სიგანე (პიქსელებში):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "სიმაღლე (პიქსელებში):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "წვდომის ნებარვა ჰოსტებისთვის:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "ჩატვირთვა"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "გაშვება"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "მაუწყებლობა"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "პროფილები"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "ffserver პროცესის დასრულება ვერ განხორციელდა."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"ffserver-ის გაშვება ვერ განხორციელდა.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "ffmpeg-ის გაშვება ვერ განხორციელდა."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "სხვა"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound System"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analog Real-Time Synthesizer"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "რეპერტუარის ფონი"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "რეპერტუარის შრიფტის ფერი"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "კონსოლის ფონი"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "რეპერტუარის აქტიური ელემენტი"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "კონსოლის შრიფტის ფერი"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "ვიდეოს ფონი"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "ხილვის არეს ფონი"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "ინფორმაციის ფანჯრის ფონი"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "ინფორმაციის ფანჯრის შრიფტის ფერი"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "რეპერტუარი"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "ინფორმაციის ფანჯარა"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "%1 ფაილი არ არსებობს."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "%1 სუბტიტრების ფაილი არ არსებობს."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "ხმის დონე არის %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "&კონსოლი"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&რეპერტუარი"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "&მის ენები"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&სუბტიტრები"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "კონტრასტი:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "სიკაშკაშე:"
+
+#: kmplayercontrolpanel.cpp:410
+#, fuzzy
+msgid "Hue:"
+msgstr "ტონი:"
+
+#: kmplayercontrolpanel.cpp:414
+#, fuzzy
+msgid "Saturation:"
+msgstr "ინტენსივობა:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "&ფერები"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "KMPlayer-ის &კონფიგურაცია..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "რეპერტუარის &ელემენტის რედაქტირება"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "არაა გაშვებული"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "ბუფერის შევსება"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+#, fuzzy
+msgid "Playing"
+msgstr "იკვრება"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "ჩამწერი %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "დამკვრელი %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "უცნობი"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "&კავშირის გაწყვეტა"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+#, fuzzy
+msgid "Connecting"
+msgstr "&დაკავშირება"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "დამკვრელის პროცესის დასრულება ვერ განხორციელდა."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "ზომის შაბლონი"
+
+#: kmplayerprocess.cpp:871
+#, fuzzy
+msgid "Cache pattern"
+msgstr "ქეშის შაბლონი"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "პოზიციის შაბლონი"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "ინდექსის შაბლონი"
+
+#: kmplayerprocess.cpp:874
+#, fuzzy
+msgid "Reference URL pattern"
+msgstr "მითითებული URL-ის შაბლონი"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "მითითებული შაბლონი"
+
+#: kmplayerprocess.cpp:876
+#, fuzzy
+msgid "Start pattern"
+msgstr "შაბლონის გაშვება"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "DVD-ის ენის შაბლონი"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "DVD-ის სუბტიტრების შაბლონი"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "DVD-ის სათაურების შაბლონი"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "DVD-ის თემების შაბლონი"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "VCD-ის ჩანაწერის შაბლონი"
+
+#: kmplayerprocess.cpp:882
+#, fuzzy
+msgid "Audio CD tracks pattern"
+msgstr "VCD-ის ჩანაწერის შაბლონი"
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "დამატებითი ბრძანების ველის არგუმენტები:"
+
+#: kmplayerprocess.cpp:906
+#, fuzzy
+msgid "Cache size:"
+msgstr "ქეშის ზომა:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "კბ"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "ახალი ინდექსის აგება როდესაც ეს შესაძლებელია"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "ინდექსირებულ ფაილებში გადასვლის ნებართვა (AVI-ებში)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "ძირითადი პარამეტრები"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "ვიდეო მოწყობილობა:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "აუდიო მოწყობილობა:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "სახელი:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "სიგანე:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "სიმაღლე:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "უმალვე არ დაუკრა"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "დაკვრის მხოლოდ დაკვრის ღილაკზე დაწკაპების შემდეგ დაწყება"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "ნორმა:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "არხი"
+
+#: kmplayertvsource.cpp:100
+#, fuzzy
+msgid "Frequency (MHz)"
+msgstr "სიხშირე"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"თქვენ აპირებთ ამ მოწყობილობის წყაროთა მენიუდან წაშლას.\n"
+"გსურთ გაგრძელება?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "დამოწმება"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "დრაივერი:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr ""
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "მოწყობილობა:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "გეზი ვიდეო მოწყობილობისკენ, მაგ. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "სკანირება..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "საერთო"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "tv მოწყობილობა"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+#, fuzzy
+msgid "TV"
+msgstr "ტელევიზორი"
+
+#: kmplayertvsource.cpp:476
+#, fuzzy
+msgid "TV: "
+msgstr "ტელევიზორი: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "მოწყობილობა უკვე არის."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "მოწყობილობა ვერ მოიძებნა."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo-ს პორტი"
+
+#: kmplayervdr.cpp:92
+#, fuzzy
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"პორტზე დაფუძნებული X ვიდეო გაფართოვება.\n"
+"ნაგულისხმევია (0), პირველივე ხელმისაწვდომი პორტი იქნება გამოყენებული. თუ კი "
+"რამდენიმე XVideo, მაშინ პორტი აქ მიუთითეთ.\n"
+"დამატებითი ინფორმაციისთვის იხილეთ 'xvinfo'-ს გამონატანი"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "საკომუნიკაციო პორტი:"
+
+#: kmplayervdr.cpp:96
+#, fuzzy
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"VDR-ს საკომუნიკაციო პორტი. ნაგულისხმები არის 2001.\n"
+"თუ 'vdr'-ს '-p' პარამეტრით სხვა პორტს იყენებთ, უნდა მიუთითოთ იცის აქ."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "მასშტაბირება"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+#, fuzzy
+msgid "Aspects to use when viewing VDR"
+msgstr "VDR-ს ხილვისას გამოსაყენებელი ასპექტები"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "&კავშირის გაწყვეტა"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr ""
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr ""
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr ""
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr ""
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr ""
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr ""
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr ""
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr ""
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr ""
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr ""
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr ""
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr ""
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr ""
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr ""
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr ""
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr ""
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "მასპინძელი სერვერი ვერ მოიძებნა"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "კავშირი უარყოფილია"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "სხვა VDR ბრძანება"
+
+#: kmplayervdr.cpp:497
+#, fuzzy
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"თქვენ შეგიძლიათ გადასცეთ ბრძანებები VDR-ს.\n"
+"შეიყვანეთ 'HELP' ხელმისაწვდომი ბრძანებების სიის სანახავად.\n"
+"VDR-ს პასუხის ნახვა კონსოლში შეგიძლიათ.\n"
+"\n"
+"VDR ბრძანება:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "პორტი "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "სიის დაკვრა"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "ხმა:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "გასახსნელი ფაილი"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "უსახელო"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "არაა"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[ატრიბუტები]"
+
+#: playlistview.cpp:353
+#, fuzzy
+msgid "&Copy to Clipboard"
+msgstr "გაცვლის ბუფერში ა&სლი"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&ყველას ჩვენება"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "პარამეტრები"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr ""
+
+#: pref.cpp:85
+#, fuzzy
+msgid "Output"
+msgstr "გამონატანი"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "ჩაწერა"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "გამომყვანი მოდულები"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr ""
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "ფანჯარა"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "ზომათა თანაფარდობის დაცვა"
+
+#: pref.cpp:213
+#, fuzzy
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"როდესაც მონიშნულია, ფილმი შეინარჩუნებს თავდაპირველ პროპორციებს\n"
+"ფანჯრის ზომის შეცვლისას"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "სისტემურ პანელში დამაგრება"
+
+#: pref.cpp:215
+#, fuzzy
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"როდესაც მონიშნულია, KMPlayer-ის ხატულა დაემატება სისტემურ პანელს.\n"
+"როდესაც დააწკაპებთ იგი დამალავს KMPlayer-ის მთავარ ფანჯარას და მოხსნის "
+"KMPlayer-ის ამოცანის ღილაკს."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "ვიდეო ზომის ავტომატურად შეცვლა"
+
+#: pref.cpp:217
+#, fuzzy
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"როდესაც მონიშნულია, KMPlayer შეცვლის კინოს ზომას\n"
+"როდესაც ვიდეო დაიწყება"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "გასვლისას ფანჯრის ზომის დამახსოვრება"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "ყოველთვის ფიქსირებული ზომით დაწყება"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "მარყუჟი"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "იმეორებს მიმდინარე ფილმს"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "კადრების გადაგდების უფლება"
+
+#: pref.cpp:232
+#, fuzzy
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"აუდიო და ვიდეოს სინქრონიზაციის გასაუმჯობესებლად ჩამოშლადი ჩარჩოების ნების "
+"დართვა"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "მართვის პანელი"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "კონფიგურაციის ღილაკის ჩვენება"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "ღილაკის დამატება, რომელიც მოდრეიფე მენიუს ამოაგდებს"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "რეპერტუარის ღილაკის ჩვენება"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "მართვის ღილაკებთან რეპერტუარის ღილაკის დამატება"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "ჩაწერის ღილაკის ჩვენება"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "მართვის ღილაკებთან ჩაწერის ღილაკის დამატება"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "მაუწყებლობის ღილაკის ჩვენება"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "მართვის ღილაკებთან მაუწყებლობის ღილაკის დამატება"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr ""
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "ფერები"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "მდებარეობა:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "დაკვრადი ელემენტის მდებარეობა"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "ქვესათაური:"
+
+#: pref.cpp:350
+#, fuzzy
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "ზემოთ მოყვანილი URL-ს სუბტიტრების არასავალდებულო ფაილის მდებარეობა"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr ""
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "ქსელის გამტარობა"
+
+#: pref.cpp:373
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"ხანდახან საშუალება გაქვთ აირჩიოთ სხვადასხვა bitrate-ანი ნაკადები.\n"
+"ეს პარამეტრი საზღვრავს რამხელა გამტარობის დათმობა გსურთ ვიდეოსთვის"
+
+#: pref.cpp:375
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"ხანდახან საშუალება გაქვთ აირჩიოთ სხვადასხვა bitrate-ანი ნაკადები.\n"
+"ეს პარამეტრი საზღვრავს რამხელა გამტარობის დათმობა გსურთ ვიდეოსთვის"
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "კბიტ/წმ"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr ""
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr ""
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "&ჩაწერის დაწყება"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "მიმდინარე წყარო: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "ჩამწერი"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "ავტომატურად დაკვრა"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&არა"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "რო&დესაც ჩაწერა დასრულდება"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&შემდეგ"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "დრო (წამები):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "ჩაწერის გაჩერება"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "ჩაწერის დაწყება"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "მიმდინარე წყარო: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "ფორმატი"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "იგივე რაც წყარო"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "სხვა"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mencoder-ის არგუმენტები:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMpeg-ის არგუმენტები:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+#, fuzzy
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"უთითებს ვიდეო დრაივერ. რეკომენდირებულია XVideo, ან თუ იგი არაა მხარდაჭერილი, "
+"X11, რომელიც უფრო ნელია."
+
+#: pref.cpp:621
+#, fuzzy
+msgid "Video driver:"
+msgstr "ვიდეო დრაივერი:"
+
+#: pref.cpp:627
+#, fuzzy
+msgid "Audio driver:"
+msgstr "აუდიო დრაივერი:"
+
+#: pref.cpp:642
+#, fuzzy
+msgid "Enable use of postprocessing filters"
+msgstr "პოსტპროცესების ფილტრების ჩართვა"
+
+#: pref.cpp:644
+#, fuzzy
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "პოსტპროცესების გამორთვა ტელევიზორია ან DVD-ს ყურებისას"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "სწრაფი"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "ავტომატური ხარისხი"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr ""
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "ავტო სიკაშკაშე/კონტრასტი"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "ილუმინაციის სრულ სიმძლავრეზე ჩართვა"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "ხარვეზების დროებითი ჩამხშობი"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "წრფივი დაბინდული დეინტერლეისი"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr ""
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr ""
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr ""
+
+#: pref.cpp:838
+#, fuzzy
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"ახლა ყველა თქვენი პარამეტრი განულდება.\n"
+"გთხოვთ დაადასტუროთ.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "მთელს ეკრანზე"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "მასშტაბირება:"
diff --git a/po/lt.po b/po/lt.po
new file mode 100644
index 0000000..d4e371f
--- /dev/null
+++ b/po/lt.po
@@ -0,0 +1,2228 @@
+# Lithuanian translation of the packate
+# Automatically generated, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: ziogelis 77\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2005-09-03 02:48+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: _translatorinfo.cpp:1
+#, fuzzy
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "nobody"
+
+#: _translatorinfo.cpp:3
+#, fuzzy
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "nobody@nowhere.lt"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr ""
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pauzė"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+#, fuzzy
+msgid "&Stop"
+msgstr ""
+"#-#-#-#-# konsole.po (konsole) #-#-#-#-#\n"
+"&Stabdyti\n"
+"#-#-#-#-# konqueror.po (konqueror) #-#-#-#-#\n"
+"&Sustabdyti\n"
+"#-#-#-#-# katepart.po (katepart) #-#-#-#-#\n"
+"&Stabdyti\n"
+"#-#-#-#-# amarok.po (amarok) #-#-#-#-#\n"
+"Sus&tabdyti\n"
+"#-#-#-#-# kmag.po (kmag) #-#-#-#-#\n"
+"&Sustabdyti\n"
+"#-#-#-#-# kmousetool.po (kmousetool) #-#-#-#-#\n"
+"&Sustabdyti\n"
+"#-#-#-#-# kmid.po (kmid) #-#-#-#-#\n"
+"&Stop\n"
+"#-#-#-#-# kaboodle.po (kaboodle) #-#-#-#-#\n"
+"&Stop\n"
+"#-#-#-#-# juk.po (juk) #-#-#-#-#\n"
+"&Sustabdyti"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+#, fuzzy
+msgid "Increase Volume"
+msgstr ""
+"#-#-#-#-# kmix.po (kmix) #-#-#-#-#\n"
+"Padidinti garsą\n"
+"#-#-#-#-# kscd.po (kscd) #-#-#-#-#\n"
+"Garsiau"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+#, fuzzy
+msgid "Decrease Volume"
+msgstr ""
+"#-#-#-#-# kmix.po (kmix) #-#-#-#-#\n"
+"Sumažinti garsą\n"
+"#-#-#-#-# kscd.po (kscd) #-#-#-#-#\n"
+"Tyliau"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr ""
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr ""
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr ""
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Naujas &langas"
+
+#: kmplayerapp.cpp:557
+#, fuzzy
+msgid "Clear &History"
+msgstr ""
+"#-#-#-#-# konsole.po (konsole) #-#-#-#-#\n"
+"Išva&lyti istoriją\n"
+"#-#-#-#-# kdelibs.po (kdelibs) #-#-#-#-#\n"
+"Išvalyti &istoriją"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+#, fuzzy
+msgid "&Connect"
+msgstr ""
+"#-#-#-#-# kbackgammon.po (kbackgammon) #-#-#-#-#\n"
+"&Prijungti\n"
+"#-#-#-#-# kmrml.po (kmrml) #-#-#-#-#\n"
+"&Prijungti\n"
+"#-#-#-#-# kppp.po (kppp) #-#-#-#-#\n"
+"&Jungtis\n"
+"#-#-#-#-# ksirc.po (ksirc) #-#-#-#-#\n"
+"&Prisijungti\n"
+"#-#-#-#-# artscontrol.po (artscontrol) #-#-#-#-#\n"
+"&Prijungti\n"
+"#-#-#-#-# artsbuilder.po (artsbuilder) #-#-#-#-#\n"
+"Su&jungti"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr ""
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr ""
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr ""
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr ""
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr ""
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr ""
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr ""
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Atvers naują programos langą"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr ""
+
+#: kmplayerapp.cpp:596
+#, fuzzy
+msgid "Opens a recently used file"
+msgstr ""
+"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n"
+"Atidaro dažniausiai naudojamą bylą\n"
+"#-#-#-#-# kverbos.po (kverbos) #-#-#-#-#\n"
+"Atvers paskutinį naudotą dokumentą\n"
+"#-#-#-#-# ksync.po (ksync) #-#-#-#-#\n"
+"Atvers paskutinį naudotą dokumentą\n"
+"#-#-#-#-# umbrello.po (umbrello) #-#-#-#-#\n"
+"Atvers paskutinį naudotą dokumentą"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr ""
+
+#: kmplayerapp.cpp:598
+#, fuzzy
+msgid "Quits the application"
+msgstr ""
+"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n"
+"Išeina iš programos\n"
+"#-#-#-#-# kmag.po (kmag) #-#-#-#-#\n"
+"Baigs programos darbą\n"
+"#-#-#-#-# kmouth.po (kmouth) #-#-#-#-#\n"
+"Baigs programos darbą\n"
+"#-#-#-#-# kverbos.po (kverbos) #-#-#-#-#\n"
+"Baigs programos darbą\n"
+"#-#-#-#-# ksync.po (ksync) #-#-#-#-#\n"
+"Baigs programos darbą\n"
+"#-#-#-#-# umbrello.po (umbrello) #-#-#-#-#\n"
+"Baigs programos darbą"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Įjungs arba išjungs būsenos juostą"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr ""
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+#, fuzzy
+msgid "Ready."
+msgstr ""
+"#-#-#-#-# kfindpart.po (kfindpart) #-#-#-#-#\n"
+"Pasiruošęs\n"
+"#-#-#-#-# kfilereplace.po (kfilereplace) #-#-#-#-#\n"
+"Pasirengęs.\n"
+"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n"
+"Pasirengęs.\n"
+"#-#-#-#-# pwmanager.po (pwmanager) #-#-#-#-#\n"
+"Pasirengęs.\n"
+"#-#-#-#-# kdat.po (kdat) #-#-#-#-#\n"
+"Pasiruošęs.\n"
+"#-#-#-#-# kcron.po (kcron) #-#-#-#-#\n"
+"Pasiruošęs.\n"
+"#-#-#-#-# ksayit.po (ksayit) #-#-#-#-#\n"
+"Pasirengęs.\n"
+"#-#-#-#-# kmouth.po (kmouth) #-#-#-#-#\n"
+"Pasirengęs.\n"
+"#-#-#-#-# kmrml.po (kmrml) #-#-#-#-#\n"
+"Pasirengęs.\n"
+"#-#-#-#-# kcoloredit.po (kcoloredit) #-#-#-#-#\n"
+"Pasiruošęs.\n"
+"#-#-#-#-# kverbos.po (kverbos) #-#-#-#-#\n"
+"Pasirengęs.\n"
+"#-#-#-#-# kmail.po (kmail) #-#-#-#-#\n"
+"Pasirengęs.\n"
+"#-#-#-#-# ksync.po (ksync) #-#-#-#-#\n"
+"Pasirengęs.\n"
+"#-#-#-#-# dub.po (dub) #-#-#-#-#\n"
+"Pasirengęs.\n"
+"#-#-#-#-# kopete.po (kopete) #-#-#-#-#\n"
+"Pasirengęs."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr ""
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr ""
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr ""
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr ""
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr ""
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr ""
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Pasiruošęs"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr ""
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr ""
+
+#: kmplayerapp.cpp:817
+#, fuzzy
+msgid "Opening Audio CD..."
+msgstr "Atidaroma byla..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr ""
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr ""
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Atidaroma byla..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+#, fuzzy
+msgid "Exit"
+msgstr ""
+"#-#-#-#-# kmahjongg.po (kmahjongg) #-#-#-#-#\n"
+"Išeiti\n"
+"#-#-#-#-# kmail.po (kmail) #-#-#-#-#\n"
+"Išeiti\n"
+"#-#-#-#-# kdevelop.po (kdevelop) #-#-#-#-#\n"
+"Išeiti\n"
+"#-#-#-#-# kppp.po (kppp) #-#-#-#-#\n"
+"Baigti"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Atidaromas naujas programos langas..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Visos bylos"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Atverti bylą"
+
+#: kmplayerapp.cpp:1333
+#, fuzzy
+msgid "Save File"
+msgstr ""
+"#-#-#-#-# katepart.po (katepart) #-#-#-#-#\n"
+"Įrašyti bylą\n"
+"#-#-#-#-# ksayit.po (ksayit) #-#-#-#-#\n"
+"Įrašyti bylą\n"
+"#-#-#-#-# kgpg.po (kgpg) #-#-#-#-#\n"
+"Išsaugoti bylą"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+
+#: kmplayerapp.cpp:1372
+#, fuzzy
+msgid "Closing file..."
+msgstr ""
+"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n"
+"Uždaroma byla...\n"
+"#-#-#-#-# kwordquiz.po (kwordquiz) #-#-#-#-#\n"
+"Byla uždaroma...\n"
+"#-#-#-#-# kverbos.po (kverbos) #-#-#-#-#\n"
+"Byla uždaroma...\n"
+"#-#-#-#-# ksync.po (ksync) #-#-#-#-#\n"
+"Byla uždaroma...\n"
+"#-#-#-#-# umbrello.po (umbrello) #-#-#-#-#\n"
+"Byla uždaroma..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Išeinama..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr ""
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr ""
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr ""
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr ""
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr ""
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr ""
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Šaltinis"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr ""
+
+#: kmplayerapp.cpp:2024
+#, fuzzy
+msgid "&Next"
+msgstr ""
+"#-#-#-#-# kdelibs.po (kdelibs) #-#-#-#-#\n"
+"&Kitas\n"
+"#-#-#-#-# digikam.po (digikam) #-#-#-#-#\n"
+"&Kitas\n"
+"#-#-#-#-# amarok.po (amarok) #-#-#-#-#\n"
+"&Kitas\n"
+"#-#-#-#-# kviewpresenterplugin.po (kviewpresenterplugin) #-#-#-#-#\n"
+"&Kitas\n"
+"#-#-#-#-# kbabel.po (kbabel) #-#-#-#-#\n"
+"Seka&ntis"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr ""
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Aukštyn"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr ""
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr ""
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr ""
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Formatas:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Video kodekas:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Įkelti"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+#, fuzzy
+msgid "Start"
+msgstr ""
+"#-#-#-#-# kcmkded.po (kcmkded) #-#-#-#-#\n"
+"Paleidimas\n"
+"#-#-#-#-# quanta.po (quanta) #-#-#-#-#\n"
+"Pradžia\n"
+"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n"
+"Pradėti\n"
+"#-#-#-#-# ktorrent.po (ktorrent) #-#-#-#-#\n"
+"Paleistis\n"
+"#-#-#-#-# ksysv.po (ksysv) #-#-#-#-#\n"
+"Paleistis\n"
+"#-#-#-#-# kmag.po (kmag) #-#-#-#-#\n"
+"Paleistis\n"
+"#-#-#-#-# kstars.po (kstars) #-#-#-#-#\n"
+"Paleistis\n"
+"#-#-#-#-# kmessedwords.po (kmessedwords) #-#-#-#-#\n"
+"Paleistis"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr ""
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr ""
+"#-#-#-#-# kdmgreet.po (kdmgreet) #-#-#-#-#\n"
+"Pasirinktina\n"
+"#-#-#-#-# khelpcenter.po (khelpcenter) #-#-#-#-#\n"
+"Pasirinkta\n"
+"#-#-#-#-# kcmkicker.po (kcmkicker) #-#-#-#-#\n"
+"Pasirinktas\n"
+"#-#-#-#-# privacy.po (privacy) #-#-#-#-#\n"
+"Derintas\n"
+"#-#-#-#-# kcmkonsole.po (kcmkonsole) #-#-#-#-#\n"
+"Pasirinkta\n"
+"#-#-#-#-# kasbarextension.po (kasbarextension) #-#-#-#-#\n"
+"Pasirinktas\n"
+"#-#-#-#-# ppdtranslations.po (ppdtranslations) #-#-#-#-#\n"
+"Pasirinktas\n"
+"#-#-#-#-# kdelibs.po (kdelibs) #-#-#-#-#\n"
+"Pasirinkta\n"
+"#-#-#-#-# libkscan.po (libkscan) #-#-#-#-#\n"
+"Pasirinktas\n"
+"#-#-#-#-# kcmkontactnt.po (kcmkontactnt) #-#-#-#-#\n"
+"Pasirinktas\n"
+"#-#-#-#-# kontact.po (kontact) #-#-#-#-#\n"
+"Pasirinktas\n"
+"#-#-#-#-# kaddressbook.po (kaddressbook) #-#-#-#-#\n"
+"Pasirinktinai\n"
+"#-#-#-#-# kopete.po (kopete) #-#-#-#-#\n"
+"Pasirinkta\n"
+"#-#-#-#-# noatun.po (noatun) #-#-#-#-#\n"
+"Pasirinktas"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound sistema"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Pagerinta Linux garsų architektūra"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr ""
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Apšviestoji garso tarnyba"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr ""
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr ""
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr ""
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr ""
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr ""
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr ""
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr ""
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr ""
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr ""
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr ""
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr ""
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Grojaraštis"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr ""
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Byla %1 neegzistuoja."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:387
+#, fuzzy
+msgid "Play&list"
+msgstr "Grojaraštis"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kontrastas:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Ryškumas:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr ""
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Groja"
+
+#: kmplayerpartbase.cpp:1384
+#, fuzzy
+msgid "Recorder %1 %2"
+msgstr "Išilginė fleita"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1461
+#, fuzzy
+msgid "Unknown"
+msgstr ""
+"#-#-#-#-# kcmkclock.po (kcmkclock) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# quicklauncher.po (quicklauncher) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kpartapp.po (kpartapp) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# libkickermenu_tom.po (libkickermenu_tom) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# fontinst.po (fontinst) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# konqueror.po (konqueror) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kio_devices.po (kio_devices) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# naughtyapplet.po (naughtyapplet) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kcmcomponentchooser.po (kcmcomponentchooser) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kcmnic.po (kcmnic) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kcmusb.po (kcmusb) #-#-#-#-#\n"
+"Nežinomas\n"
+"#-#-#-#-# kdeprint.po (kdeprint) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kio.po (kio) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kdelibs.po (kdelibs) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# amarok.po (amarok) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kuser.po (kuser) #-#-#-#-#\n"
+"Nežinomas\n"
+"#-#-#-#-# kttsjobmgr.po (kttsjobmgr) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kttsd_festivalintplugin.po (kttsd_festivalintplugin) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kfile_png.po (kfile_png) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kstars.po (kstars) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kmobile.po (kmobile) #-#-#-#-#\n"
+"Nežinomas\n"
+"#-#-#-#-# kontact.po (kontact) #-#-#-#-#\n"
+"Nežinomas\n"
+"#-#-#-#-# korganizer.po (korganizer) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kaddressbook.po (kaddressbook) #-#-#-#-#\n"
+"Nežinomas\n"
+"#-#-#-#-# libkcal.po (libkcal) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kmail.po (kmail) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# libkdenetwork.po (libkdenetwork) #-#-#-#-#\n"
+"Nežinomas\n"
+"#-#-#-#-# kbabel.po (kbabel) #-#-#-#-#\n"
+"Nežinomas\n"
+"#-#-#-#-# kompare.po (kompare) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kgpg.po (kgpg) #-#-#-#-#\n"
+"Nežinomas\n"
+"#-#-#-#-# kfile_txt.po (kfile_txt) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kopete.po (kopete) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# kcmlanbrowser.po (kcmlanbrowser) #-#-#-#-#\n"
+"Nežinomas\n"
+"#-#-#-#-# kpf.po (kpf) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# knewsticker.po (knewsticker) #-#-#-#-#\n"
+"Nežinoma\n"
+"#-#-#-#-# libkcddb.po (libkcddb) #-#-#-#-#\n"
+"Nežinomas\n"
+"#-#-#-#-# noatun.po (noatun) #-#-#-#-#\n"
+"Nežinoma"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr ""
+"#-#-#-#-# kbackgammon.po (kbackgammon) #-#-#-#-#\n"
+"&Prijungti\n"
+"#-#-#-#-# kmrml.po (kmrml) #-#-#-#-#\n"
+"&Prijungti\n"
+"#-#-#-#-# kppp.po (kppp) #-#-#-#-#\n"
+"&Jungtis\n"
+"#-#-#-#-# ksirc.po (ksirc) #-#-#-#-#\n"
+"&Prisijungti\n"
+"#-#-#-#-# artscontrol.po (artscontrol) #-#-#-#-#\n"
+"&Prijungti\n"
+"#-#-#-#-# artsbuilder.po (artsbuilder) #-#-#-#-#\n"
+"Su&jungti"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1859
+#, fuzzy
+msgid "Connecting"
+msgstr ""
+"#-#-#-#-# kbackgammon.po (kbackgammon) #-#-#-#-#\n"
+"&Prijungti\n"
+"#-#-#-#-# kmrml.po (kmrml) #-#-#-#-#\n"
+"&Prijungti\n"
+"#-#-#-#-# kppp.po (kppp) #-#-#-#-#\n"
+"&Jungtis\n"
+"#-#-#-#-# ksirc.po (ksirc) #-#-#-#-#\n"
+"&Prisijungti\n"
+"#-#-#-#-# artscontrol.po (artscontrol) #-#-#-#-#\n"
+"&Prijungti\n"
+"#-#-#-#-# artsbuilder.po (artsbuilder) #-#-#-#-#\n"
+"Su&jungti"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr ""
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr ""
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr ""
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr ""
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr ""
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr ""
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Bendros parinktys"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr ""
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr ""
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr ""
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:68
+#, fuzzy
+msgid "Name:"
+msgstr ""
+"#-#-#-#-# konqueror.po (konqueror) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kcmkio.po (kcmkio) #-#-#-#-#\n"
+"Pavadinimas:\n"
+"#-#-#-#-# kcmemail.po (kcmemail) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kdeprint.po (kdeprint) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kio.po (kio) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kdelibs.po (kdelibs) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# katepart.po (katepart) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# digikam.po (digikam) #-#-#-#-#\n"
+"Name:\n"
+"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kstars.po (kstars) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kmessedwords.po (kmessedwords) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# keduca.po (keduca) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kig.po (kig) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kmplot.po (kmplot) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# knode.po (knode) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kcmkontactnt.po (kcmkontactnt) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kontact.po (kontact) #-#-#-#-#\n"
+"Pavadinimas:\n"
+"#-#-#-#-# korganizer.po (korganizer) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kaddressbook.po (kaddressbook) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kmail.po (kmail) #-#-#-#-#\n"
+"Pavadinimas:\n"
+"#-#-#-#-# kgpg.po (kgpg) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# lyrics.po (lyrics) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kateprojectmanager.po (kateprojectmanager) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kopete.po (kopete) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# kfileshare.po (kfileshare) #-#-#-#-#\n"
+"Vardas:\n"
+"#-#-#-#-# knewsticker.po (knewsticker) #-#-#-#-#\n"
+"Pavadinimas:\n"
+"#-#-#-#-# kaudiocreator.po (kaudiocreator) #-#-#-#-#\n"
+"Vardas:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Plotis:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Aukštis:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr ""
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr ""
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr ""
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanalas"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Patvirtinti"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr ""
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr ""
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Įrenginys:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr ""
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr ""
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+#, fuzzy
+msgid "General"
+msgstr ""
+"#-#-#-#-# kate.po (kate) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# khotkeys.po (khotkeys) #-#-#-#-#\n"
+"Bendri\n"
+"#-#-#-#-# clockapplet.po (clockapplet) #-#-#-#-#\n"
+"Bendras\n"
+"#-#-#-#-# kcmkicker.po (kcmkicker) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kfontinst.po (kfontinst) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kio_print.po (kio_print) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# privacy.po (privacy) #-#-#-#-#\n"
+"Bendras\n"
+"#-#-#-#-# kcmkonq.po (kcmkonq) #-#-#-#-#\n"
+"Bendri\n"
+"#-#-#-#-# kcmkonsole.po (kcmkonsole) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kfile_font.po (kfile_font) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kcmsmserver.po (kcmsmserver) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kasbarextension.po (kasbarextension) #-#-#-#-#\n"
+"Bendrosios\n"
+"#-#-#-#-# kcmfonts.po (kcmfonts) #-#-#-#-#\n"
+"Bendras\n"
+"#-#-#-#-# kio_trash.po (kio_trash) #-#-#-#-#\n"
+"Bendrieji\n"
+"#-#-#-#-# kdeprint.po (kdeprint) #-#-#-#-#\n"
+"Bendros\n"
+"#-#-#-#-# kdelibs.po (kdelibs) #-#-#-#-#\n"
+"Bendros\n"
+"#-#-#-#-# kfilereplace.po (kfilereplace) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kchart.po (kchart) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# pwmanager.po (pwmanager) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kfile_rpm.po (kfile_rpm) #-#-#-#-#\n"
+"Pagrindai\n"
+"#-#-#-#-# kuser.po (kuser) #-#-#-#-#\n"
+"Bendrieji\n"
+"#-#-#-#-# kfile_deb.po (kfile_deb) #-#-#-#-#\n"
+"Pagrindai\n"
+"#-#-#-#-# ksnake.po (ksnake) #-#-#-#-#\n"
+"Bendri\n"
+"#-#-#-#-# atlantik.po (atlantik) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kasteroids.po (kasteroids) #-#-#-#-#\n"
+"Bendrieji\n"
+"#-#-#-#-# kbackgammon.po (kbackgammon) #-#-#-#-#\n"
+"Bendrieji\n"
+"#-#-#-#-# kghostview.po (kghostview) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kfile_pdf.po (kfile_pdf) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kfile_ps.po (kfile_ps) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kstars.po (kstars) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# keduca.po (keduca) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kturtle.po (kturtle) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kbruch.po (kbruch) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kvoctrain.po (kvoctrain) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kmplot.po (kmplot) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kalarm.po (kalarm) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# knode.po (knode) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# korganizer.po (korganizer) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# akregator.po (akregator) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kaddressbook.po (kaddressbook) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kmail.po (kmail) #-#-#-#-#\n"
+"Bendros\n"
+"#-#-#-#-# kbabel.po (kbabel) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kompare.po (kompare) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kcalc.po (kcalc) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kfile_txt.po (kfile_txt) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kfile_desktop.po (kfile_desktop) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kfile_html.po (kfile_html) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kcmmediacontrol.po (kcmmediacontrol) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kbinaryclock.po (kbinaryclock) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kopete.po (kopete) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kfileshare.po (kfileshare) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# ksirc.po (ksirc) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# knewsticker.po (knewsticker) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# kaudiocreator.po (kaudiocreator) #-#-#-#-#\n"
+"Bendra\n"
+"#-#-#-#-# noatun.po (noatun) #-#-#-#-#\n"
+"Bendra"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr ""
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr ""
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr ""
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr ""
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr ""
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr ""
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr ""
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr ""
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Mastelis"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr ""
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr ""
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr ""
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr ""
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr ""
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr ""
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr ""
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr ""
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr ""
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr ""
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr ""
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr ""
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr ""
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr ""
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr ""
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr ""
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr ""
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr ""
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr ""
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Mazgo rasti nepavyko"
+
+#: kmplayervdr.cpp:455
+#, fuzzy
+msgid "Connection refused"
+msgstr "Jungtis atmesta"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Prievadas "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr ""
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr ""
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Garsumas:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr ""
+
+#: main.cpp:36
+msgid "file to open"
+msgstr ""
+
+#: playlistview.cpp:180
+#, fuzzy
+msgid "unnamed"
+msgstr ""
+"#-#-#-#-# kimagemapeditor.po (kimagemapeditor) #-#-#-#-#\n"
+"bevardis\n"
+"#-#-#-#-# ksayit.po (ksayit) #-#-#-#-#\n"
+"bevardis\n"
+"#-#-#-#-# libkdegames.po (libkdegames) #-#-#-#-#\n"
+"bevardis\n"
+"#-#-#-#-# kstars.po (kstars) #-#-#-#-#\n"
+"bevardis\n"
+"#-#-#-#-# knode.po (knode) #-#-#-#-#\n"
+"bevardis\n"
+"#-#-#-#-# kmail.po (kmail) #-#-#-#-#\n"
+"bevardis\n"
+"#-#-#-#-# kbabel.po (kbabel) #-#-#-#-#\n"
+"nepavadintas"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr ""
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr ""
+
+#: pref.cpp:67
+#, fuzzy
+msgid "Preferences"
+msgstr ""
+"#-#-#-#-# ktorrent.po (ktorrent) #-#-#-#-#\n"
+"Pasirinkimai\n"
+"#-#-#-#-# kmouth.po (kmouth) #-#-#-#-#\n"
+"Pasirinkimai\n"
+"#-#-#-#-# kooka.po (kooka) #-#-#-#-#\n"
+"Pasirinkimai\n"
+"#-#-#-#-# kalarm.po (kalarm) #-#-#-#-#\n"
+"Pasirinkimai\n"
+"#-#-#-#-# libkdepim.po (libkdepim) #-#-#-#-#\n"
+"Pasirinkimai\n"
+"#-#-#-#-# kompare.po (kompare) #-#-#-#-#\n"
+"Pasirinkimai\n"
+"#-#-#-#-# krdc.po (krdc) #-#-#-#-#\n"
+"Parinktys\n"
+"#-#-#-#-# noatun.po (noatun) #-#-#-#-#\n"
+"Pasirinkimai"
+
+#: pref.cpp:82
+#, fuzzy
+msgid "Looks"
+msgstr ""
+"#-#-#-#-# kxsconfig.po (kxsconfig) #-#-#-#-#\n"
+"Ka&rtoti\n"
+"#-#-#-#-# kscd.po (kscd) #-#-#-#-#\n"
+"Ka&rtoti\n"
+"#-#-#-#-# noatun.po (noatun) #-#-#-#-#\n"
+"Ciklas"
+
+#: pref.cpp:85
+#, fuzzy
+msgid "Output"
+msgstr ""
+"#-#-#-#-# kdeprint.po (kdeprint) #-#-#-#-#\n"
+"Išvedimas\n"
+"#-#-#-#-# kbabel.po (kbabel) #-#-#-#-#\n"
+"Išvestis"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr ""
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr ""
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr ""
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr ""
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr ""
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Langas"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr ""
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr ""
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+#, fuzzy
+msgid "Loop"
+msgstr ""
+"#-#-#-#-# kxsconfig.po (kxsconfig) #-#-#-#-#\n"
+"Ka&rtoti\n"
+"#-#-#-#-# kscd.po (kscd) #-#-#-#-#\n"
+"Ka&rtoti\n"
+"#-#-#-#-# noatun.po (noatun) #-#-#-#-#\n"
+"Ciklas"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr ""
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr ""
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr ""
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr ""
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr ""
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr ""
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr ""
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr ""
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr ""
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr ""
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr ""
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Spalvos"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr ""
+
+#: pref.cpp:337
+#, fuzzy
+msgid "Location:"
+msgstr ""
+"#-#-#-#-# konqueror.po (konqueror) #-#-#-#-#\n"
+"Adresas:\n"
+"#-#-#-#-# kabc_net.po (kabc_net) #-#-#-#-#\n"
+"Vieta:\n"
+"#-#-#-#-# kdeprint.po (kdeprint) #-#-#-#-#\n"
+"Vieta:\n"
+"#-#-#-#-# kio.po (kio) #-#-#-#-#\n"
+"Vieta:\n"
+"#-#-#-#-# kabc_file.po (kabc_file) #-#-#-#-#\n"
+"Vieta:\n"
+"#-#-#-#-# kabc_dir.po (kabc_dir) #-#-#-#-#\n"
+"Vieta:\n"
+"#-#-#-#-# amarok.po (amarok) #-#-#-#-#\n"
+"Vieta:\n"
+"#-#-#-#-# konsolekalendar.po (konsolekalendar) #-#-#-#-#\n"
+"Vieta:\n"
+"#-#-#-#-# libkcal.po (libkcal) #-#-#-#-#\n"
+"Vieta:\n"
+"#-#-#-#-# libcalendarresources.po (libcalendarresources) #-#-#-#-#\n"
+"Vieta:\n"
+"#-#-#-#-# kbabel.po (kbabel) #-#-#-#-#\n"
+"Vieta:\n"
+"#-#-#-#-# kaudiocreator.po (kaudiocreator) #-#-#-#-#\n"
+"Vieta:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr ""
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr ""
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr ""
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr ""
+
+#: pref.cpp:401
+#, fuzzy
+msgid "Output file:"
+msgstr "Išvesties byla:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr ""
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr ""
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Išilginė fleita"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr ""
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Ne"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr ""
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr ""
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr ""
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr ""
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr ""
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr ""
+
+#: pref.cpp:543
+#, fuzzy
+msgid "Format"
+msgstr ""
+"#-#-#-#-# kcmcrypto.po (kcmcrypto) #-#-#-#-#\n"
+"Formatas\n"
+"#-#-#-#-# kdat.po (kdat) #-#-#-#-#\n"
+"Formatuoti\n"
+"#-#-#-#-# kooka.po (kooka) #-#-#-#-#\n"
+"Formatas\n"
+"#-#-#-#-# kompare.po (kompare) #-#-#-#-#\n"
+"Formatas\n"
+"#-#-#-#-# kfile_txt.po (kfile_txt) #-#-#-#-#\n"
+"Formatas\n"
+"#-#-#-#-# kaudiocreator.po (kaudiocreator) #-#-#-#-#\n"
+"Formatas"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr ""
+
+#: pref.cpp:545 pref.cpp:667
+#, fuzzy
+msgid "Custom"
+msgstr ""
+"#-#-#-#-# kdmgreet.po (kdmgreet) #-#-#-#-#\n"
+"Pasirinktina\n"
+"#-#-#-#-# khelpcenter.po (khelpcenter) #-#-#-#-#\n"
+"Pasirinkta\n"
+"#-#-#-#-# kcmkicker.po (kcmkicker) #-#-#-#-#\n"
+"Pasirinktas\n"
+"#-#-#-#-# privacy.po (privacy) #-#-#-#-#\n"
+"Derintas\n"
+"#-#-#-#-# kcmkonsole.po (kcmkonsole) #-#-#-#-#\n"
+"Pasirinkta\n"
+"#-#-#-#-# kasbarextension.po (kasbarextension) #-#-#-#-#\n"
+"Pasirinktas\n"
+"#-#-#-#-# ppdtranslations.po (ppdtranslations) #-#-#-#-#\n"
+"Pasirinktas\n"
+"#-#-#-#-# kdelibs.po (kdelibs) #-#-#-#-#\n"
+"Pasirinkta\n"
+"#-#-#-#-# libkscan.po (libkscan) #-#-#-#-#\n"
+"Pasirinktas\n"
+"#-#-#-#-# kcmkontactnt.po (kcmkontactnt) #-#-#-#-#\n"
+"Pasirinktas\n"
+"#-#-#-#-# kontact.po (kontact) #-#-#-#-#\n"
+"Pasirinktas\n"
+"#-#-#-#-# kaddressbook.po (kaddressbook) #-#-#-#-#\n"
+"Pasirinktinai\n"
+"#-#-#-#-# kopete.po (kopete) #-#-#-#-#\n"
+"Pasirinkta\n"
+"#-#-#-#-# noatun.po (noatun) #-#-#-#-#\n"
+"Pasirinktas"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr ""
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr ""
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr ""
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr ""
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr ""
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr ""
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+
+#: pref.cpp:670
+#, fuzzy
+msgid "Fast"
+msgstr ""
+"#-#-#-#-# kcmkicker.po (kcmkicker) #-#-#-#-#\n"
+"Greita\n"
+"#-#-#-#-# kcmkwm.po (kcmkwm) #-#-#-#-#\n"
+"Greita\n"
+"#-#-#-#-# ppdtranslations.po (ppdtranslations) #-#-#-#-#\n"
+"Greita\n"
+"#-#-#-#-# kxsconfig.po (kxsconfig) #-#-#-#-#\n"
+"Greita\n"
+"#-#-#-#-# k3b.po (k3b) #-#-#-#-#\n"
+"Greitas\n"
+"#-#-#-#-# ksnake.po (ksnake) #-#-#-#-#\n"
+"Greitas\n"
+"#-#-#-#-# knewsticker.po (knewsticker) #-#-#-#-#\n"
+"Greitai\n"
+"#-#-#-#-# noatun.po (noatun) #-#-#-#-#\n"
+"Greitas"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr ""
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr ""
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr ""
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr ""
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr ""
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr ""
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr ""
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Visame ekrane"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr ""
+
+#~ msgid "empty"
+#~ msgstr "tuščia"
+
+#~ msgid "Escape"
+#~ msgstr "Escape"
diff --git a/po/mt.po b/po/mt.po
new file mode 100644
index 0000000..9942ff7
--- /dev/null
+++ b/po/mt.po
@@ -0,0 +1,1685 @@
+# translation of kmplayer.po to Maltese
+# Kevin Attard Compagno <kac_comp@webhostmalta.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2005-01-30 13:46+0100\n"
+"Last-Translator: Kevin Attard Compagno <kac_comp@webhostmalta.com>\n"
+"Language-Team: Maltese <mt@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9.1\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr ""
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr ""
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr ""
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr ""
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr ""
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr ""
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr ""
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr ""
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr ""
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr ""
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr ""
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr ""
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr ""
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr ""
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr ""
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr ""
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr ""
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr ""
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr ""
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr ""
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr ""
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr ""
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr ""
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr ""
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr ""
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr ""
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr ""
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr ""
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr ""
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr ""
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr ""
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr ""
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr ""
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr ""
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr ""
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr ""
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr ""
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr ""
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr ""
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr ""
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr ""
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr ""
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr ""
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr ""
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr ""
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr ""
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr ""
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr ""
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr ""
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr ""
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr ""
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr ""
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr ""
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr ""
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr ""
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr ""
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr ""
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr ""
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr ""
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr ""
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr ""
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr ""
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr ""
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr ""
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr ""
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr ""
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr ""
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr ""
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr ""
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr ""
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr ""
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr ""
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr ""
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr ""
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr ""
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr ""
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr ""
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr ""
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr ""
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr ""
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr ""
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr ""
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr ""
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr ""
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr ""
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr ""
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr ""
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr ""
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "أدخل أمرًا:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr ""
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr ""
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr ""
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr ""
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr ""
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr ""
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr ""
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr ""
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr ""
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr ""
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr ""
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr ""
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr ""
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr ""
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr ""
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr ""
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr ""
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr ""
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr ""
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr ""
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr ""
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr ""
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr ""
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr ""
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr ""
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr ""
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr ""
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr ""
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr ""
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr ""
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr ""
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr ""
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr ""
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr ""
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr ""
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr ""
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr ""
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr ""
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr ""
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr ""
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr ""
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr ""
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr ""
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr ""
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr ""
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr ""
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr ""
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr ""
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr ""
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr ""
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr ""
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr ""
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr ""
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr ""
+
+#: main.cpp:36
+msgid "file to open"
+msgstr ""
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr ""
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr ""
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr ""
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr ""
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr ""
+
+#: pref.cpp:85
+msgid "Output"
+msgstr ""
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr ""
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr ""
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr ""
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr ""
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr ""
+
+#: pref.cpp:208
+msgid "Window"
+msgstr ""
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr ""
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr ""
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr ""
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr ""
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr ""
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr ""
+
+#: pref.cpp:242
+#, fuzzy
+msgid "Show config button"
+msgstr "اظهار أزرار التحكم"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+#, fuzzy
+msgid "Show playlist button"
+msgstr "اظهار أزرار التحكم"
+
+#: pref.cpp:245
+#, fuzzy
+msgid "Add a playlist button to the control buttons"
+msgstr "إخفاء تلقائي لأزرار التحكم"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr ""
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr ""
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr ""
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr ""
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr ""
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr ""
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr ""
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr ""
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr ""
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr ""
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr ""
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr ""
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr ""
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr ""
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr ""
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr ""
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr ""
+
+#: pref.cpp:419
+msgid "&No"
+msgstr ""
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr ""
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr ""
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr ""
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr ""
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr ""
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr ""
+
+#: pref.cpp:543
+msgid "Format"
+msgstr ""
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr ""
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr ""
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr ""
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr ""
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr ""
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr ""
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr ""
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr ""
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr ""
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr ""
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr ""
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr ""
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr ""
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr ""
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr ""
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr ""
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr ""
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr ""
+
+#~ msgid "postProcessing"
+#~ msgstr "postProcesiranje"
+
+#~ msgid "disablePostProcessingAutomatically"
+#~ msgstr "تعطيلPostProcessing تلقائيًا"
+
+#~ msgid "Up"
+#~ msgstr "Uhel"
+
+#, fuzzy
+#~ msgid "Channels"
+#~ msgstr "قناة"
+
+#, fuzzy
+#~ msgid "Setup"
+#~ msgstr "إيقاف"
+
+#, fuzzy
+#~ msgid "Red"
+#~ msgstr "جاهز"
+
+#, fuzzy
+#~ msgid "Custom ..."
+#~ msgstr "مخصص"
+
+#~ msgid "Xine"
+#~ msgstr "Xine"
+
+#, fuzzy
+#~ msgid "&Show Console Output"
+#~ msgstr "اظهار أزرار التحكم"
+
+#, fuzzy
+#~ msgid "Show console output"
+#~ msgstr "اظهار أزرار التحكم"
+
+#~ msgid "Shows output from mplayer before and after playing the movie"
+#~ msgstr "Prikazuje izlaz mplayer-a prije i poslije izvođenja filma"
+
+#, fuzzy
+#~ msgid "Output Pattern Matching"
+#~ msgstr "Pogađanje uzoraka"
+
+#~ msgid "Small buttons will be shown above statusbar to control movie"
+#~ msgstr "أزرار صغيرة سيتم إظهارها فوق شريط الحالة للتحكم بالعرض"
+
+#~ msgid "When checked, control buttons will get hidden automatically"
+#~ msgstr "إذا تم اختياره, أزرار التحكم سيتم إخفائها تلقائيًا"
+
+#~ msgid "Show position slider"
+#~ msgstr "اظهار شريط الموقع"
+
+#~ msgid "When enabled, will show a seeking slider under the control buttons"
+#~ msgstr "Kad je uključeno, prikazaće se klizač za pretraživanje ispod kontrolnih dugmadi"
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 0000000..750110b
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,1670 @@
+# translation of kmplayer.po to
+# translation of nb.po to
+#
+# Alexander Nicolaysen Sørnes <alex@thehandofagony.com>, 2005, 2006, 2007.
+# Nils Kristian Tomren <project@nilsk.net>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-02-11 11:07+0100\n"
+"Last-Translator: Alexander Nicolaysen Sørnes <alex@thehandofagony.com>\n"
+"Language-Team: <nb@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Alexander N. Sørnes"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "alex@thehandofagony.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "Spi&ll av"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pause"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Stopp"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Øk volum"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Senk volum"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% hurtigminnefyll"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: spiller av"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: stopp avspilling"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "URL"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "INTERNETT"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Mest nylig"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Varige spillelister"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Nytt &vindu"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Tøm &historikk"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Åpne DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Åpne VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Åpne lyd-CD"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Åpne rør . . ."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Koble til"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "K&onsoll"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Spill&eliste"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Minimal modus"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "R&edigeringsmodus"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Synkroniser &med spilleliste"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Vis oppsprettmeny"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Vis språkmeny"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Behold bredde/høyde-forhold"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Fullskjerm"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Arts-kontroller"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Åpner et nytt programvindu"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Åpner en fil"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Åpner en nylig brukt fil"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Lukker den gjeldende kilden"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Avslutter programmet"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Viser/Skjuler statuslinjen"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Viser/Skjuler menylinjen"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Klar"
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Kilde"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD-navigerer"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Lyd-CD"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "Legg &til i listen"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Legg til i ny &gruppe"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Kopier her"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Mer . . ."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "DVD-navigering . . ."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Klar"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Åpner DVD . . ."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Åpner VCD . . ."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Åpner lyd-CD . . ."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Åpner rør . . ."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Les fra rør"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Skriv inn en kommando som gir en lyd-/video-strøm\n"
+" til 'stdout'. Dette overføres i rør til en spillers 'stdin'.\n"
+" \n"
+"Kommando:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Åpner VDR . . ."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Introduksjon"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Åpner fil . . ."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Avslutt"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Åpner et nytt programvindu . . ."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Alle filer"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Åpne fil"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Lagre fil"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Klarte ikke åpne fila «%1».\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Lukker fil . . ."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Avslutter . . ."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Vis menylinje med «%1»"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Flytt her"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Ny gruppe"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&Slett element"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Flytt opp"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Flytt &ned"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Spill av automatisk etter åpning av DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Start spilling av DVD rett etter at den er åpnet"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD-enhet:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "Sti til DVD-enheten, som du må ha leserettigheter til"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Optiske plater"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - Kompakt lydplate"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Kompakt videoplate"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Digital videoplate"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Titler"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Kapitler"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&Lydspråk"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "Undertek&ster"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Kilde"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVD-navingering"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Neste"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Rot"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Opp"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Spill av automatisk etter åpning av VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Start avspilling automatisk etter åpning av VCD"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CD-ROM)-enhet:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr "Sti til CD-ROM-/DVD-enheten, som du må ha leserettigheter til"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Spor "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Lyd-CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Spor %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Rør"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Rør - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Bindeadresse:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Du kan begrense tilgang hvis du har flere nettverksenheter"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Lytteport:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Høyeste antall forbindelser:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Høyeste båndbredde (kb):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Midlertidig fôringsfil:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Størrelse på fôringsfil (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Format:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Kun «avi», «mpeg» og «rm» virker for mplayer-avspilling"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Lydkodek:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Bitrate for lyd (kb):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Prøvesamlingsrate for lyd (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Videokodek:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Bitrate for video (kb):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Kvalitet (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Bildefrekvens (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Størrelse på bildegrupper:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Bredde (piksler):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Høyde (piksler):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Tillat tilgang fra:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "«Enkel IP» eller «Start-IP slutt-IP» for IP-rekker"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Vert/IP eller IP-rekke"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Last"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Start"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Kringkaster"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profiler"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Klarte ikke avslutte «ffserver»-prosess."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Klarte ikke starte «ffserver».\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Klarte ikke starte «ffmpeg»."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FF-tjener"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Auto"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Åpne lydsystem"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer (SDL)"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture (ALSA)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analog Real-Time Synthesizer (ARTS)"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK-lydtilkoblingsverktøy"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon (ESD)"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v0.5 (ALSA)"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9 (ALSA)"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Bruk tjeners standardverdier"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo (XV)"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Spillelistebakgrunn"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Spillelisteforgrunn"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Konsollbakgrunn"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Aktivt element i spilleliste"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Konsollforgrunn"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Videobakgrunn"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Bakgrunn for visningsområde"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Bakgrunn for informasjonsvindu"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Forgrunn for informasjonsvindu"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Spilleliste"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Informasjonsvindu"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Feil «%1» finnes ikke."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Undertekstfila «%1» finnes ikke."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Volumet er %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "S&pill av med"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Kon&soll"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Spi&lleliste"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Lyd-&språk"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Undertekster"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kontrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Lysstyrke:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Nyanse:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Metning:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "&Farger"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Oppsett av KMPlayer . . ."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Rediger &punkt i spillelisten"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Kjører ikke"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Buffrer"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Spiller av"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Tar opp %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Spiller %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Ukjent"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Koblet fra"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Kobler til"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Klarte ikke avslutte spillerprosess."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Størrelsemønster"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Mellomlagermønster"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Posisjonsmønster"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Indeksmønster"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Referanse-URL-mønster"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Referanse-mønster"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Start-mønster"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Mønster for DVD-språk"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Mønster for DVD-undertekster"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Mønster for DVD-titler"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Mønster for DVD-kapitler"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Mønster for VCD-spor"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Mønster for lyd-CD-spor"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "MPlayer-kommando:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Ytterligere kommandolinjeargumenter:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Mellomlagerstørrelse:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Bygg ny indeks når mulig"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Tillat søking i indekserte filer (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Generelle innstillinger"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Videoenhet:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Lydenhet:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Navn:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Bredde:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Høyde:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Ikke spill av automatisk"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Ikke start avspilling for «Spill av»-knappen brukes"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norm:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Frekvens (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Iferd med å fjerne denne enheten fra kildemenyen.\n"
+"Fortsette?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Bekreft"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Driver:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "«dummy», «v4l» eller «bsdbt848»"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Enhet:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Sti til videoenheten, for eksempel «/dev/video0»"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Søk . . ."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Generelt"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "«tv»-enhet"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Fjernsyn"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Enheten finnes allerede."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Ingen enhet funnet."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TV-søker"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo-port"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Portbasen til X Video-utvidelsen.\n"
+"Standardverdien (0) bruker første tilgjengelige port. Hvis du har flere "
+"XVideo-instanser bør du oppgi porten som skal brkue sher.\n"
+"Se utdataen fra «xvinfo» for mer informasjon"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Kommunikasjonsport:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Kommunikasjonsport med VDR. Standard er 2001.\n"
+"Hvis du bruker en annen port, med innstillingen «-p» i «vdr», må du oppgi den "
+"her også."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Skaler"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:#"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Aspektforhold brukt når VDR vises"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Koble &fra"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR tast opp"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR tast ned"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR tast tilbake"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR tast OK"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR tast oppsett"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR tast kanaler"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR tast meny"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR tast rød"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR tast grønn"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR tast gul"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR tast blå"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR tast 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR tast 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR tast 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR tast 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR tast 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR tast 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR tast 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR tast 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR tast 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR tast 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Vert ikke funnet"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Tilkobling nektet"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Selvvalgt VDR-kommando"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Du kan gi kommandoer til VDR.\n"
+"Skriv «HELP» for å se en liste over tilgjengelige kommandoer.\n"
+"Du kan se VDRs svar i konsollvinduet.\n"
+"\n"
+"VDR-kommando:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Spilleliste"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Volum:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "åpne fil"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "uten navn"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "ingen"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[attributter]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Kopier til utklippstavlen"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "Vi&s alt"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Innstillinger"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Utseende"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Utdata"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Opptak"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Utdata-tilleggsmoduler"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Etterbehandling"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Vindu"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Behold størrelsforhold"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Hvis dette er på beholder filmer størrelsesforholdet\n"
+"når vindusstørrelsen endres"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Vis i systemkurven"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Dette viser et KMPlayer-ikon i systemkurven.\n"
+"Hvis det trykkes på skjules KMPlayers hovedvindu og knappen på oppgavelinjen."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Automatisk størrelsesendring til videostørrelsen"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Når dette er skrudd på endres vinduets størrelse til videoens\n"
+"størrelse når videoen starter"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Husk vindustørrelse ved avslutting"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Start alltid med fast størrelse"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Løkke"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Spill gjeldende film på nytt automatis"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Tillat å hoppe over bilder"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "Tillat å hoppe over bilder for med lyd- og videosynkronisering"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Endre volum ved oppstart"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Når det velges en ny kilde endres volumet i henhold til volumkontrollen"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Sett opp farger automatisk ved start"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr "Når en film starter, settes fargene etter fargekontrollene"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Kontrollpanel"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Vis oppsettsknapp"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Legg til en knapp som viser en oppsettsmeny"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Vis spillelisteknapp"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Legg til en spillelisteknapp blant kontrollknappene"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Vis opptaksknapp"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Legg en til en opptaksknapp blant kontrollknappene"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Vis kringkastingsknapp"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Legg til en kringkastingsknapp blant kontrollknappene"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Søketid for spoling framover/bakover:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Farger"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Plassering:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Plasseringen til det spillbare elementet"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Undertekst:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+"Valgfri plassering til en fil som inneholder undertekstene til URL-en ovenfor"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Skru på støtte for «Trykk for å spille av»"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Støtte for internettsider som har et startbilde"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Bruk filmavspiller:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Nettverksbåndbredde"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Noen ganger er det mulig å velge mellom forskjellige strømmer med forskjellige "
+"bitrater.\n"
+"Denne innstillingen angir hvor mye båndbredde du har lyst til å brukde til "
+"video"
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Noen ganger er det mulig å velge mellom forskjellige strømmer med forskjellige "
+"bitrater.\n"
+"Denne innstililngen angir hvor mye båndbredde du kan bruke på video"
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "Foretrukket bitrate:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kb/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Høyeste bitrate:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Utfil:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Start &opptak"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Gjeldende kilde: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Opptaker"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Automatisk avspilling"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Nei"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Når opptaket er ferdig"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&Etterpå"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Tid (sekunder):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Stopp opptak"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Start opptak"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Gjeldende kilde:"
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Format"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Samme som kilde"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Selvvalgt"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Argumenter til MEncoder:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Argumenter til FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Angir videodriveren. «XVideo» anbefales, og «X11» hvis denne ikke er "
+"tilgjengelig."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Videodriver:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Lyddriver."
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Skru på bruk av etterbehandlingsfiltre"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Skru av bruk av etterbehandlingsfiltre for TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Rask"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Vannrett deblokking"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Automatisk kvalitet"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Gulningsfiltrering"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Loddrett deblokking"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Dering-filter"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Automatisk lysstyrke/kontrast"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Stekker lysstyrke til full rekkevidde"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Verdslig støyreduserer"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Avfletter med lineær blanding"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Avfletter med lineær interpolering"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Avfletter med kubisk interpolering"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Median-avfletter"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "FFMpeg-avfletter"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Skru på MPlayers standard etterbehandlingsfiltre"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Skru på selvvalgte etterbehandlingsfiltre (Se fanen «Selvvalgt "
+"forhåndsinnstilling»)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Skru på MPlayers raske etterbehandlingsfiltre"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "Filteret brukes hvis det er nok prosessorkraft"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Strekker lysstyrke til full rekkevidde (0.255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Selvvalgt forhåndsinnstilling"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Avfletting"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Tilbakestille innstillinger?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Iferd med å bytte alle innstillingene tilbake til standardverdier.\n"
+"Bekreft.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Fullskjerm"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Skaler:"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..4d5c649
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,1689 @@
+# translation of kmplayer.po to Dutch
+# translation of kmplayer.po to
+# translation of kmplayer.po to
+# translation of kmplayer.po to
+# translation of kmplayer.po to
+# Copyright (C) 2002-2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+#
+# Rinse de Vries <rinse@kde.nl>, 2002- 2003, 2004.
+# Rinse de Vries <rinsedevries@kde.nl>, 2004, 2005, 2006, 2007.
+# Bram Schoenmakers <bramschoenmakers@kde.nl>, 2005, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-06-12 18:13+0200\n"
+"Last-Translator: Rinse de Vries <rinsedevries@kde.nl>\n"
+"Language-Team: Dutch <kde-i18n-nl@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Rinse de Vries"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "rinsedevries@kde.nl"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "Afspe&len"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pauzeren"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Stoppen"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Volume verhogen"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Volume verlagen"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% cache gevuld"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: speelt af"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: stoppen met afspelen"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Meest recent"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Blijvende afspeellijsten"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Nieuw &venster"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Gesc&hiedenis wissen"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "DVD &openen"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "VCD &openen"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "Audio-cd &openen"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "Datastroom &openen..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Verbinden"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "C&onsole"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Afs&peellijst"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Minimale modus"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "B&ewerkmodus"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Sync&hroniseren met afspeellijst"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Contextmenu openen"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Taalmenu openen"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "Breedte/hoogteverhouding be&houden"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Volledig scherm"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Arts Control"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Opent een nieuw programmavenster"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Opent een bestaand document"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Opent een recent gebruikt bestand"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Sluit het huidige document"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Sluit de toepassing"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Activeert/deactiveert de statusbalk"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Activeert/deactiveert de menubalk"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Gereed."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "Br&on"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD-navigator"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Audio-cd"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Aan lijst toevoegen"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "In nieuwe &groep toevoegen"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "Hierheen &kopiëren"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Meer..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "DVD-navigatie..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Gereed"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "DVD wordt geopend..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "VCD wordt geopend..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Audio-cd wordt geopend..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Datastroom wordt geopend..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Van datastroom lezen"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Voer een commando in dat een video/audio-stream zal\n"
+"uitvoeren naar stdout. Deze zal worden doorgesluisd \n"
+"naar de stdin van de speler.\n"
+"Commando:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "VDR wordt geopend..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Intro"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Bestand wordt geopend..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Afsluiten"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Een nieuw programmavenster wordt geopend..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Alle bestanden"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Bestand openen"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Bestand opslaan"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Fout bij openen van bestand %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Bestand wordt gesloten..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Afsluiten..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Menubalk tonen met %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Hierheen verplaatsen"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Nieuwe groep"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "Item verwij&deren"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "O&mhoog"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Om&laag"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Automatisch afspelen na het openen van dvd"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Start onmiddellijk na het openen van een dvd met afspelen"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD-speler:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Pad naar uw dvd-speler. Hiervoor dient u leestoegang tot dit apparaat te "
+"hebben."
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Optische schijven"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CD-ROM - audio-compactdisk"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - videocompactdisk"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - digitale videodisk"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&titels"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&hoofdstukken"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "taa&l voor audio"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "on&dertiteling"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Bron"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "V&olgende"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "7&Root"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Omhoog"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Automatisch afspelen na het openen van VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Start onmiddellijk met afspelen na het openen van een VCD"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (cd-rom) speler:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Pad naar uw cd-rom-/dvd-speler. Hiervoor hebt u leestoegang tot dit apparaat "
+"nodig."
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Track "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Audio-cd"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Track %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Datastroom"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Datastroom - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Bind-adres:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Als u meerdere netwerkapparaten hebt kunt u de toegang beperken"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Poort om op te luisteren:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Maximum aantal verbindingen:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Maximum bandbreedte (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Tijdelijk feed-bestand:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Grootte van feed-bestand (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Formaat:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Alleen het afspelen van avi, mpeg en rm is mogelijk met MPlayer"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Audiocodec:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Audio-bitsnelheid (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Audio sample rate (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Videocodec:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Video-bitsnelheid (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Kwaliteit (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Frame-rate (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Gop-grootte:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Breedte (pixels):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Hoogte (pixels):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Toegang toestaan van:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'Los IP-adres of 'begin-IP-adres eind-IP-adres' voor IP-bereiken"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Host/IP of IP-bereik"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Lading"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Starten"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Uitzending"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profielen"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "ffserver kon niet worden afgesloten."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"ffserver kon niet worden opgestart.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "ffmpeg kon niet worden opgestart."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Auto"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound System"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analog Real-time Synthesizer"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK Audio Connection Kit"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Standaardwaarden van backend gebruiken"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Achtergrond van afspeellijst"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Voorgrond van afspeellijst"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Achtergrond van console"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Actief item in afspeellijst"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Voorgrond van console"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Achtergrond van video"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Achtergrond van weergavegebied"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Achtergrond van informatievenster"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Voorgrond van informatievenster"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Afspeellijst"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Informatievenster"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Bestand %1 bestaat niet."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Ondertitelingbestand %1 bestaat niet."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Volume is %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "Afs&pelen met"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Con&sole"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Afspee&llijst"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Talen voor &audio"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "On&dertiteling"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Contrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Helderheid:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Tint:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Verzadiging:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "K&leuren"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "KMPlayer instellen..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Afspeellijst&item bewerken"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Draait niet"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Buffert"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Afspelen"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Recorder %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Afspeler %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Onbekend"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL-adres"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Niet verbonden"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL-adres - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Verbinden"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "De speler kon niet worden afgesloten."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Groottepatroon"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Cachepatroon"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Positiepatroon"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Indexpatroon"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Referentieadrespatroon"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Referentiepatroon"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Startpatroon"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "DVD-taalpatroon"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "DVD-ondertitelingpatroon"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "DVD-titelpatroon"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "DVD-hoofdstukkenpatroon"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "VCD-trackpatroon"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Patroon audio-cd-tracks"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "MPlayer-commando:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Additionele commandopromptargumenten:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Cachegrootte:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Nieuwe index bouwen wanneer mogelijk"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Maakt het mogelijk om te zoeken in geïndexeerde bestanden (AVI's)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Algemene opties"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr "&Ice Ape"
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Video-apparaat:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Audio-apparaat:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Naam:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Breedte:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Hoogte:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Niet onmiddellijk afspelen"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Begin alleen met afspelen als er op de afspeelknop is gedrukt"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norm:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanaal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Frequentie (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"U staat op het punt om dit apparaat uit de bronmenu te verwijderen.\n"
+"Wilt u doorgaan?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Bevestiging vereist"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Stuurprogramma:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l of bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Apparaat:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Pad naar uw videospeler, bijv. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Scannen..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Algemeen"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "tv-apparaat"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Televisie"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Apparaat reeds aanwezig."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Geen apparaat gevonden."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo-poort"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Poort voor de X Video-extensie.\n"
+"Indien op 0 gelaten (standaard) wordt de eerst beschikbare poort gebruikt. "
+"Echter, als u meerdere X-video exemplaren tegelijk draait, dan kunt u beter "
+"hier een te gebruiken poort opgeven.\n"
+"Zie de uitvoer van het commando 'xvinfo' voor meer informatie."
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Communicatiepoort:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Communicatiepoort voor VDR. Standaard is poort 2001.\n"
+"Als u een andere poort, met de optie '-p' of '-vdr', gebruikt, geef deze dan "
+"ook hier op."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Schaal"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Verhoudingen om te gebruiken met VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Ve&rbinding verbreken"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR Key omhoog"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR Key omlaag"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR Key terug"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR Key Ok"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR Key instellen"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR Key kanalen"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR Key menu"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR Key rood"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR Key groen"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR Key geel"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR Key blauw"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR Key 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR Key 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR Key 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR Key 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR Key 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR Key 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR Key 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR Key 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR Key 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR Key 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Host niet gevonden"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Verbinding is geweigerd"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Aangepast VDR-commando"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"U kunt commando's doorgeven aan VDR.\n"
+"Voer 'HELP' in voor een lijst met beschikbare commando's. U kunt het "
+"VDR-antwoord bekijken in het consolevenster.\n"
+"\n"
+"VDR-commando:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Poort "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Afspeellijst"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Volume:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "bestand om te openen"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "naamloos"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "geen"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[attributen]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Kopiëren naar klembord"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "Alles &tonen"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Voorkeuren"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Uiterlijk"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Uitvoer"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Opname"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Uitvoerplugins"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Naverwerking"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Venster"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Verhoudingen behouden"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Als u deze optie selecteert zullen de beeldverhoudingen\n"
+"van de film worden behouden bij het wijzigen van de venstergrootte."
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "In systeemvak plaatsen"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Wanneer ingeschakeld zal een pictogram van KMPlayer in het systeemvak worden "
+"geplaatst.\n"
+"Wanneer deze wordt aangeklikt zal het hoofdvenster van KMPlayer worden "
+"gesloten."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Grootte aanpassen op video-afmetingen"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Wanneer ingeschakeld zal KMPlayer haar venster aanpassen aan\n"
+"de afmetingen van de film als de video begint."
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Vensterafmetingen onthouden bij afsluiten"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Altijd met vaste grootte starten"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Herhalen"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Herhaalt de huidige film continu"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Framedrops toestaan"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Sta toe dat er frames worden verwijderd voor betere synchronisatie tussen beeld "
+"en geluid"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Volume automatisch instellen bij start"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Als er een nieuwe bron is geselecteerd, dan zal het volume worden ingesteld aan "
+"de hand van de volumeregeling"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Kleuren automatisch instellen bij start"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"Als een film start zullen de kleuren worden ingesteld aan de hand van de "
+"schuifregelaars"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Bedieningspaneel"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Configuratieknop tonen"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Voeg een knop toe die het configuratiemenu opent"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Afspeellijstknop tonen"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Voeg een afspeellijstknop toe aan de bedieningsknoppen"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Opnameknop tonen"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Voeg een opnameknop toe aan de bedieningsknoppen"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Uitzendknop tonen"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Voeg een uitzendknop toe aan de bedieningsknoppen"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Zoektijd voorwaarts/achterwaarts:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Kleuren"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Locatie:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Locatie van het afspeelbare item"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Ondertiteling:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+"Optionele locatie van een bestand dat de ondertiteling van bovenstaand "
+"URL-adres bevat."
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Ondersteuning voor 'Klikken om af te spelen' activeren"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Ondersteuning voor WEB-pagina's die een beginafbeelding bevatten."
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Movie-speler gebruiken:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Netwerkbandbreedte"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Soms is het mogelijk om tussen verschillende streams met elk een andere "
+"bitsnelheid te kiezen.\n"
+"Deze optie bepaalt hoeveel bandbreedte u wilt gebruiken voor video."
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Soms is het mogelijk om tussen verschillende streams met elk een andere "
+"bitsnelheid te kiezen.\n"
+"Deze optie bepaalt hoeveel bandbreedte u maximaal kunt gebruiken voor video."
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "Geprefereerde bitsnelheid:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Maximum bitsnelheid:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Uitvoerbestand:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Opname sta&rten"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Huidige bron: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Recorder"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Auto-afspelen"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Nee"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "Als de opn&ame is voltooid"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "N&a"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Tijd (seconden):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Stoppen met opnemen"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Starten met opnemen"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Huidige bron: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Opmaak"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Zelfde als bron"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Aangepast"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mencoder-argumenten:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMpeg-argumenten:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Stelt het videostuurprogramma in. XVideo wordt aanbevolen, of, indien dit niet "
+"wordt ondersteund, X11. X11 is trager."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Videostuurprogramma:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Audiostuurprogramma:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Activeer het gebruik van naverwerkingsfilters"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Deactiveer het gebruik van naverwerking bij het kijken naar tv/dvd"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Snel"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Horizontale deblokkering"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Autokwaliteit"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Chrominantiefiltering"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Verticale deblokkering"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Deringfilter"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Auto helderheid/contrast"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Helderheid uitstrekken tot het volledige bereik"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Tijdelijke noise-reducering"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Lineaire blend deinterlacer"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Lineair geïnterpoleerde deinterlacer"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Kubisch geïnterpoleerde deinterlacer"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Mediaan deinterlacer"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "FFmpeg deinterlacer"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Activeer de standaard naverwerkingfilters van MPlayer"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Aangepaste naverwerkingfilters activeren (zie tabblad \"Aangepaste "
+"voorinstelling\")"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Snelle naverwerkingsfilters van MPlayer activeren"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "Filter wordt gebruikt als er voldoende processortijd beschikbaar is"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Strekt de helderheid uit tot het volledige bereik (0...255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Aangepaste voorinstelling"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "De-interlacing"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Instellingen terugzetten?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"U staat op het punt al uw eigen instellingen te vervangen met de "
+"standaardinstellingen.\n"
+"Wilt u doorgaan?.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Volledig scherm"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Schaal:"
diff --git a/po/nn.po b/po/nn.po
new file mode 100644
index 0000000..81079f7
--- /dev/null
+++ b/po/nn.po
@@ -0,0 +1,1722 @@
+# Translation of kmplayer to Norwegian Nynorsk
+#
+# Karl Ove Hufthammer <karl@huftis.org>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-08-21 17:49+0200\n"
+"Last-Translator: Karl Ove Hufthammer <karl@huftis.org>\n"
+"Language-Team: Norwegian Nynorsk <i18n-nn@lister.ping.uio.no>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: _translatorinfo.cpp:1
+#, fuzzy
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Karl Ove Hufthammer"
+
+#: _translatorinfo.cpp:3
+#, fuzzy
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "karl@huftis.org"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr ""
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+#, fuzzy
+msgid "&Pause"
+msgstr "&Pause"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+#, fuzzy
+msgid "&Stop"
+msgstr "&Stopp"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+#, fuzzy
+msgid "Increase Volume"
+msgstr "Høgare lyd"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+#, fuzzy
+msgid "Decrease Volume"
+msgstr "Lågare lyd"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr ""
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr ""
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr ""
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+#, fuzzy
+msgid "New &Window"
+msgstr "Nytt &vindauge"
+
+#: kmplayerapp.cpp:557
+#, fuzzy
+msgid "Clear &History"
+msgstr "Tøm &historie"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+#, fuzzy
+msgid "&Connect"
+msgstr "&Kopla til"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr ""
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr ""
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr ""
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, fuzzy, c-format
+msgid "50%"
+msgstr "50 %"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, fuzzy, c-format
+msgid "100%"
+msgstr "100 %"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, fuzzy, c-format
+msgid "150%"
+msgstr "150 %"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr ""
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr ""
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr ""
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr ""
+
+#: kmplayerapp.cpp:594
+#, fuzzy
+msgid "Opens a new application window"
+msgstr "Opnar eit nytt programvindauge"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr ""
+
+#: kmplayerapp.cpp:596
+#, fuzzy
+msgid "Opens a recently used file"
+msgstr "Opnar ei nyleg brukt fil"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr ""
+
+#: kmplayerapp.cpp:598
+#, fuzzy
+msgid "Quits the application"
+msgstr "Avsluttar programmet"
+
+#: kmplayerapp.cpp:600
+#, fuzzy
+msgid "Enables/disables the statusbar"
+msgstr "Viser/gøymer statuslinja"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr ""
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+#, fuzzy
+msgid "Ready."
+msgstr "Klar."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr ""
+
+#: kmplayerapp.cpp:619
+#, fuzzy
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr ""
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr ""
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr ""
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr ""
+
+#: kmplayerapp.cpp:751
+#, fuzzy
+msgid "More..."
+msgstr "Meir ..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr ""
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+#, fuzzy
+msgid "Ready"
+msgstr "Klar"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr ""
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr ""
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr ""
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr ""
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr ""
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+#, fuzzy
+msgid "Opening file..."
+msgstr "Opnar fil ..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+#, fuzzy
+msgid "Exit"
+msgstr "Avslutt"
+
+#: kmplayerapp.cpp:1305
+#, fuzzy
+msgid "Opening a new application window..."
+msgstr "Opnar eit nytt programvindauge ..."
+
+#: kmplayerapp.cpp:1314
+#, fuzzy
+msgid "*|All Files"
+msgstr "*|Alle filer"
+
+#: kmplayerapp.cpp:1314
+#, fuzzy
+msgid "Open File"
+msgstr "Opna fil"
+
+#: kmplayerapp.cpp:1333
+#, fuzzy
+msgid "Save File"
+msgstr "Lagra fil"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+
+#: kmplayerapp.cpp:1372
+#, fuzzy
+msgid "Closing file..."
+msgstr "Lukkar fil ..."
+
+#: kmplayerapp.cpp:1381
+#, fuzzy
+msgid "Exiting..."
+msgstr "Avsluttar ..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr ""
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr ""
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+#, fuzzy
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+#, fuzzy
+msgid "&Titles"
+msgstr "&Titlar"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr ""
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr ""
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr ""
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+#, fuzzy
+msgid "Source"
+msgstr "Kjelde"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr ""
+
+#: kmplayerapp.cpp:2024
+#, fuzzy
+msgid "&Next"
+msgstr "&Neste"
+
+#: kmplayerapp.cpp:2025
+#, fuzzy
+msgid "&Root"
+msgstr "&Rot"
+
+#: kmplayerapp.cpp:2026
+#, fuzzy
+msgid "&Up"
+msgstr "&Opp"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr ""
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr ""
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+#, fuzzy
+msgid "Audio CD"
+msgstr "Lyd-CD"
+
+#: kmplayerapp.cpp:2203
+#, fuzzy, c-format
+msgid "Track %1"
+msgstr "Spor %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:165
+#, fuzzy
+msgid "Listen port:"
+msgstr "Lytteport:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:204
+#, fuzzy
+msgid "Format:"
+msgstr "Format:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:218
+#, fuzzy
+msgid "Video codec:"
+msgstr "Video codec:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:245
+#, fuzzy
+msgid "Load"
+msgstr "Last inn"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+#, fuzzy
+msgid "Start"
+msgstr "Start"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+#, fuzzy
+msgid "Broadcasting"
+msgstr "Kringkasting"
+
+#: kmplayerbroadcast.cpp:460
+#, fuzzy
+msgid "Profiles"
+msgstr "Profilar"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr ""
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "Auto"
+
+#: kmplayerconfig.cpp:59
+#, fuzzy
+msgid "Open Sound System"
+msgstr "Open Sound System"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+#, fuzzy
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr ""
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+#, fuzzy
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr ""
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr ""
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr ""
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr ""
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+#, fuzzy
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr ""
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr ""
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr ""
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr ""
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr ""
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr ""
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr ""
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:118
+#, fuzzy
+msgid "Playlist"
+msgstr "Speleliste"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr ""
+
+#: kmplayerconfig.cpp:612
+#, fuzzy
+msgid "File %1 does not exist."
+msgstr "Fila %1 finst ikkje."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:387
+#, fuzzy
+msgid "Play&list"
+msgstr "Spele&liste"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:402
+#, fuzzy
+msgid "Contrast:"
+msgstr "Kontrast:"
+
+#: kmplayercontrolpanel.cpp:406
+#, fuzzy
+msgid "Brightness:"
+msgstr "Lysstyrke:"
+
+#: kmplayercontrolpanel.cpp:410
+#, fuzzy
+msgid "Hue:"
+msgstr "Nyanse:"
+
+#: kmplayercontrolpanel.cpp:414
+#, fuzzy
+msgid "Saturation:"
+msgstr "Metting:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr ""
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+#, fuzzy
+msgid "Buffering"
+msgstr "Buffering"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+#, fuzzy
+msgid "Playing"
+msgstr "Spelar"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1461
+#, fuzzy
+msgid "Unknown"
+msgstr "Ukjend"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+#, fuzzy
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "Fråkopla"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1859
+#, fuzzy
+msgid "Connecting"
+msgstr "Koplar til"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr ""
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr ""
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr ""
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+#, fuzzy
+msgid "kB"
+msgstr "KiB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr ""
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr ""
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+#, fuzzy
+msgid "General Options"
+msgstr "Generelle val"
+
+#: kmplayerprocess.cpp:978
+#, fuzzy
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr ""
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr ""
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:68
+#, fuzzy
+msgid "Name:"
+msgstr "Namn:"
+
+#: kmplayertvsource.cpp:70
+#, fuzzy
+msgid "Width:"
+msgstr "Breidd:"
+
+#: kmplayertvsource.cpp:72
+#, fuzzy
+msgid "Height:"
+msgstr "Høgd:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr ""
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr ""
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr ""
+
+#: kmplayertvsource.cpp:99
+#, fuzzy
+msgid "Channel"
+msgstr "Kanal"
+
+#: kmplayertvsource.cpp:100
+#, fuzzy
+msgid "Frequency (MHz)"
+msgstr "Frekvens (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid "Confirm"
+msgstr "Stadfest"
+
+#: kmplayertvsource.cpp:155
+#, fuzzy
+msgid "Driver:"
+msgstr "Drivar:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr ""
+
+#: kmplayertvsource.cpp:158
+#, fuzzy
+msgid "Device:"
+msgstr "Eining:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr ""
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr ""
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+#, fuzzy
+msgid "General"
+msgstr "Generelt"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr ""
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+#, fuzzy
+msgid "TV"
+msgstr "Fjernsyn"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr ""
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr ""
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr ""
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr ""
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr ""
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr ""
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+#, fuzzy
+msgid "Scale"
+msgstr "Skala"
+
+#: kmplayervdr.cpp:101
+#, fuzzy
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+#, fuzzy
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr ""
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr ""
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr ""
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr ""
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr ""
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr ""
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr ""
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr ""
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr ""
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr ""
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr ""
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr ""
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr ""
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr ""
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr ""
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr ""
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr ""
+
+#: kmplayervdr.cpp:453
+#, fuzzy
+msgid "Host not found"
+msgstr "Fann ikkje vert"
+
+#: kmplayervdr.cpp:455
+#, fuzzy
+msgid "Connection refused"
+msgstr "Nekta tilkopling"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+#, fuzzy
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr ""
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr ""
+
+#: kmplayerview.cpp:367
+#, fuzzy
+msgid "Volume:"
+msgstr "Volum:"
+
+#: main.cpp:31 main.cpp:47
+#, fuzzy
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr ""
+
+#: playlistview.cpp:180
+#, fuzzy
+msgid "unnamed"
+msgstr "namnlaus"
+
+#: playlistview.cpp:180
+#, fuzzy
+msgid "none"
+msgstr "ingen"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+#, fuzzy
+msgid "&Copy to Clipboard"
+msgstr "&Kopier til utklippstavla"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr ""
+
+#: pref.cpp:67
+#, fuzzy
+msgid "Preferences"
+msgstr "Innstillingar"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr ""
+
+#: pref.cpp:85
+#, fuzzy
+msgid "Output"
+msgstr "Ut"
+
+#: pref.cpp:96 pref.cpp:122
+#, fuzzy
+msgid "Recording"
+msgstr "Tek opp"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr ""
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr ""
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr ""
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr ""
+
+#: pref.cpp:208
+#, fuzzy
+msgid "Window"
+msgstr "Vindauge"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr ""
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr ""
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+#, fuzzy
+msgid "Loop"
+msgstr "Repeter"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr ""
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr ""
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr ""
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr ""
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr ""
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr ""
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr ""
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr ""
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr ""
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr ""
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr ""
+
+#: pref.cpp:276
+#, fuzzy
+msgid "Colors"
+msgstr "Fargar"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr ""
+
+#: pref.cpp:337
+#, fuzzy
+msgid "Location:"
+msgstr "Plassering:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr ""
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr ""
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr ""
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr ""
+
+#: pref.cpp:401
+#, fuzzy
+msgid "Output file:"
+msgstr "Utfil:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr ""
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr ""
+
+#: pref.cpp:412
+#, fuzzy
+msgid "Recorder"
+msgstr "Recorder"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr ""
+
+#: pref.cpp:419
+#, fuzzy
+msgid "&No"
+msgstr "&Nei"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr ""
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr ""
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr ""
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr ""
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr ""
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr ""
+
+#: pref.cpp:543
+#, fuzzy
+msgid "Format"
+msgstr "Format"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr ""
+
+#: pref.cpp:545 pref.cpp:667
+#, fuzzy
+msgid "Custom"
+msgstr "Tilpassa"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr ""
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr ""
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr ""
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr ""
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr ""
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr ""
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+
+#: pref.cpp:670
+#, fuzzy
+msgid "Fast"
+msgstr "Rask"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr ""
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr ""
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr ""
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr ""
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr ""
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr ""
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr ""
+
+#: viewarea.cpp:1360
+#, fuzzy
+msgid "Fullscreen"
+msgstr "Fullskjerm"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr ""
diff --git a/po/pa.po b/po/pa.po
new file mode 100644
index 0000000..48d5164
--- /dev/null
+++ b/po/pa.po
@@ -0,0 +1,1650 @@
+# translation of kmplayer.po to Panjabi
+# Amanpreet Singh Alam <aalam@redhat.com>, 2004, 2005.
+# Amanpreet Singh Brar <aalam@redhat.com>, 2005.
+# Amanpreet Singh Brar <amanpreetalam@yahoo.com>, 2005.
+# Amanpreet Singh Alam <amanpreetalam@yahoo.com>, 2005.
+# A S Alam <apbrar@gmail.com>, 2006.
+# AP S Alam <aalam@users.sf.net>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-02-16 22:08+0530\n"
+"Last-Translator: AP S Alam <aalam@users.sf.net>\n"
+"Language-Team: Panjabi <punjabi-l10n@lists.sf.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "ਅਮਨਪਰੀਤ ਸਿੰਘ ਆਲਮ"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "aalam@users.sf.net"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "ਚਲਾਓ(&l)"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "ਵਿਰਾਮ(&P)"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "ਰੋਕੋ(&S)"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "ਆਵਾਜ਼ ਵਧਾਓ"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "ਆਵਾਜ਼ ਘਟਾਓ"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% ਕੈਂਚੇ ਭਰੋ"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: ਚੱਲ ਰਿਹਾ ਹੈ"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: ਚੱਲਣਾ ਬੰਦ"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "ਵੈੱਬ"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "ਤਾਜ਼ਾ"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "ਨਵਾਂ ਝਰੋਖਾ(&W)"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "ਅਤੀਤ ਸਾਫ(&H)"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "DVD ਖੋਲੋ(&O)"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "VCD ਖੋਲੋ(&O)"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "ਆਡੀਓ CD ਖੋਲ੍ਹੋ(&O)"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "ਪਾਈਪ ਖੋਲੋ(&O)..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "ਜੋੜੋ(&C)"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "ਕੰਨਸੋਲ(&o)"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "ਸੰਗੀਤ-ਸੂਚੀ(&y)"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "ਘੱਟੋ-ਘੱਟ ਢੰਗ"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "ਢੰਗ ਸੋਧ(&E)"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "ਪੋਪਅੱਪ ਮੇਨੂ ਵੇਖਾਓ"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "ਆਡੀਓ ਭਾਸ਼ਾ ਵੇਖਾਓ"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "ਚੌਡ਼ਾਈ/ਉਚਾਈ ਅਨੁਪਾਤ ਰੱਖੋ(&K)"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "ਪੂਰਾ ਪਰਦਾ(&F)"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Arts ਕੰਟਰੋਲ"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "ਨਵਾਂ ਕਾਰਜ ਝਰੋਖਾ ਖੋਲੋ"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "ਮੌਜੂਦਾ ਫਾਇਲ ਖੋਲੋ"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "ਹੁਣੇ ਵਰਤੀਆਂ ਫਾਇਲਾਂ ਖੋਲੋ"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "ਅਸਲੀ ਸਰੋਤ ਬੰਦ"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "ਕਾਰਜ ਵਿੱਚੋ ਬਾਹਰ"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "ਸਥਿਤੀ ਪੱਟੀ ਵੇਖਾਓ/ਓਹਲੇ"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "ਮੇਨੂ ਪੱਟੀ ਵੇਖਾਓ/ਓਹਲੇ"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "ਤਿਆਰ ਹੈ।"
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "ਸਰੋਤ(&o)"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD ਏਧਰ-ਓਧਰ"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "ਆਡੀਓ CD(&A)"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "ਇੱਥੇ ਨਕਲ(&C)"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "ਵੀਡਿਓ(&i)"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "ਹੋਰ..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "DVD ਏਧਰ-ਓਧਰ ..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "ਤਿਆਰ"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "DVD ਖੋਲੀ ਜਾ ਰਹੀ ਹੈ..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "VCD ਖੋਲੀ ਜਾ ਰਹੀ ਹੈ..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "ਆਡੀਓ CD ਖੋਲ੍ਹੀ ਜਾ ਰਹੀ ਹੈ..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "ਪਾਈਪ ਖੋਲਿਆ ਜਾ ਰਿਹਾ ਹੈ..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "ਪਾਇਪ ਤੋਂ ਪੜੋ"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "VDR ਖੋਲੀ ਜਾ ਰਹੀ ਹੈ..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "ਜਾਣ ਪਛਾਣ"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "ਫਾਇਲ ਖੋਲ ਰਿਹਾ ਹੈ..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "ਬੰਦ ਕਰੋ"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "ਨਵਾਂ ਕਾਰਜ ਝਰੋਖਾ ਖੋਲਿਆ ਜਾ ਰਿਹਾ ਹੈ..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|ਸਭ ਫਾਇਲਾਂ"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "ਫਾਇਲ ਖੋਲੋ"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "ਫਾਇਲ ਸੰਭਾਲੋ"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"ਫਾਇਲ %1 ਖੋਲਣ ਦੌਰਾਨ ਗਲਤੀ ਹੈ।\n"
+"%2"
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "ਫਾਇਲ਼ ਬੰਦ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "ਬੰਦ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "%1 ਨਾਲ ਮੇਨੂ-ਪੱਟੀ ਵੇਖਾਓ"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "ਇੱਥੇ ਭੇਜੋ"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "ਨਵਾਂ ਗਰੁੱਪ"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "ਇਕਾਈ ਹਟਾਓ(&D)"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "ਉੱਤੇ ਭੇਜੋ(&M)"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "ਹੇਠਾਂ ਭੇਜੋ(&d)"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "DVD ਖੋਲ੍ਹਣ ਉਪਰੰਤ ਆਪਣੇ ਆਪ ਚਲਾਓ"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "DVD ਖੋਲ੍ਹਣ ਬਾਅਦ DVD ਚਲਾਓ"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD ਜੰਤਰ:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"ਤੁਹਾਡੇ DVD ਜੰਤਰ ਲਈ ਮਾਰਗ, ਤੁਹਾਨੂੰ ਇਹ ਜੰਤਰ ਵਾਸਤੇ ਪੜ੍ਹਨ ਅਧਿਕਾਰ ਹੋਣੇ ਚਾਹੀਦੇ ਹਨ"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "ਆਪਟੀਕਲ ਡਿਸਕਾਂ"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - ਆਡੀਓ ਕੰਪੈਕਟ ਡਿਸਕ"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - ਵੀਡਿਓ ਕੰਪੈਕਟ ਡਿਸਕ"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - ਡਿਜ਼ੀਟਲ ਵੀਡਿਓ ਡਿਸਕ"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "ਟਾਇਟਲ(&T)"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&ਪਾਠ"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "ਆਡੀਓ ਭਾਸ਼ਾ(&L)"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "ਸਬ ਟਾਇਟਲ(&S)"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "ਸਰੋਤ"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "ਅੱਗੇ(&N)"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "ਰੂਟ(&Root)"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "ਉੱਪਰ(&U)"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "VCD ਖੋਲਣ ਬਾਅਦ ਸਵੈ-ਚਾਲਤ ਚਲਾਉ"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "VCD ਨੂੰ ਖੋਲਣ ਉਪਰੰਤ VCD ਨੂੰ ਚਲਾਉਣਾ ਸ਼ੁਰੂ ਕਰੋ"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CDROM) ਜੰਤਰ:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"ਤੁਹਾਡੇ CDROM/DVD ਜੰਤਰ ਲਈ ਮਾਰਗ, ਤੁਹਾਨੂੰ ਇਸ ਜੰਤਰ ਲਈ ਪੜਨ ਅਧਿਕਾਰ ਹੋਣੇ ਚਾਹੀਦੇ ਹਨ"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "ਟਰੈਕ"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "ਆਡੀਓ CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "ਟਰੈਕ %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "ਪਾਇਪ"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "ਪਾਇਪ - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Bind ਸਿਰਨਾਵਾਂ:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "ਜੇਕਰ ਤੁਹਾਡੇ ਕੋਲ ਕਈ ਨੈਟਵਰਕ ਜੰਤਰ ਹਨ ਤਾਂ ਉਹਨਾਂ ਲਈ ਪਹੁੰਚ ਸੀਮਿਤ ਕਰੋ।"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "ਸੁਣਨ ਪੋਰਟ:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "ਵੱਧ ਤੋਂ ਵੱਧ ਕੁਨੈਕਸ਼ਨ:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "ਵੱਧ ਤੋਂ ਵੱਧ ਬੈਂਡਵੀਡਥ (ਕਿਬਾ):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "ਆਰਜ਼ੀ ਫੀਡ ਫਾਇਲ:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "ਫੀਡ ਫਾਇਲ ਅਕਾਰ (ਕਿਬਾ):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "ਫਾਰਮਿਟ:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "ਆਡੀਓ ਕੋਡ:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "ਆਡੀਓ ਬਿੱਟ ਰੇਟ (ਕਿਬਾ):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "ਆਡੀਓ ਸੈਂਪਲ ਰੇਟ (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "ਵੀਡਿਓ ਕੋਡ:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "ਵੀਡਿਓ ਬਿੱਟ ਰੇਟ (ਕਿਬਾ):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "ਗੁਣਵੱਤਾ (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "ਫਰੇਮ ਦਰ (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "ਗੋਪ ਅਕਾਰ:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "ਚੌਡ਼ਾਈ (ਪਿਕਸਲ):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "ਉਚਾਈ (ਪਿਕਸਲ):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "ਇਸ ਤੋਂ ਪਹੁੰਚ ਸਵੀਕਾਰ:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "ਮੇਜ਼ਬਾਨ/IP ਜਾਂ IP ਸੀਮਾ"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "ਲੋਡ"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "ਸ਼ੁਰੂ"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "ਬਰਾਂਡਕਾਸਟ"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "ਪ੍ਰੋਫਾਇਲ"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "ਆਟੋ"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "ਆਵਾਜ਼ ਸਿਸਟਮ ਖੋਲੋ"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "ਆਂਡਵਾਸ ਲੀਨਕਲ ਸਾਊਂਡ ਢਾਂਚਾ"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr ""
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr ""
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "ਆਂਡਵਾਸ ਲੀਨਕਲ ਸਾਊਂਡ ਢਾਂਚਾ v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "ਆਂਡਵਾਸ ਲੀਨਕਲ ਸਾਊਂਡ ਢਾਂਚਾ v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "ਸੰਗੀਤ-ਸੂਚੀ ਪਿੱਠਭੂਮੀ"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "ਸੰਗੀਤ-ਸੂਚੀ ਮੁੱਖਭੂਮੀ"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "ਕੋਨਸੋਲ ਪਿੱਠਭੂਮੀ"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "ਸੰਗੀਤ-ਸੂਚੀ ਸਰਗਰਮ ਇਕਾਈ"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "ਕੋਨਸੋਲ ਮੁੱਖਭੂਮੀ"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "ਵੀਡਿਓ ਪਿੱਠਭੂਮੀ"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "ਵੇਖਣ ਖੇਤਰ ਪਿੱਠਭੂਮੀ"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "ਜਾਣਕਾਰੀ ਝਰੋਖਾ ਪਿੱਠਭੂਮੀ"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "ਜਾਣਕਾਰੀ ਝਰੋਖਾ ਮੁੱਖਭੂਮੀ"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "ਸੰਗੀਤ-ਸੂਚੀ"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "ਜਾਣਕਾਰੀ ਝਰੋਖਾ"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "ਫਾਇਲ %1 ਮੌਜੂਦ ਨਹੀਂ ਹੈ।"
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "ਸਬ ਟਾਇਟਲ ਫਾਇਲ %1 ਮੌਜੂਦ ਨਹੀਂ ਹੈ।"
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "ਵਾਲੀਅਮ %1 ਹੈ"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "ਇਸ ਨਾਲ ਚਲਾਓ(&P)"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "ਕੰਨਸੋਲ(&s)"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "ਸੰਗੀਤ-ਸੂਚੀ(&l)"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "ਆਡੀਓ ਭਾਸ਼ਾ(&A)"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "ਸਬ ਟਾਇਟਲ(&S)"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "ਭਿੰਨਤਾ:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "ਚਮਕ:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "ਰੰਗਤ:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "ਸੰਤ੍ਰਿਪਤਾ:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "ਰੰਗ(&l)"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "KMPlayer ਸੰਰਚਨਾ(&C)..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "ਸੰਗੀਤ-ਸੂਚੀ ਇਕਾਈ ਸੋਧ(&)"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "ਚੱਲਦਾ ਨਹੀਂ"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "ਬਫ਼ਰ ਬਣਾਇਆ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "ਚੱਲ ਰਿਹਾ ਹੈ"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "ਰਿਕਾਰਡਰ %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "ਪਲੇਅਰ %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "ਅਣਜਾਣ"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "ਕੁਨੈਕਸ਼ਨ ਬੰਦ"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "ਜੁੜਿਆ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "ਪਲੇਅਰ ਕਾਰਵਾਈ ਅੰਤ ਅਸਫ਼ਲ ਹੈ।"
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "ਆਕਾਰ ਪੈਟਰਨ"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "ਕੈਚੇ ਪੈਟਰਨ"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "ਸਥਿਤੀ ਪੈਟਰਨ"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "ਤਤਕਰਾ ਪੈਟਰਨ"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "ਹਵਾਲਾ URL ਪੈਟਰਨ"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "ਹਵਾਲਾ ਪੈਟਰਨ"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "ਸ਼ੁਰੂ ਪੈਟਰਨ"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "DVD ਭਾਸ਼ਾ ਪੈਟਰਨ"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "DVD ਸਬ-ਟਾਇਟਲ ਪੈਟਰਨ"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "DVD ਟਾਇਟਲ ਪੈਟਰਨ"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "DVD ਚੈਪਟਰ ਪੈਟਰਨ"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "VCD ਟਰੈਕ ਪੈਟਰਨ"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "ਆਡੀਓ CD ਟਰੈਕ ਪੈਟਰਨ"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "MPlayer ਕਮਾਂਡ:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "ਹੋਰ ਕਮਾਂਡ ਲਾਇਨ ਮੁੱਲ:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "ਕੈਚੇ ਅਕਾਰ:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "ਕਿਬਾ"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "ਜਦੋਂ ਸੰਭਵ ਹੋਵੇ ਤਾਂ ਨਵਾਂ ਤਤਕਰਾ ਬਣਾਓ"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr ""
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "ਸਧਾਰਨ ਚੋਣ"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "ਵੀਡਿਓ ਜੰਤਰ:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "ਆਡੀਓ ਜੰਤਰ:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "ਨਾਂ:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "ਚੌੜਾਈ:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "ਉਚਾਈ:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "ਹੁਣੇ ਨਾ ਚਲਾਓ"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "ਚਲਾਉਣ ਬਟਨ ਦਬਾਉਣ ਉਪਰੰਤ ਹੀ ਚਲਾਉਣਾ ਸ਼ੁਰੂ ਕਰੋ"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "ਸਧਾਰਨ:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "ਚੈਨਲ"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "ਫ੍ਰੀਕਿਉਸੀ (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"ਤੁਸੀਂ ਸਰੋਤ ਮੇਨੂ ਤੋਂ ਇਹ ਜੰਤਰ ਹਟਾਉਣ ਲਈ ਤਿਆਰ ਹੈ।\n"
+"ਕੀ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "ਪੁਸ਼ਟੀ"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "ਡਰਾਇਵਰ:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l ਜਾਂ bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "ਜੰਤਰ:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "ਤੁਹਾਡੇ ਵੀਡਿਓ ਜੰਤਰ ਲਈ ਮਾਰਗ, ਜਿਵੇਂ ਕਿ /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "ਜਾਂਚ..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "ਸਧਾਰਨ"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "tv ਜੰਤਰ"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "ਟੈਲੀਵਿਜ਼ਨ"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "ਜੰਤਰ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ।"
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "ਕੋਈ ਜੰਤਰ ਨਹੀਂ ਲੱਭਿਆ ਹੈ।"
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo ਪੋਰਟ"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "ਸੰਚਾਰ ਪੋਰਟ:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "ਮਾਪ"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "VDR ਵਿਖਾਉਣ ਦਰਮਿਆਨ ਅਕਾਰ ਅਨੁਪਾਤ"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "ਕੁਨੈਕਸ਼ਨ ਬੰਦ(&c)"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR ਸਵਿੱਚ ਉੱਪਰ"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR ਸਵਿੱਚ ਹੇਠਾਂ"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR ਸਵਿੱਚ ਪਿੱਛੇ"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR ਸਵਿੱਚ ਠੀਕ ਹੈ"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR ਸਵਿੱਚ ਸੈਟਅੱਪ"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR ਸਵਿੱਚ ਚੈਨਲ"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR ਸਵਿੱਚ ਮੇਨੂ"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR ਸਵਿੱਚ ਲਾਲ"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR ਸਵਿੱਚ ਹਰਾ"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR ਸਵਿੱਚ ਪੀਲਾ"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR ਸਵਿੱਚ ਨੀਲਾ"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR ਸਵਿੱਚ 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR ਸਵਿੱਚ 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR ਸਵਿੱਚ 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR ਸਵਿੱਚ 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR ਸਵਿੱਚ 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR ਸਵਿੱਚ 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR ਸਵਿੱਚ 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR ਸਵਿੱਚ 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR ਸਵਿੱਚ 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR ਸਵਿੱਚ 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "ਮੇਜ਼ਬਾਨ ਨਹੀਂ ਲੱਭਾ"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "ਕੁਨੈਕਸ਼ਨ ਤੋਂ ਇਨਕਾਰ"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "ਪਸੰਦੀਦਾ VDR ਕਮਾਂਡ"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "ਪੋਰਟ"
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "ਸੰਗੀਤ-ਸੂਚੀ"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "ਆਵਾਜ਼:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "ਖੋਲਣ ਲਈ ਫਾਇਲ"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "ਬੇਨਾਮ"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "ਕੋਈ ਨਹੀਂ"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[ਗੁਣ]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "ਕਲਿੱਪਬੋਰਡ ਲਈ ਨਕਲ(&C)"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "ਸਭ ਵੇਖਾਓ(&S)"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "ਮੇਰੀ ਪਸੰਦ"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "ਦਿੱਖ"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "ਆਉਟਪੁੱਟ"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "ਰਿਕਾਰਡਿੰਗ"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "ਆਉਟਪੁੱਟ ਪਲੱਗਿੰਨ"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "ਪੋਸਟ-ਪਰੋਸੈਸਿੰਗ"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "ਝਰੋਖਾ"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "ਅਕਾਰ ਅਨੁਪਾਤ ਰੱਖੋ"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"ਜੇਕਰ ਚੋਣ ਕੀਤੀ ਗਈ ਤਾਂ ਫਿਲਮ ਝਰੋਖੇ ਦੇ ਅਕਾਰ ਬਦਲਣ\n"
+"ਉਪਰੰਤ ਅਕਾਰ ਅਨੁਪਾਤ ਨੂੰ ਸੰਭਾਲੀ ਰੱਖੇਗੀ।"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "ਸਿਸਟਮ ਟਰੇ ਵਿੱਚ ਲਾਉ"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"ਜਦੋਂ ਚੋਣ ਕੀਤੀ ਤਾਂ KMPlayer ਨੂੰ ਸਿਸਟਮ ਟਰੇ 'ਚ ਜੋੜਿਆ ਜਾਵੇਗਾ।\n"
+"ਜਦੋਂ ਇਸ ਦੀ ਚੋਣ ਕੀਤੀ ਤਾਂ KMPlayer ਦਾ ਮੁੱਖ ਝਰੋਖਾ ਓਹਲੇ ਹੋਵੇਗਾ ਅਤੇ KMPlayer ਦਾ "
+"ਕੰਮ-ਪੱਟੀ ਬਟਨ ਹਟਾਇਆ ਜਾਵੇਗਾ।"
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "ਵੀਡਿਓ ਅਕਾਰ ਲਈ ਮੁੜ-ਅਕਾਰ"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"ਜੇ ਚੋਣ ਕੀਤੀ ਤਾਂ ਕੇ-ਐਮ-ਪਲੇਅਰ (KMPlayer) ਮੂਵੀ ਨੂੰ ਵੀਡਿਓ ਚੱਲਣ\n"
+"ਸਮੇਂ ਮੁੜ-ਆਕਾਰ ਕਰੇਗਾ"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "ਬੰਦ ਕਰਨ 'ਤੇ ਝਰੋਖੇ ਦਾ ਅਕਾਰ ਰੱਖੋ"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "ਹਮੇਸ਼ਾ ਸਥਿਰ ਅਕਾਰ ਨਾਲ ਹੀ ਸ਼ੁਰੂ ਕਰੋ"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "ਲੂਪ"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "ਮੌਜੂਦਾ ਮੂਵੀ ਵਾਰ ਵਾਰ ਚਲਾਓ"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "ਫਰੇਮਡਰਾਪ ਸਵੀਕਾਰ"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "ਵਧੀਆ ਆਡੀਓ ਅਤੇ ਵੀਡਿਓ ਸਮਕਾਲੀ ਲਈ ਫਰੇਮ ਸੁੱਟਣੇ ਸਵੀਕਾਰ"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "ਸ਼ੁਰੂ ਸਮੇਂ ਆਵਾਜ਼ ਆਟੋ ਸੈੱਟ"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"ਜਦੋਂ ਨਵਾਂ ਸਰੋਤ ਚੁਣਿਆ ਜਾਵੇਗਾ ਤਾਂ ਵਾਲੀਅਮ (ਆਵਾਜ਼) ਨੂੰ ਵਾਲੀਅਮ ਕੰਟਰੋਲ ਮੁਤਾਬਕ ਰੱਖਿਆ "
+"ਜਾਵੇਗਾ"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "ਸ਼ੁਰੂ ਸਮੇਂ ਰੰਗ ਸਵੈ-ਚਾਲਿਤ ਸੈਟ"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"ਇੱਕ ਮੂਵੀ ਚੱਲਣ ਸਮੇਂ, ਰੰਗਾਂ ਨੂੰ ਰੰਗਾਂ ਲਈ ਸਲਾਇਡਰਾਂ ਮੁਤਾਬਕ ਸੈੱਟ ਕੀਤਾ ਜਾਵੇਗਾ।"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "ਕੰਟਰੋਲ ਪੈਨਲ"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "ਸੰਰਚਨਾ ਬਟਨ ਵੇਖਾਓ"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "ਇੱਕ ਬਟਨ ਜੋੜੋ, ਜੋ ਕਿ ਇੱਕ ਸੰਰਚਨਾ ਮੇਨੂ ਵੇਖਾਏ"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "ਸੰਗੀਤ-ਸੂਚੀ ਬਟਨ ਵੇਖਾਓ"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "ਕੰਟਰੋਲ ਬਟਨਾਂ ਵਿੱਚ ਇੱਕ ਸੰਗੀਤ-ਸੂਚੀ ਬਟਨ ਸ਼ਾਮਿਲ ਕਰੋ"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "ਰਿਕਾਰਡ ਬਟਨ ਵੇਖਾਓ"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "ਕੰਟਰੋਲ ਬਟਨਾਂ ਵਿੱਚ ਰਿਕਾਰਡ ਬਟਨ ਸ਼ਾਮਿਲ ਕਰੋ"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "ਬਰਾਡਕਾਸਟ ਬਟਨ ਵੇਖਾਓ"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "ਕੰਟਰੋਲ ਬਟਨਾਂ ਵਿੱਚ ਬਰਾਂਡਕਾਸਟ ਬਟਨ ਸ਼ਾਮਿਲ ਕਰੋ"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "ਅੱਗੇ/ਪਿੱਛੇ ਅੰਤਰ ਸਮਾਂ:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "ਰੰਗ"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "ਸਥਿਤੀ:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "ਚੱਲਣ ਯੋਗ ਇਕਾਈ ਦਾ ਟਿਕਾਣਾ"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "ਸਬ ਟਾਇਟਲ: "
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "'ਦਬਾਉਣ 'ਤੇ ਚਲਾਓ' ਸਹਿਯੋਗ ਲਈ ਯੋਗ"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "ਮੂਵੀ ਪਲੇਅਰ ਵਰਤੋਂ:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "ਨੈੱਟਵਰਕ ਬੈਡਵਿਥ"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "ਪਸੰਦੀਦਾ ਬਿੱਟਰੇਟ:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "ਵੱਧ ਤੋਂ ਵੱਧ ਬਿੱਟਰੇਟ:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "ਆਉਟਪੁੱਟ ਫਾਇਲ:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "ਰਿਕਾਰਡਿੰਗ ਸ਼ੁਰੂ(&R)"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "ਮੌਜੂਦਾ ਸਰੋਤ: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "ਰਿਕਾਰਡਰ"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "ਸਵੈਚਾਲਤ ਚਲਾਉ"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "ਨਹੀ(&N)"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "ਜਦੋਂ ਰਿਕਾਰਡਿੰਗ ਸਮਾਪਤ ਹੋ ਜਾਵੇ(&W)"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "ਬਾਅਦ(&f)"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "ਸਮਾਂ (ਸਕਿੰਟ):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "ਰਿਕਾਰਡਿੰਗ ਰੋਕੋ"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "ਰਿਕਾਰਡਿੰਗ ਸ਼ੁਰੂ"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "ਮੌਜੂਦਾ ਸਰੋਤ: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "ਫਾਰਮਿਟ"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "ਸਰੋਤ ਵਾਂਗ ਹੀ"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "ਸੋਧ"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr ""
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMpeg ਮੁੱਲ:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "ਵੀਡਿਓ ਡਰਾਇਵਰ:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "ਆਡੀਓ ਡਰਾਇਵਰ:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "TV/DVD ਵੇਖਣ ਦੌਰਾਨ ਪੋਸਟ-ਪ੍ਰੋਸੈਸਿੰਗ ਦੀ ਵਰਤੋਂ ਬੰਦ"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "ਤੇਜ਼"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "ਸਵੈਚਾਲਤ ਗੁਣਵੱਤਾ"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "ਲੰਬਕਾਰੀ ਡੀਬਲਾਕਿੰਗ"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "ਡੀਰਿੰਗ ਫਿਲਟਰ"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "ਸਵੈਚਾਲਤ ਚਮਕ/ਵੱਖਰੇਵਾਂ"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "ਐਮ-ਪਲੇਅਰ ਦਾ ਤੇਜ਼ ਪੋਸਟ-ਪ੍ਰੋਸੈਸਿੰਗ ਫਿਲਟਰ ਚਾਲੂ"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "ਫਿਲਟਰ ਤਾਂ ਹੀ ਵਰਤਿਆ ਜਾਵੇਗਾ, ਜੇ ਲੋੜੀਦਾ CPU ਹੋਵੇ"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "ਕਸਟਮ ਪ੍ਰੀ-ਸੈਟ"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "ਡੀ-ਇੰਟਰਲੇਸਿੰਗ"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "ਕੀ ਸਥਾਪਨ ਮੁੜ-ਬਦਲਣਾ?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"ਤੁਸੀਂ ਸਭ ਮੂਲ ਸਥਾਪਨ ਨੂੰ ਆਪਣੇ ਢੰਗ ਨਾਲ ਮੁੜ-ਲਿਖਣ ਜਾ ਰਹੇ ਹੋ।\n"
+"ਪੁਸ਼ਟੀ ਕਰੋ ਜੀ।\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "ਪੂਰੇ ਪਰਦੇ ਉੱਤੇ"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "ਪੈਮਾਨਾ:"
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..27f9b70
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,1695 @@
+# translation of kmplayer.po to Polski
+# translation of kmplayer.po to
+# translation of kmplayer.po to
+# translation of kmplayer.po to
+#
+# Krzysztof Pawlak <jmnemonic@gazeta.pl>, 2004, 2005, 2006.
+# Michal Rudolf <mrudolf@kdewebdev.org>, 2004.
+# Krzysztof Lichota <lichota@mimuw.edu.pl>, 2005.
+# Copyright (C) 2003,2004, 2005, 2006 Free Software Foundation, Inc.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-11-07 17:47+0100\n"
+"Last-Translator: Krzysztof Pawlak <jmnemonic@gazeta.pl>\n"
+"Language-Team: Polski <pl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Krzysztof Pawlak"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "krzys18@gmail.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Start"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pauza"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "S&top"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Głośniej"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Ciszej"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "Wypełnienie pamięci podręcznej [%]"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Odtwarzanie"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Zatrzymaj odtwarzanie"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "Sieć"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Najnowsze"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Stałe listy odtwarzania"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "No&we okno"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Wyczyść &historię"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Otwórz DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Otwórz VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Otwórz płytę CD z muzyką"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Otwórz potok..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Połącz"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "Ter&minal"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "&Odtwarzaj listę"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Tryb minimalny"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "Tryb &edycji"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Synchronizuj z listą odt&warzania"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Pokaż menu podręczne"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Pokaż menu językowe"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "Zachowaj proporcje obrazu"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "Tryb pełnoekranowy"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Sterowanie &Arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Uruchom nowe okno programu"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Otwórz plik"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Otwórz poprzedni"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Zamknij bieżące źródło"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Zakończ program"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Pokaż/ukryj pasek stanu"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Pokaż/ukryj pasek menu"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Gotowe."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "Źródł&o"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "Nawigator &DVD"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "Płyt&a z muzyką"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "Dod&aj do listy"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Dodaj w nowej &grupie"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "S&kopiuj tutaj"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+#, fuzzy
+msgid "More..."
+msgstr "Więcej ..."
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "Otwórz dysk DVD ..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Gotowe"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Otwieranie DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Otwieranie VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Uruchamianie muzycznej płyty CD..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Otwieranie potoku..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Odczyt z potoku"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Podaj polecenie które przekieruje strumień audio/video\n"
+"do wyjścia standardowego. Będzie ono połączone do standardowego wejścia "
+"odtwarzacza.\n"
+"\n"
+"Komenda:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Otwieranie VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Wstęp"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Otwieranie pliku..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Wyjście"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Otwieranie nowego okna programu..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|All Files"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Otwórz plik..."
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Zapisz plik"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Wystąpił błąd podczas otwierania pliku %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Zamykanie pliku..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Kończenie..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Pokaż pasek menu z %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Przenieś tutaj"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Nowa grupa"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "U&suń pozycję"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Przesuń wyżej"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "&Przesuń niżej"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Automatyczne odtwarzanie po otwarciu DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Odtwarzanie filmu bezpośrednio po otwarciu dysku DVD"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Urządzenie DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Ścieżka dostępu do urządzenia DVD. Aby odtwarzać musisz mieć prawo odczytu z "
+"DVD."
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Dyski optyczne"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - Dysk Muzyczny"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Dysk Video"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Cyfrowy Dysk Video"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Tytuły"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Rozdziały"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&Język audio"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "Napi&sy"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Źródło"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Następny"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "Ko&rzeń"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Wyżej"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Automatyczne odtwarzanie po otwarciu VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Odtwarzanie filmu bezpośrednio po otwarciu dysku VCD"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Urządzenie VCD (CDROM):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Ścieżka dostępu do urządzenia CDROM/DVD. Aby odtwarzać musisz mieć prawo "
+"odczytu."
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Ścieżka "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Muzyczna płyta CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Ścieżka %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Potok"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Potok - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Przypisz adres:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+"W przypadku posiadania wielu interfejsów sieciowych możliwe jest ograniczenie "
+"dostępu"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Port nasłuchu:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Dopuszczalna liczba połączeń:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Dopuszczalna szerokość pasma (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Tymczasowy plik danych:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Rozmiar pliku danych w kB:"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Format:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Programem MPLayer można odtwarzać tylko pliki AVI, MPG i RM"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Kodek audio:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Szybkość transmisji dźwięku (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Częstotliwość próbkowania dźwięku (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Kodek video:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Szybkość video (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Jakość (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Częstotliwość ramek (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Rozmiar GOP:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Szerokość w pikselach:"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Wysokość w pikselach:"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Zezwól na dostęp z:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'Adres IP' lub dla zakresów IP 'adres-początkowy adres-końcowy'"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Numer IP, nazwa komputera lub zakres IP"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Otwórz"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Start"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Nadawanie"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profile"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Zamknięcie procesu ffserver zakończyło się niepowodzeniem."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Nie można uruchomić ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Nie można uruchomić ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Auto"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Otwarty system dźwięku (OSS)"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Zaawansowana architektura dźwięku (ALSA)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analogowy syntezator czasu rzeczywistego"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "Zestaw łączności dźwięku JACK"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Zaawansowana architektura dźwięku (ALSA) wersja 0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Zaawansowana architektura dźwięku (ALSA) wersja 0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Użyj ustawień domyślnych programu głównego"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Tło listy odtwarzania"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Pierwszoplanowy kolor listy odtwarzania"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Tło konsoli"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Aktywna pozycja listy odtwarzania"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Pierwszoplanowy kolor konsoli"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Tło klipu video"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Tło obszaru filmowego"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Tło okna informacyjnego"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Pierwszoplanowy kolor okna informacyjnego"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Lista odtwarzania"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Okno informacyjne"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Plik %1 nie istnieje."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Plik napisów %1 nie istnieje."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Głośność: %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Odtwarzaj z"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Ter&minal"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Lista odtwarzania"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "&Język audio"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "Napi&sy"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kontrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Jasność:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Barwa:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Nasycenie:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Ko&lory"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Konfiguracja: KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Edytuj pozycję l&isty odtwarzania"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Zatrzymany"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Buforowanie"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Odtwarzanie"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Nagrywarka %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Odtwarzacz %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Nieznany"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "Rozłączony"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Łączenie"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Zamknięcie procesu odtwarzania zakończyło się niepowodzeniem."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Wzór rozmiaru"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Wzór pamięci podręcznej (ang. \"cache\")"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Wzór pozycji"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Wzór indeksu"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Wzór źródłowego adresu URL"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Wzór odniesienia"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Wzór startowy"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Wzór języka DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Wzór napisów DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Wzór tytułów DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Wzór rozdziałów DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Wzór ścieżek VCD"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Wzór ścieżek muzycznej płyty CD"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "Komenda programu MPlayer:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Dodatkowe argumenty komendy:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Rozmiar pamięci podręcznej (cache):"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Utwórz nowy indeks (jeśli możliwe)"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Pozwól na przeszukiwanie plików indeksowanych (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Opcje ogólne"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Urządzenie video:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Urządzenie audio:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Nazwa:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Szerokość:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Wysokość:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Wyłącz automatyczne odtwarzanie"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Odtwarzanie tylko po naciśnięciu przycisku startu"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norma:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanał"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Częstotliwość (MHz)"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Czy usunąć to urządzenie z menu źródeł?\n"
+" "
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Potwierdź"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Sterownik:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l lub bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Urządzenie:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Ścieżka dostępu do urządzenia obrazu, np. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Skanuj..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "O&gólne"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "urządzenie tv:"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Telewizja"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Urządzenie już istnieje."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Nie znaleziono urządzenia."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "Skaner TV"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Port XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Główny port rozszerzenia X Video.\n"
+"W przypadku ustawienia domyślnego (0), wykorzystany zostanie pierwszy wolny "
+"port. Jeśli posiadasz wielokrotną instalację XVideo musisz tutaj zdefiniować "
+"który port należy użyć.\n"
+"Aby uzyskać więcej informacji wykonaj polecenie 'xvinfo'"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Port komunikacyjny:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Port komunikacyjny do VDR. Domyślny numer portu to 2001.\n"
+"Jeśli używasz inny port, stosując parametr '-p' z opcją 'vdr', musisz go "
+"ustawić także tutaj."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Skala"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Skale obrazu do oglądania VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Rozłą&cz"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "Klucz wyżej (VDR)"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "Klucz niżej (VDR)"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "Klucz poprzedni (VDR)"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "Klucz OK (VDR)"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "Klucz ustawienia (VDR)"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "Klucz kanałów (VDR)"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "Klucz menu (VDR)"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "Klucz czerwony (VDR)"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "Klucz zielony (VDR)"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "Klucz żółty (VDR)"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "Klucz niebieski (VDR)"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "Klucz 0 (VDR)"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "Klucz 1 (VDR)"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "Klucz 2 (VDR)"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "Klucz 3 (VDR)"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "Klucz 4 (VDR)"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "Klucz 5 (VDR)"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "Klucz 6 (VDR)"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "Klucz 7 (VDR)"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "Klucz 8 (VDR)"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "Klucz 9 (VDR)"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Komputer nie został znaleziony"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Nie można połączyć się z serwerem"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Inna komenda VDR"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Można przekazywać różne komendy do VDR.\n"
+"Wpisz 'HELP' by zobaczyć listę dostępnych komend.\n"
+"Odpowiedź VDR można zobaczyć w oknie konsoli.\n"
+"\n"
+"Komenda VDR:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Odtwarzaj listę"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Głośność:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "plik do otwarcia"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "bez nazwy"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "brak"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[atrybuty]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Kopiuj do schowka"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "Pokaż w&szystkie"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Ustawienia"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Wygląd"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Wyjście"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Zapis"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Wtyczki wyjściowe"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Postprocessing"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Okno"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Zachowaj proporcje"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Jeśli opcja ta jest zaznaczona to proporcje rozmiarów\n"
+"filmu nie ulegają zmianie po modyfikacji okna"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Umieść na panelu systemowym"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Jeśli zaznaczysz tą opcję ikona programu KMPlayer będzie umieszczona na panelu "
+"systemowym.\n"
+" Główne okno programu KMPlayer oraz przycisk na pasku zadań zostaną ukryte."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Automatyczne skalowanie rozmiaru"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Powoduje automatyczne dobranie proporcji filmu\n"
+"po jego uruchomieniu"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Zapisz wielkość okna programu przy wyjściu"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Uruchamiaj ze stałym rozmiarem"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Pętla"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Powoduje odtwarzanie danego filmu w pętli"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Pozwól na pomijanie ramek"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Pozwól na pomijanie ramek w celu polepszenia synchronizacji obrazu z dźwiękiem"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Automatyczny poziom głośności przy starcie"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Po wybraniu nowego źródła głośność zostanie ustawiona na podstawie ustawień "
+"panelu poziomu dźwięku"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Automatycznie ustaw kolory przy starcie"
+
+#: pref.cpp:236
+#, fuzzy
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr "Podczas uruchamiania filmu kolory będą ustawione na podstawie suwaków"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Panel sterowania"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Pokaż przycisk ustawień"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Dodaj przycisk wyświetlajacy menu ustawień"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Pokaż przycisk listy odtwarzania"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Dodaj przycisk listy odtwarzania do przycisków sterujących"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Pokaż przycisk nagrywania"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Dodaj przycisk nagrywania do przycisków sterujących"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Pokaż przycisk nadawania"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Dodaj przycisk nadawania do przycisków sterujących"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Czas przewijania do przodu/do tyłu:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Kolory"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "Wybierz..."
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Położenie:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Lokalizacja medium do odtwarzania"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Napisy:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "Opcjonalna lokalizacja pliku z napisami do powyższego adresu URL"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Włącz obsługę \"Kliknij, by odtwarzać\""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Obsługa stron sieciowych posiadajacych obrazek startowy"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Użyj odtwarzacza:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Pasmo sieciowe"
+
+#: pref.cpp:373
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Czasem możliwe jest wybieranie pomiędzy różnymi potokami przy danym paśmie.\n"
+"Opcja ta definiuje wielkość pasma dla obrazu video."
+
+#: pref.cpp:375
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Czasem możliwe jest wybieranie pomiędzy różnymi potokami przy danym paśmie.\n"
+"Opcja ta definiuje wielkość pasma dla obrazu video."
+
+#: pref.cpp:376
+#, fuzzy
+msgid "Preferred bitrate:"
+msgstr "Preferowane pasmo:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Dopuszczalna szerokość pasma:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Plik wyjściowy:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "&Rozpoczęcie nagrywania"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Bieżące źródło: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Nagrywarka"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Autoodtwarzanie"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Wyłączone"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Po zakończeniu nagrywania"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "P&o ..."
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Czas w sekundach:"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Zakończ nagrywanie"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Rozpocznij nagrywanie"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Bieżące źródło: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Format"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Identyczny ze źródłowym"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Inny"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Argumenty programu Mencoder:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer - strumień skła&dowany"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Argumenty do FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Ustawia sterownik obrazu. Zaleca się stosowanie sterownika XVideo lub "
+"wolniejszego X11."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Sterownik obrazu:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Sterownik dźwięku:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Włącz filtry dla postprocessing"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Wyłącz obsługę postprocessing podczas oglądania TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Szybki"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Odblokowywanie poziome"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Automatyczny dobór jakości"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Filtrowanie chrominancji"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Odblokowywanie pionowe"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Filtr \"dering\""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Automatyczna regulacja jasności/kontrastu"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Rozciągnij luminancję do pełnego zakresu"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Reduktor szumu chwilowego"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Usuwanie przeplotu poprzez liniowe przenikanie"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Usuwanie przeplotu poprzez interpolację liniową"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Usuwanie przeplotu poprzez interpolację sześcienną"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Usuwanie przeplotu poprzez zastosowanie median"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "Usuwanie przeplotu z wykorzystaniem FFmpeg"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Włącz standardowe filtry postprocessing programu MPlayer"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Włącz dodatkowe filtry postprocessing programu (patrz karta: \"Ustawienia "
+"dodatkowe\")"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Włącz szybkie filtry postprocessing programu MPlayer"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+"Filtr zostanie użyty w razie wystarczającej mocy obliczeniowej procesora"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Rozciąga luminancję do pełnego zakrasu (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Ustawienia dodatkowe"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Usuwanie przeplotu"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Przywrócić ustawienia domyślne?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Wszystkie ustawienia zostaną zastąpione ustawieniami domyślnymi.\n"
+"Proszę potwierdzić.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Tryb pełnoekranowy"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Skala:"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "Filtr zostanie użyty w razie wystarczającej mocy obliczeniowej procesora"
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..b9b67b5
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,1685 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-06-14 14:51+0100\n"
+"Last-Translator: Pedro Morais <morais@kde.org>\n"
+"Language-Team: pt <kde-i18n-pt@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POFile-IgnoreConsistency: Open File\n"
+"X-POFile-SpellExtra: Arts VDR Xine ffserver DVDNav video AVIs dumpstream\n"
+"X-POFile-SpellExtra: XVideo xvinfo FFmpeg MEncoder bsdbt GStreamer Shm RM\n"
+"X-POFile-SpellExtra: gop Advanced\n"
+"X-POFile-SpellExtra: desactivarPósProcessamentoAutomaticamente Sound WEB\n"
+"X-POFile-SpellExtra: VCD FFMpeg Dering KMPlayer System AnalisadorTV IPs\n"
+"X-POFile-SpellExtra: mplayer dummy Layer vdr XVidix ffmpeg Simple bind\n"
+"X-POFile-SpellExtra: mencoder FFServer dev HREF Video DirectMedia Open\n"
+"X-POFile-SpellExtra: Daemon Analog Architecture Enlightened HELP\n"
+"X-POFile-SpellExtra: Synthesizer tv stdout kbit Intro AaBbCc SDL OpenAL\n"
+"X-POFile-IgnoreConsistency: &Up\n"
+"X-POFile-SpellExtra: XvMC MT Ape\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Pedro Morais,José Nuno Pires"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "morais@kde.org,jncp@netcabo.pt"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Reproduzir"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pausa"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Parar"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Aumentar o Volume"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Diminuir o Volume"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% preenchimento do cache"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: A Reproduzir"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Parar Reprodução"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Mais Recente"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Listas Persistentes"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Nova &Janela"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Limpar o &Histórico"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Abrir DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Abrir VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "Abrir &o CD de Áudio"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Abrir um 'Pipe'..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Ligar"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "C&onsola"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Lista de Reprodu&ção"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Modo mínimo"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "Modo de &edição"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Sincronizar com a &lista"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Mostrar o Menu de Contexto"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Mostrar o Menu da Língua"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "Manter as &Proporções"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Todo o Ecrã"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Controlo do &Arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Abre uma nova janela da aplicação"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Abre um ficheiro existente"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Abre um ficheiro utilizado recentemente"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Fecha o ficheiro actual"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Sai da aplicação"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Activa/desactiva a barra de estado"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Activa/desactiva a barra de menu"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Pronto."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Origem"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "Navegador de &DVDs"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "CD de Á&udio"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Adicionar à lista"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Adicionar num &grupo novo"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Copiar para aqui"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "&Vídeo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Mais..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "Navegação no DVD..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Pronto"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "A abrir o DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "A abrir o VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "A abrir o CD de Áudio..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "A abrir o 'pipe'..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Ler de um 'Pipe'"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Indique um comando irá enviar uma sequência de áudio/vídeo\n"
+"para o 'stdout'. Isto será transmitido por um 'pipe' para\n"
+"o 'stdin' do leitor.\n"
+"\n"
+"Comando:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "A abrir o VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Intro"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "A abrir o ficheiro..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Sair"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "A abrir uma nova janela da aplicação..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Todos os Ficheiros"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Abrir um Ficheiro"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Gravar o Ficheiro"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Erro ao abrir o ficheiro %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "A fechar o ficheiro..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "A sair..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Mostrar a Barra de Menu com %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Mover para aqui"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Novo grupo"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "A&pagar o item"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "S&ubir"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "&Descer"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Tocar automaticamente depois de aceder ao DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Reproduzir automaticamente depois de abrir o DVD"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Dispositivo do DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Localização do seu dispositivo DVD, deve ter permissões de leitura neste "
+"dispositivo"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Discos Ópticos"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - CD de Áudio"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - CD de Vídeo"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Disco de Vídeo Digital"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Títulos"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Capítulos"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "Língua do &Áudio"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "Legenda&s"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Origem"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "Segui&nte"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Raiz"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "S&ubir"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Reproduzir automaticamente depois de aceder ao VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Reproduzir automaticamente depois de abrir o VCD"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Dispositivo VCD (CDROM):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Localização do seu dispositivo de CDROM/DVD, deve ter permissões de leitura "
+"neste dispositivo"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Faixa "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "CD de Áudio"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Faixa %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "'Pipe'"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "'Pipe' - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Endereço de 'bind':"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Se tiver várias interfaces de rede, poderá limitar o acesso"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Porto de espera:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Número máximo de ligações:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Largura de banda máxima (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Ficheiro de alimentação temporal:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Tamanho do ficheiro de alimentação (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Formato:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Só os formatos AVI, MPEG e RM funcionam na leitura com o 'mplayer'"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Codificador de áudio:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Taxa de dados do áudio (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Taxa de amostragem de áudio (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Codificador de vídeo:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Taxa de dados de vídeo (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Qualidade (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Taxa de refrescamento (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Tamanho do 'gop':"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Largura (pontos):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Altura (pontos):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Permitir acesso de:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'IP Único' ou 'IP-inicial IP-final' para um intervalo de IPs"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Máquina/IP ou Intervalo de IPs"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Carregar"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Início"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Transmissão"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Perfis"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "A terminação do processo do ffserver falhou."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Não foi possível iniciar o 'ffserver'.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Não foi possível iniciar o ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Auto"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound System"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analog Real-time Synthesizer"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "Kit de Ligação Áudio JACK"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v.0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Utilizar as predefinições da infra-estrutura"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Cor de fundo da lista de reprodução"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Cor de texto da lista de reprodução"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Cor de fundo da consola"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Item activo da lista de reprodução"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Cor de texto da consola"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Cor de fundo do vídeo"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Cor de fundo da área de visualização"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Cor de fundo da janela de informações"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Cor de texto da janela de informações"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Lista de Reprodução"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Janela de informações"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "O ficheiro %1 não existe."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "O ficheiro de legendas %1 não existe."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Volume está a %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "U&tilizar"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Con&sola"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Lis&ta de Reprodução"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Língu&as do áudio"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "Legenda&s"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Contraste:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Brilho:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Tom:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Saturação:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Core&s"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Configurar o KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Editar o &item de lista de reprodução"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Parado"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "A Preencher o 'Buffer'"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "A reproduzir"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Gravador %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Leitor %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Desligado"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "A ligar"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "A terminação do processo de reprodução falhou."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Padrão do tamanho"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Padrão da 'cache'"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Padrão da posição"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Padrão do índice"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Padrão de URL de referência"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Padrão de referência"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Padrão de início"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Padrão da língua do DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Padrão das legendas do DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Padrão dos títulos do DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Padrão dos capítulos do DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Padrão das faixas do VCD"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Padrão das faixas do CD de áudio"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "Comando do MPlayer:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Argumentos de linha de comando adicionais:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Tamanho da 'cache':"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Construir novo índice quando possível"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Permite procurar em ficheiros indexados (AVIs)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Opções Gerais"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr "&Ice Ape"
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Dispositivo de vídeo:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Dispositivo de áudio:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Nome:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Largura:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Altura:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Na reproduzir imediatamente"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Só iniciar a reprodução após carregar no botão de iniciar"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norma:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Canal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Frequência (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Está prestes a remover este dispositivo do menu Fonte.\n"
+"Deseja continuar?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Confirmação"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Controlador:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l ou bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Dispositivo:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Localização do dispositivo de vídeo, p. ex. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Procurar...."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Geral"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "dispositivo de tv"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Televisão"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Dispositivo já presente."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Nenhum dispositivo encontrado."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "AnalisadorTV"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Porto de XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Porto base da extensão X Video.\n"
+"Se for mantido o valor por omissão (0), será utilizado primeiro porto "
+"disponível. No entanto se tiver vários utilizações de XVideo pode ter que "
+"indicar aqui o porto a utilizar.\n"
+"Veja o resultado de 'xvinfo' para mais informações."
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Porta de comunicação:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Porto de comunicação com o VDR. O porto por omissão é 2001.\n"
+"Se utilizar outro porto, com a opção '-p' do 'vdr', deve configurá-lo aqui."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Escala"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Aspecto a utilizar ao ver VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Des&ligar"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR Tecla Subir"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR Tecla Descer"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR Tecla Voltar"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR Tecla Ok"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR Tecla Configuração"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR Tecla Canais"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR Tecla Menu"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR Tecla Vermelha"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR Tecla Verde"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR Tecla Amarela"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR Tecla Azul"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR Tecla 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR Tecla 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR Tecla 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR Tecla 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR Tecla 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR Tecla 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR Tecla 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR Tecla 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR Tecla 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR Tecla 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Servidor não encontrado"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Ligação recusada"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Comando VDR personalizado"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Pode passar comandos ao VDR.\n"
+"Escreva 'HELP' para ver uma lista de comandos disponíveis.\n"
+"Pode ver a responda do VDR na janela da consola.\n"
+"\n"
+"Comando VDR:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Porto "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Lista de Reprodução"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Volume:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "ficheiro a abrir"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "sem nome"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "nenhum"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[atributos]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Copiar para a Área de Transferência"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "Mo&strar tudo"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Preferências"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Aparência"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Saída"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "A gravar"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "'Plugins' de Saída"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Pós-processamento"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Janela"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Manter as proporções"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Quando activo, o filme mantém a proporção horizontal-vertical\n"
+"quando a janela muda de tamanho"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Acoplar na bandeja do sistema"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Quando estiver assinalada, será adicionado um ícone do KMPlayer à bandeja do "
+"sistema.\n"
+"Quando for carregado, ele irá esconder a janela principal do KMPlayer e remover "
+"o botão do KMPlayer na barra de tarefas."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Dimensionar automaticamente para o tamanho do vídeo"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Quando activo, o KMPlayer irá mudar para o tamanho do filme\n"
+"quando o vídeo começar"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Recordar o tamanho da janela ao sair"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Começar sempre com tamanho fixo"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Ciclo"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Repete o filme actual"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Permitir a perda de tramas"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Permitir a perda de tramas para uma maior sincronização entre o áudio e o vídeo"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Configurar automaticamente o volume no início"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Quando for seleccionada uma nova fonte, o volume será configurado de acordo com "
+"o controlo de volume"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Configurar automaticamente as cores no início"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"Quando começar um filme, as cores serão ajustadas de acordo com as barras"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Painel do Controlo"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Mostrar o botão de configuração"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Adicionar um botão que mostra um menu de configuração"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Mostrar o botão de lista de reprodução"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Mostrar o botão de lista de reprodução aos botões de controlo"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Mostrar o botão de gravação"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Adiciona um botão de gravação aos botões de controlo"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Mostrar o botão de difusão"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Adiciona um botão de difusão aos botões de controlo"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Tempo de avanço/recuo:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Cores"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Localização:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Localização do item a reproduzir"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Legendas:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "Localização opcional de um ficheiro com as legendas do URL acima"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Activar 'Carregue para Tocar'"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Suporte para as páginas Web que tenham uma imagem inicial"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Utilizar o reprodutor de filmes:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Largura de banda da rede"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Algumas vezes é possível escolher entre várias transmissões com base numa "
+"determinada taxa de 'bits'.\n"
+"Esta opção permite definir quanta largura de banda deseja gastar para o vídeo."
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Algumas vezes é possível escolher entre várias transmissões com base numa "
+"determinada taxa de 'bits'.\n"
+"Esta opção permite definir a máxima largura de banda disponível para o vídeo."
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "Taxa de 'bits' preferida:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbps"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Taxa de dados máxima:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Ficheiro de saída:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Iniciar a G&ravação"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Fonte actual: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Gravador"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Auto-reprodução"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Não"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Quando a gravação terminar"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "A&pós"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Tempo (segundos):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Parar a Gravação"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Iniciar a Gravação"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Fonte Actual: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Formato"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Idêntico ao da origem"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Personalizado"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Argumentos do mencoder:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Argumentos do FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Selecciona o controlador de vídeo. Recomenda-se o XVideo, ou, caso este não "
+"seja suportado, o X11, que é mais lento."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Controlador de vídeo:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Controlador de áudio:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Activar o uso dos filtros de pós-processamento"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Desactivar o uso dos filtros de pós-processamento ao ver TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Rápido"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Desbloqueio horizontal"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Qualidade automática"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Filtro de crominância"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Desbloqueio vertical"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Filtro de Dering"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Brilho/contraste automático"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Ajustar a luminância ao intervalo completo"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Redutor de ruído temporal"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Desentrelaçamento por mistura linear"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Desentrelaçamento por interpolação linear"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Desentrelaçamento por interpolação cúbica"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Desentrelaçamento pela mediana"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "Desentrelaçamento FFmpeg"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Activa os filtros de pós-processamento predefinidos do 'mplayer'"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Activa os filtros de pós-processamento personalizados (Veja: página "
+"Predefinições)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Activa os filtros rápidos de pós-processamento do 'mplayer'"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "O filtro é usado se existir CPU suficiente"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Ajusta a luminância ao intervalo completo (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Predefinições"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Desentrelaçamento"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Reiniciar Configuração?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Está prestes a sobrepor todas as suas configurações com os valores por "
+"omissão.\n"
+"Por favor confirme.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Todo o Ecrã"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Escala:"
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..c6db951
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,1724 @@
+# translation of kmplayer.po to Brazilian Portuguese
+# Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+#
+# Lisiane Sztoltz <lisiane@conectiva.com.br>, 2003, 2004.
+# Lisiane Sztoltz Teixeira <lisiane@conectiva.com.br>, 2004.
+# Fernando Boaglio <fernando@boaglio.com>, 2004.
+# Fabio Henrique de Souza <fabiohsouza@gmail.com>, 2005.
+# Jose Monteiro <jf.monteiro@yahoo.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-01-13 10:53-0200\n"
+"Last-Translator: Jose Monteiro <jf.monteiro@yahoo.com>\n"
+"Language-Team: Brazilian Portuguese <kde-i18n-pt_br@mail.kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Lisiane Sztoltz Teixeira,Fernando Boaglio,Fábio Henrique de Souza "
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "lisiane@kdemail.net,boaglio@gmail.com,fabiohsouza@gmail.com "
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Reproduzir"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "P&ausar"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Parar"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Aumentar Volume"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Diminuir Volume"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% de Cache preenchido"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Reproduzindo"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Parar Reprodução"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Mais Recente"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Listas de Reprodução Persistentes"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Nova &Janela"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Limpar &Histórico"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Abrir DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "A&brir VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "A&brir CD de Áudio"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "Abrir &Canal ..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Conectar"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "C&onsole"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Lista de Reprodu&ção"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Modo Mínimo"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "Modo de &Edição"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Sincronizar &com a lista de reprodução"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Mostrar Menu de Contexto"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Mostrar Menu de Idioma"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Manter Proporções (Largura/Altura)"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Tela Inteira"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Controle do Arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Abre uma nova janela do aplicativo"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Abre um arquivo existente"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Abre um arquivo usado recentemente"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Fecha a origem atual"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Sai do aplicativo"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Habilita/desabilita a barra de status"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Habilita/desabilita a barra de menus"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Pronto."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Origem"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&Navegador de DVD"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "CD de &Áudio"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Adicionar à lista"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Adicionar em novo &Grupo"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Copiar aqui"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ídeo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Mais..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "Navegação no DVD..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Pronto"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Abrindo DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Abrindo VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Abrindo CD de Áudio..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Abrindo canal ..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Lido do Canal"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Entre com um comando que enviará um fluxo de áudio/vídeo\n"
+"para o 'stdout'. Isto será transmitido por um canal (pipe) ao 'stdin' de um "
+"reprodutor.\n"
+"\n"
+"Comando:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Abrindo VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Introdução"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Abrindo arquivo..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Sair"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Abrindo uma nova janela do aplicativo..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Todos os Arquivos"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Abrir Arquivo"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Salvar Arquivo"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Erro abrindo arquivo %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Fechando arquivo ..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Saindo..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Mostrar Barra de Menus com %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Mover aqui"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Novo grupo"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&Apagar ítem"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Mover para cima"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Mover para &baixo"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Reproduzir automaticamente após abrir o DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Iniciar a reprodução do DVD logo após abrí-lo"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Dispositivo de DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"O caminho para o seu dispositivo de DVD, você deve ter direitos de leitura "
+"neste dispositivo"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Discos Ópticos"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDOM - Disco Compacto de Áudio"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Disco Compacto de Vídeo"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Disco de Vídeo Digital"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Títulos"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Capítulos"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&Idioma do Áudio"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Legendas"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Origem"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Próximo"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Raiz"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Acima"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Reproduzir automaticamente após abrir um VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Iniciar a reprodução do VCD logo após abrí-lo"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Dispositivo VCD (CD-ROM):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"O caminho para o seu dispositivo de CD-ROM/DVD, você deve ter direitos de "
+"leitura neste dispositivo"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Faixas"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "CD de Áudio"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Faixa %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Canal (pipe)"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Canal (pipe) - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Endereço de ligação:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Se você possui vários dispositivos de rede, você pode limitar o acesso"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Porta de Escuta:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Númro máximo de conexões:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Largura de banda máxima (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Arquivo de alimentação temporário:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Tamanho do arquivo de alimentação (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Formato:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Somente avi, mpeg e rm funcionam com o reprodutor mplayer"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Codec de áudio:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Taxa de bits de áudio (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Taxa de amostragem de áudio (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Codec de vídeo:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Taxa de bits de vídeo (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Qualidade (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Taxa de quadros (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Tamanho do Gop:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Largura (pixels):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Altura (pixels):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Permitir acesso de:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'IP Único' ou 'IP-início IP-final' para intervalos de IP"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Máquina/IP ou intervalo de IPs"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Carregar"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Iniciar"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Transmitindo"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Perfis"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Falha ao finalizar o processo ffserver."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Falha ao iniciar o ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Falha ao iniciar o ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Automático"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Sistema de Som Livre (OSS)"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Camada Simples DirectMedia (SDL)"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Arquitetura Avançada de Som no Linux (ALSA)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Sintetizador Análogo em Tempo Real (ARTS)"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "Kit de Conexão Áudio JACK"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Servidor de Som Inteligente (ESD)"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Arquitetura Avançada de Som no Linux v0.5 (ALSA)"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Arquitetura Avançada de Som no Linux v0.9 (ALSA)"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Use back-end padrão"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Segundo Plano da Lista de Reprodução"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Primeiro Plano da Lista de Reprodução"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Segundo Plano do Console"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Ítem ativo na Lista de Reprodução"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Primeiro Plano do Console"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Segundo Plano do Vídeo"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Segundo Plano da Área de Visualização"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Segundo Plano da Janela de Informações"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Primeiro Plano da Janela de Informações"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Lista de Reprodução"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Janela de Informações"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "O arquivo %1 não existe."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "O arquivo de legenda %1 não existe."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Volume é %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "Re&produzir com"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Con&sole"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Lista de Reprodução"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "&Idiomas do Áudio"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "Legenda&s"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Contraste:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Brilho:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Tonalidade:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Saturação:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Core&s"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Configurar o KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Editar o &ítem da lista de reprodução"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Parado"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Armazenando em Buffer"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Reproduzindo"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Gravador %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Reprodutor %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Desconectado"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Conectando"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Falha ao finalizar o processo do reprodutor."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Padrão de tamanho"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Padrão de cache"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Padrão de posição "
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Padrão de índice"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Padrão de Referência do URL"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Padrão de referência"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Padrão de Início"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Padrão de idioma de DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Padrão de legenda de DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Padrão de títulos de DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Padrão de capítulos de DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Padrão de faixa de VCD"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Padrão de faixa de CD de Áudio"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "Comando do MPlayer:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Argumentos adicionais de linha de comando:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Tamanho do cache:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Construir um novo índice quando possível"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Permitir busca nos arquivos indexados (AVIs)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Opções Gerais"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Dispositivo de Vídeo:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Dispositivo de Áudio:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Nome:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Largura:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Altura:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Não reproduzir imediatamente"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Iniciar a reprodução somente após clicar no botão Reproduzir"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norma:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Canal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Freqüência (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Você está removendo este dispositivo do menu de Origem.\n"
+"Continuar?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Driver:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "mudo, v4l ou bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Dispositivo:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "O caminho para o seu dispositivo de vídeo, por exemplo /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Buscar..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Geral"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "dispositivo de tv"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Televisão"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "O dispositivo já está presente."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Nenhum dispositivo encontrado."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Porta XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Porta base da extensão X Video.\n"
+"Se for mantido o padrão (0), a primeira porta disponível será usada. Entretanto "
+"se você tem múltiplas instâncias do XVideo, você pode ter que informar aqui a "
+"porta a ser usada.\n"
+"Veja a saída de 'xvinfo' para mais informações"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Porta de Comunicação"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Porta de Comunicação com o VDR. A porta padrão é a 2001.\n"
+"Se você usar outra porta, com a opção -p do 'vdr', você deverá configurar isso "
+"aqui também."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Escala"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Proporção a usar quando vendo VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Des&conectar"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR Tecla Acima"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "CDR Tecla Abaixo"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR Tecla Voltar"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR Tecla OK"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR Tecla Configurar"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR Tecla Canais"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR Tecla Menu"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR Tecla Vermelha"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR Tecla Verde"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR Tecla Amarela"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR Tecla Azul"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR Tecla 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR Tecla 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR Tecla 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR Tecla 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR Tecla 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR Tecla 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR Tecla 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR Tecla 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR Tecla 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR Tecla 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Servidor não encontrado"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Conexão recusada"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Comando VDR personalizado"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Você pode passar comandos ao VDR.\n"
+"Entre 'Help' para ver uma lista de comandos disponíveis.\n"
+"Você pode ver a resposta do VDR na janela de console.\n"
+"\n"
+"Comando VDR:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Porta"
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Lista de Reprodução"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Volume:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "arquivo a abrir"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "sem nome"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "nenhum"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[atributos]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Copiar para a Área de Transferência"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Mostrar tudo"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Preferências"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Aparências"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Saída"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Gravando"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Plugins de Saída"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Pós-processamento"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Janela"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Manter as proporções"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Quando marcado, o filme manterá a sua proporção de tamanho,\n"
+"quando a janela for redimensionada."
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Colocar na bandeja do sistema"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Quando marcado um ícone do KMPlayer será adicionado a bandeja do sistema\n"
+"Quando clicado ocultará a janela principal do KMPlayer e removerá o botão do "
+"KMplayer da barra de tarefas."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Redimensionar automaticamente para o tamanho do vídeo"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Quando marcado, o KMplayer será redimensionado para o tamanho do filme \n"
+"quando o vídeo iniciar"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Recordar o tamanho da janela ao sair"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Sempre iniciar com tamanho fixo"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Repetir"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Faz com que o filme atual fique repetindo"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Permitir perda de quadros"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Permite perda de quadros para uma melhor sincronização de áudio e vídeo"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Ajustar volume automaticamente ao iniciar"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Quando uma nova origem é selecionada, o volume será ajustado de acordo com o "
+"controle de volume"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Ajustar cores automaticamente ao iniciar"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"Quando um filme iniciar, as cores serão ajustadas de acordo com os controles "
+"deslizantes de cor"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Painel de Controle"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Mostrar botão de configuração"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Adiciona um botão que exibirá um menu de configuração"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Mostrar botão de lista de reprodução"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Adiciona um botão de lista de reprodução aos botões de controle"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Mostrar botão de gravação"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Adiciona um botão de gravação aos botões de controle"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Mostrar botão de transmissão"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Adiciona um botão de transmissão aos botões de controle"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Tempo de busca para frente/para trás:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Cores"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Localização:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Localização do ítem a reproduzir"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Legenda:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "Localização opcional do arquivo que contém as legendas do URL acima"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Habilitar suporte ao 'Clique para Reproduzir'"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Suporte para páginas WEB que tenham uma imagem inicial"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Usar reprodutor de filmes:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Largura de banda da rede"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"As vezes é possível escolher entre vários fluxos com base em uma determinada "
+"taxa de bits.\n"
+"Esta opção configura quanto de largura de banda você prefere disponibilizar "
+"para o vídeo"
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"As vezes é possível escolher entre vários fluxos com base em uma determinada "
+"taxa de bits.\n"
+"Esta opção configura quanto de largura de banda você tem disponível para o "
+"vídeo."
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "Taxa de bits preferida:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Taxa de bits máxima:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Arquivo de saída:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Iniciar &Gravação"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Origem atual:"
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Gravador"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Auto-Reprodução"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Não"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Quando a gravação finalizar"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&Depois"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Tempo (segundos):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Parar Gravação"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Iniciar Gravação"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Origem atual:"
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Formato"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Idêntico ao da origem"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Personalizado"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Argumentos do Mencoder:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Argumentos do FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Ajusta o driver de vídeo. O recomendado é o XVídeo, ou, se não for suportado, o "
+"X11, que é mais lento."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Driver de vídeo:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Driver de áudio:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Habilita o uso de filtros de pós-processamento."
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Desabilita o uso de pós-processamento ao assistir TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Rápido"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Desbloqueio horizontal"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Qualidade automática"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Filtro de crominância"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Desbloqueio vertical:"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Filtro de Dering"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Brilho/Contraste automático"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Ajustar a luminância para o intervalo inteiro"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Redutor de Ruído Temporal"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Desentrelaçamento por mistura linear"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Desentrelaçamento por interpolação linear"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Desentrelaçamento por interpolação cúbica"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Desentrelaçamento pela média"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "Desentrelaçamento FFmpeg"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Habilita os filtros de pós-processamento padrões do mplayer"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Habilita os filtros de pós-processamento personalizados (Veja a aba "
+"Pré-configuração Personalizada)."
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Habilita os filtros rápidos de pós-processamento do mplayer"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "O filtro é usado se existir CPU suficiente"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Ajustar a luminância para o intervalo inteiro (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Pré-configuração Personalizada"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Desentrelaçamento"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Reiniciar Configurações?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Você está prestes a sobrepor todas as suas configurações pelas configurações "
+"padrões.\n"
+"Por favor, confirme.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Tela Cheia"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Escala:"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "O filtro é usado se existir CPU suficiente"
+
+#~ msgid "empty"
+#~ msgstr "vazio"
+
+#~ msgid "tv://"
+#~ msgstr "tv://"
+
+#~ msgid "Escape"
+#~ msgstr "Escape"
+
+#, fuzzy
+#~ msgid "Could not start process "
+#~ msgstr "Não foi possível iniciar o MPlayer"
+
+#~ msgid "Default from MPlayer Config File"
+#~ msgstr "Padrão do arquivo de configuração do MPlayer"
+
+#~ msgid "&Show Console Output"
+#~ msgstr "Mostrar Saída no &Console"
+
+#~ msgid "Xine"
+#~ msgstr "Xine"
+
+#~ msgid "Show console output"
+#~ msgstr "Mostrar Saída no Console"
+
+#~ msgid "Shows output from mplayer before and after playing the movie"
+#~ msgstr "Mostra a saída do mplayer antes e depois de tocar o filme"
+
+#~ msgid "postProcessing"
+#~ msgstr "Pós-processamento"
+
+#~ msgid "disablePostProcessingAutomatically"
+#~ msgstr "desabilitarPós-processamentoAutomaticamente"
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..91cc654
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,1631 @@
+# translation of @PACKAGE.po to @LANGUAGE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# Claudiu Costin <claudiuc@kde.org>, 2003
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: @PACKAGE\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2003-11-08 18:59+0200\n"
+"Last-Translator: Claudiu Costin <claudiuc@kde.org>\n"
+"Language-Team: Romanian <ro-kde@egroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.1\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Claudiu Costin"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "claudiuc@kde.org"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr ""
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pauză"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Stop"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr ""
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr ""
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr ""
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr ""
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr ""
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr ""
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr ""
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr ""
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr ""
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr ""
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr ""
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr ""
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr ""
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr ""
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr ""
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr ""
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr ""
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr ""
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr ""
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr ""
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr ""
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr ""
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr ""
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr ""
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr ""
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr ""
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr ""
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr ""
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr ""
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr ""
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr ""
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr ""
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr ""
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr ""
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr ""
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr ""
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr ""
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr ""
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr ""
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr ""
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr ""
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr ""
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr ""
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr ""
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr ""
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr ""
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr ""
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr ""
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr ""
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr ""
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr ""
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr ""
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr ""
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr ""
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr ""
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr ""
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr ""
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr ""
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr ""
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr ""
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr ""
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr ""
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr ""
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr ""
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr ""
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr ""
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr ""
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr ""
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr ""
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr ""
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr ""
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr ""
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr ""
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr ""
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr ""
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr ""
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr ""
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr ""
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr ""
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr ""
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr ""
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr ""
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr ""
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr ""
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr ""
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr ""
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr ""
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr ""
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr ""
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr ""
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr ""
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr ""
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr ""
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr ""
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr ""
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr ""
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr ""
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr ""
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr ""
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr ""
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr ""
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr ""
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr ""
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr ""
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr ""
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr ""
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr ""
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr ""
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr ""
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr ""
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr ""
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr ""
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr ""
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr ""
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr ""
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr ""
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr ""
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr ""
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr ""
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr ""
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr ""
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr ""
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr ""
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr ""
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr ""
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr ""
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr ""
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr ""
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr ""
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr ""
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr ""
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr ""
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr ""
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr ""
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr ""
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr ""
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr ""
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr ""
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr ""
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr ""
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr ""
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr ""
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr ""
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr ""
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr ""
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr ""
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr ""
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr ""
+
+#: main.cpp:36
+msgid "file to open"
+msgstr ""
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr ""
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr ""
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr ""
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr ""
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr ""
+
+#: pref.cpp:85
+msgid "Output"
+msgstr ""
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr ""
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr ""
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr ""
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr ""
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr ""
+
+#: pref.cpp:208
+msgid "Window"
+msgstr ""
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr ""
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr ""
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr ""
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr ""
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr ""
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr ""
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr ""
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr ""
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr ""
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr ""
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr ""
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr ""
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr ""
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr ""
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr ""
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr ""
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr ""
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr ""
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr ""
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr ""
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr ""
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr ""
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr ""
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr ""
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr ""
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr ""
+
+#: pref.cpp:419
+msgid "&No"
+msgstr ""
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr ""
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr ""
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr ""
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr ""
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr ""
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr ""
+
+#: pref.cpp:543
+msgid "Format"
+msgstr ""
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr ""
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr ""
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr ""
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr ""
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr ""
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr ""
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr ""
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr ""
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr ""
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr ""
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr ""
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr ""
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr ""
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr ""
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr ""
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr ""
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr ""
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr ""
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Setup"
+#~ msgstr "&Stop"
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..5a80dcf
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,1686 @@
+# translation of kmplayer.po into Russian
+# Copyright (C) 2004, KDE Team.
+#
+# Gregory Mokhin <mok@kde.ru>, 2003, 2005.
+# Nick Shaforostoff <shafff@ukr.net>, 2004-2005, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-12-13 18:15+0300\n"
+"Last-Translator: Andrey Cherepanov <sibskull@mail.ru>\n"
+"Language-Team: Russian <kde-russian@lists.kde.ru>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>"
+"=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Григорий Мохин,Николай Шафоростов,Калимуллин Артур"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "mok@kde.ru,shaforostoff@users.sourceforge.net,kalimullin@gmail.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Воспроизведение"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Пауза"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Стоп"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Громче"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Тише"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% кэша заполнено"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: воспроизведение"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: стоп"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "&Новое окно"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Очистить &хронологию"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "Отк&рыть DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "О&ткрыть VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+#, fuzzy
+msgid "&Open Audio CD"
+msgstr "О&ткрыть VCD"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Открыть канал..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Соединиться"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "&Консоль"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "&Список воспроизведения"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Минимальный режим"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "Р&ежим редактирования"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "&Синхронизация со списком воспроизведения"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Показывать всплывающее меню"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Показыать языковое меню"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Сохранить пропорцию ширины и высоты"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Во весь экран"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Управление arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Открыть новое окно"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Открыть существующий файл"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Открыть последний использованный файл"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Закрыть текущий источник"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Выйти из программы"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Показать/скрыть строку состояния"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Показать/скрыть меню"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Готово."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Источник"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "Навигатор &DVD"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&ТВ"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "В&идео"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "Навигация DVD..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Готово"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Открытие DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Открытие VCD..."
+
+#: kmplayerapp.cpp:817
+#, fuzzy
+msgid "Opening Audio CD..."
+msgstr "Открытие VCD..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Открытие канала..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Чтение из канала"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Введите команду, выводящую аудио- и видеопоток\n"
+"в stdout. Он будет передан по каналу в stdin.\n"
+"\n"
+"Команда:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Открытие VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Введение"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Открытие файла..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Выход"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Открытие нового окна..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Все файлы"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Открыть файл"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Сохранить файл"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Ошибка открытия файла %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Закрытие файла..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Выход..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Показать меню с %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Автоматическое воспроизведение при открытии DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Начинать воспроизведение DVD сразу после открытия"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Привод DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "Путь к DVD-приводу. Вы должны иметь права на чтение."
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Заголовки"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Разделы"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&Язык звукового сопровождения"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "С&убтитры"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Источник"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Следующий"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Начало"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Вверх"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Автоматическое воспроизведение при открытии VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Немедленное начало воспроизведения VCD при открытии"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Устройство VCD (CDROM):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr "Путь к CD/DVD-приводу. Вы должны иметь права на чтение."
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Дорожка "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+#, fuzzy
+msgid "Audio CD"
+msgstr "Кодек звука:"
+
+#: kmplayerapp.cpp:2203
+#, fuzzy, c-format
+msgid "Track %1"
+msgstr "Дорожка "
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Канал"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Канал - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Адрес для bind:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Если у вас несколько сетевых устройств, можно ограничить доступ"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Порт:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Максимальное число соединений:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Максимальная пропускная способность, кбит/с:"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Файл временной подачи:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Размер файла временной подачи, кб:"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Формат:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Возможно воспроизведение только AVI, MPEG и RM"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Кодек звука:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Битовый поток звука, кбит/с:"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Частота дискретизации звука, Гц:"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Кодек видео:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Битовый поток видео, кбит/с:"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Качество, 1..31:"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Частота кадров, Гц:"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Размер группы кадров:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Ширина, пиксел:"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Высота, пиксел:"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Разрешить доступ из:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'Одиночный IP' или 'Начальный-IP Конечный-IP' для диапазона IP-адресов"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Узел/IP или Диапазон IP"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Загрузить"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Начать"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Вещание"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Профили"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Ошибка при завершении процесса ffserver."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Не удалось запустить ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Не удалось запустить ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "Пользовательские"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "OSS"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "ALSA"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "aRts"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "ESD"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "ALSA v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "ALSA v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Использовать параметры базовой программы по умолчанию"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Цвет фона списка воспроизведения"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Цвет текста списка воспроизведения"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Цвет фона консоли"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Активный элемент списка воспроизведения"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Цвет текста консоли"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Цвет фона видео"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Цвет фона области просмотра"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Цвет фона информационного окна"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Цвет текста информационного окна"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Список воспроизведения"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Информационное окно"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Файл %1 не существует."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Фал субтитров %1 не существует."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Громкость %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Воспроизвести с помощью"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "К&онсоль"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Список &воспроизведения"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "&Язык звукового сопровождения"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "С&убтитры"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Контрастность:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Яркость:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Hue:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Насыщенность:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "&Цвета"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Настроить KMPlayer"
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "&Редактировать элемент списка воспроизведения"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Не запущен"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Буферизация"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Воспроизведение"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Запись %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Проигрыватель %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Неизв."
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "От&ключиться"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+#, fuzzy
+msgid "Connecting"
+msgstr "&Соединиться"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Ошибка завершения работы проигрывателя."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Шаблон размера"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Шаблон кэша"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Шаблон положения"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Шаблон индекса"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Шаблон URL:"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Шаблон указателя"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Шаблон начала"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Шаблон языка DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Шаблон субтитров DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Шаблон заголовков DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Шаблон разделов DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Шаблон дорожки VCD"
+
+#: kmplayerprocess.cpp:882
+#, fuzzy
+msgid "Audio CD tracks pattern"
+msgstr "Шаблон дорожки VCD"
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Дополнительные параметры командной строки:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Размер кэша:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "кб"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Создавать новый индекс, когда это возможно"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Делает возможным быстрый поиск в проиндексированных avi-файлах"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Общие параметры"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Устройство видео:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Устройство аудио:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Имя:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Ширина:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Высота:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Не начинать воспроизведение сразу"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Начинать проигрывание только после нажатия кнопки воспроизведения"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Стандарт:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Канал"
+
+#: kmplayertvsource.cpp:100
+#, fuzzy
+msgid "Frequency (MHz)"
+msgstr "Частота"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Вы собираетесь удалить устройство из меню источников. Хотите продолжить?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Подтверждение"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Драйвер:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "пустой, v4l или bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Устройство:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Путь к устройству видео, например, /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Поиск..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Общие"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "Устройство TV"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "ТВ"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "ТВ: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Устройство уже присутствует."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Устройство не обнаружено."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "Сканер TV"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Порт XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Начальный порт для расширения X Video.\n"
+"Если задано значение по умолчанию (0), то будет применяться первый доступный "
+"порт. Однако в случае нескольких экземпляров XVideo может потребоваться задать "
+"другой порт.\n"
+"Дополнительная информация содержится в выводе команды."
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Порт связи:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Порт подключения к VDR. Значение по умолчанию - 2001.\n"
+"Если VDR работает на другом порту, заданном ключом '-p' 'vdr', этот же порт "
+"следует указать здесь."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Масштаб"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Пропорция экрана при просмотре VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "От&ключиться"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "Клавиша VDR Up"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "Клавиша VDR Down"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "Клавиша VDR Back"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "Клавиша VDR Ok"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "Клавиша VDR Setup"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "Клавиша VDR Channels"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "Клавиша VDR Menu"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "Клавиша VDR Red"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "Клавиша VDR Green"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "Клавиша VDR Yellow"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "Клавиша VDR Blue"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "Клавиша VDR 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "Клавиша VDR 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "Клавиша VDR 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "Клавиша VDR 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "Клавиша VDR 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "Клавиша VDR 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "Клавиша VDR 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "Клавиша VDR 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "Клавиша VDR 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "Клавиша VDR 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Узел не найден"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Соединение не выполнено"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Команда VDR"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Перадать параметры в VDR.\n"
+"Введите 'HELP' для просмотра списка команд.\n"
+"Ответ VDR будет показан в консоли.\n"
+"\n"
+"Команда VDR:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Порт "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Список воспроизведения"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Громкость:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "выберите файл"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "без имени"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[атрибуты]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Скопировать в буфер обмена"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Показать все"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Параметры"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Вид"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Вывод"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Запись"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "mencoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Модули вывода"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Постобработка"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Окно"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Сохранить масштаб"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Видео будет сохранять масштаб при\n"
+"изменении размеров окна"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Встроить в системный лоток"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Значок KMPlayer будет добавлен в системный лоток.\n"
+"При щелчке на нём будет скрыто главное окно KMPlayer и удалена кнопка KMPlayer "
+"панели задач."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Автоматически подбирать размер под видео"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Если отмечено, KMPlayer будет менять размер\n"
+"воспроизводимого фильма перед началом"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Запоминать размер окна при выходе"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Всегда запускать в окне заданного размера"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "В цикле"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Воспроизведение текущего видео в цикле"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Разрешить пропуск кадров"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Разрешить пропуск кадров (framedrop) чтобы улучшить синхронизацию звука и "
+"изображения"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Автоматически задать громкость при запуске"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"При выборе нового источника громкость будет задана согласно элементу управления "
+"громкостью"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Автоматически задавать цвета при запуске"
+
+#: pref.cpp:236
+#, fuzzy
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"При начале воспроизведения фильма цвета будут устанавливаться в соответствии с "
+"ползунками"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Панель управления"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Показать кнопку настройки"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Добавить кнопку, показывающую всплывающее конфигурационное меню"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Показать кнопку списка воспроизведения"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Добавить кнопку списка в панель управления"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Показать кнопку записи"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Добавить кнопку записи в панель управления"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Показать кнопку вещания"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Добавить кнопку вещания в панель управления"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Время прокрутки вперёд/назад:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Цвета"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "АаБбВв AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Расположение:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Расположение воспроизводимого элемента"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Субтитры:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "Возможный путь к файлу, содержащему субтитру:"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Включить поддержку 'Щёлкни для воспроизведения'"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Проигрыватель:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Пропускная способность подключения к сети"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+#, fuzzy
+msgid "Preferred bitrate:"
+msgstr "Предпочитаемый битрейт:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "кбит/с"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Максимальный битрейт, кбит/с:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Выходной файл:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Начать &запись"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Текущий источник: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Магнитофон"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Автовоспроизведение"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Нет"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&После завершения записи"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&После"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Интервал, с:"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Остановить запись"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Начать запись"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Текущий источник: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Формат"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Как и у источника"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Пользовательские"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Параметры команды mencoder:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Параметры команды FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Выбор используемого видеодрайвера. Рекомендуется XVideo, или, если он "
+"недоступен, то X11, который работает медленнее."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Видеодрайвер:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Аудиодрайвер:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Включить фильтры постобработки"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Отключить фильтры при просмотре ТВ или DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Быстрые"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Устранение блоков по горизонтали"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Автоподбор"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Фильтр цветности"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Устранение блоков по вертикали"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Фильтр Деринга"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Автоподбор яркости/контрастности"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Масштабирование яркости до полного диапазона"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Устранение временного шума"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Фильтр чересстрочки - линейное микширование"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Фильтр чересстрочки - линейная интерполяция"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Фильтр чересстрочки - кубическая интерполяция"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Медианный фильтр чересстрочки"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "Фильтр чересстрочки FFmpeg"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Включить фильтры постобработки по умолчанию mplayer"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr "Включить фильтры постобработки (см. панель Прочие)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Включить быстрые фильтры постобработки mplayer"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "Фильтр используется при наличии свободных ресурсов процессора"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Масштабирование яркости до полного диапазона"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Прочие параметры"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Устранение чересстрочки"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Сбросить все параметры?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Всем параметрам будут присвоены их значения по умолчанию.\n"
+"Хотите продолжить?\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Полный экран"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Масштаб:"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "Фильтр используется при наличии свободных ресурсов процессора"
diff --git a/po/rw.po b/po/rw.po
new file mode 100644
index 0000000..35bcbd0
--- /dev/null
+++ b/po/rw.po
@@ -0,0 +1,1945 @@
+# translation of kmplayer to Kinyarwanda.
+# Copyright (C)
+# This file is distributed under the same license as the kmplayer package.
+# Steve Murphy <murf@e-tools.com>, 2005.
+# Steve performed initial rough translation from compendium built from translations provided by the following translators:
+# Philibert Ndandali <ndandali@yahoo.fr>, 2005.
+# Viateur MUGENZI <muvia1@yahoo.fr>, 2005.
+# Noëlla Mupole <s24211045@tuks.co.za>, 2005.
+# Carole Karema <karemacarole@hotmail.com>, 2005.
+# JEAN BAPTISTE NGENDAHAYO <ngenda_denis@yahoo.co.uk>, 2005.
+# Augustin KIBERWA <akiberwa@yahoo.co.uk>, 2005.
+# Donatien NSENGIYUMVA <ndonatienuk@yahoo.co.uk>, 2005.
+# Antoine Bigirimana <antoine@e-tools.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer 3.4\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2005-05-25 18:36-0600\n"
+"Last-Translator: Steve Murphy <murf@e-tools.com>\n"
+"Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr ""
+"Viateur MUGENZI, JEAN BAPTISTE NGENDAHAYO, Augustin KIBERWA, Donatien "
+"NSENGIYUMVA"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+"muvia1@yahoo.fr, ngenda_denis@yahoo.co.uk, akiberwa@yahoo.co.uk, "
+"ndonatienuk@yahoo.co.uk"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+#, fuzzy
+msgid "P&lay"
+msgstr "Gukina"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "Kuhagarara"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "Guhagarara"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+#, fuzzy
+msgid "Increase Volume"
+msgstr "Kongera imyandikire"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+#, fuzzy
+msgid "Decrease Volume"
+msgstr "Kugabanya Akagerampera"
+
+#: kmplayer_part.cpp:563
+#, fuzzy
+msgid "% Cache fill"
+msgstr "% Kuzuza "
+
+#: kmplayer_part.cpp:588
+#, fuzzy
+msgid "KMPlayer: Playing"
+msgstr "Amagenamiterere y'Ucuranga"
+
+#: kmplayer_part.cpp:601
+#, fuzzy
+msgid "KMPlayer: Stop Playing"
+msgstr "Amagenamiterere y'Ucuranga"
+
+#: kmplayer_part.cpp:1093
+#, fuzzy
+msgid "HREF"
+msgstr "NIINDANGO"
+
+#: kmplayer_part.cpp:1186
+#, fuzzy
+msgid "WEB"
+msgstr "Urubuga"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Idirishya Rishya"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Guhanagura Urutonde"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+#, fuzzy
+msgid "&Open DVD"
+msgstr "Gufungura "
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+#, fuzzy
+msgid "&Open VCD"
+msgstr "Gufungura "
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+#, fuzzy
+msgid "&Open Audio CD"
+msgstr "Gufungura "
+
+#: kmplayerapp.cpp:563
+#, fuzzy
+msgid "&Open Pipe..."
+msgstr "Gufungura ... "
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+#, fuzzy
+msgid "&Connect"
+msgstr "Kwihuza"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+#, fuzzy
+msgid "C&onsole"
+msgstr "Konsole"
+
+#: kmplayerapp.cpp:570
+#, fuzzy
+msgid "Pla&y List"
+msgstr "omeka ilisiti"
+
+#: kmplayerapp.cpp:571
+#, fuzzy
+msgid "Minimal mode"
+msgstr "Ubwoko "
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, fuzzy, c-format
+msgid "150%"
+msgstr "150"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr ""
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:579
+#, fuzzy
+msgid "Show Language Menu"
+msgstr "Kongeraho Ururimi"
+
+#: kmplayerapp.cpp:580
+#, fuzzy
+msgid "&Keep Width/Height Ratio"
+msgstr "Uwohereza - Ubugari, Ubuhagarike"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "Yuzuramugaragaza"
+
+#: kmplayerapp.cpp:589
+#, fuzzy
+msgid "&Arts Control"
+msgstr "Kubera Igenzura:"
+
+#: kmplayerapp.cpp:594
+#, fuzzy
+msgid "Opens a new application window"
+msgstr "A Gishya Porogaramu Idirishya "
+
+#: kmplayerapp.cpp:595
+#, fuzzy
+msgid "Opens an existing file"
+msgstr "Idosiye "
+
+#: kmplayerapp.cpp:596
+#, fuzzy
+msgid "Opens a recently used file"
+msgstr "A Byakoreshejwe Idosiye "
+
+#: kmplayerapp.cpp:597
+#, fuzzy
+msgid "Closes the actual source"
+msgstr "i Inkomoko "
+
+#: kmplayerapp.cpp:598
+#, fuzzy
+msgid "Quits the application"
+msgstr "i Porogaramu "
+
+#: kmplayerapp.cpp:600
+#, fuzzy
+msgid "Enables/disables the statusbar"
+msgstr "/i Umurongomiterere "
+
+#: kmplayerapp.cpp:601
+#, fuzzy
+msgid "Enables/disables the menubar"
+msgstr "/i "
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Cyiteguye."
+
+#: kmplayerapp.cpp:618
+#, fuzzy
+msgid "S&ource"
+msgstr "Inkomoko"
+
+#: kmplayerapp.cpp:619
+#, fuzzy
+msgid "&DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:624
+#, fuzzy
+msgid "&DVD Navigator"
+msgstr "&Navigator"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr ""
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr ""
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+#, fuzzy
+msgid "V&ideo"
+msgstr "inyerekanamashusho"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "Mubuganya y'Ibyatanzwe..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Cyiteguye"
+
+#: kmplayerapp.cpp:807
+#, fuzzy
+msgid "Opening DVD..."
+msgstr "Gufungura dosiye..."
+
+#: kmplayerapp.cpp:812
+#, fuzzy
+msgid "Opening VCD..."
+msgstr "Gufungura dosiye..."
+
+#: kmplayerapp.cpp:817
+#, fuzzy
+msgid "Opening Audio CD..."
+msgstr "Gufungura dosiye..."
+
+#: kmplayerapp.cpp:822
+#, fuzzy
+msgid "Opening pipe..."
+msgstr "Uruhombo: ... "
+
+#: kmplayerapp.cpp:824
+#, fuzzy
+msgid "Read From Pipe"
+msgstr "Kongera gutangiza ikadiri"
+
+#: kmplayerapp.cpp:825
+#, fuzzy
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"A command Ibisohoka Inyumvo /inyerekanamashusho i . Kuri A . \n"
+"\n"
+": "
+
+#: kmplayerapp.cpp:835
+#, fuzzy
+msgid "Opening VDR..."
+msgstr "Gufungura dosiye..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+#, fuzzy
+msgid "Intro"
+msgstr "Igenzura"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+#, fuzzy
+msgid "Opening file..."
+msgstr "Idosiye ... "
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Gusohoka"
+
+#: kmplayerapp.cpp:1305
+#, fuzzy
+msgid "Opening a new application window..."
+msgstr "A Gishya Porogaramu Idirishya ... "
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Idosiye zose"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Gufungura Dosiye"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Bika idosiye"
+
+#: kmplayerapp.cpp:1337
+#, fuzzy
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr "Hari ikibazo mu gufungura dosiye"
+
+#: kmplayerapp.cpp:1372
+#, fuzzy
+msgid "Closing file..."
+msgstr "Idosiye ... "
+
+#: kmplayerapp.cpp:1381
+#, fuzzy
+msgid "Exiting..."
+msgstr "Tegereza..."
+
+#: kmplayerapp.cpp:1440
+#, fuzzy, c-format
+msgid "Show Menubar with %1"
+msgstr "Na: %1 "
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+#, fuzzy
+msgid "Auto play after opening DVD"
+msgstr "Gukina Nyuma Gufungura %S "
+
+#: kmplayerapp.cpp:1708
+#, fuzzy
+msgid "Start playing DVD right after opening DVD"
+msgstr "Gutangira Iburyo: Nyuma Gufungura %S "
+
+#: kmplayerapp.cpp:1709
+#, fuzzy
+msgid "DVD device:"
+msgstr "APAREYE : "
+
+#: kmplayerapp.cpp:1711
+#, fuzzy
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "Kuri APAREYE , Soma Kuri iyi APAREYE "
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+#, fuzzy
+msgid "&Titles"
+msgstr "Imitwe"
+
+#: kmplayerapp.cpp:1839
+#, fuzzy
+msgid "&Chapters"
+msgstr "Imitwe"
+
+#: kmplayerapp.cpp:1841
+#, fuzzy
+msgid "Audio &Language"
+msgstr "Kongeraho Ururimi"
+
+#: kmplayerapp.cpp:1842
+#, fuzzy
+msgid "&SubTitles"
+msgstr "Umutwe wungirije"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Inkomoko"
+
+#: kmplayerapp.cpp:2006
+#, fuzzy
+msgid "DVDNav"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "Bikurikira"
+
+#: kmplayerapp.cpp:2025
+#, fuzzy
+msgid "&Root"
+msgstr "Imizi"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "Hejuru"
+
+#: kmplayerapp.cpp:2068
+#, fuzzy
+msgid "Auto play after opening a VCD"
+msgstr "Gukina Nyuma Gufungura %S A "
+
+#: kmplayerapp.cpp:2069
+#, fuzzy
+msgid "Start playing VCD right after opening VCD"
+msgstr "Gutangira Iburyo: Nyuma Gufungura %S "
+
+#: kmplayerapp.cpp:2070
+#, fuzzy
+msgid "VCD (CDROM) device:"
+msgstr "( ) APAREYE : "
+
+#: kmplayerapp.cpp:2072
+#, fuzzy
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr "Kuri /APAREYE , Soma Kuri iyi APAREYE "
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+#, fuzzy
+msgid "VCD"
+msgstr "GCD"
+
+#: kmplayerapp.cpp:2101
+#, fuzzy
+msgid "Track "
+msgstr "Agasanduku 4"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+#, fuzzy
+msgid "Audio CD"
+msgstr "Guhindura Uburyo:"
+
+#: kmplayerapp.cpp:2203
+#, fuzzy, c-format
+msgid "Track %1"
+msgstr "Agasanduku 4"
+
+#: kmplayerapp.cpp:2254
+#, fuzzy
+msgid "Pipe"
+msgstr "Uruhombo:"
+
+#: kmplayerapp.cpp:2286
+#, fuzzy, c-format
+msgid "Pipe - %1"
+msgstr "Uruhombo:"
+
+#: kmplayerbroadcast.cpp:160
+#, fuzzy
+msgid "Bind address:"
+msgstr "Aderesi: : "
+
+#: kmplayerbroadcast.cpp:162
+#, fuzzy
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Igikubo urusobe Amapareye , "
+
+#: kmplayerbroadcast.cpp:165
+#, fuzzy
+msgid "Listen port:"
+msgstr "Umuyoboro: : "
+
+#: kmplayerbroadcast.cpp:169
+#, fuzzy
+msgid "Maximum connections:"
+msgstr "Ukwihuza : "
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr ""
+
+#: kmplayerbroadcast.cpp:177
+#, fuzzy
+msgid "Temporary feed file:"
+msgstr "Idosiye : "
+
+#: kmplayerbroadcast.cpp:181
+#, fuzzy
+msgid "Feed file size (kB):"
+msgstr "Idosiye Ingano: ( ) : "
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Imiterere:"
+
+#: kmplayerbroadcast.cpp:212
+#, fuzzy
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr ", mpeg na Akazi ya: "
+
+#: kmplayerbroadcast.cpp:215
+#, fuzzy
+msgid "Audio codec:"
+msgstr "Guhindura Uburyo:"
+
+#: kmplayerbroadcast.cpp:216
+#, fuzzy
+msgid "Audio bit rate (kbit):"
+msgstr "Igipimo ( ) : "
+
+#: kmplayerbroadcast.cpp:217
+#, fuzzy
+msgid "Audio sample rate (Hz):"
+msgstr "Urugero Igipimo ( ) : "
+
+#: kmplayerbroadcast.cpp:218
+#, fuzzy
+msgid "Video codec:"
+msgstr "Guhisha Uburyo"
+
+#: kmplayerbroadcast.cpp:219
+#, fuzzy
+msgid "Video bit rate (kbit):"
+msgstr "Igipimo ( ) : "
+
+#: kmplayerbroadcast.cpp:220
+#, fuzzy
+msgid "Quality (1-31):"
+msgstr "( 1 - ) : "
+
+#: kmplayerbroadcast.cpp:221
+#, fuzzy
+msgid "Frame rate (Hz):"
+msgstr "Igipimo ( ) : "
+
+#: kmplayerbroadcast.cpp:222
+#, fuzzy
+msgid "Gop size:"
+msgstr "Ingano: : "
+
+#: kmplayerbroadcast.cpp:223
+#, fuzzy
+msgid "Width (pixels):"
+msgstr "( pigiseli ) : "
+
+#: kmplayerbroadcast.cpp:224
+#, fuzzy
+msgid "Height (pixels):"
+msgstr "( pigiseli ) : "
+
+#: kmplayerbroadcast.cpp:225
+#, fuzzy
+msgid "Allow access from:"
+msgstr "Kuva: : "
+
+#: kmplayerbroadcast.cpp:230
+#, fuzzy
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "' Cyangwa ' Tangira &vendorShortName; - Impera - ya: Ibice "
+
+#: kmplayerbroadcast.cpp:232
+#, fuzzy
+msgid "Host/IP or IP Range"
+msgstr "/Cyangwa "
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Ibirimo"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Gutangira"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+#, fuzzy
+msgid "Broadcasting"
+msgstr "Gushakisha"
+
+#: kmplayerbroadcast.cpp:460
+#, fuzzy
+msgid "Profiles"
+msgstr "Ibijyana"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+#, fuzzy
+msgid "Failed to end ffserver process."
+msgstr "Kuri Impera . "
+
+#: kmplayerbroadcast.cpp:552
+#, fuzzy
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Kuri Tangira &vendorShortName; . \n"
+
+#: kmplayerbroadcast.cpp:565
+#, fuzzy
+msgid "Failed to start ffmpeg."
+msgstr "Kuri Tangira &vendorShortName; . "
+
+#: kmplayerbroadcast.cpp:660
+#, fuzzy
+msgid "FFServer"
+msgstr "Seriveri"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "Ibisanzwe"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Gufungura Sisitemu y'Ijwi"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr ""
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Imiterere y'Ijwi Ihanitse ya Linux"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr ""
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Dayimoni y'Inyumvo Imurikiwe"
+
+#: kmplayerconfig.cpp:66
+#, fuzzy
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr ". 5 "
+
+#: kmplayerconfig.cpp:67
+#, fuzzy
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr ". 9 "
+
+#: kmplayerconfig.cpp:68
+#, fuzzy
+msgid "Use back-end defaults"
+msgstr "Inyuma - Impera Mburabuzi "
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr ""
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr ""
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+#, fuzzy
+msgid "XVideo"
+msgstr "inyerekanamashusho"
+
+#: kmplayerconfig.cpp:91
+#, fuzzy
+msgid "Playlist background"
+msgstr "Mbuganyuma "
+
+#: kmplayerconfig.cpp:94
+#, fuzzy
+msgid "Playlist foreground"
+msgstr "Mbugambanza: "
+
+#: kmplayerconfig.cpp:97
+#, fuzzy
+msgid "Console background"
+msgstr "Mbuganyuma "
+
+#: kmplayerconfig.cpp:98
+#, fuzzy
+msgid "Playlist active item"
+msgstr "Gikora Ikintu "
+
+#: kmplayerconfig.cpp:103
+#, fuzzy
+msgid "Console foreground"
+msgstr "Mbugambanza: "
+
+#: kmplayerconfig.cpp:106
+#, fuzzy
+msgid "Video background"
+msgstr "Mbuganyuma "
+
+#: kmplayerconfig.cpp:109
+#, fuzzy
+msgid "Viewing area background"
+msgstr "Umwanya Mbuganyuma "
+
+#: kmplayerconfig.cpp:112
+#, fuzzy
+msgid "Info window background"
+msgstr "Idirishya Mbuganyuma "
+
+#: kmplayerconfig.cpp:115
+#, fuzzy
+msgid "Info window foreground"
+msgstr "Idirishya Mbugambanza: "
+
+#: kmplayerconfig.cpp:118
+#, fuzzy
+msgid "Playlist"
+msgstr "Ibinyamirongo"
+
+#: kmplayerconfig.cpp:122
+#, fuzzy
+msgid "Info window"
+msgstr "Idirishya "
+
+#: kmplayerconfig.cpp:612
+#, fuzzy
+msgid "File %1 does not exist."
+msgstr "Idosiye %1 OYA . "
+
+#: kmplayerconfig.cpp:622
+#, fuzzy
+msgid "Sub title file %1 does not exist."
+msgstr "Umutwe: Idosiye %1 OYA . "
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, fuzzy, c-format
+msgid "Volume is %1"
+msgstr "ni %1 "
+
+#: kmplayercontrolpanel.cpp:383
+#, fuzzy
+msgid "&Play with"
+msgstr "Na: "
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+#, fuzzy
+msgid "Con&sole"
+msgstr "Konsole"
+
+#: kmplayercontrolpanel.cpp:387
+#, fuzzy
+msgid "Play&list"
+msgstr "Ibinyamirongo"
+
+#: kmplayercontrolpanel.cpp:400
+#, fuzzy
+msgid "&Audio languages"
+msgstr "Kongeraho Ururimi"
+
+#: kmplayercontrolpanel.cpp:401
+#, fuzzy
+msgid "&Subtitles"
+msgstr "Umutwe wungirije"
+
+#: kmplayercontrolpanel.cpp:402
+#, fuzzy
+msgid "Contrast:"
+msgstr "Inyuranyamigaragarire:"
+
+#: kmplayercontrolpanel.cpp:406
+#, fuzzy
+msgid "Brightness:"
+msgstr "Urumuri:"
+
+#: kmplayercontrolpanel.cpp:410
+#, fuzzy
+msgid "Hue:"
+msgstr "Ibara"
+
+#: kmplayercontrolpanel.cpp:414
+#, fuzzy
+msgid "Saturation:"
+msgstr "Ubwuzurane"
+
+#: kmplayercontrolpanel.cpp:418
+#, fuzzy
+msgid "Co&lors"
+msgstr "Amabara"
+
+#: kmplayercontrolpanel.cpp:420
+#, fuzzy
+msgid "&Configure KMPlayer..."
+msgstr "Kuboneza Umwanya..."
+
+#: kmplayerpartbase.cpp:183
+#, fuzzy
+msgid "Edit playlist &item"
+msgstr "Ikintu "
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+#, fuzzy
+msgid "Playing"
+msgstr "Byuzuye"
+
+#: kmplayerpartbase.cpp:1384
+#, fuzzy
+msgid "Recorder %1 %2"
+msgstr "Kwongera gupanga"
+
+#: kmplayerpartbase.cpp:1402
+#, fuzzy
+msgid "Player %1 %2"
+msgstr "Media Player"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Kitazwi"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "Gucomora"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, fuzzy, c-format
+msgid "URL - %1"
+msgstr "URL: %1"
+
+#: kmplayerpartbase.cpp:1859
+#, fuzzy
+msgid "Connecting"
+msgstr "Kwihuza"
+
+#: kmplayerprocess.cpp:180
+#, fuzzy
+msgid "Failed to end player process."
+msgstr "Kuri Impera . "
+
+#: kmplayerprocess.cpp:377
+#, fuzzy
+msgid "&MPlayer"
+msgstr "Peja"
+
+#: kmplayerprocess.cpp:870
+#, fuzzy
+msgid "Size pattern"
+msgstr "Ishusho "
+
+#: kmplayerprocess.cpp:871
+#, fuzzy
+msgid "Cache pattern"
+msgstr "Ishusho "
+
+#: kmplayerprocess.cpp:872
+#, fuzzy
+msgid "Position pattern"
+msgstr "Ishusho "
+
+#: kmplayerprocess.cpp:873
+#, fuzzy
+msgid "Index pattern"
+msgstr "Ishusho "
+
+#: kmplayerprocess.cpp:874
+#, fuzzy
+msgid "Reference URL pattern"
+msgstr "Ishusho "
+
+#: kmplayerprocess.cpp:875
+#, fuzzy
+msgid "Reference pattern"
+msgstr "Ishusho "
+
+#: kmplayerprocess.cpp:876
+#, fuzzy
+msgid "Start pattern"
+msgstr "Gutangira Ishusho "
+
+#: kmplayerprocess.cpp:877
+#, fuzzy
+msgid "DVD language pattern"
+msgstr "Ururimi: Ishusho "
+
+#: kmplayerprocess.cpp:878
+#, fuzzy
+msgid "DVD subtitle pattern"
+msgstr "Umutwe wungirije Ishusho "
+
+#: kmplayerprocess.cpp:879
+#, fuzzy
+msgid "DVD titles pattern"
+msgstr "Imitwe Ishusho "
+
+#: kmplayerprocess.cpp:880
+#, fuzzy
+msgid "DVD chapters pattern"
+msgstr "Imitwe Ishusho "
+
+#: kmplayerprocess.cpp:881
+#, fuzzy
+msgid "VCD track pattern"
+msgstr "Ishusho "
+
+#: kmplayerprocess.cpp:882
+#, fuzzy
+msgid "Audio CD tracks pattern"
+msgstr "Ishusho "
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "Media Player"
+
+#: kmplayerprocess.cpp:905
+#, fuzzy
+msgid "Additional command line arguments:"
+msgstr "command Umurongo: Inkoresha: : "
+
+#: kmplayerprocess.cpp:906
+#, fuzzy
+msgid "Cache size:"
+msgstr "Ingano: : "
+
+#: kmplayerprocess.cpp:906
+#, fuzzy
+msgid "kB"
+msgstr "KB"
+
+#: kmplayerprocess.cpp:908
+#, fuzzy
+msgid "Build new index when possible"
+msgstr "Gishya Umubarendanga Ryari: "
+
+#: kmplayerprocess.cpp:910
+#, fuzzy
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "in Idosiye ( ) "
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Amahitamo Rusange"
+
+#: kmplayerprocess.cpp:978
+#, fuzzy
+msgid "MPlayer"
+msgstr "Media Player"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+#, fuzzy
+msgid "&Xine"
+msgstr "Mumurongo"
+
+#: kmplayerprocess.cpp:1761
+#, fuzzy
+msgid "&GStreamer"
+msgstr "Biruta"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+#, fuzzy
+msgid "Video device:"
+msgstr "APAREYE : "
+
+#: kmplayertvsource.cpp:66
+#, fuzzy
+msgid "Audio device:"
+msgstr "APAREYE : "
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Izina:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Ubugari:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Ubuhagarike:"
+
+#: kmplayertvsource.cpp:74
+#, fuzzy
+msgid "Do not immediately play"
+msgstr "OYA Ako kanya Gukina "
+
+#: kmplayertvsource.cpp:76
+#, fuzzy
+msgid "Only start playing after clicking the play button"
+msgstr "Tangira &vendorShortName; Nyuma i Gukina Akabuto "
+
+#: kmplayertvsource.cpp:87
+#, fuzzy
+msgid "Norm:"
+msgstr "NORM"
+
+#: kmplayertvsource.cpp:99
+#, fuzzy
+msgid "Channel"
+msgstr "Umurongo wa 1 "
+
+#: kmplayertvsource.cpp:100
+#, fuzzy
+msgid "Frequency (MHz)"
+msgstr "Ubwisubire"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr "Gukomeza."
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Emeza"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Musomyi:"
+
+#: kmplayertvsource.cpp:157
+#, fuzzy
+msgid "dummy, v4l or bsdbt848"
+msgstr "Ishusho , Cyangwa "
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Ububiko:"
+
+#: kmplayertvsource.cpp:160
+#, fuzzy
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Kuri inyerekanamashusho APAREYE , . //"
+
+#: kmplayertvsource.cpp:161
+#, fuzzy
+msgid "Scan..."
+msgstr "Gusikana"
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Rusange"
+
+#: kmplayertvsource.cpp:246
+#, fuzzy
+msgid "tv device"
+msgstr "APAREYE "
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+#, fuzzy
+msgid "TV"
+msgstr "T"
+
+#: kmplayertvsource.cpp:476
+#, fuzzy
+msgid "TV: "
+msgstr "Kuri:"
+
+#: kmplayertvsource.cpp:599
+#, fuzzy
+msgid "Device already present."
+msgstr "Inyandiko Isanzwe Ifunguye"
+
+#: kmplayertvsource.cpp:610
+#, fuzzy
+msgid "No device found."
+msgstr "APAREYE Byabonetse . "
+
+#: kmplayertvsource.cpp:632
+#, fuzzy
+msgid "TVScanner"
+msgstr "Gusikana"
+
+#: kmplayervdr.cpp:90
+#, fuzzy
+msgid "XVideo port"
+msgstr "Umuyoboro: "
+
+#: kmplayervdr.cpp:92
+#, fuzzy
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"SHINGIRO Bya i Umugereka: . \n"
+"Ibumoso: Kuri Mburabuzi ( 0 %S ) , i Itangira Bihari Umuyoboro: Byakoreshejwe . "
+"NIBA Igikubo Ingero , Kuri i Umuyoboro: Kuri Koresha . \n"
+"i Ibisohoka Kuva: ' ya: Birenzeho Ibisobanuro: "
+
+#: kmplayervdr.cpp:93
+#, fuzzy
+msgid "Communication port:"
+msgstr "Umuyoboro: : "
+
+#: kmplayervdr.cpp:96
+#, fuzzy
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Umuyoboro: Na: . ni Umuyoboro: . \n"
+"Koresha Umuyoboro: , Na: i ' - Ihitamo Bya ' , Gushyiraho . "
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Gupima"
+
+#: kmplayervdr.cpp:101
+#, fuzzy
+msgid "4:3"
+msgstr "4, 3"
+
+#: kmplayervdr.cpp:102
+#, fuzzy
+msgid "16:9"
+msgstr "16 : 9 "
+
+#: kmplayervdr.cpp:103
+#, fuzzy
+msgid "Aspects to use when viewing VDR"
+msgstr "Kuri Koresha Ryari: "
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+#, fuzzy
+msgid "VDR"
+msgstr "VAR"
+
+#: kmplayervdr.cpp:243
+#, fuzzy
+msgid "Dis&connect"
+msgstr "Gucomora"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+#, fuzzy
+msgid "VDR Key Setup"
+msgstr "Itunganya ry'ipaji"
+
+#: kmplayervdr.cpp:249
+#, fuzzy
+msgid "VDR Key Channels"
+msgstr "Shene RF"
+
+#: kmplayervdr.cpp:250
+#, fuzzy
+msgid "VDR Key Menu"
+msgstr "Ibikubiye muri K"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr ""
+
+#: kmplayervdr.cpp:252
+#, fuzzy
+msgid "VDR Key Green"
+msgstr "ibyemejwe by'ifungunzo"
+
+#: kmplayervdr.cpp:253
+#, fuzzy
+msgid "VDR Key Yellow"
+msgstr "Guhakanira, Kwemerera"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr ""
+
+#: kmplayervdr.cpp:259
+#, fuzzy
+msgid "VDR Key 0"
+msgstr "0 %S "
+
+#: kmplayervdr.cpp:260
+#, fuzzy
+msgid "VDR Key 1"
+msgstr "1 "
+
+#: kmplayervdr.cpp:261
+#, fuzzy
+msgid "VDR Key 2"
+msgstr "2 "
+
+#: kmplayervdr.cpp:262
+#, fuzzy
+msgid "VDR Key 3"
+msgstr "3 "
+
+#: kmplayervdr.cpp:263
+#, fuzzy
+msgid "VDR Key 4"
+msgstr "4 "
+
+#: kmplayervdr.cpp:264
+#, fuzzy
+msgid "VDR Key 5"
+msgstr "5 "
+
+#: kmplayervdr.cpp:265
+#, fuzzy
+msgid "VDR Key 6"
+msgstr "6 "
+
+#: kmplayervdr.cpp:266
+#, fuzzy
+msgid "VDR Key 7"
+msgstr "7 "
+
+#: kmplayervdr.cpp:267
+#, fuzzy
+msgid "VDR Key 8"
+msgstr "8 "
+
+#: kmplayervdr.cpp:268
+#, fuzzy
+msgid "VDR Key 9"
+msgstr "9 "
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Inturo ntibonetse"
+
+#: kmplayervdr.cpp:455
+#, fuzzy
+msgid "Connection refused"
+msgstr "Guhuza byanze"
+
+#: kmplayervdr.cpp:497
+#, fuzzy
+msgid "Custom VDR command"
+msgstr "Kunozaidosiyeya command "
+
+#: kmplayervdr.cpp:497
+#, fuzzy
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Amabwiriza Kuri . \n"
+"' Kuri A Urutonde Bya Bihari Amabwiriza . \n"
+"in i Idirishya . \n"
+"\n"
+": "
+
+#: kmplayervdr.cpp:696
+#, fuzzy
+msgid "Port "
+msgstr "Umuyoboro"
+
+#: kmplayervdr.cpp:752
+#, fuzzy
+msgid "X&Video"
+msgstr "inyerekanamashusho"
+
+#: kmplayerview.cpp:190
+#, fuzzy
+msgid "Play List"
+msgstr "omeka ilisiti"
+
+#: kmplayerview.cpp:367
+#, fuzzy
+msgid "Volume:"
+msgstr "Agahindurajwi:"
+
+#: main.cpp:31 main.cpp:47
+#, fuzzy
+msgid "KMPlayer"
+msgstr "Media Player"
+
+#: main.cpp:36
+#, fuzzy
+msgid "file to open"
+msgstr "Idosiye Kuri Gufungura "
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "Kitiswe"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+#, fuzzy
+msgid "[attributes]"
+msgstr "[ Ibiranga ] "
+
+#: playlistview.cpp:353
+#, fuzzy
+msgid "&Copy to Clipboard"
+msgstr "Gukoporora mu Bubikokoporora"
+
+#: playlistview.cpp:364
+#, fuzzy
+msgid "&Show all"
+msgstr "Erekana byose"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Ibyahisemo"
+
+#: pref.cpp:82
+#, fuzzy
+msgid "Looks"
+msgstr "Gushakisha"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Ibisohoka"
+
+#: pref.cpp:96 pref.cpp:122
+#, fuzzy
+msgid "Recording"
+msgstr "Imisobekere"
+
+#: pref.cpp:103
+#, fuzzy
+msgid "MEncoder"
+msgstr "Bigezweho"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr ""
+
+#: pref.cpp:124
+#, fuzzy
+msgid "Output Plugins"
+msgstr "Agatebo k'Ibisohoka"
+
+#: pref.cpp:129 pref.cpp:130
+#, fuzzy
+msgid "Postprocessing"
+msgstr "Inonosora"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Idirishya"
+
+#: pref.cpp:212
+#, fuzzy
+msgid "Keep size ratio"
+msgstr "Ingano: "
+
+#: pref.cpp:213
+#, fuzzy
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr "Ivivuwe , Gumana: Idirishya ni "
+
+#: pref.cpp:214
+#, fuzzy
+msgid "Dock in system tray"
+msgstr "in Sisitemu Agasanduku "
+
+#: pref.cpp:215
+#, fuzzy
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Ivivuwe , Agashushondanga Bya Kyongewe Kuri i Sisitemu Agasanduku . \n"
+"Gushisha Idirishya na Umurongoibikorwa Akabuto . "
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+#, fuzzy
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr "Ivivuwe , Gumana: Idirishya ni "
+
+#: pref.cpp:222
+#, fuzzy
+msgid "Remember window size on exit"
+msgstr "Idirishya Ingano: ku &Kuvamo "
+
+#: pref.cpp:223
+#, fuzzy
+msgid "Always start with fixed size"
+msgstr "Tangira &vendorShortName; Na: BIHAMYE Ingano: "
+
+#: pref.cpp:229
+#, fuzzy
+msgid "Loop"
+msgstr "Gushakisha"
+
+#: pref.cpp:230
+#, fuzzy
+msgid "Makes current movie loop"
+msgstr "KIGEZWEHO "
+
+#: pref.cpp:231
+#, fuzzy
+msgid "Allow framedrops"
+msgstr "Kwemerera ibishushanyo biyega"
+
+#: pref.cpp:232
+#, fuzzy
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "Amakadiri ya: Inyumvo na inyerekanamashusho "
+
+#: pref.cpp:233
+#, fuzzy
+msgid "Auto set volume on start"
+msgstr "Gushyiraho Igice ku Tangira &vendorShortName; "
+
+#: pref.cpp:234
+#, fuzzy
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr "A Gishya Inkomoko ni Byahiswemo , i Igice Gushyiraho i Igice Igenzura "
+
+#: pref.cpp:235
+#, fuzzy
+msgid "Auto set colors on start"
+msgstr "Gushyiraho Igice ku Tangira &vendorShortName; "
+
+#: pref.cpp:236
+#, fuzzy
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr "A Gishya Inkomoko ni Byahiswemo , i Igice Gushyiraho i Igice Igenzura "
+
+#: pref.cpp:238
+#, fuzzy
+msgid "Control Panel"
+msgstr "Umwanya w'igenzura"
+
+#: pref.cpp:242
+#, fuzzy
+msgid "Show config button"
+msgstr "Akabuto "
+
+#: pref.cpp:243
+#, fuzzy
+msgid "Add a button that will popup a config menu"
+msgstr "A Akabuto Byirambuye A Ibikubiyemo "
+
+#: pref.cpp:244
+#, fuzzy
+msgid "Show playlist button"
+msgstr "Akabuto "
+
+#: pref.cpp:245
+#, fuzzy
+msgid "Add a playlist button to the control buttons"
+msgstr "A Akabuto Kuri i Igenzura Utubuto "
+
+#: pref.cpp:246
+#, fuzzy
+msgid "Show record button"
+msgstr "Icyabitswe Akabuto "
+
+#: pref.cpp:247
+#, fuzzy
+msgid "Add a record button to the control buttons"
+msgstr "A Icyabitswe Akabuto Kuri i Igenzura Utubuto "
+
+#: pref.cpp:248
+#, fuzzy
+msgid "Show broadcast button"
+msgstr "Akabuto "
+
+#: pref.cpp:249
+#, fuzzy
+msgid "Add a broadcast button to the control buttons"
+msgstr "A Akabuto Kuri i Igenzura Utubuto "
+
+#: pref.cpp:256
+#, fuzzy
+msgid "Forward/backward seek time:"
+msgstr "/subira inyuma Igihe : "
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Amabara"
+
+#: pref.cpp:295
+#, fuzzy
+msgid "AaBbCc"
+msgstr "Icyarabu"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Indanganturo:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+#, fuzzy
+msgid "Sub title:"
+msgstr "Umutwe: : "
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+#, fuzzy
+msgid "Enable 'Click to Play' support"
+msgstr "' Kuri Gushigikira "
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+#, fuzzy
+msgid "Use movie player:"
+msgstr "&Kuvanaho Kugaragaza"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr ""
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr ""
+
+#: pref.cpp:401
+#, fuzzy
+msgid "Output file:"
+msgstr "Idosiye y'ibisohoka:"
+
+#: pref.cpp:406
+#, fuzzy
+msgid "Start &Recording"
+msgstr "Gutangira "
+
+#: pref.cpp:411
+#, fuzzy
+msgid "Current source: "
+msgstr "Inkomoko : "
+
+#: pref.cpp:412
+#, fuzzy
+msgid "Recorder"
+msgstr "Kwongera gupanga"
+
+#: pref.cpp:418
+#, fuzzy
+msgid "Auto Playback"
+msgstr "Ifungura ry'igitwaramakuru"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Oya"
+
+#: pref.cpp:420
+#, fuzzy
+msgid "&When recording finished"
+msgstr "Byarangiye "
+
+#: pref.cpp:421
+#, fuzzy
+msgid "A&fter"
+msgstr "Nyuma"
+
+#: pref.cpp:425
+#, fuzzy
+msgid "Time (seconds):"
+msgstr "( amasogonda ) : "
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Guhagarika Gushyingura"
+
+#: pref.cpp:452
+#, fuzzy
+msgid "Start Recording"
+msgstr "Gutangira "
+
+#: pref.cpp:471
+#, fuzzy
+msgid "Current Source: "
+msgstr "Igishushanyombonera kigezweho"
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Imiterere"
+
+#: pref.cpp:544
+#, fuzzy
+msgid "Same as source"
+msgstr "Nka Inkomoko "
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Ibisanzwe"
+
+#: pref.cpp:548
+#, fuzzy
+msgid "Mencoder arguments:"
+msgstr "Inkoresha: : "
+
+#: pref.cpp:572
+#, fuzzy
+msgid "&MEncoder"
+msgstr "inyandikoporogaramu imwe"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+#, fuzzy
+msgid "FFMpeg arguments:"
+msgstr "Inkoresha: : "
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr ""
+
+#: pref.cpp:620
+#, fuzzy
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr "inyerekanamashusho Musomyi: . ni , Cyangwa , NIBA ni OYA , , ni . "
+
+#: pref.cpp:621
+#, fuzzy
+msgid "Video driver:"
+msgstr "Musomyi: : "
+
+#: pref.cpp:627
+#, fuzzy
+msgid "Audio driver:"
+msgstr "Musomyi: : "
+
+#: pref.cpp:642
+#, fuzzy
+msgid "Enable use of postprocessing filters"
+msgstr "Koresha Bya Muyunguruzi "
+
+#: pref.cpp:644
+#, fuzzy
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Koresha Bya Ryari: /"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Byihuta"
+
+#: pref.cpp:693
+#, fuzzy
+msgid "Horizontal deblocking"
+msgstr "Imbere intambike"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+#, fuzzy
+msgid "Auto quality"
+msgstr "Ubwiza "
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+#, fuzzy
+msgid "Chrominance filtering"
+msgstr "Iyungurura "
+
+#: pref.cpp:712
+#, fuzzy
+msgid "Vertical deblocking"
+msgstr "Umurongo uhagaritse"
+
+#: pref.cpp:732
+#, fuzzy
+msgid "Dering filter"
+msgstr "Akayunguruzo: "
+
+#: pref.cpp:752
+#, fuzzy
+msgid "Auto brightness/contrast"
+msgstr "Urumuri /Inyuranyamigaragarire "
+
+#: pref.cpp:753
+#, fuzzy
+msgid "Stretch luminance to full range"
+msgstr "Kuri Cyuzuye Urutonde "
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+#, fuzzy
+msgid "Linear blend deinterlacer"
+msgstr "Ubururu/umweru nyamurongo"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+#, fuzzy
+msgid "Median deinterlacer"
+msgstr "Media Player"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+#, fuzzy
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Mburabuzi Muyunguruzi "
+
+#: pref.cpp:820
+#, fuzzy
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr "Guhanga Muyunguruzi ( : Kunozaidosiyeya - tab ) "
+
+#: pref.cpp:821
+#, fuzzy
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Byihuta Muyunguruzi "
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "ni Byakoreshejwe NIBA "
+
+#: pref.cpp:828
+#, fuzzy
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Kuri Cyuzuye Urutonde ( 0 %S . . ) "
+
+#: pref.cpp:829
+#, fuzzy
+msgid "Custom Preset"
+msgstr "Kunozaidosiyeya "
+
+#: pref.cpp:831
+#, fuzzy
+msgid "Deinterlacing"
+msgstr "Ivangamabara"
+
+#: pref.cpp:837
+#, fuzzy
+msgid "Reset Settings?"
+msgstr "Ongera utangire bushya Ibyashizweho"
+
+#: pref.cpp:838
+#, fuzzy
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Bigyanye Kuri Byose Igenamiterere Na: Mburabuzi . \n"
+"Emeza . \n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr ""
+
+#: viewarea.cpp:1360
+#, fuzzy
+msgid "Fullscreen"
+msgstr "Mugaragazayuzuye"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Ingano:"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "ni Byakoreshejwe NIBA "
+
+#~ msgid "empty"
+#~ msgstr "ubusa"
+
+#, fuzzy
+#~ msgid "tv://"
+#~ msgstr "ht://dig"
+
+#~ msgid "Escape"
+#~ msgstr "Gusohoka"
diff --git a/po/sk.po b/po/sk.po
new file mode 100644
index 0000000..20239cc
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,1657 @@
+# translation of kmplayer.pot to Slovak
+# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+# Jozef Riha <jose1711@gmail.com>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sk\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-08-25 14:13+0200\n"
+"Last-Translator: Jozef Říha <jose1711@gmail.com>\n"
+"Language-Team: Slovak <sk@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.2\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Jozef Říha"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "zefo@seznam.cz"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Prehrať"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pauza"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "Za&staviť"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Pridať hlasitost"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Znížiť hlasitosť"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% Cache plné"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Prehrávam"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMplayer: Koniec prehrávania"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Najaktuálnejší"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Stále playlisty"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Nové &okno"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Vymazať &históriu"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Otvoriť DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Otvoriť VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Otvoriť audio CD"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Otvoriť rúru (pipe)..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Pripojiť sa"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "Kon&zola"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Zozn&am skladieb"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Minirežim"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "&Režim úprav"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "S&ynchrozinuj so zoznamom skladieb"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Zobrazovať vyskakovaciu ponuku"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Zobraziť ponuku jazyka"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "Nemeniť &pomer šírka/výška"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "Na &celú obrazovku"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "O&vládanie Arts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Otvorí nové okno aplikácie"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Otvorí existujúci súbor"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Otvorí nedávno použitý súbor"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Zatvorí aktuálny zdroj"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Ukončí aplikáciu"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Povolí/zakáže stavovú lištu"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Povolí/zakáže lištu menu"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Pripravený."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "Zdr&oj"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD navigátor"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Audio CD"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Pridať do zoznamu"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Pridať do novej &skupiny"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Kopírovať sem"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "X&Video"
+
+#: kmplayerapp.cpp:751
+#, fuzzy
+msgid "More..."
+msgstr "Viac ..."
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "DVD Navigácia ..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Pripravený"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Otváranie DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Otváranie VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Otváranie audio CD..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Otváranie rúry..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Čítať z rúry (pipe)"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Otváranie VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Intro"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Otváram súbor..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Ukončiť"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Otváram nové okno aplikácie..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Všetky súbory"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Otvoriť súbor"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Uložiť súbor"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Chyba pri otváraní súboru %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Zavieram súbor..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Ukončujem..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Zobraziť lištu menu s %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Presunúť sem"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Nová skupina"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Automaticky prehrávať po otvorení DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Začať prehrávať DVD okamžite po otvorení DVD"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD zariadenie:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Cesta k vašemu DVD zariadeniu, musíte mať práva na čítanie zo zariadenia"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Optické disky"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - Kompaktný disk audio"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Kompaktný video disk"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Digitálny video disk"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Tituly"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Kapitoly"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "Jazyk &zvuku"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Titulky"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Zdroj"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "Ď&alší"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Koreň"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "Naho&r"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Automaticky prehrať po otvorení VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Začať prehrávať VCD okamžite po otvorení VCD"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CDROM) zariadenie:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Cesta k vašemu CDROM/DVD zariadeniu, musíte mať práva na čítanie zo zariadenia"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Stopa"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Audio CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Stopa %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Rúra (pipe)"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Rúra - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Adresa pripojenia:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Ak máte niekoľko sieťových zariadení, tak môžete limitovať prístup"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Počúvať na porte:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Maximum pripojení:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Maximálna šírka pásma (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Dočasný doplňovací súbor:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Veľkosť súboru plnenia (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Formát:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Iba avi, mpeg a rm sú vhodné pre mplayer playback"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Zvukový kodek:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Bit rate zvuku (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Vzorkovacia frekvencia zvuku (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Video kodek:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Video bit rate (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Kvalita (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Frekvencia snímkov (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Veľkosť Gop:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Šírka (pixely):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Výška (pixely):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Povoliť prístup z:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'Jedna IP' alebo 'začiatočná IP-koncová IP' pre IP rozsah"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Hostiteľ/IP alebo IP rozsah"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Načítať"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Spustiť"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Vysielanie"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profily"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Ukončenie procesu ffserver zlyhalo."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Spustenie ffserveru zlyhalo.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Spustenie ffmpeg zlyhalo."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "Vlastné"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "OSS (Open Sound System)"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "ALSA (Advanced Linux Sound Architecture)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analógový real-time syntetizátor"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "ALSA (Advanced Linux Sound Architecture) v 0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "ALSA (Advanced Linux Sound Architecture) v 0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Použiť nastavenia back-endu"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Pozadie zoznamu skladieb"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Popredie zoznamu skladieb"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Pozadie konzole"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Aktívna položka zoznamu skladieb"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Pozadie konzole"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Pozadie videa"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Pozadie okna s pohľadom"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Pozadie informačného okna"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Popredie informačného okna"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Zoznam skladieb"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Informačné okno"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Súbor %1 neexistuje."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Súbor s titulkami %1 neexistuje."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Hlasitosť je %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Prehrať s"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "&Konzola"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Playlist"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Jazyky &zvuku"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Titulky"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kontrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Jas:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Tón:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Sýtosť:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "&Farby"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Nastaviť KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "U&praviť položku zoznamu skladieb"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Prehrávam"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Rekordér %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Prehrávač %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Neznáme"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "&Pripojiť sa"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+#, fuzzy
+msgid "Connecting"
+msgstr "&Pripojiť sa"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Ukončenie procesu prehrávača zlyhalo."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Vzor veľkosti"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Vzor cache"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Vzor pozície"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Vzor indexu"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Vzor odkazujúceho URL"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Odkazujúci vzor"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Začiatočný vzor"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Vzor jazyka DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Vzor tituliek DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Vzor titulov DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Vzor kapitol DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Vzor stôp VCD"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Vzor pre audio CD stopy"
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Ďalšie argumenty príkazového riadku:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Veľkosť cache:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Zostaviť nový index, ak to bude možné"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Povoliť vyhľadávanie v indexovaných súboroch (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Všeobecné voľby"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr ""
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Video zariadenie:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Zvukové zariadenie:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Meno:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Šírka:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Výška:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Neprehrávať okamžite"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Prehrávať iba po stlačení tlačidla Prehrať"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norma:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanál"
+
+#: kmplayertvsource.cpp:100
+#, fuzzy
+msgid "Frequency (MHz)"
+msgstr "Frekvencia"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Chystáte sa odstrániť toto zariadenie z menu Zdroj.\n"
+"Pokračovať?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Potvrdiť"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Ovládač:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l alebo bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Zariadenie:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Cesta k vášmu video zariadeniu, napr. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Prehľadať..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Všeobecné"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "tv zariadenie"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Zariadenie je už prítomné."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Žiadne zariadenie nebolo nájdené."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVScanner"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "port XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr ""
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr ""
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr ""
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr ""
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr ""
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR kľúčové kanály"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR kľúčová ponuka"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR kľúčová červená"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR kľúčová zelená"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR kľúčová žltá"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR kľúčová modrá"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR kľúč 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR kláves 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR kláves 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR kláves 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR kláves 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR kľúč 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR kľúč 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR kľúč 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR kľúč 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR kľúč 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr ""
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Spojenie odmietnuté"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port"
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Zoznam skladieb"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Hlasitosť:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "súbor na otvorenie"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr ""
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr ""
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr ""
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Nastavenie"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Vzhľad"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Výstup"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Nahrávanie"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Výstupné pluginy"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Postprocessing"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Okno"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Ponechať pomer veľkostí"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Keď zaškrtnuté, film si zachová svoj pomer\n"
+"veľkosti strán pri úpravách veľkosti okna"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Dokovať v trayi"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Upravovať veľkosť okna podľa videa"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Keď je zaškrtnuté, okno KMPlayeru sa prispôsobí veľkosti\n"
+"videa po spustení prehrávania"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Ukladať veľkosť okna pri ukončení programu"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Spúšťať s fixnou veľkosťou okna"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "V slučke"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Vytvorí slučku zo súčasného filmu"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Povoliť zahadzovanie snímkov"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "Povoliť zahadzovanie snímkov pre lepšiu synchronizáciu zvuku a obrazu"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Po štarte automaticky nastaviť hlasitosť"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Po štarte automaticky nastaviť farby"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Ovládací panel"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Zobraziť tlačidlo pre konfiguráciu"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Zobraziť tlačidlo playlistu"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Pridať tlačidlo playlistu medzi ovládacie tlačidlá"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Zobraziť tlačidlo nahrávania"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Pridať tlačidlo nahrávania záznamu medzi ovládacie tlačidlá"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Zobraziť tlačidlo vysielania"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Pridať tlačidlo vysielania medzi ovládacie tlačidlá"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Čas [s] pre skok Vpred/Vzad:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Farby"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Umiestnenie:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Titulky:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Povoliť podporu 'Kliknúť pre prehrávanie'"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Použiť prehrávač filmov:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Šírka sieťového pásma"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+#, fuzzy
+msgid "Preferred bitrate:"
+msgstr "Uprednostňovaný dátový tok:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Maximálny dátový tok:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Výstupný súbor:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Zača&ť nahrávať"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Súčasný zdroj: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Rekordér"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Automatický playback"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Nie"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Keď bude nahrávanie dokončené"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "P&o"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Čas (sekúnd):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Zastaviť nahrávanie"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Začať nahrávať"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Súčasný zdroj: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Formát"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Rovnaké ako zdroj"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Vlastné"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Argumenty Mencoderu:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Argumenty FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Nastaví video ovládač. Doporučené je XVideo, alebo, ak nie je podporováné, X11, "
+"ktoré je pomalšie."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Video ovládač:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Audio ovládač:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Povoliť použitie postprocessing filtrov"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Zakázať použitie postprocessingu pri sledovaní TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Rýchle"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Horizontálne odblokovanie"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Automatická kvalita"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Vertikálne odblokovanie"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Automatický jas/kontrast"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Povoliť východzie postprocessing filtre mplayeru"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Povoliť užívateľské postprocessing filtre (Viď Vlastné nastavenia -záložka)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Povoliť rýchle postprocessing filtre mplayeru"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "Filter je použitý, ak je dostatok CPU"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Vlastné nastavenie"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr ""
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Obnoviť nastavenie?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Chystáte se prepísať všetky nastavenia východzími.\n"
+"Prosím potvrďte.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr ""
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Na celú obrazovku"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "Filter je použitý, ak je dostatok CPU"
diff --git a/po/sr.po b/po/sr.po
new file mode 100644
index 0000000..b78a40e
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,1688 @@
+# translation of kmplayer.po to Serbian
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# Bojan Bozovic <bole89@infosky.net>, 2003.
+# Toplica Tanaskovic <toptan@kde.org.yu>, 2003, 2004.
+# Марко Росић <roske@kde.org.yu>, 2004.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2004.
+# Slobodan Simic <simicsl@verat.net>, 2005, 2006.
+# Slobodan Simic <slsimic@gmail.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-10-10 14:52+0200\n"
+"Last-Translator: Slobodan Simic <slsimic@gmail.com>\n"
+"Language-Team: Serbian <kde@kde.org.yu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Бојан Божовић, Слободан Симић"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "bole89@infosky.net,slsimic@gmail.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "П&усти"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Паузирај"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "Зау&стави"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Повећај јачину звука"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Смањи јачину звука"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% попуњен кеш"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: пуштање"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: заустави пуштање"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Нај скорији"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Сталне листе"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Нови &прозор"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Очисти &историју"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Отвори DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Отвори VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Отвори аудио CD"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Отвори цев..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Повежи се"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "К&онзола"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Листа пуш&тања"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Умањени режим"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "Ур&еди режим"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Ус&клади са листом"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Прикажи искачући мени"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Прикажи мени језика"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Задржи однос ширина/висина"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Пун екран"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Контрола &Arts-а"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Отвара нови прозор програма"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Отвара постојећи фајл"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Отвара скоро коришћени фајл"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Затвара стварни извор"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Излази из програма"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Укључује/искључује статусну траку"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Укључује/искључује траку менија"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Спреман."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "И&звор"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD навигатор"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Аудио CD"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "Дод&ај на листу"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Додај у нову &групу"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Копирај овде"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "В&идео"
+
+#: kmplayerapp.cpp:751
+#, fuzzy
+msgid "More..."
+msgstr "Још ..."
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "DVD навигација..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Спреман"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Отварам DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Отварам VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Отварам аудио CD..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Отварам цев..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Читање из цеви"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Унесите наредбу која ће избацивати аудио/видео ток\n"
+"на stdout. Ово ће бити убачено на плејеров stdin.\n"
+"\n"
+"Наредба:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Отварам VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Увод"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Отварам фајл..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Излаз"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Отварам нови прозор програма..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Сви фајлови"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Отвори фајл"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Сачувај фајл"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Грешка при отварању фајла %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Затварам фајл..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Излазим..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Прикажи траку менија са %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Помери овде"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Нова група"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&Обриши ставку"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "По&мери горе"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Помери &доле"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Аутоматски пусти након отварања DVD-а"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Пусти DVD одмах након отварања DVD-а"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD уређај:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Путања до вашег DVD уређаја, морате имати дозволу читања за овај уређај"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Оптички диск"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - Аудио компакт-диск"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Видео компакт-диск"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Дигитални видео диск"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Наслови"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Поглавља"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "Аудио &језик"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Титлови"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Извор"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Следећи"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Корени"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Горе"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Аутоматски пусти након отварања VCD-а"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Пусти VCD одмах након отварања VCD-а"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CDROM) уређај:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Путања до вашег CDROM/DVD уређаја, морате имати дозволу читања за овај уређај"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Стазе "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Аудио CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Стаза %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Цев"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Цев - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Адреса везивања:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Ако имате више мрежних уређаја, можете ограничити приступ"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Ослушкуј порт:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Максималан број веза:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Максимална ширина пропусног опсега (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Привремени фајл за похрану:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Величина фајла за похрану (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Формат:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "MPlayer може да пушта само avi, mpeg и rm"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Аудио кодек:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Аудио битни проток (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Учестаност узорковања звука (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Видео кодек:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Видео битни проток (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Квалитет (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Брзина кадрова (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Величина gop-а:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Ширина (пиксела):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Висина (пиксела):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Дозволи приступ са:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "„Једноструки IP“ или „почетни IP крајњи IP“ за IP опсеге"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Домаћин/IP или IP опсег"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Учитај"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Почни"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Емитовање"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Профили"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Нисам успео да прекинем ffserver процес."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Нисам успео да започнем ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Нисам успео да започнем ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Аутоматски"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open sound system"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Аналогни синтетизатор у реалном времену"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK комплет за везивање звука"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Користи подразумевано крајњег програма"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Позадина листе"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Боја исписа у листи"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Позадина конзоле"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Активна ставка у листи"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Боја исписа у конзоли"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Позадина видеа"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Позадина области гледања"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Позадина прозора обавештења"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Боја исписа прозора обавештења"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Листа пуштања"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Прозор обавештења"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Фајл %1 не постоји."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Фајл са титлом %1 не постоји."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Јачина је %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Пусти помоћу"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Кон&зола"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Листа пуштања"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Аудио &језик"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Титлови"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Контраст:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Осветљај:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Нијанса:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Засићеност:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Бо&је"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Подеси KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Уреди ставку л&исте"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Не ради"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Баферишем"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Пуштам"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Снимач %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Плејер %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Непознат"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "Неповезан"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Повезујем се"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Нисам успео да прекинем процес плејера."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Узорак величине"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Узорак кеша"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Узорак позиције"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Узорак индекса"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Узорак URL референце"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Узорак референце"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Узорак покретања"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Узорак језика DVD-а"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Узорак титлова DVD-а"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Узорак наслова DVD-а"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Узорак поглавља DVD-а"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Узорак нумере VCD-а"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Узорак нумере аудио CD-а"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "MPlayer наредба:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Додатни аргументи командне линије:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Величина кеша:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Изгради нови индекс када је могуће"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Дозвољава тражење у индексираним фајловима (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Опште опције"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Видео уређај:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Аудио уређај:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Име:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Ширина:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Висина:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Не пуштај одмах"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Почни репродукцију тек након клика на дугме за пуштање"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Норм:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Канал"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Учесталост (MHz)"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Спремате се да уклоните овај уређај из менија „Извор“.\n"
+"Да ли да наставим?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Потврди"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Драјвер:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "лажни, v4l или bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Уређај:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Путања до вашег уређаја, нпр. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Претражи..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Опште"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "tv уређај"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Телевизор"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Уређај је већ присутан."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Није пронађен уређај."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "ТВ скенер"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo порт"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Основа порта X Video додатка.\n"
+"Ако је остављено подразумевано (0), први доступан порт ће бити коришћен. "
+"Међутим ако имате вишеструке XVideo инстанце, можда бисте овде одредили порт "
+"који ће се користити.\n"
+"За више информација погледајте излаз „xvinfo“ наредбе."
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Комуникациони порт:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Комуникациони порт са VDR-ом. Подразумеван је 2001.\n"
+"Ако користите други порт, са „-p“ опцијом за „vdr“, онда га и овде морате "
+"поставити."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Размера"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Размера која се користи када се гледа VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Пре&кини везу"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR кључ горе"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR кључ доле"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR кључ назад"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR кључ у реду"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR кључ подешавање"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR кључ канали"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR кључ мени"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR кључ црвено"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR кључ зелено"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR кључ жуто"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR кључ плаво"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR кључ 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR кључ 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR кључ 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR кључ 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR кључ 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR кључ 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR кључ 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR кључ 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR кључ 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR кључ 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Домаћин није нађен"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Повезивање одбијено"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Приозвољна VDR наредба"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Можете проследити наредбе до VDR-а.\n"
+"Укуцајте „HELP“ да бисте видели листу доступних наредби.\n"
+"Одговор VDR-а можете видети у конзолном прозору.\n"
+"\n"
+"VDR наредба:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Порт "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Листа пуштања"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Јачина:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "фајл за отварање"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "неименован"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "ништа"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[атрибути]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Копирај у исечке"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "Прикажи &све"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Подешавања"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Изглед"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Излаз"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Снимање"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Излазни прикључци"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Накнадна обрада"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Прозор"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Задржи пропорцију"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Када је попуњено, филм ће задржати своју пропорцију\n"
+"када се промени величина прозора"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Убаци се у системску касету"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Када је означено, икона KMPlayer-а ће бити додата у системску касету.\n"
+"Када је кликнута сакриће KMPlayer-ов главни прозор и уклонити његово дугме на "
+"траци задатака."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Прилагоди се величини видеа"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Када је означено, KMPlayer ће се прилагодити\n"
+"величини филма када крене пуштање"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Упамти величину прозора при изласку"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Увек крени са одређеном величином"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Понављање"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Чини да се текући фим понавља"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Дозволи испуштање кадрова"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "Дозволи испуштање кадрова ради боље аудио/видео синхронизације"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Сам постави јачину на почетку"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Када је нови извор изабран, јачина звука ће бити постављена према контроли "
+"јачине"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Сам постави боје на почетку"
+
+#: pref.cpp:236
+#, fuzzy
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr "Када филм почне, боје ће бити постављене у складу са клизачима за боје"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Контролна табла"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Прикажи дугме подешавања"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Додај дугме које доноси искачући мени подешавања"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Прикажи дугме листе"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Додај дугме на листи које води до контролних дугмића"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Прикажи дугме за снимање"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Додај дугме за снимање контролној дугмади"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Прикажи дугме за емитовање"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Додај дугме за емитовање контролној дугмади"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Време тражења напред/назад:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Боје"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "АаБбВв"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Локација:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Локација пуштајуће ставке"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Титл:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "Локација фајла који садржи титлове за горе наведени URL"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Укључи подршку за „Кликни да би пустио“"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Подршка за веб стране које имају почетну слику"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Користи плејер филмова:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Ширина опсега мреже"
+
+#: pref.cpp:373
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Некада је могуће бирати између различитих протока за одређени битни проток.\n"
+"Ова опција одређује колико од мрежног протока желите да потрошите на видео"
+
+#: pref.cpp:375
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Некада је могуће бирати између различитих протока за одређени битни проток.\n"
+"Ова опција одређује колико од мрежног протока можете да потрошите на видео"
+
+#: pref.cpp:376
+#, fuzzy
+msgid "Preferred bitrate:"
+msgstr "Жељени проток:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Највећи проток:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Излазни фајл:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Почни &снимање"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Тренутни извор: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Снимач"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Аутоматско пуштање"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Не"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Када се снимање заврши"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "П&осле"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Време (секунди):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Заустави снимање"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Почни снимање"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Тренутни извор: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Формат"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Исто као извор"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Посебно"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mencoder-ови аргументи:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFFMpeg аргументи:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Поставља видео драјвер. Препоручен је XVideo, или, ако није подржан, X11, који "
+"је спорији."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Видео драјвер:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Аудио драјвер:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Укључи коришћење филтера за накнадну обраду"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Искључи коришћење накнадне обраде када се гледа TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Брзо"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Водоравно одблокиравање"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Аутоматски квалитет"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Филтрирање хроматичности"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Усправно одблокиравање"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Филтер за смањивање броја прстенастих објеката"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Аутоматска светлина/контраст"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Растегни осветљење на пун опсег"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Темпорални смањивач шума"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Линеарно стапајући растављач преплитања"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Линеарно интерполациони растављач преплитања"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Кубно интерполациони растављач преплитања"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Медијански растављач преплитања"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "FFmpeg растављач преплитања"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Укључи MPlayer-ове подразумеване филтере за накнадну обраду"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Укључи посебне филтере за накнадну обраду (видети језичак „Посебно "
+"препостављено“)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Омогући MPlayer-ове брзе филтере за накнадну обраду"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "Филтер се користи ако је на располагању довољно процесорског времена"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Растеже осветљење на пун опсег (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Посебно препостављено"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Растављање преплитања"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Да ли да ресетујем поставке?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Спремате се да сва своја подешавања пребришете подразумеваним.\n"
+"Потврдите ово.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Пун екран"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Размера:"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "Филтер се користи ако је на располагању довољно процесорског времена"
diff --git a/po/sr@Latn.po b/po/sr@Latn.po
new file mode 100644
index 0000000..b26fa7f
--- /dev/null
+++ b/po/sr@Latn.po
@@ -0,0 +1,1689 @@
+# translation of kmplayer.po to Serbian
+# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# Bojan Bozovic <bole89@infosky.net>, 2003.
+# Toplica Tanaskovic <toptan@kde.org.yu>, 2003, 2004.
+# Marko Rosić <roske@kde.org.yu>, 2004.
+# Chusslove Illich <caslav.ilic@gmx.net>, 2004.
+# Slobodan Simic <simicsl@verat.net>, 2005, 2006.
+# Slobodan Simic <slsimic@gmail.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-10-10 14:52+0200\n"
+"Last-Translator: Slobodan Simic <slsimic@gmail.com>\n"
+"Language-Team: Serbian <kde@kde.org.yu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Bojan Božović, Slobodan Simić"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "bole89@infosky.net,slsimic@gmail.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "P&usti"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Pauziraj"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "Zau&stavi"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Povećaj jačinu zvuka"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Smanji jačinu zvuka"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% popunjen keš"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: puštanje"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: zaustavi puštanje"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Naj skoriji"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Stalne liste"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Novi &prozor"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Očisti &istoriju"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Otvori DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Otvori VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Otvori audio CD"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Otvori cev..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Poveži se"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "K&onzola"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Lista puš&tanja"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Umanjeni režim"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "Ur&edi režim"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Us&kladi sa listom"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Prikaži iskačući meni"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Prikaži meni jezika"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Zadrži odnos širina/visina"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Pun ekran"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Kontrola &Arts-a"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Otvara novi prozor programa"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Otvara postojeći fajl"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Otvara skoro korišćeni fajl"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Zatvara stvarni izvor"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Izlazi iz programa"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Uključuje/isključuje statusnu traku"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Uključuje/isključuje traku menija"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Spreman."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "I&zvor"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD navigator"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Audio CD"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "Dod&aj na listu"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Dodaj u novu &grupu"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Kopiraj ovde"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+#, fuzzy
+msgid "More..."
+msgstr "Još ..."
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "DVD navigacija..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Spreman"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Otvaram DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Otvaram VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Otvaram audio CD..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Otvaram cev..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Čitanje iz cevi"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Unesite naredbu koja će izbacivati audio/video tok\n"
+"na stdout. Ovo će biti ubačeno na plejerov stdin.\n"
+"\n"
+"Naredba:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Otvaram VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Uvod"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Otvaram fajl..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Izlaz"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Otvaram novi prozor programa..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Svi fajlovi"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Otvori fajl"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Sačuvaj fajl"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Greška pri otvaranju fajla %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Zatvaram fajl..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Izlazim..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Prikaži traku menija sa %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Pomeri ovde"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Nova grupa"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&Obriši stavku"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "Po&meri gore"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Pomeri &dole"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Automatski pusti nakon otvaranja DVD-a"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Pusti DVD odmah nakon otvaranja DVD-a"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD uređaj:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Putanja do vašeg DVD uređaja, morate imati dozvolu čitanja za ovaj uređaj"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Optički disk"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - Audio kompakt-disk"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Video kompakt-disk"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - Digitalni video disk"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Naslovi"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Poglavlja"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "Audio &jezik"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Titlovi"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Izvor"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Sledeći"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Koreni"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Gore"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Automatski pusti nakon otvaranja VCD-a"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Pusti VCD odmah nakon otvaranja VCD-a"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CDROM) uređaj:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Putanja do vašeg CDROM/DVD uređaja, morate imati dozvolu čitanja za ovaj uređaj"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Staze "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Audio CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Staza %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Cev"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Cev - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Adresa vezivanja:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Ako imate više mrežnih uređaja, možete ograničiti pristup"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Osluškuj port:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Maksimalan broj veza:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Maksimalna širina propusnog opsega (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Privremeni fajl za pohranu:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Veličina fajla za pohranu (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Format:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "MPlayer može da pušta samo avi, mpeg i rm"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Audio kodek:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Audio bitni protok (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Učestanost uzorkovanja zvuka (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Video kodek:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Video bitni protok (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Kvalitet (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Brzina kadrova (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Veličina gop-a:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Širina (piksela):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Visina (piksela):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Dozvoli pristup sa:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "„Jednostruki IP“ ili „početni IP krajnji IP“ za IP opsege"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Domaćin/IP ili IP opseg"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Učitaj"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Počni"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Emitovanje"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profili"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Nisam uspeo da prekinem ffserver proces."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Nisam uspeo da započnem ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Nisam uspeo da započnem ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Automatski"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open sound system"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Simple DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Advanced Linux Sound Architecture"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analogni sintetizator u realnom vremenu"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK komplet za vezivanje zvuka"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Advanced Linux Sound Architecture v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Advanced Linux Sound Architecture v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Koristi podrazumevano krajnjeg programa"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Pozadina liste"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Boja ispisa u listi"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Pozadina konzole"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Aktivna stavka u listi"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Boja ispisa u konzoli"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Pozadina videa"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Pozadina oblasti gledanja"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Pozadina prozora obaveštenja"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Boja ispisa prozora obaveštenja"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Lista puštanja"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Prozor obaveštenja"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Fajl %1 ne postoji."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Fajl sa titlom %1 ne postoji."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Jačina je %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Pusti pomoću"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Kon&zola"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "&Lista puštanja"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Audio &jezik"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Titlovi"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kontrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Osvetljaj:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Nijansa:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Zasićenost:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Bo&je"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Podesi KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Uredi stavku l&iste"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Ne radi"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Baferišem"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Puštam"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Snimač %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Plejer %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Nepoznat"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "Nepovezan"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Povezujem se"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Nisam uspeo da prekinem proces plejera."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Uzorak veličine"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Uzorak keša"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Uzorak pozicije"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Uzorak indeksa"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Uzorak URL reference"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Uzorak reference"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Uzorak pokretanja"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Uzorak jezika DVD-a"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Uzorak titlova DVD-a"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Uzorak naslova DVD-a"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Uzorak poglavlja DVD-a"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Uzorak numere VCD-a"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Uzorak numere audio CD-a"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "MPlayer naredba:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Dodatni argumenti komandne linije:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Veličina keša:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Izgradi novi indeks kada je moguće"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Dozvoljava traženje u indeksiranim fajlovima (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Opšte opcije"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Video uređaj:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Audio uređaj:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Ime:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Širina:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Visina:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Ne puštaj odmah"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Počni reprodukciju tek nakon klika na dugme za puštanje"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norm:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Učestalost (MHz)"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Spremate se da uklonite ovaj uređaj iz menija „Izvor“.\n"
+"Da li da nastavim?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Potvrdi"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Drajver:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "lažni, v4l ili bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Uređaj:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Putanja do vašeg uređaja, npr. /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Pretraži..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Opšte"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "tv uređaj"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Televizor"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Uređaj je već prisutan."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Nije pronađen uređaj."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TV skener"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo port"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Osnova porta X Video dodatka.\n"
+"Ako je ostavljeno podrazumevano (0), prvi dostupan port će biti korišćen. "
+"Međutim ako imate višestruke XVideo instance, možda biste ovde odredili port "
+"koji će se koristiti.\n"
+"Za više informacija pogledajte izlaz „xvinfo“ naredbe."
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Komunikacioni port:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Komunikacioni port sa VDR-om. Podrazumevan je 2001.\n"
+"Ako koristite drugi port, sa „-p“ opcijom za „vdr“, onda ga i ovde morate "
+"postaviti."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Razmera"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Razmera koja se koristi kada se gleda VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Pre&kini vezu"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR ključ gore"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR ključ dole"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR ključ nazad"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR ključ u redu"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR ključ podešavanje"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR ključ kanali"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR ključ meni"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR ključ crveno"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR ključ zeleno"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR ključ žuto"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR ključ plavo"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR ključ 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR ključ 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR ključ 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR ključ 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR ključ 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR ključ 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR ključ 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR ključ 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR ključ 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR ključ 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Domaćin nije nađen"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Povezivanje odbijeno"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Priozvoljna VDR naredba"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Možete proslediti naredbe do VDR-a.\n"
+"Ukucajte „HELP“ da biste videli listu dostupnih naredbi.\n"
+"Odgovor VDR-a možete videti u konzolnom prozoru.\n"
+"\n"
+"VDR naredba:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Lista puštanja"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Jačina:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "fajl za otvaranje"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "neimenovan"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "ništa"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[atributi]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Kopiraj u isečke"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "Prikaži &sve"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Podešavanja"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Izgled"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Izlaz"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Snimanje"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Izlazni priključci"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Naknadna obrada"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Prozor"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Zadrži proporciju"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Kada je popunjeno, film će zadržati svoju proporciju\n"
+"kada se promeni veličina prozora"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Ubaci se u sistemsku kasetu"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"Kada je označeno, ikona KMPlayer-a će biti dodata u sistemsku kasetu.\n"
+"Kada je kliknuta sakriće KMPlayer-ov glavni prozor i ukloniti njegovo dugme na "
+"traci zadataka."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Prilagodi se veličini videa"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Kada je označeno, KMPlayer će se prilagoditi\n"
+"veličini filma kada krene puštanje"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Upamti veličinu prozora pri izlasku"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Uvek kreni sa određenom veličinom"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Ponavljanje"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Čini da se tekući fim ponavlja"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Dozvoli ispuštanje kadrova"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "Dozvoli ispuštanje kadrova radi bolje audio/video sinhronizacije"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Sam postavi jačinu na početku"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"Kada je novi izvor izabran, jačina zvuka će biti postavljena prema kontroli "
+"jačine"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Sam postavi boje na početku"
+
+#: pref.cpp:236
+#, fuzzy
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"Kada film počne, boje će biti postavljene u skladu sa klizačima za boje"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Kontrolna tabla"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Prikaži dugme podešavanja"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Dodaj dugme koje donosi iskačući meni podešavanja"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Prikaži dugme liste"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Dodaj dugme na listi koje vodi do kontrolnih dugmića"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Prikaži dugme za snimanje"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Dodaj dugme za snimanje kontrolnoj dugmadi"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Prikaži dugme za emitovanje"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Dodaj dugme za emitovanje kontrolnoj dugmadi"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Vreme traženja napred/nazad:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Boje"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbVv"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Lokacija:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Lokacija puštajuće stavke"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Titl:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "Lokacija fajla koji sadrži titlove za gore navedeni URL"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Uključi podršku za „Klikni da bi pustio“"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Podrška za veb strane koje imaju početnu sliku"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Koristi plejer filmova:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Širina opsega mreže"
+
+#: pref.cpp:373
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Nekada je moguće birati između različitih protoka za određeni bitni protok.\n"
+"Ova opcija određuje koliko od mrežnog protoka želite da potrošite na video"
+
+#: pref.cpp:375
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Nekada je moguće birati između različitih protoka za određeni bitni protok.\n"
+"Ova opcija određuje koliko od mrežnog protoka možete da potrošite na video"
+
+#: pref.cpp:376
+#, fuzzy
+msgid "Preferred bitrate:"
+msgstr "Željeni protok:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Najveći protok:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Izlazni fajl:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Počni &snimanje"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Trenutni izvor: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Snimač"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Automatsko puštanje"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Ne"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&Kada se snimanje završi"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "P&osle"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Vreme (sekundi):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Zaustavi snimanje"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Počni snimanje"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Trenutni izvor: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Format"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Isto kao izvor"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Posebno"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mencoder-ovi argumenti:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFFMpeg argumenti:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Postavlja video drajver. Preporučen je XVideo, ili, ako nije podržan, X11, koji "
+"je sporiji."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Video drajver:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Audio drajver:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Uključi korišćenje filtera za naknadnu obradu"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Isključi korišćenje naknadne obrade kada se gleda TV/DVD"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Brzo"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Vodoravno odblokiravanje"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Automatski kvalitet"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Filtriranje hromatičnosti"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Uspravno odblokiravanje"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Filter za smanjivanje broja prstenastih objekata"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Automatska svetlina/kontrast"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Rastegni osvetljenje na pun opseg"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Temporalni smanjivač šuma"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Linearno stapajući rastavljač preplitanja"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Linearno interpolacioni rastavljač preplitanja"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Kubno interpolacioni rastavljač preplitanja"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Medijanski rastavljač preplitanja"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "FFmpeg rastavljač preplitanja"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Uključi MPlayer-ove podrazumevane filtere za naknadnu obradu"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Uključi posebne filtere za naknadnu obradu (videti jezičak „Posebno "
+"prepostavljeno“)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Omogući MPlayer-ove brze filtere za naknadnu obradu"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "Filter se koristi ako je na raspolaganju dovoljno procesorskog vremena"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Rasteže osvetljenje na pun opseg (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Posebno prepostavljeno"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Rastavljanje preplitanja"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Da li da resetujem postavke?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Spremate se da sva svoja podešavanja prebrišete podrazumevanim.\n"
+"Potvrdite ovo.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Pun ekran"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Razmera:"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "Filter se koristi ako je na raspolaganju dovoljno procesorskog vremena"
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..8b25d94
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,1673 @@
+# translation of kmplayer.po to Swedish
+# Översättning kmplayer.po till Svenska
+#
+# Mattias Newzella <newzella@linux.nu>, 2003, 2004.
+# Stefan Asserhäll <stefan.asserhall@comhem.se>, 2004, 2005, 2006, 2007.
+# Stefan Asserhall <stefan.asserhall@comhem.se>, 2005.
+# Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-06-12 19:01+0200\n"
+"Last-Translator: Stefan Asserhäll <stefan.asserhall@comhem.se>\n"
+"Language-Team: Swedish <sv@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Stefan Asserhäll"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "stefan.asserhall@comhem.se"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "S&pela"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "Pa&us"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Stoppa"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Öka volym"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Minska volym"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% cache full"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "Kmplayer: Spelar upp"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "Kmplayer: Stoppar uppspelning"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "Webb"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Senaste"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Bevarade spellistor"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Nytt &fönster"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Rensa &historik"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "Ö&ppna dvd"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "Ö&ppna vcd"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "Ö&ppna ljud-cd"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "Öppna &kanal..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Anslut"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "&Terminal"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Spel&lista"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Minimalt läge"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50 %"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100 %"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150 %"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "&Redigeringsläge"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Synkronisera &med spellista"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Visa sammanhangsberoende meny"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Visa språkmeny"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&Behåll proportion"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Fullskärm"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Styrning av &aRrts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Öppnar ett nytt programfönster"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Öppnar en befintlig fil"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Öppnar en nyligen använd fil"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Stänger aktuell källa"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Avslutar programmet"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Visar eller döljer statusrad"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Visar eller döljer menyrad"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Klar."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "&Källa"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&Dvd"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&Dvd-navigering"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&cd"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&Tv"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Ljud-cd"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Lägg till i lista"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Lägg till i ny &grupp"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Kopiera hit"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Mer..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "Dvd-navigering..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Klar"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Öppnar dvd..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Öppnar vcd..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Öppnar ljud-cd..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Öppnar kanal..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Läser från kanal"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Skriv in ett kommando som matar ut en ljud- eller videoström till\n"
+"standardutmatningen. Den skickas vidare till spelarens standardinmatning.\n"
+"\n"
+"Kommando:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Öppnar VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Introduktion"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Öppnar fil..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Avsluta"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Öppnar ett nytt programfönster..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Alla filer"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Öppna fil"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Spara fil"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Fel när filen %1 skulle öppnas.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Stänger fil..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Avslutar..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Visa menyrad med %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Flytta hit"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Ny grupp"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "&Ta bort objekt"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Flytta upp"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Flytta &ner"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Spela automatiskt efter dvd:n öppnats"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Spela automatiskt efter dvd:n öppnats"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Dvd-enhet:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "Sökväg till dvd-enheten. Du måste ha läsbehörighet för enheten."
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Optiska skivor"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "Dvd"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "Cdrom - Ljudkompaktskiva"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - Videokompaktskiva"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "Dvd - Digital videoskiva"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Titlar"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Kapitel"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&Språk för ljud"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "Te&xtning"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Källa"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "Dvd-navigering"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Nästa"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Rot"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Upp"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Spela automatiskt efter vcd:n öppnats"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Spela automatiskt efter vcd:n öppnats"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Vcd-enhet (cdrom):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Sökväg till cdrom- eller dvd-enheten. Du måste ha läsbehörighet för enheten."
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "Vcd"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Spår "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Ljud-cd"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Spår %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Rörledning"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Rörledning - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Bindningsadress:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Om du har flera nätverksenheter, kan du begränsa åtkomsten"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Port att lyssna på:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Maximalt antal anslutningar:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Maximal bandbredd (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Tillfällig matningsfil:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Matningsfilstorlek (Kibyte):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Format:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Bara AVI, MPEG och RM fungerar för uppspelning med Mplayer"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Ljudavkodare:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Ljudbithastighet (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Ljudsamplingstakt (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Videoavkodare:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Videobithastighet (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Kvalitet (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Bildtakt (Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "GOP-storlek:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Bredd (bildpunkter):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Höjd (bildpunkter):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Tillåt åtkomst från:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+"\"Ensam adress\" eller \"startadress slutadress\" för IP-adressintervall"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Värddator/IP-adress eller IP-adressintervall"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Ladda"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Starta"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Utsändning"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profiler"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Misslyckades med att avsluta ffserver-process."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Misslyckades med att starta ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Misslyckades med att starta ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FF-server"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Automatisk"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Open Sound System"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Enkelt direktmedialager"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Avancerad ljudarkitektur för Linux"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Analog realtidssynthesizer"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK Audio Connection Kit"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Sound Daemon"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Avancerad ljudarkitektur för Linux version 0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Avancerad ljudarkitektur för Linux version 0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Använd gränssnittets förvalda värden"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11 delat minne"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "X-vidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "Xvideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Spellistans bakgrund"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Spellistans förgrund"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Terminalens bakgrund"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Spellistans aktiva objekt"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Terminalens förgrund"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Videons bakgrund"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Visningsområdets bakgrund"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Informationsfönstrets bakgrund"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Informationsfönstrets förgrund"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Spellista"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Informationsfönster"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Filen %1 finns inte."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Textningsfilen %1 finns inte."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Volymen är %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Spela med"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "&Terminal"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Spel&lista"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "&Språk för ljud"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "Te&xtning"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kontrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Ljusstyrka:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Färgton:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Färgmättnad:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "&Färger"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "A&npassa Kmplayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Redigera &objekt i spellistan"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Kör inte"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Buffrar"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Spelar"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Inspelning %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Spelare %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Okänd"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "Webbadress"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Nerkopplad"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "Webbadress - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Ansluter"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Misslyckades med att avsluta player-process."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&Mplayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Storleksmönster"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Cachemönster"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Positionsmönster"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Indexmönster"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Referenswebbadressmönster"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Referensmönster"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Startmönster"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Dvd-språkmönster"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Dvd-textningsmönster"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Dvd-titelmönster"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Dvd-kapitelmönster"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Vcd-spårmönster"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Ljud-cd spårmönster"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "Mplayer-kommando:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Ytterligare kommandoradsväljare:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Cachestorlek:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "Kibyte"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Bygg nytt index när det är möjligt"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Tillåter sökning i indexerade filer (AVI)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Allmänna inställningar"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "Mplayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&Gstreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr "&Ice Ape"
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Videoenhet:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Ljudenhet:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Namn:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Bredd:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Höjd:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Spela inte omedelbart"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Starta bara uppspelning när knappen Spela klickas"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norm:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Frekvens (MHz)"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Du är på väg att ta bort den här enheten från källmenyn.\n"
+"Fortsätta?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Bekräfta"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Drivrutin:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "platshållare, v4l eller bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Enhet:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Sökväg till videoenhet, t ex /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Söker..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Allmänt"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "Tv-enhet"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Television"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "Tv"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "Tv: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Enheten finns redan."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Hittade ingen enhet."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "Tv-bildläsare"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Xvideo-port"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Basport för Xvideo-utökningen.\n"
+"Om standardvärdet lämnas (0), används den första tillgängliga porten. Om du "
+"dock har flera användare av Xvideo, kanske du måste tillhandahålla porten som "
+"ska användas här.\n"
+"Se utmatningen från 'xvinfo' för mer information."
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Kommunikationsport:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Kommunikationsport för VDR. Standard är port 2001.\n"
+"Om du använder en annan port med väljaren '-p' till 'vdr', måste ange den här "
+"också."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Skala"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Proportioner att använda vid visning av VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "&Koppla ner"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR-knapp uppåt"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR-knapp neråt"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR-knapp bakåt"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR-knapp ok"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR-knappinställning"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR-kanalknappar"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR-knapp meny"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR-knapp röd"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR-knapp grön"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR-knapp gul"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR-knapp blå"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR-knapp 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR-knapp 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR-knapp 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR-knapp 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR-knapp 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR-knapp 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR-knapp 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR-knapp 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR-knapp 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR-knapp 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Värddator hittades inte"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Anslutning vägrades"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Eget VDR-kommando"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"Du kan skicka kommandon till din VDR.\n"
+"Skriv in 'HELP' för att se en lista med tillgängliga kommandon.\n"
+"Du kan se svaret från din VDR i terminalfönstret.\n"
+"\n"
+"VDR-kommando:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Spellista"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Volym:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "Kmplayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "fil att öppna"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "namnlös"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "Ingen"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[egenskaper]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Kopiera till klippbordet"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "&Visa alla"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Inställningar"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Utseende"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Utmatning"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Inspelning"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "Mencoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Utmatningsinsticksmoduler"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Efterbehandling"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Fönster"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Behåll proportion"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"Om markerad behåller filmen sin proportion när\n"
+"fönstret ändrar storlek."
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Docka i systembrickan"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"När markerad, läggs en ikon till i systembrickan för Kmplayer.\n"
+"När den klickas, döljs Kmplayers fönster, och Kmplayers knapp i "
+"aktivitetsfältet tas bort."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Automatisk storleksändring till videostorlekar"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Om markerad ändrar Kmplayer storlek till filmstorlekar\n"
+"när videon startar"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Kom ihåg fönsterstorlek vid avslutning"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Starta alltid med fast storlek"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Upprepa"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Gör att aktuell film upprepas"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Tillåt att bilder hoppas över"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+"Tillåt att bilder hoppas över för att få bättre synkronisering mellan ljud och "
+"bild"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Ställ in volymen automatiskt vid start"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr "När en ny källa väljes, ställs volymen in enligt volymkontrollen"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Ställ in färger automatiskt vid start"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr "När en film startar, ställs färgerna in enligt färgkontrollerna"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Kontrollpanel"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Visa inställningsknapp"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Lägg till en knapp som visar en inställningsmeny"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Visa spellisteknapp"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Lägg till en spellisteknapp till styrknapparna"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Visa inspelningsknapp"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Lägg till en inspelningsknapp till styrknapparna"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Visa utsändningsknapp"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Lägg till en utsändningsknapp till styrknapparna"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "Söktid framåt/bakåt:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Färger"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Plats:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Plats för spelbart objekt"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Textning:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "Plats för valfri fil som innehåller textning av webbadressen ovan"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Aktivera \"klicka för att spela\"-stöd"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Stöd för webbsidor som har en startbild"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Använd filmspelare:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Nätverksbandbredd"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Ibland är det möjligt att välja mellan olika strömmar, given en viss "
+"bithastighet.\n"
+"Alternativet ställer in hur mycket bandbredd du vill använda för video."
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Ibland är det möjligt att välja mellan olika strömmar, given en viss "
+"bithastighet.\n"
+"Alternativet ställer in maximal bandbredd du har tillgänglig för video."
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "Önskad bithastighet:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "Maximal bithastighet:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Utmatningsfil:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Sta&rta inspelning"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Aktuell källa: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Inspelning"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Automatisk uppspelning"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Nej"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&När inspelningen är klar"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "E&fter"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Tid (sekunder):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Stoppa inspelning"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Starta inspelning"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Aktuell källa: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Format"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Samma som källa"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Egen"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mencoder-väljare:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&Mencoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "Mplayer ström&dump"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMpeg-väljare:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Ställer in videodrivrutin. Xvideo rekommenderas, eller det långsammare X11 om "
+"den inte stöds."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Videodrivrutin:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Ljuddrivrutin:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "Aktivera användning av efterbehandlingsfilter"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "Inaktivera användning av efterbehandling när tv eller dvd visas"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Snabb"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Ta bort horisontell blockeffekt"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Autokvalitet"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Färgfiltrering"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Ta bort vertikal blockeffekt"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "Filter för att ta bort ringningar"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Automatisk ljusstyrka/kontrast"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Utöka ljushet till hela området"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Tidbaserad brusreducering"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Ta bort inflätning med linjär blandning"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Ta bort inflätning med linjär interpolering"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Ta bort inflätning med kubisk interpolering"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Ta bort inflätning med medianfilter"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "Ta bort inflätning med FFMPEG"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Aktivera Mplayers vanliga efterbehandlingsfilter"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr "Aktivera egna efterbehandlingsfilter (se fliken Egen förinställning)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Aktivera Mplayers snabba efterbehandlingsfilter"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "Filter används om det finns tillräcklig processorkraft"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Utökar ljushet till hela området (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Egen förinställning"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Ta bort inflätning"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Återställ inställningar?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Du är på väg att skriva över alla inställningar med standardvärden.\n"
+"Bekräfta att du vill göra detta.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Fullskärm"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Skala:"
diff --git a/po/ta.po b/po/ta.po
new file mode 100644
index 0000000..46eb086
--- /dev/null
+++ b/po/ta.po
@@ -0,0 +1,1754 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2004-09-22 04:08-0800\n"
+"Last-Translator: Tamil PC <tamilpc@ambalam.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "உங்கள் பெயர்கள்"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "உங்கள் மின் அஞ்சல் முகவரிகள்"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "வாசி"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "தற்காலிக நிறுத்தம்"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "நிறுத்து"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr ""
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr ""
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% தற்காலிக சேமிப்பை நிரப்பு"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "கேஎம் ப்ளேயர்: வாசித்துக்கொண்டிருக்கிறது"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: வாசிப்பதை நிறுத்து"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "வலை"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr ""
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr ""
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "புதிய & சாளரம்"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr ""
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&டிவிடி திற"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&விசிடியை திற"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+#, fuzzy
+msgid "&Open Audio CD"
+msgstr "&விசிடியை திற"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&குழாயை திற..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr ""
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr ""
+
+#: kmplayerapp.cpp:570
+#, fuzzy
+msgid "Pla&y List"
+msgstr "&இதனுடன் வாசி"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr ""
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr ""
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr ""
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr ""
+
+#: kmplayerapp.cpp:579
+#, fuzzy
+msgid "Show Language Menu"
+msgstr "ஒலி &மொழி"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "&அகலம்/உயரம் விகிதத்தை வைத்துக் கொள்ளவும்"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&முழுத் திரை"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&சித்திரங்களின் கட்டுப்பாடு"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "புதிய பயன்பாட்டு சாளரத்தைத் திறக்கும்"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "நடப்பில் உள்ள கோப்பினை திறக்கும்"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "சமீபத்தில் உபயோகித்த கோப்பினை திறக்கும் "
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "உண்மையான மூலத்தை மூடும்"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "பயன்பாட்டிலிருந்து வெளியேறும்"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "நிலைப்பட்டியின் செயல்பாடு/நீக்கம் "
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "நிகழ்ச்சி நிரல் பட்டியின் செயல்பாடு/நீக்கம் "
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "தயார்."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "மூலம்"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&டிவிடி"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&டிவிடி வழிசெலுத்தி"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "விசிடி"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&தொலைகாட்சி"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr ""
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr ""
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr ""
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr ""
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+#, fuzzy
+msgid "V&ideo"
+msgstr "Xஒளி தோற்றம்"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr ""
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "டிவிடி ஊடாடுதல்..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "தயார்"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "டிவிடி திறக்கிறது..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "விசிடி திறக்கிறது..."
+
+#: kmplayerapp.cpp:817
+#, fuzzy
+msgid "Opening Audio CD..."
+msgstr "விசிடி திறக்கிறது..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "குழாய் திறக்கிறது"
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "குழாயிலிருந்து படிக்கவும்"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+#, fuzzy
+msgid "Opening VDR..."
+msgstr "டிவிடி திறக்கிறது..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr ""
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "கோப்பு திறக்கிறது..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr ""
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "புதிய செயலாக்க சாளரம் திறக்கிறது..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr ""
+
+#: kmplayerapp.cpp:1314
+#, fuzzy
+msgid "Open File"
+msgstr "கோப்பு திறக்கிறது..."
+
+#: kmplayerapp.cpp:1333
+#, fuzzy
+msgid "Save File"
+msgstr "கோப்பு திறக்கிறது..."
+
+#: kmplayerapp.cpp:1337
+#, fuzzy
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr "கோப்பு திறக்கிறது..."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "கோப்பு மூடுகிறது..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "வெளியேறுகிறது..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "நிகழ்ச்சி நிரல் பட்டியை %1உடன் காண்பிக்கவும்"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr ""
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr ""
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr ""
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr ""
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr ""
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "டிவிடியை திறந்த பிறகு தானே வாசி"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "டிவிடியை திறந்த உடனேயே டிவிடியை வாசிக்க துவங்கு"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "டிவிடி சாதனம்:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"உங்கள் டிவிடி சாதனத்திற்கான பாதை, டிவிடி சாதனத்தை படிப்பதற்கான அனுமதி இருக்க "
+"வேண்டும்"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr ""
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "டிவிடி"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&தலைப்புகள்"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&அத்தியாயங்கள்"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "ஒலி &மொழி"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "இணை தலைப்புகள்"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "மூலம்"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "டிவிடி"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr ""
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&ஆதாரம்"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&மேல்"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "விசிடியை திறந்தவுடன் தானாக வாசிக்கவும்"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "விசிடியை திறந்தவுடனேயே அதனை வாசிக்க ஆரம்பிகவும்"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "விசிடி(சிடிராம்) சாதனம்:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"உங்கள் சிடிராம்/டிவிடி கான பாதை, இந்த சாதனத்தை படிப்பதற்கான உரிமை இருக்க "
+"வேண்டும்"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "விசிடி"
+
+#: kmplayerapp.cpp:2101
+#, fuzzy
+msgid "Track "
+msgstr "&தடம்"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+#, fuzzy
+msgid "Audio CD"
+msgstr "ஒலி கோடக்:"
+
+#: kmplayerapp.cpp:2203
+#, fuzzy, c-format
+msgid "Track %1"
+msgstr "&தடம்"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "குழாய்"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "குழாய் - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "முகவரிகளை சேர்:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr ""
+"உங்களிடம் பல வலை பின்னல் சாதனங்கள் இருந்தால், அதனுடன் உங்கள் தொடர்பை "
+"கட்டுப்படுத்திக்கொள்ளலாம்"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "துறையை கேள்"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "அளவுக்கு அதிகமான தொடர்புகள்:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "அளவிற்கு அதிகமான அலைவரிசை(கேபிட்):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "தற்காலிகமான உள்ளீட்டுக் கோப்பு:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "உள்ளீட்டுக் கோப்பின் அளவு(கேபி):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "வடிவமை:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "ஏவிஐ,எம்பிஈஜி மற்றும் ஆரெம் மட்டுமே எம்ப்ளேயர் வாசிக்க பயன்படும்"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "ஒலி கோடக்:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "ஒலியின் பிட் வேகம்(கே பிட்):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "ஒலியின் மாதிரி வேகம்(HZ):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "ஒளி கோடக்:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "ஒளி பிட் வேகம்(கே பிட்):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "தரம்(1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "சட்டத்தின் வேகம்(HZ):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "காப் அளவு:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "அகலம்(படத்துணுக்குகள்):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "உயரம்(படத்துணுக்குகள்):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "அதனிலிருந்து தொடர்பு கொள்ள அனுமதிக்கவும்:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "'ஒற்றை IP' அல்லது 'துவக்க-IP முடிவு-IP' IP வரம்பிற்கு "
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "புரவலன்/ IP அல்லது IP வரம்பு"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "ஏற்றுமதி"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "ஆரம்பி"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "ஒளிபரப்புதல்"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "விவரக்குறிப்பு"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "எப்எப் சேவையகத்தின் செயலாக்கம் தோல்வியுற்றது."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"எப்எப் சேவையகத்தின் தொடக்கம் தோல்வியுற்றது.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "எப்எப் பெக் தொடக்கம் தோல்வியுற்றது."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFசேவையகம்"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+#, fuzzy
+msgid "Auto"
+msgstr "ஆயத்தம்"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "ஒலி அமைப்பை திற"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "எளிதான நேரடி ஊடக அடுக்கு"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "மேம்பட்ட லினக்ஸ் ஒலி வடிவமைப்பு"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "அனலாக் உடனடி சிந்தை சேர்"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr ""
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr ""
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "தெளிவுடைய ஒலி டீமன்"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "விசேஷ லினக்ஸ் ஒலி வடிவமைப்பு"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "விசேஷ லினக்ஸ் ஒலி வடிவமைப்பு"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr ""
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "Xவிடிஸ்"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "Xஒளி தோற்றம்"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr ""
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr ""
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr ""
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:106
+#, fuzzy
+msgid "Video background"
+msgstr "ஒளி கோடக்:"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr ""
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr ""
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr ""
+
+#: kmplayerconfig.cpp:118
+#, fuzzy
+msgid "Playlist"
+msgstr "&இதனுடன் வாசி"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr ""
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "கோப்பு %1 இயங்க வில்லை"
+
+#: kmplayerconfig.cpp:622
+#, fuzzy
+msgid "Sub title file %1 does not exist."
+msgstr "துணை தலைப்பின் கோப்பு இல்லை"
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, fuzzy, c-format
+msgid "Volume is %1"
+msgstr "பாகம்:"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&இதனுடன் வாசி"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr ""
+
+#: kmplayercontrolpanel.cpp:387
+#, fuzzy
+msgid "Play&list"
+msgstr "&இதனுடன் வாசி"
+
+#: kmplayercontrolpanel.cpp:400
+#, fuzzy
+msgid "&Audio languages"
+msgstr "ஒலி &மொழி"
+
+#: kmplayercontrolpanel.cpp:401
+#, fuzzy
+msgid "&Subtitles"
+msgstr "இணை தலைப்புகள்"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "மாறுபாடு:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "பிரகாசம்:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "வண்ணம்:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "திகட்டல் அதிகம்:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "வண்ணங்கள்"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "& கேஎம் ப்ளேயரை வடிவமை..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+#, fuzzy
+msgid "Playing"
+msgstr "வாசி"
+
+#: kmplayerpartbase.cpp:1384
+#, fuzzy
+msgid "Recorder %1 %2"
+msgstr "பதிப்பான்"
+
+#: kmplayerpartbase.cpp:1402
+#, fuzzy
+msgid "Player %1 %2"
+msgstr "&எம்ப்ளேயர்"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "தெரியாத"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr ""
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr ""
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "வாசிப்பு செயலை முடிப்பதற்கு தோல்வி"
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&எம்ப்ளேயர்"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "அளவு வடிவம்:"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "தற்காலிக சேமிப்பு வடிவம்:"
+
+#: kmplayerprocess.cpp:872
+#, fuzzy
+msgid "Position pattern"
+msgstr "அளவு வடிவம்:"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "அட்டவணை வடிவம்:"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "உதாரண URL வடிவம்:"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "உதாரண வடிவம்:"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "துவக்க வடிவம்:"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "டிவிடி மொழி வடிவம்:"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "டிவிடி இணை தலைப்பு வடிவம்:"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "டிவிடி தலைப்பு வடிவம்:"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "டிவிடி அத்தியாய வடிவம்:"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "விசிடி தட வடிவம்:"
+
+#: kmplayerprocess.cpp:882
+#, fuzzy
+msgid "Audio CD tracks pattern"
+msgstr "விசிடி தட வடிவம்:"
+
+#: kmplayerprocess.cpp:904
+#, fuzzy
+msgid "MPlayer command:"
+msgstr "உத்தரவை உள்ளிடு:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "கூடுமான உத்தரவு பயனிலை வரிகள்:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "தற்காலிக சேமிப்பின் அளவு:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "புதிய அட்டவணையை சாத்தியமாகும் நேரத்தில் உருவாக்கவும்"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "நாடுவதை அட்டவணை கோப்புகளில் அனுமதிக்கவும்(AVIs)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "பொதுவான தேர்வுகள்"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "&எம்ப்ளேயர்"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&சைன்"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr ""
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "ஒளி சாதனம்:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "ஒலி சாதனம்:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "பெயர்:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "அகலம்:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "உயரம்:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "உடனடியாக வாசிக்க வேண்டாம்"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "வாசி பட்டனை அழுத்திய பிறகே வாசிக்க துவங்கு"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "கவிழ்:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "அலைவரிசை"
+
+#: kmplayertvsource.cpp:100
+#, fuzzy
+msgid "Frequency (MHz)"
+msgstr "அதிர்வெண்"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"மூல நிரலிலிருந்து இந்த சாதனத்தை நீக்க உள்ளீர்கள்.\n"
+" தொடர வேண்டுமா?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "உறுதி"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "செலுத்தி:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "போலி,v4l அல்லது bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "சாதனம்:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "உங்கள் ஒளி சாதனத்திற்கான வழி,எ-டு./சாதனம்/ஒளி0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "வருடு..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "பொது"
+
+#: kmplayertvsource.cpp:246
+#, fuzzy
+msgid "tv device"
+msgstr "டிவிடி சாதனம்:"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr ""
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "தொலைக்காட்சி"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "தொலைக்காட்சி:"
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "சாதனம் ஏற்கனவே உள்ளது."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "சாதனம் ஏதும் இல்லை."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TVSமுடியும்"
+
+#: kmplayervdr.cpp:90
+#, fuzzy
+msgid "XVideo port"
+msgstr "Xஒளி தோற்றம்"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr ""
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr ""
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr ""
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr ""
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+#, fuzzy
+msgid "VDR"
+msgstr "விசிடி"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr ""
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+#, fuzzy
+msgid "VDR Key Channels"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:250
+#, fuzzy
+msgid "VDR Key Menu"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:251
+#, fuzzy
+msgid "VDR Key Red"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:252
+#, fuzzy
+msgid "VDR Key Green"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:253
+#, fuzzy
+msgid "VDR Key Yellow"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:254
+#, fuzzy
+msgid "VDR Key Blue"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:259
+#, fuzzy
+msgid "VDR Key 0"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:260
+#, fuzzy
+msgid "VDR Key 1"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:261
+#, fuzzy
+msgid "VDR Key 2"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:262
+#, fuzzy
+msgid "VDR Key 3"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:263
+#, fuzzy
+msgid "VDR Key 4"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:264
+#, fuzzy
+msgid "VDR Key 5"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:265
+#, fuzzy
+msgid "VDR Key 6"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:266
+#, fuzzy
+msgid "VDR Key 7"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:267
+#, fuzzy
+msgid "VDR Key 8"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:268
+#, fuzzy
+msgid "VDR Key 9"
+msgstr "அலைவரிசை"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr ""
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr ""
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr ""
+
+#: kmplayervdr.cpp:752
+#, fuzzy
+msgid "X&Video"
+msgstr "Xஒளி தோற்றம்"
+
+#: kmplayerview.cpp:190
+#, fuzzy
+msgid "Play List"
+msgstr "&இதனுடன் வாசி"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "பாகம்:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "கேஎம் ப்ளேயர்"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "திறக்க வேண்டிய கோப்பு"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr ""
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr ""
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr ""
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr ""
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "கேஎம் ப்ளேயர் விருப்பங்கள்"
+
+#: pref.cpp:82
+#, fuzzy
+msgid "Looks"
+msgstr "தொடர் வளையம்"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "வெளியீடு"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "பதிவேடு"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "&Mகுறியீட்டு கருவி "
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMபெக்"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "வெளியீடு சொருகுகள்"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "பிற்பட்ட செயல்பாடு"
+
+#: pref.cpp:208
+#, fuzzy
+msgid "Window"
+msgstr "புதிய & சாளரம்"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "அளவு விகிதத்தை வைத்துக் கொள்ளவும்"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"சரிபார்க்கப்பட்டவுடன் திரைப்படம் அதன் விகிதத்தை அதனுடன் வைத்துக்கொள்ளும் \n"
+"சாளரத்தின் அளவு மாற்றப்படும் போதும்"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr ""
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+#, fuzzy
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"சரிபார்க்கப்பட்டவுடன் திரைப்படம் அதன் விகிதத்தை அதனுடன் வைத்துக்கொள்ளும் \n"
+"சாளரத்தின் அளவு மாற்றப்படும் போதும்"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "தொடர் வளையம்"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "தற்போதைய திரைப்பட தொடர் வளையத்தை உருவாக்கும்"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "சட்டத்துளிகளை அனுமதிக்கவும்"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "சிறந்த ஒலி மற்றும் ஒளி ஒத்தியக்குதலுக்கு சட்டத்துளிகளை அனுமதிக்கவும்"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr ""
+
+#: pref.cpp:242
+#, fuzzy
+msgid "Show config button"
+msgstr "பதிவேடு பட்டனை காண்பிக்கவும்"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+#, fuzzy
+msgid "Show playlist button"
+msgstr "ஒளிபரப்பு பட்டனை காண்பிக்கவும்"
+
+#: pref.cpp:245
+#, fuzzy
+msgid "Add a playlist button to the control buttons"
+msgstr "உத்தரவு பட்டன்னுடன் ஒளிபரப்பு பட்டனை சேர்"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "பதிவேடு பட்டனை காண்பிக்கவும்"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "உத்தரவு பட்டன்களுடன் பதிவேடு பட்டன்களை சேர்க்கவும்"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "ஒளிபரப்பு பட்டனை காண்பிக்கவும்"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "உத்தரவு பட்டன்னுடன் ஒளிபரப்பு பட்டனை சேர்"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "முன்/பின் நாடும் நேரம்:"
+
+#: pref.cpp:276
+#, fuzzy
+msgid "Colors"
+msgstr "வண்ணங்கள்"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr ""
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "திகட்டல் அதிகம்:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "இணை தலைப்பு:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "வாசிப்பதற்கான க்ளிக்கை செயல்படுத்தவும்"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "திரைப்பட இயக்கியை உபயோகிக்கவும்:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr ""
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr ""
+
+#: pref.cpp:379
+#, fuzzy
+msgid "Maximum bitrate:"
+msgstr "அளவிற்கு அதிகமான அலைவரிசை(கேபிட்):"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "வெளியீட்டு கோப்பு:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "துவக்கம் &பதிப்பித்தல்"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "தற்போதைய மூலம்:"
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "பதிப்பான்"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "தானாக வாசி"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&இல்லை"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "&பதிப்பது முடிந்தவுடன்"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "பிறகு"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "நேரம்(நொடிகள்):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "பதிப்பதை நிறுத்து"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "பதிப்பதை துவங்கு"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "தற்போதைய மூலம்:"
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "வடிவம்"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "மூலத்தை போலவே"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "ஆயத்தம்"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mகுறியீட்டு கருவி பயனிலை:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&Mபயனீட்டு கருவி"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMபெக் பயனிலை:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMபெக்"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"ஒளி செலுத்தியை அமைக்கும். Xஒளி சிபாரிசு செய்யப்பட்டுள்ளது, இல்லையென்றால் சற்று "
+"மெதுவான X11."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "ஒளி செலுத்தி:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "ஒலி செலுத்தி:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "பிற்பட்ட செயலாக்கத்தை தானே செயல்படுத்து"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+"TV/DVD பார்த்துக் கொண்டிருக்கும் வேலையில் பிற்பட்ட செயலாக்கத்தை நீக்கு."
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "விரைவு"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "இடம்வல உரைப்பகுதியற்ற "
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "தரமாக"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "கொமினஸ் வடிகட்டி"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "மேல்கீழ் உரைப்பகுதியற்ற "
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "டிரிங் வடிகட்டி"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "தானாக இயங்கும் பிரகாசம்/மாறுபாடு"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "முழு வரம்பிற்கு பிரகாசத்தை விரிவுபடுத்தவும்"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "தற்காலிக ஒலி குறைப்பான்:"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "நேரான பிலண்டு டிஉள்கதிர்விச்சு"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "நேரியல் உள்ளமை டிஉள்கதிர்விச்சு"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "பட்டக உள்ளமை டிஉள்கதிர்விச்சு"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "நடுநிலை டிஉள்கதிர்விச்சு"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "FFmpeg டிஉள்கதிர்விச்சு"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+"எம் ப்ளேயருடன் முன்பிருந்த பிற்பட்ட செயலாக்க வடிகட்டியை செயல்படுத்தவும்"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"ஆயத்த பிற்பட்ட செயலாக்க வடிகட்டியை செயல்படுத்தவும்( ஆயத்த முன் தத்தை "
+"பார்க்கவும்)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "எம் ப்ளேயருடைய விரைவு பிற்பட்ட செயலாக்க வடிகட்டியை செயல்படுத்தவும்"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "தேவையான அளவு CPU இருந்தால் வடிகட்டி உபயோகிக்கப்படும்"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "முழு வரம்பிற்கு பிரகாசத்தை விரிவுபடுத்தவும் (0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "ஆயத்த முன் அமைத்தவை"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "டிஉள்கதிர்விச்சு"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "விருப்ப அமைவுகள்"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"அனைத்து அமைப்புகளின் மேலும் நீங்கள் மேலே எழுத முயலுகிறீர்கள்.\n"
+"தயவு செய்து உறுதிபடுத்திக் கொள்ளவும்.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr ""
+
+#: viewarea.cpp:1360
+#, fuzzy
+msgid "Fullscreen"
+msgstr "&முழுத் திரை"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr ""
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "தேவையான அளவு CPU இருந்தால் வடிகட்டி உபயோகிக்கப்படும்"
+
+#, fuzzy
+#~ msgid "Could not start process "
+#~ msgstr "எம் ப்ளேயரை துவங்க முடியவில்லை"
+
+#~ msgid "Default from MPlayer Config File"
+#~ msgstr "எம்ப்ளேயர் அமைப்பு கோப்பில் முன்னிருப்பது"
+
+#~ msgid "postProcessing"
+#~ msgstr "பிற்பட்ட செயலாக்கம்"
+
+#~ msgid "disablePostProcessingAutomatically"
+#~ msgstr "பிற்பட்ட செயலாக்கத்தை தானே நீக்கு"
+
+#, fuzzy
+#~ msgid "Up"
+#~ msgstr "&மேல்"
+
+#, fuzzy
+#~ msgid "Channels"
+#~ msgstr "அலைவரிசை"
+
+#, fuzzy
+#~ msgid "Setup"
+#~ msgstr "நிறுத்து"
+
+#, fuzzy
+#~ msgid "Red"
+#~ msgstr "தயார்"
+
+#, fuzzy
+#~ msgid "Custom ..."
+#~ msgstr "ஆயத்தம்"
+
+#~ msgid "Xine"
+#~ msgstr "&சைன்"
+
+#~ msgid "&Show Console Output"
+#~ msgstr "&கன்சோல் வெளியீட்டைக் காட்டவும்"
+
+#~ msgid "Show console output"
+#~ msgstr "கன்சோல் வெளியீட்டை காட்டவும்"
+
+#~ msgid "Shows output from mplayer before and after playing the movie"
+#~ msgstr "திரைப்படத்தை ஓட்டிய முன்பும் பின்பும் வெளியீட்டை எம்ப்ளேயரிலிருந்து காண்பிக்கும்"
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..53950f3
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,1687 @@
+# translation of kmplayer.po to Türkçe
+# Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+#
+# Görkem Çetin <gorkem@kde.org>, 2004.
+# Engin Çağatay <engincagatay@yahoo.com>, 2004, 2006.
+# Engin Çağatay <engin@kde.org.tr>, 2004.
+# Bülent ŞENER <bsener@inonu.edu.tr>, 2005.
+# Engin Cagatay <engincagatay@yahoo.com>, 2006.
+# Emre Aladağ <aladagemre@gmail.com>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2006-10-29 18:12+0200\n"
+"Last-Translator: Engin Çağatay <engincagatay@yahoo.com>\n"
+"Language-Team: Türkçe <yerellestirme@kde.org.tr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Murat Eroğlu, Engin Çağatay, Bülent ŞENER, Emre Aladağ"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr ""
+"murat@linuxq.org, engin@kde.org.tr, bulent@kde.org.tr, emre@emrealadag.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Yürüt"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "&Duraklat"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "D&urdur"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Sesi Arttır"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Sesi Azalt"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% Tamponu doldur"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: Yürütüyor"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: Yürütmeyi Durdur"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "En Güncel"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Kalıcı Çalma Listeleri"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Yeni &Pencere"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Geçmişi &Temizle"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&DVD aç"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "V&CD aç"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "Ses CD'si &Aç"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Veri Akışını Başlat..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&Bağlan"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "K&onsol"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Çalm&a Listesi"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Küçük boyut"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "% 50"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "% 100"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "% 150"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "&Düzenleme Kipi"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Çalma Listesiyle &Uyum Sağla"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Açılır Menü Göster"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Dil Menüsünü Göster"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "Genişliği ve Uzunluğu Aynı &Oranda Tut"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&Tam Ekran"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "&Arts Kontrolü"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Yeni bir uygulama penceresi aç"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Bir dosya aç"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Daha önce kullanilmiş bir dosya aç"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Asıl kaynağı kapat"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Uygulamalardan çık"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Durum çubuğunu aktifleştır/pasifleştir"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Menü çubuğunu aktifleştır/pasifleştir"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Hazır."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "K&aynak"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "&DVD Tarayıcı"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&TV"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Ses CD'si"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "Listeye &ekle"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Yeni &Grup'a ekle"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "Buraya &kopyala"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "V&ideo"
+
+#: kmplayerapp.cpp:751
+#, fuzzy
+msgid "More..."
+msgstr "Daha fazla..."
+
+#: kmplayerapp.cpp:801
+#, fuzzy
+msgid "DVD Navigation..."
+msgstr "DVD Tarayıcısı..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Hazır"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "DVD açılıyor..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "VCD açılıyor..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Ses CD'si açılıyor..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Standart çıktıdan veri alıyor..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Standart çıktıdan veri oku"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Standart çıkışa ses/görüntü gönderecek bir komut girin\n"
+"Bu oynatıcının standart girdisine yönlendirilecektir.\n"
+"\n"
+"Komut:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "VDR açılıyor..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Giriş"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Dosya Açılıyor..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Çıkış"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Yeni uygulama penceresi açiliyor..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Tüm Dosyalar"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Dosya Aç"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Dosyayı Kaydet"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"%1 dosyası açılamadı.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Dosya Kapatılıyor..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "KMPlayer'den çıkılıyor.."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "%1 ile Menü Çubuğunu göster"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Buraya taşı"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Yeni grup"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "Öğe &Sil"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "&Yukarı Taşı"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "&Aşağı Taşı"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "DVD açtıktan sonra otomatik oynat"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "DVD'yi, DVD açıldıktan hemen sonra oynat"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD Aygıtı "
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "DVD aygıtınızın konumu, bu aygıt için okumak izniniz olmalı"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Optik Diskler"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr ""
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Başlık"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Başlıklar"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "Ses Di&li"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Altyazı"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Kaynak "
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "So&nraki"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Root"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Yukarı"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "VCD açtıktan sonra otomatik oynat"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "VCD'yi, VCD açıldıktan hemen sonra oynat"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD (CDROM) aygıtı:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr "CDROM/DVD aygıtınızın konumu, bu aygıt için okuma izniniz olmalıdır"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Parça"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Ses CD'si"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Parça %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Yönlendirme"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Pipe - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Bağlanacak adres:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Birden fazla ağ aygıtınız varsa, erişimi kısıtlayabilirsiniz"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Portları Dinle"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "En fazla bağlantı :"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "En büyük bandgenişliği (kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Geçici besleme dosyası:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Besleme dosya boyutu (kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Biçim:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "mplayer oynatması için sadece avi, mpeg ve rm çalışır"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Ses kodçözücü:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Ses akış hızı (kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Ses örnek hızı (Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Görüntü kod çözücü:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Video veri akış hızı (kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Kalite (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Film Karesi Hızı(Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Gop boyutu:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Genişlik (piksel ) :"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Yükseklik (piksel) :"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Erişimi kabul edilecek yer:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+"IP aralığı için 'Tek IP adresi' ya da 'başlangıç IP adresi - bitiş IP adresi'"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Makine/IP ya da IP Aralığı"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Yükle"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Başlangıç"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Yayımlanıyor"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Profiller"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "ffserver çalişirken hata oluştu."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"ffserver başlarken hata oluştu.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "ffmpeg başlarken hata oluştu."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Otomatik"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Ses Sistemini Aç"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "Basit DirectMedia Layer"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Gelişmiş Linux Ses Sistemi (ALSA)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "Anolog Gerçek Zaman Zentezleyicisi "
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK Audio Bağlantı Aracı"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened Ses Sunucusu"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Gelişmiş Linux Ses Sistemi 0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Gelişmiş Linux Ses Sistemi 0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Öntanımlı artalanı kullan"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Çalma listesi arkaplanı rengi"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Çalma listesi önyüzü rengi"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Uçbirim arkaplan rengi"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Çalma listesi etkin öğe rengi"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Uçbirim önyüz rengi"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Görüntü arkaplan rengi"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "İzleme alanı arkaplan rengi"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Görüntü arkaplan rengi"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Uçbirim önyüz rengi"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Çalma Listesi"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Bilgi penceresi"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "%1 dosyası bulunamadı."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "%1 altyazı dosyası bulunamadı."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Ses: %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Birlikte Yürüt "
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Kon&sol"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Çalma &Listesi"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Ses D&illeri"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Altyazılar"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Kontrast:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Parlaklık:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Ton:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Doygunluk:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "&Renkler"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "KMPlayer'i A&yarla"
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "Çalma &listesi öğesini düzenle"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Çalışmıyor"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Belleğe alınıyor"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Yürütülüyor"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Kaydedici %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Oynatıcı %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Bilinmeyen"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+#, fuzzy
+msgid "Disconnected"
+msgstr "Bağlantıyı Kesildi"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Bağlanıyor"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Oynatıcı işleminin bitirilmesi başarısız oldu."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Boyut şablonu"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Tampon şablonu"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Konum şablonu"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Indeks şablonu"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Örnek URL başvurusu"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Kaynak şablonu"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Başlangış şablonu"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "DVD dil şablonu"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "DVD altyazı şablonu"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "DVD başlık şablonu"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "DVD bölüm şablonu"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "VCD parça şablonu"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Ses CD'si parça şablonu"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "MPlayer komutu:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "İlave komut satırı değişkenleri:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Tampon seçimi:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Mümkün olduğunda yeni indeks kur"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Dizinli dosyalarda aramayı kabul et (AVI'ler)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Genel Ayarlar"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Video aygitı "
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Ses aygıtı"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "İsim"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Genişlik:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Uzunluk: "
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Hemen oynatma"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Oynat düğmesine tıkladıktan sonra oynatmaya başla"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Norm:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Kanal"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Frekans (MHz)"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Kaynak menüsünden bu aygıtı silmek üzeresiniz.\n"
+"Silinsin mi?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Doğrula"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Sürücü"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "dummy, v4l ya da bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Aygıt:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Video aygıtınızın konumu, ör: /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Tara.."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Genel"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "tv aygıtı"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Televizyon"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "TV"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "TV: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Aygıt zaten var."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Aygıt hazır değil"
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TV Tarayıcı"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo portu"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Port tabanlı X Video Eklentisi.\n"
+"Eğer soldaki (0) ise ilk kullanılabilir port kullanılacak. Bununla birlikte "
+"eğer çoklu XVideo örnekleriniz varsa burada kullanım için bir port "
+"sağlamalısınız.\n"
+"Daha fazla bilgi için xvinfo çıktısına bakabilirsiniz"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "İletişim portu:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"VCD ile öntanımlı haberleşme portu 2001'dir.\n"
+"Eğer başka bir port kullanmak isterseniz '-p' seçeneğini kullanın ya da burada "
+"da ayarlayabilirsiniz."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Ölçek"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "VDR izleniyorken bakış açısını kullan"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "&Bağlantıyı Kes"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "VDR Anahtarı Yukarı"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "VDR Anahtarı Aşağı"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "VDR Anahtarı Geri"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "VDR Anahtarı Tamam"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "VDR Anahtarı Ayarla"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "VDR Anahtarı Kanlları"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "VDR Anahtarı Menüsü"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "VDR Anahtarı Kırmızı"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "VDR Anahtarı Yeşil"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "VDR Anahtarı Sarı"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "VDR Anahtarı MAvi"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "VDR Anahtarı 0 "
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "VDR Anahtarı 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "VDR Anahtarıİli 2 "
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "VDR Anahtarı 3 "
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "VDR Anahtarı 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "VDR Anahtarı 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "VDR Anahtarı 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "VDR Anahtarı 7 "
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "VDR Anahtarı 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "VDR Anahtarı 9 "
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Bilgisayar bulunamadı"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "Bağlantı reddedildi"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Özel VDR komutu"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"VDR'ye komut verebilirsiniz.\n"
+"'HELP' girip kullanılabilir komut listesini görün.\n"
+"VDR'nin yanıtını uç birim ekranında görebilirsiniz.\n"
+"\n"
+"VDR Komutu:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Port "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Çalma Listesi"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Ses"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "açılacak dosya"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "isimsiz"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "hiçbiri"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[öznitelikler]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "Panoya &kopyala"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "Tümünü Gö&ster"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Tercihler"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Görünümler"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Çıktı"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Kayıt"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Çıktı Eklentileri"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "İşlem sonrası"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Pencere"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "Boyut oranını koru"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"İşaretlendiğinde pencere yeniden boyutlandırılırsa\n"
+"film açı oranını koruyacaktır"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Sistem sekmesinde göster"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"İşaretlendiğinde bir Kmplayer simgesi sistem çekmecesine eklenir.\n"
+"Simge tıklandığında KMPlayer ana penceresi gizlenir ve KMPlayer görev çubuğu "
+"düğmesi silinir."
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Video boyutuna otomatik ayarla"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"Seçildiğinde KMPlayer video başladığında\n"
+"film boyutlarına gelecektir"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "Çıkarken pencere ölçüsünü unutma"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "Her zaman belirli büyüklükte başlat"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Döngü"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "Geçerli filmden döngü oluştur"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "Kare kesilmesini kabul et"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "Daha iyi ses, görüntü eşlemesi için kare kesmelerini kabul et"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "Başlangıçta sesi otomatik ayarla"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr "Yeni bir kaynak seçildiğinde sesi, ses denetimindeki ayara eşitle"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "Başlangıçta renkleri otomatik ayarla"
+
+#: pref.cpp:236
+#, fuzzy
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr "Yeni bir film başlatıldığı zaman renkler otomatik olarak ayarlanır"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Denetim Paneli"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Yapılandırma düğmesini göster"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Bir yapılandırma menüsü açacak bir düğme ekle"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Çalma listesi düğmelerini göster"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "Kontrol düğmelerine bir çalma listesi düğmesi ekle"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Kayıt düğmesini göster"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "Kontrol düğmelerine bir kayıt düğmesi ekle"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "Yayın düğmelerini göster"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "Kontrol düğmelerine bir yayın düğmesi ekle"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "İleri/geri sarma süresi:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Renkler"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Konum:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "Oynatılabilir nesnenin konumu"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "Altyazı:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr "Yukardaki URL'nin altyazılarını içeren bir dosyanın tercihi konumu"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "Tıklayarak Yürütme desteği sağla"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "Web sayfalarının başlangıç resmi desteği"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Film oynatıcısı kullan:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "Ağ bantgenişliği"
+
+#: pref.cpp:373
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"Bazen verilen belirli bir bitoranında çeşitli yayınlar arasında seçim yapmak "
+"mümkün olur.\n"
+"Bu seçenek video için ne kadar bantgenişliği harcamak istediğinizi ayarlar"
+
+#: pref.cpp:375
+#, fuzzy
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"Bazen verilen belirli bir bitoranında çeşitli yayınlar arasında seçim yapmak "
+"mümkün olur.\n"
+"Bu seçenek video için ne kadar bantgenişliği harcayabileceğinizi ayarlar."
+
+#: pref.cpp:376
+#, fuzzy
+msgid "Preferred bitrate:"
+msgstr "Tercih edilen bitoranı:"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "kbit/s"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "En fazla bitoranı:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Çıktı dosyası:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "&Kaydı başlat"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Mevcut kaynak:"
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Kaydedici"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Otomatik tekrarla"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Hayır"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "Kayıt &bittiğinde"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&Sonra"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Zaman (saniye):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Kaydı Durdur"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Kaydı Başlat"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Mevcut Kaynak: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Biçim"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "Kaynakla aynı"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Özel"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Mencoder değişkenleri:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "MPlayer -&dumpstream"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMpeg değişkenleri:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"Görüntü sürücüsünü ayarlar. X Video önerilir eğer bu mümkün değilse daha yavaş "
+"olan X11 önerilir."
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Video sürücüsü:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Ses sürücüsü:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "İşlem sonrası süzgeçlerin kullanımını etkinleştir"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "TV/DVD izlerken işlem sonrası süzgeçlerin kullanımını pasifleştir"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "Hızlı"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "Yatayda kilitle"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "Otomatik kalite"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "Renklilik süzülüyor"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "Dikeyde kilitle"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr ""
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "Otomatik parlaklık/karşıtlık"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "Parlaklığı tüm aralığa yay"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "Geçici ses indirgeyicisi"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "Çizgisel karışım ayrıştırıcısı"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "Çizgisel ekleme ayrıştırıcısı"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "Kübik ekleme ayrıştırıcısı"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "Orta değer ayrıştırıcısı"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "FFmpeg ayrıştırıcısı"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "Mplayer işlem sonrası süzgeçlerini ön tanımlı olarak etkinleştir"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+"Özel işlem sonrası süzgeçlerini etkinleştir (Bakınız: Özel Önayarlar sekmesi)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "Mplayer hızlı işlem sonrası süzgeçlerini etkinleştir"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "Yeterli CPU varken süzgeç kullanıldı."
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "Parlaklığı tüm aralığa yay(0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "Özel Ayarlar"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "Ayrıştırılıyor"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "Ayarlar Sıfırlansın mı?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"Tüm ayarları öntanımlı ayarlarla değiştirmek üzeresiniz. \n"
+"Lütfen onaylayın.\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Tam Ekran"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Ölçek:"
+
+#, fuzzy
+#~ msgid "Filter is used if there'is enough CPU"
+#~ msgstr "Yeterli CPU varken süzgeç kullanıldı."
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 0000000..f5b44de
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,1679 @@
+# Translation of kmplayer.po to Ukrainian
+#
+# Ivan Petrouchtchak <ivanpetrouchtchak@yahoo.com>, 2006, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-01-31 15:15-0800\n"
+"Last-Translator: Ivan Petrouchtchak <ivanpetrouchtchak@yahoo.com>\n"
+"Language-Team: Ukrainian <translation@linux.org.ua>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>"
+"=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "Іван Петрущак"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "ivanpetrouchtchak@yahoo.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "&Пуск"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "Па&уза"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "&Стоп"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "Збільшити гучність"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "Зменшити гучність"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% кешу заповнено"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer: програвання"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer: зупинено програвання"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "WEB"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "Найновіше"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "Сталі списки композицій"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "Нове &вікно"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "Очистити &історію"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "&Відкрити DVD"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "&Відкрити VCD"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "&Відкрити аудіо-КД"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "&Відкрити канал..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "&З'єднатись"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "Ко&нсоль"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "Список &композицій"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "Мінімальний режим"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "Режим &редагування"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "Синхронізувати зі &списком композицій"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "Показати контекстне меню"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "Показати меню мови"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "З&берігати пропорцію ширини і висоти"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "&На весь екран"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "Керування &aRts"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "Відкриває нове вікно програми"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "Відкриває існуючий файл"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "Відкриває недавно використаний файл"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "Закриває дане джерело"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "Закриває програму"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "Вмикає/вимикає рядок стану"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "Вмикає/вимикає панель меню"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "Готово."
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "Д&жерело"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "&DVD"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "Навігатор &DVD"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "V&CD"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "&ТБ"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "&Аудіо-КД"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "&Додати у список"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "Додати у нову &групу"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "&Скопіювати сюди"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "В&ідео"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "Більше..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "Навігація DVD..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "Готово"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "Відкривання DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "Відкривання VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "Відкривання аудіо-КД..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "Відкривання каналу..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "Читати з каналу"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"Введіть команду, яка видаватиме потік аудіо/відео на\n"
+"stdout. Його буде передано по каналу на stdin користувача.\n"
+"\n"
+"Команда:"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "Відкривання VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "Вступ"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "Відкривається файл..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "Вихід"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "Відкривається нове вікно програми..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|Всі файли"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "Відкрити файл"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "Зберегти файл"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"Помилка відкриття файла %1.\n"
+"%2."
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "Закривається файл..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "Вихід..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "Показати смужку меню з %1"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "Пересунути сюди"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "Нова група"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "Ви&далити елемент"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "Пересунути вго&ру"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "Пересунути в&низ"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "Автоматично програвати після відкривання DVD"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "Починати програвати DVD відразу після відкривання DVD"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "Пристрій DVD:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr ""
+"Шлях до вашого пристрою DVD. Ви мусите мати права читати з цього пристрою"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "Оптичні диски"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - аудіо компактдиск"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - відео компактдиск"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - цифровий відеодиск"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "&Заголовки"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "&Розділи"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "&Мова аудіо"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "&Субтитри"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "Джерело"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "&Далі"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "&Початок"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "&Вгору"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "Автоматично програвати після відкривання VCD"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "Починати програвати VCD відразу після відкривання VCD"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "Пристрій VCD (CDROM):"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"Шлях до вашого пристрою CDROM/DVD. Ви мусите мати права читати з цього пристрою"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "Доріжка "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "Аудіо-КД"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "Доріжка %1"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "Канал"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "Канал - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Адреса bind:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "Якщо у вас декілька мережних пристроїв, то можна обмежити доступ"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "Слухати порт:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "Максимум з'єднань:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "Максимальна пропускна здатність (кбіт/с):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "Тимчасовий файл подачі:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "Розмір файла подачі (КБ):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "Формат:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "Можна грати тільки avi, mpeg і rm"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "Аудіокодек:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "Частота аудіопотоку (кбіт/с):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "Частота вибірки аудіо (Гц):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "Відеокодек:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "Частота відеопотоку (кбіт/с):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "Якість (1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "Частота кадрів (Гц):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Розмір групи кадрів:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "Ширина (пікселів):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "Висота (пікселів):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "Дозволити доступ з:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr ""
+"\"Одинарна адреса IP\" або \"початкова адреса IP кінцева адреса IP\" для "
+"діапазону IP-адрес"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "Вузол/IP або діапазон IP"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "Завантажити"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "Почати"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "Трансляція"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "Профілі"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "Помилка завершення процесу ffserver."
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"Не вдалось запустити ffserver.\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "Не вдалось запустити ffmpeg."
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "Авто"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "Відкрита система звуку (OSS)"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "SDL (Simple DirectMedia Layer)"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "Вдосконалена архітектура звуку для Linux (ALSA)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "aRts (Analog Real-Time Synthesizer)"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "Спорядження для аудіо з'єднань Jack"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Даемон звуку ESD"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "Вдосконалена архітектура звуку для Linux (ALSA) v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "Вдосконалена архітектура звуку для Linux (ALSA) v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "Вживати типові параметри рушія"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "XvMC"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "SDL"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "OpenGL"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "OpenGL MT"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "Колір тла списку композицій"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "Колір тексту списку композицій"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "Колір тла консолі"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "Активний елемент списку композицій"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "Колір тексту консолі"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "Колір тла відео"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "Колір тла ділянки перегляду"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "Колір тла вікна інформації"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "Колір тексту вікна інформації"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "Список композицій"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "Вікно інформації"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "Файл %1 не існує."
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "Файл субтитрів %1 не існує."
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "Гучність %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "&Грати за допомогою"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "Кон&соль"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "Список ком&позицій"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "Мови &аудіо"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "&Субтитри"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "Контраст:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "Яскравість:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "Відтінок:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "Насиченість:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "Ко&льори"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "&Налаштувати KMPlayer..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "&Редагувати елемент списку композицій"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "Не запущено"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "Буферування"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "Програвання"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "Запис %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "Програвач %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "Невідомо"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "Роз'єднано"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "Йде з'єднання"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "Помилка завершення процесу програвача."
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&MPlayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "Шаблон розміру"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "Шаблон кешу"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "Шаблон позиції"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "Шаблон індексу"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "Шаблон посилання URL"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "Шаблон посилання"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "Шаблон запуску"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "Шаблон мови DVD"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "Шаблон субтитрів DVD"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "Шаблон заголовків DVD"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "Шаблон розділів DVD"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "Шаблон доріжки VCD"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "Шаблон доріжок аудіо-КД"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "Команда MPlayer:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "Додаткові аргументи командного рядка:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "Розмір кешу:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "КБ"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "Створювати новий індекс, якщо можливо"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "Дозволяє пошук в індексованих файлах (AVIs)"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "Загальні параметри"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "MPlayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "Пристрій відео:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "Пристрій аудіо:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "Назва:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "Ширина:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "Висота:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "Не починати програвання відразу"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "Починати програвання тільки після натискання кнопки пуску"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "Норм.:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "Канал"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "Частота [МГц]: "
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"Ви збираєтесь видалити цей пристрій з меню Джерела.\n"
+"Продовжити?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "Підтвердити"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "Драйвер:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "порожній, v4l або bsdbt848"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "Пристрій:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "Шлях до вашого пристрою відео, напр., /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "Сканувати..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "Загальне"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "Пристрій ТБ"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "Телебачення"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "ТБ"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "ТБ: "
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "Пристрій вже існує."
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "Не знайдено жодного пристрою."
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "Сканер ТБ"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "Порт XVideo"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"Початковий порт для розширення X Video.\n"
+"Якщо залишено типове значення (0), то буде вживатися перший наявний порт. "
+"Однак, якщо ви маєте декілька примірників XVideo, то вам, мабуть, прийдеться "
+"вказати тут порт для вжитку.\n"
+"Для докладнішої інформації див. вивід з \"xvinfo\""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "Порт зв'язку:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"Порт зв'язку з VDR. Типовий порт: 2001.\n"
+"Якщо ви вживаєте інший порт за допомогою параметра \"-p\" для \"vdr\", то "
+"мусите тут також цей порт вказати."
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "Масштаб"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "4:3"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "16:9"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "Пропорції екрана при перегляді VDR"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "Роз'&єднати"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "Клавіша VDR \"Вгору\""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "Клавіша VDR \"Вниз\""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "Клавіша VDR \"Назад\""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "Клавіша VDR \"Гаразд\""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "Клавіша VDR \"Налаштування\""
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "Клавіша VDR \"Канали\""
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "Клавіша VDR \"Меню\""
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "Клавіша VDR \"Червона\""
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "Клавіша VDR \"Зелена\""
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "Клавіша VDR \"Жовта\""
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "Клавіша VDR \"Синя\""
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "Клавіша VDR 0"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "Клавіша VDR 1"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "Клавіша VDR 2"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "Клавіша VDR 3"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "Клавіша VDR 4"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "Клавіша VDR 5"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "Клавіша VDR 6"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "Клавіша VDR 7"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "Клавіша VDR 8"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "Клавіша VDR 9"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "Вузол не знайдено"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "У з'єднанні відмовлено"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "Нетипова команда VDR"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"До VDR можна надсилати команди.\n"
+"Введіть \"HELP\", щоб побачити список наявних команд.\n"
+"Відповідь VDR буде видно у вікні консолі.\n"
+"\n"
+"Команда VDR:"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "Порт "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "Список композицій"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "Гучність:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMPlayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "відкрити файл"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "без назви"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "немає"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[атрибути]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "&Скопіювати до кишені"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "Показати &всі"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "Параметри"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "Вигляд"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "Вивід"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "Запис"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "Втулки виводу"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "Після-опрацювання"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "Вікно"
+
+#: pref.cpp:212
+#, fuzzy
+msgid "Keep size ratio"
+msgstr "Зберігати масштаб"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "Пришвартувати у системному лотку"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "Автоматично змінювати розмір під відео"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "При виході запам'ятовувати розмір вікна"
+
+#: pref.cpp:223
+#, fuzzy
+msgid "Always start with fixed size"
+msgstr "Завжди починати з вказаного компонента:"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "Зациклити"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr ""
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr ""
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr ""
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr ""
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr ""
+
+#: pref.cpp:236
+#, fuzzy
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"Якщо вибрано, кольори заголовка будуть братися з теми IceWM. Інакше, будуть "
+"вживатися поточні кольори смужки заголовка KDE."
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "Панель керування"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "Показувати кнопку налаштування"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "Додати кнопку, яка викликатиме меню налаштування"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "Показувати кнопку списку композицій"
+
+#: pref.cpp:245
+#, fuzzy
+msgid "Add a playlist button to the control buttons"
+msgstr "Натисніть цю кнопку, щоб додати налаштований фільтр до списку."
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "Показати кнопку запису"
+
+#: pref.cpp:247
+#, fuzzy
+msgid "Add a record button to the control buttons"
+msgstr ""
+"<qt>Натисніть на цю кнопку, щоб використовувались два значення, що призведе до "
+"створення запису-дублікату.</qt>"
+
+#: pref.cpp:248
+#, fuzzy
+msgid "Show broadcast button"
+msgstr "Показувати кнопку списку вікон"
+
+#: pref.cpp:249
+#, fuzzy
+msgid "Add a broadcast button to the control buttons"
+msgstr "Натисніть цю кнопку, щоб перевантажити зміст поточної адреси."
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr ""
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "Кольори"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "AaBbCc"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "Адреса:"
+
+#: pref.cpp:342
+#, fuzzy
+msgid "Location of the playable item"
+msgstr "В це поле введіть адресу файла стилів"
+
+#: pref.cpp:345
+#, fuzzy
+msgid "Sub title:"
+msgstr "Заголовок &кнопки:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr ""
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "Програвач:"
+
+#: pref.cpp:369
+#, fuzzy
+msgid "Network bandwidth"
+msgstr "Максимальна пропускна властивість мережі:"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "кбіт/с"
+
+#: pref.cpp:379
+#, fuzzy
+msgid "Maximum bitrate:"
+msgstr "Максимальна частота вибірки:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "Файл виводу:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "Почати &запис"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "Поточне джерело: "
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "Записувач"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "Автопрогравання"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "&Ні"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr ""
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "&Після"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "Час (сек):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "Зупинити запис"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "Почати запис"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "Поточне джерело: "
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "Формат"
+
+#: pref.cpp:544
+#, fuzzy
+msgid "Same as source"
+msgstr "Назва джерела новин"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "Нетиповий"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "Параметри програми mencoder:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "&MEncoder"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "Аргументи FFMpeg:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "&FFMpeg"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "Відеодрайвер:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "Аудіодрайвер:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr ""
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr ""
+
+#: pref.cpp:670
+#, fuzzy
+msgid "Fast"
+msgstr "Швидка"
+
+#: pref.cpp:693
+#, fuzzy
+msgid "Horizontal deblocking"
+msgstr "Зчеплення горизонтальне 1"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+#, fuzzy
+msgid "Auto quality"
+msgstr "Якість відео:"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr ""
+
+#: pref.cpp:712
+#, fuzzy
+msgid "Vertical deblocking"
+msgstr "Зчеплення вертикальне 1"
+
+#: pref.cpp:732
+#, fuzzy
+msgid "Dering filter"
+msgstr "<b>Застосування дії фільтра:</b> %1"
+
+#: pref.cpp:752
+#, fuzzy
+msgid "Auto brightness/contrast"
+msgstr "Ав&томатичне коректування яскравості/контрастності"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr ""
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr ""
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr ""
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr ""
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr ""
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr ""
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr ""
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr ""
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr ""
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr ""
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr ""
+
+#: pref.cpp:829
+#, fuzzy
+msgid "Custom Preset"
+msgstr "Comment=Нетиповий проект"
+
+#: pref.cpp:831
+#, fuzzy
+msgid "Deinterlacing"
+msgstr "Вилучення через-рядкової розгортки"
+
+#: pref.cpp:837
+#, fuzzy
+msgid "Reset Settings?"
+msgstr "Скинути налаштування шрифту"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "Повний екран"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "Масштаб:"
diff --git a/po/xx.po b/po/xx.po
new file mode 100644
index 0000000..48a6478
--- /dev/null
+++ b/po/xx.po
@@ -0,0 +1,1670 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: kmplayer\n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2007-06-11 15:59+0000\n"
+"Last-Translator: transxx program <null@kde.org>\n"
+"Language-Team: Test Language <kde-i18n-doc@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "xxYour namesxx"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "xxYour emailsxx"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "xxP&layxx"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "xx&Pausexx"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "xx&Stopxx"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "xxIncrease Volumexx"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "xxDecrease Volumexx"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "xx% Cache fillxx"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "xxKMPlayer: Playingxx"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "xxKMPlayer: Stop Playingxx"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "xxHREFxx"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "xxWEBxx"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "xxMost Recentxx"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "xxPersistent Playlistsxx"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "xxNew &Windowxx"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "xxClear &Historyxx"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "xx&Open DVDxx"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "xx&Open VCDxx"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "xx&Open Audio CDxx"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "xx&Open Pipe...xx"
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "xx&Connectxx"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "xxC&onsolexx"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "xxPla&y Listxx"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "xxMinimal modexx"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "xx50% xx"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "xx100% xx"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "xx150% xx"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "xx&Edit modexx"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "xxSync &with playlistxx"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "xxShow Popup Menuxx"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "xxShow Language Menuxx"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "xx&Keep Width/Height Ratioxx"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "xx&Full Screenxx"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "xx&Arts Controlxx"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "xxOpens a new application windowxx"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "xxOpens an existing filexx"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "xxOpens a recently used filexx"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "xxCloses the actual sourcexx"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "xxQuits the applicationxx"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "xxEnables/disables the statusbarxx"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "xxEnables/disables the menubarxx"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "xxReady.xx"
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "xxS&ourcexx"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "xx&DVDxx"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "xx&DVD Navigatorxx"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "xxV&CDxx"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "xx&TVxx"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "xx&Audio CDxx"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "xx&Add to listxx"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "xxAdd in new &Groupxx"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "xx&Copy herexx"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "xxV&ideoxx"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "xxMore...xx"
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "xxDVD Navigation...xx"
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "xxReadyxx"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "xxOpening DVD...xx"
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "xxOpening VCD...xx"
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "xxOpening Audio CD...xx"
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "xxOpening pipe...xx"
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "xxRead From Pipexx"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+"xxEnter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:xx"
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "xxOpening VDR...xx"
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "xxIntroxx"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "xxOpening file...xx"
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "xxExitxx"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "xxOpening a new application window...xx"
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "xx*|All Filesxx"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "xxOpen Filexx"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "xxSave Filexx"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"xxError opening file %1.\n"
+"%2.xx"
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "xxClosing file...xx"
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "xxExiting...xx"
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "xxShow Menubar with %1xx"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "xxMove herexx"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "xxNew groupxx"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "xx&Delete itemxx"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "xx&Move upxx"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "xxMove &downxx"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "xxAuto play after opening DVDxx"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "xxStart playing DVD right after opening DVDxx"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "xxDVD device:xx"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "xxPath to your DVD device, you must have read rights to this devicexx"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "xxOptical Disksxx"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "xxDVDxx"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "xxCDROM - Audio Compact Diskxx"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "xxVCD - Video Compact Diskxx"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "xxDVD - Digital Video Diskxx"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "xx&Titlesxx"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "xx&Chaptersxx"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "xxAudio &Languagexx"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "xx&SubTitlesxx"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "xxSourcexx"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "xxDVDNavxx"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "xx&Nextxx"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "xx&Rootxx"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "xx&Upxx"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "xxAuto play after opening a VCDxx"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "xxStart playing VCD right after opening VCDxx"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "xxVCD (CDROM) device:xx"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr ""
+"xxPath to your CDROM/DVD device, you must have read rights to this devicexx"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "xxVCDxx"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "xxTrack xx"
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "xxAudio CDxx"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "xxTrack %1xx"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "xxPipexx"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "xxPipe - %1xx"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "xxBind address:xx"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "xxIf you have multiple network devices, you can limit accessxx"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "xxListen port:xx"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "xxMaximum connections:xx"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "xxMaximum bandwidth (kbit):xx"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "xxTemporary feed file:xx"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "xxFeed file size (kB):xx"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "xxFormat:xx"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "xxOnly avi, mpeg and rm work for mplayer playbackxx"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "xxAudio codec:xx"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "xxAudio bit rate (kbit):xx"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "xxAudio sample rate (Hz):xx"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "xxVideo codec:xx"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "xxVideo bit rate (kbit):xx"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "xxQuality (1-31):xx"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "xxFrame rate (Hz):xx"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "xxGop size:xx"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "xxWidth (pixels):xx"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "xxHeight (pixels):xx"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "xxAllow access from:xx"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "xx'Single IP' or 'start-IP end-IP' for IP rangesxx"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "xxHost/IP or IP Rangexx"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "xxLoadxx"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "xxStartxx"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "xxBroadcastingxx"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "xxProfilesxx"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "xxFailed to end ffserver process.xx"
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"xxFailed to start ffserver.\n"
+"xx\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "xxFailed to start ffmpeg.xx"
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "xxFFServerxx"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "xxAutoxx"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "xxOpen Sound Systemxx"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "xxSimple DirectMedia Layerxx"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "xxAdvanced Linux Sound Architecturexx"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "xxAnalog Real-Time Synthesizerxx"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "xxJACK Audio Connection Kitxx"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "xxOpenALxx"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "xxEnlightened Sound Daemonxx"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "xxAdvanced Linux Sound Architecture v0.5xx"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "xxAdvanced Linux Sound Architecture v0.9xx"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "xxUse back-end defaultsxx"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "xxX11Shmxx"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "xxXVidixxx"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr "xxXvMCxx"
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr "xxSDLxx"
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr "xxOpenGLxx"
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr "xxOpenGL MTxx"
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "xxXVideoxx"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "xxPlaylist backgroundxx"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "xxPlaylist foregroundxx"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "xxConsole backgroundxx"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "xxPlaylist active itemxx"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "xxConsole foregroundxx"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "xxVideo backgroundxx"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "xxViewing area backgroundxx"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "xxInfo window backgroundxx"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "xxInfo window foregroundxx"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "xxPlaylistxx"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "xxInfo windowxx"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "xxFile %1 does not exist.xx"
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "xxSub title file %1 does not exist.xx"
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "xxVolume is %1xx"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "xx&Play withxx"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "xxCon&solexx"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "xxPlay&listxx"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "xx&Audio languagesxx"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "xx&Subtitlesxx"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "xxContrast:xx"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "xxBrightness:xx"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "xxHue:xx"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "xxSaturation:xx"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "xxCo&lorsxx"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "xx&Configure KMPlayer...xx"
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "xxEdit playlist &itemxx"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "xxNot Runningxx"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "xxBufferingxx"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "xxPlayingxx"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "xxRecorder %1 %2xx"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "xxPlayer %1 %2xx"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "xxUnknownxx"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "xxURLxx"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "xxDisconnectedxx"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "xxURL - %1xx"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "xxConnectingxx"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "xxFailed to end player process.xx"
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "xx&MPlayerxx"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "xxSize patternxx"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "xxCache patternxx"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "xxPosition patternxx"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "xxIndex patternxx"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "xxReference URL patternxx"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "xxReference patternxx"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "xxStart patternxx"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "xxDVD language patternxx"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "xxDVD subtitle patternxx"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "xxDVD titles patternxx"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "xxDVD chapters patternxx"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "xxVCD track patternxx"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "xxAudio CD tracks patternxx"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "xxMPlayer command:xx"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "xxAdditional command line arguments:xx"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "xxCache size:xx"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "xxkBxx"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "xxBuild new index when possiblexx"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "xxAllows seeking in indexed files (AVIs)xx"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "xxGeneral Optionsxx"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "xxMPlayerxx"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "xx&Xinexx"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "xx&GStreamerxx"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "xxVideo device:xx"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "xxAudio device:xx"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "xxName:xx"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "xxWidth:xx"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "xxHeight:xx"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "xxDo not immediately playxx"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "xxOnly start playing after clicking the play buttonxx"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "xxNorm:xx"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "xxChannelxx"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "xxFrequency (MHz)xx"
+
+#: kmplayertvsource.cpp:140
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"xxYou are about to remove this device from the Source menu.\n"
+"Continue?xx"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "xxConfirmxx"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "xxDriver:xx"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "xxdummy, v4l or bsdbt848xx"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "xxDevice:xx"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "xxPath to your video device, eg. /dev/video0xx"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "xxScan...xx"
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "xxGeneralxx"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "xxtv devicexx"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "xxTelevisionxx"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "xxTVxx"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "xxTV: xx"
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "xxDevice already present.xx"
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "xxNo device found.xx"
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "xxTVScannerxx"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "xxXVideo portxx"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+"xxPort base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more informationxx"
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "xxCommunication port:xx"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+"xxCommunication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too.xx"
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr "xxScalexx"
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr "xx4:3xx"
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr "xx16:9xx"
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr "xxAspects to use when viewing VDRxx"
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "xxVDRxx"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "xxDis&connectxx"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr "xxVDR Key Upxx"
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr "xxVDR Key Downxx"
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr "xxVDR Key Backxx"
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr "xxVDR Key Okxx"
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr "xxVDR Key Setupxx"
+
+#: kmplayervdr.cpp:249
+msgid "VDR Key Channels"
+msgstr "xxVDR Key Channelsxx"
+
+#: kmplayervdr.cpp:250
+msgid "VDR Key Menu"
+msgstr "xxVDR Key Menuxx"
+
+#: kmplayervdr.cpp:251
+msgid "VDR Key Red"
+msgstr "xxVDR Key Redxx"
+
+#: kmplayervdr.cpp:252
+msgid "VDR Key Green"
+msgstr "xxVDR Key Greenxx"
+
+#: kmplayervdr.cpp:253
+msgid "VDR Key Yellow"
+msgstr "xxVDR Key Yellowxx"
+
+#: kmplayervdr.cpp:254
+msgid "VDR Key Blue"
+msgstr "xxVDR Key Bluexx"
+
+#: kmplayervdr.cpp:259
+msgid "VDR Key 0"
+msgstr "xxVDR Key 0xx"
+
+#: kmplayervdr.cpp:260
+msgid "VDR Key 1"
+msgstr "xxVDR Key 1xx"
+
+#: kmplayervdr.cpp:261
+msgid "VDR Key 2"
+msgstr "xxVDR Key 2xx"
+
+#: kmplayervdr.cpp:262
+msgid "VDR Key 3"
+msgstr "xxVDR Key 3xx"
+
+#: kmplayervdr.cpp:263
+msgid "VDR Key 4"
+msgstr "xxVDR Key 4xx"
+
+#: kmplayervdr.cpp:264
+msgid "VDR Key 5"
+msgstr "xxVDR Key 5xx"
+
+#: kmplayervdr.cpp:265
+msgid "VDR Key 6"
+msgstr "xxVDR Key 6xx"
+
+#: kmplayervdr.cpp:266
+msgid "VDR Key 7"
+msgstr "xxVDR Key 7xx"
+
+#: kmplayervdr.cpp:267
+msgid "VDR Key 8"
+msgstr "xxVDR Key 8xx"
+
+#: kmplayervdr.cpp:268
+msgid "VDR Key 9"
+msgstr "xxVDR Key 9xx"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "xxHost not foundxx"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "xxConnection refusedxx"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "xxCustom VDR commandxx"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+"xxYou can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:xx"
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "xxPort xx"
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "xxX&Videoxx"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "xxPlay Listxx"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "xxVolume:xx"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "xxKMPlayerxx"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "xxfile to openxx"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr "xxunnamedxx"
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr "xxnonexx"
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "xx[attributes]xx"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "xx&Copy to Clipboardxx"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "xx&Show allxx"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "xxPreferencesxx"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "xxLooksxx"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "xxOutputxx"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "xxRecordingxx"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "xxMEncoderxx"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "xxFFMpegxx"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "xxOutput Pluginsxx"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "xxPostprocessingxx"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "xxWindowxx"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "xxKeep size ratioxx"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"xxWhen checked, movie will keep its aspect ratio\n"
+"when window is resizedxx"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "xxDock in system trayxx"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+"xxWhen checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button.xx"
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr "xxAuto resize to video sizesxx"
+
+#: pref.cpp:217
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"xxWhen checked, KMPlayer will resize to movie sizes\n"
+"when video startsxx"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr "xxRemember window size on exitxx"
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr "xxAlways start with fixed sizexx"
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "xxLoopxx"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "xxMakes current movie loopxx"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "xxAllow framedropsxx"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "xxAllow dropping frames for better audio and video synchronizationxx"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "xxAuto set volume on startxx"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+"xxWhen a new source is selected, the volume will be set according the volume "
+"controlxx"
+
+#: pref.cpp:235
+msgid "Auto set colors on start"
+msgstr "xxAuto set colors on startxx"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+"xxWhen a movie starts, the colors will be set according the sliders for "
+"colorsxx"
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "xxControl Panelxx"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "xxShow config buttonxx"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr "xxAdd a button that will popup a config menuxx"
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "xxShow playlist buttonxx"
+
+#: pref.cpp:245
+msgid "Add a playlist button to the control buttons"
+msgstr "xxAdd a playlist button to the control buttonsxx"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "xxShow record buttonxx"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "xxAdd a record button to the control buttonsxx"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "xxShow broadcast buttonxx"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "xxAdd a broadcast button to the control buttonsxx"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "xxForward/backward seek time:xx"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "xxColorsxx"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr "xxAaBbCcxx"
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "xxLocation:xx"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr "xxLocation of the playable itemxx"
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "xxSub title:xx"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+"xxOptional location of a file containing the subtitles of the URL abovexx"
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "xxEnable 'Click to Play' supportxx"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr "xxSupport for WEB pages having a start imagexx"
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "xxUse movie player:xx"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "xxNetwork bandwidthxx"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+"xxSometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video.xx"
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+"xxSometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video.xx"
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr "xxPreferred bitrate:xx"
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr "xxkbit/sxx"
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "xxMaximum bitrate:xx"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "xxOutput file:xx"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "xxStart &Recordingxx"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "xxCurrent source: xx"
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "xxRecorderxx"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "xxAuto Playbackxx"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "xx&Noxx"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "xx&When recording finishedxx"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "xxA&fterxx"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "xxTime (seconds):xx"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "xxStop Recordingxx"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "xxStart Recordingxx"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "xxCurrent Source: xx"
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "xxFormatxx"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "xxSame as sourcexx"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "xxCustomxx"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "xxMencoder arguments:xx"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "xx&MEncoderxx"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr "xxMPlayer -&dumpstreamxx"
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "xxFFMpeg arguments:xx"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "xx&FFMpegxx"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr ""
+"xxSets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower.xx"
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "xxVideo driver:xx"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "xxAudio driver:xx"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "xxEnable use of postprocessing filtersxx"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "xxDisable use of postprocessing when watching TV/DVDxx"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "xxFastxx"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "xxHorizontal deblockingxx"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "xxAuto qualityxx"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "xxChrominance filteringxx"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "xxVertical deblockingxx"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "xxDering filterxx"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "xxAuto brightness/contrastxx"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "xxStretch luminance to full rangexx"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "xxTemporal noise reducerxx"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "xxLinear blend deinterlacerxx"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "xxLinear interpolating deinterlacerxx"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "xxCubic interpolating deinterlacerxx"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "xxMedian deinterlacerxx"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "xxFFmpeg deinterlacerxx"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "xxEnable mplayer's default postprocessing filtersxx"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr "xxEnable custom postprocessing filters (See: Custom preset -tab)xx"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "xxEnable mplayer's fast postprocessing filtersxx"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+msgid "Filter is used if there is enough CPU"
+msgstr "xxFilter is used if there is enough CPUxx"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "xxStretches luminance to full range (0..255)xx"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "xxCustom Presetxx"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "xxDeinterlacingxx"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "xxReset Settings?xx"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"xxYou are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+"xx\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "xxVD&Rxx"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "xxFullscreenxx"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr "xxScale:xx"
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..b918801
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,1662 @@
+# translation of kmplayer.po to zh_CN
+# translation of kmplayer.po to zh_CN
+# translation of kmplayer.po to Chinese(Simplified)
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# Justin Fang <justin_fang@msn.com>, 2003.
+# Yan Shuangchun <yahzee@d3eye.com>, 2003.
+# zhu-zhy <sp_xym@hotmail.com>, 2003.
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: 2007-09-22 09:34+0200\n"
+"PO-Revision-Date: 2005-10-15 22:00+0800\n"
+"Last-Translator: zhu-zhy <sp_xym@hotmail.com>\n"
+"Language-Team: zh_CN <i18n-translation@lists.linux.net.cn>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3\n"
+
+#: _translatorinfo.cpp:1
+msgid ""
+"_: NAME OF TRANSLATORS\n"
+"Your names"
+msgstr "方骏,颜双春,朱鸷勇"
+
+#: _translatorinfo.cpp:3
+msgid ""
+"_: EMAIL OF TRANSLATORS\n"
+"Your emails"
+msgstr "justin_fang@msn.com,yahzee@d3eye.com,sp_xym@hotmail.com"
+
+#: kmplayer_part.cpp:163 kmplayerapp.cpp:586
+msgid "P&lay"
+msgstr "播放(&L)"
+
+#: kmplayer_part.cpp:164 kmplayerapp.cpp:587
+msgid "&Pause"
+msgstr "暂停(&P)"
+
+#: kmplayer_part.cpp:165 kmplayerapp.cpp:588
+msgid "&Stop"
+msgstr "停止(&S)"
+
+#: kmplayer_part.cpp:166 kmplayerapp.cpp:566 kmplayerapp.cpp:641
+msgid "Increase Volume"
+msgstr "增加音量"
+
+#: kmplayer_part.cpp:167 kmplayerapp.cpp:567 kmplayerapp.cpp:642
+msgid "Decrease Volume"
+msgstr "减少音量"
+
+#: kmplayer_part.cpp:563
+msgid "% Cache fill"
+msgstr "% 缓存已满"
+
+#: kmplayer_part.cpp:588
+msgid "KMPlayer: Playing"
+msgstr "KMPlayer:正在播放"
+
+#: kmplayer_part.cpp:601
+msgid "KMPlayer: Stop Playing"
+msgstr "KMPlayer:停止播放"
+
+#: kmplayer_part.cpp:1093
+msgid "HREF"
+msgstr "HREF"
+
+#: kmplayer_part.cpp:1186
+msgid "WEB"
+msgstr "网络"
+
+#: kmplayerapp.cpp:234
+msgid "Most Recent"
+msgstr "最近"
+
+#: kmplayerapp.cpp:319
+msgid "Persistent Playlists"
+msgstr "永久播放列表"
+
+#: kmplayerapp.cpp:553
+msgid "New &Window"
+msgstr "新窗口(&W)"
+
+#: kmplayerapp.cpp:557
+msgid "Clear &History"
+msgstr "清除历史(&H)"
+
+#: kmplayerapp.cpp:560 kmplayerapp.cpp:625 kmplayerapp.cpp:627
+msgid "&Open DVD"
+msgstr "打开 DVD(&O)"
+
+#: kmplayerapp.cpp:561 kmplayerapp.cpp:632
+msgid "&Open VCD"
+msgstr "打开 VCD(&O)"
+
+#: kmplayerapp.cpp:562 kmplayerapp.cpp:634
+msgid "&Open Audio CD"
+msgstr "打开音频 CD(&O)"
+
+#: kmplayerapp.cpp:563
+msgid "&Open Pipe..."
+msgstr "打开管道(&O)..."
+
+#: kmplayerapp.cpp:565 kmplayervdr.cpp:290
+msgid "&Connect"
+msgstr "连接(&C)"
+
+#: kmplayerapp.cpp:568 kmplayerapp.cpp:715
+msgid "C&onsole"
+msgstr "控制台(&O)"
+
+#: kmplayerapp.cpp:570
+msgid "Pla&y List"
+msgstr "播放列表(&)"
+
+#: kmplayerapp.cpp:571
+msgid "Minimal mode"
+msgstr "最小模式"
+
+#: kmplayerapp.cpp:572 kmplayercontrolpanel.cpp:389
+#, c-format
+msgid "50%"
+msgstr "50%"
+
+#: kmplayerapp.cpp:573 kmplayercontrolpanel.cpp:390
+#, c-format
+msgid "100%"
+msgstr "100%"
+
+#: kmplayerapp.cpp:574 kmplayercontrolpanel.cpp:391
+#, c-format
+msgid "150%"
+msgstr "150%"
+
+#: kmplayerapp.cpp:575
+msgid "&Edit mode"
+msgstr "编辑模式(&E)"
+
+#: kmplayerapp.cpp:576
+msgid "Sync &with playlist"
+msgstr "与播放列表同步(&W)"
+
+#: kmplayerapp.cpp:578
+msgid "Show Popup Menu"
+msgstr "显示弹出菜单"
+
+#: kmplayerapp.cpp:579
+msgid "Show Language Menu"
+msgstr "显示语言菜单"
+
+#: kmplayerapp.cpp:580
+msgid "&Keep Width/Height Ratio"
+msgstr "保持宽高比(&K)"
+
+#: kmplayerapp.cpp:584 kmplayercontrolpanel.cpp:393
+msgid "&Full Screen"
+msgstr "全屏(&F)"
+
+#: kmplayerapp.cpp:589
+msgid "&Arts Control"
+msgstr "aRts 控制(&A)"
+
+#: kmplayerapp.cpp:594
+msgid "Opens a new application window"
+msgstr "打开新的应用程序窗口"
+
+#: kmplayerapp.cpp:595
+msgid "Opens an existing file"
+msgstr "打开一个现有文件"
+
+#: kmplayerapp.cpp:596
+msgid "Opens a recently used file"
+msgstr "打开最近使用过的文件"
+
+#: kmplayerapp.cpp:597
+msgid "Closes the actual source"
+msgstr "关闭当前播放源"
+
+#: kmplayerapp.cpp:598
+msgid "Quits the application"
+msgstr "退出应用程序"
+
+#: kmplayerapp.cpp:600
+msgid "Enables/disables the statusbar"
+msgstr "启用/禁用状态条"
+
+#: kmplayerapp.cpp:601
+msgid "Enables/disables the menubar"
+msgstr "启用/禁用菜单栏"
+
+#: kmplayerapp.cpp:608 kmplayerapp.cpp:827 kmplayerapp.cpp:968
+#: kmplayerapp.cpp:1310 kmplayerapp.cpp:1376 kmplayerapp.cpp:1870
+#: kmplayerapp.cpp:2129 kmplayerapp.cpp:2234 kmplayerapp.cpp:2279
+msgid "Ready."
+msgstr "就绪。"
+
+#: kmplayerapp.cpp:618
+msgid "S&ource"
+msgstr "播放源(&O)"
+
+#: kmplayerapp.cpp:619
+msgid "&DVD"
+msgstr "DVD(&D)"
+
+#: kmplayerapp.cpp:624
+msgid "&DVD Navigator"
+msgstr "DVD 导航(&D)"
+
+#: kmplayerapp.cpp:629
+msgid "V&CD"
+msgstr "VCD(&C)"
+
+#: kmplayerapp.cpp:631
+msgid "&TV"
+msgstr "电视(&T)"
+
+#: kmplayerapp.cpp:633
+msgid "&Audio CD"
+msgstr "音频 CD(&A)"
+
+#: kmplayerapp.cpp:676 kmplayerapp.cpp:1513
+msgid "&Add to list"
+msgstr "添加到列表(&A)"
+
+#: kmplayerapp.cpp:677
+msgid "Add in new &Group"
+msgstr "添加到新组中(&G)"
+
+#: kmplayerapp.cpp:678
+msgid "&Copy here"
+msgstr "复制到此处(&C)"
+
+#: kmplayerapp.cpp:718 kmplayerview.cpp:404
+msgid "V&ideo"
+msgstr "视频(&I)"
+
+#: kmplayerapp.cpp:751
+msgid "More..."
+msgstr "更多..."
+
+#: kmplayerapp.cpp:801
+msgid "DVD Navigation..."
+msgstr "DVD 导航..."
+
+#: kmplayerapp.cpp:803 kmplayerapp.cpp:1437 kmplayerpartbase.cpp:1376
+msgid "Ready"
+msgstr "就绪"
+
+#: kmplayerapp.cpp:807
+msgid "Opening DVD..."
+msgstr "正在打开 DVD..."
+
+#: kmplayerapp.cpp:812
+msgid "Opening VCD..."
+msgstr "正在打开 VCD..."
+
+#: kmplayerapp.cpp:817
+msgid "Opening Audio CD..."
+msgstr "正在音频 CD..."
+
+#: kmplayerapp.cpp:822
+msgid "Opening pipe..."
+msgstr "正在打开管道..."
+
+#: kmplayerapp.cpp:824
+msgid "Read From Pipe"
+msgstr "从管道中读取"
+
+#: kmplayerapp.cpp:825
+msgid ""
+"Enter a command that will output an audio/video stream\n"
+"to the stdout. This will be piped to a player's stdin.\n"
+"\n"
+"Command:"
+msgstr ""
+
+#: kmplayerapp.cpp:835
+msgid "Opening VDR..."
+msgstr "正在打开 VDR..."
+
+#: kmplayerapp.cpp:846 kmplayerapp.cpp:849
+msgid "Intro"
+msgstr "介绍"
+
+#: kmplayerapp.cpp:956 kmplayerapp.cpp:1326
+msgid "Opening file..."
+msgstr "正在打开文件..."
+
+#: kmplayerapp.cpp:1213 kmplayerapp.cpp:1214
+msgid "Exit"
+msgstr "退出"
+
+#: kmplayerapp.cpp:1305
+msgid "Opening a new application window..."
+msgstr "正在打开一个新的应用程序窗口..."
+
+#: kmplayerapp.cpp:1314
+msgid "*|All Files"
+msgstr "*|全部文件"
+
+#: kmplayerapp.cpp:1314
+msgid "Open File"
+msgstr "打开文件"
+
+#: kmplayerapp.cpp:1333
+msgid "Save File"
+msgstr "保存文件"
+
+#: kmplayerapp.cpp:1337
+msgid ""
+"Error opening file %1.\n"
+"%2."
+msgstr ""
+"打开文件 %1 出错。\n"
+"%2。"
+
+#: kmplayerapp.cpp:1372
+msgid "Closing file..."
+msgstr "正在关闭文件..."
+
+#: kmplayerapp.cpp:1381
+msgid "Exiting..."
+msgstr "正在退出..."
+
+#: kmplayerapp.cpp:1440
+#, c-format
+msgid "Show Menubar with %1"
+msgstr "以 %1 显示菜单栏"
+
+#: kmplayerapp.cpp:1513
+msgid "Move here"
+msgstr "移至此处"
+
+#: kmplayerapp.cpp:1542
+msgid "New group"
+msgstr "新建组"
+
+#: kmplayerapp.cpp:1622
+msgid "&Delete item"
+msgstr "删除项(&D)"
+
+#: kmplayerapp.cpp:1625
+msgid "&Move up"
+msgstr "上移(&M)"
+
+#: kmplayerapp.cpp:1627
+msgid "Move &down"
+msgstr "下移(&D)"
+
+#: kmplayerapp.cpp:1707
+msgid "Auto play after opening DVD"
+msgstr "打开 DVD 后自动播放"
+
+#: kmplayerapp.cpp:1708
+msgid "Start playing DVD right after opening DVD"
+msgstr "打开 DVD 后立即播放"
+
+#: kmplayerapp.cpp:1709
+msgid "DVD device:"
+msgstr "DVD 设备:"
+
+#: kmplayerapp.cpp:1711
+msgid "Path to your DVD device, you must have read rights to this device"
+msgstr "您 DVD 设备的路径,您必需拥有该设备的读权限"
+
+#: kmplayerapp.cpp:1738
+msgid "Optical Disks"
+msgstr "光盘"
+
+#: kmplayerapp.cpp:1765 kmplayerapp.cpp:1967 kmplayerapp.cpp:1995
+#: kmplayerapp.cpp:2060
+msgid "DVD"
+msgstr "DVD"
+
+#: kmplayerapp.cpp:1778
+msgid "CDROM - Audio Compact Disk"
+msgstr "CDROM - 音频碟片"
+
+#: kmplayerapp.cpp:1779
+msgid "VCD - Video Compact Disk"
+msgstr "VCD - 视频碟片"
+
+#: kmplayerapp.cpp:1780
+msgid "DVD - Digital Video Disk"
+msgstr "DVD - 视频碟片"
+
+#: kmplayerapp.cpp:1838
+msgid "&Titles"
+msgstr "标题(&T)"
+
+#: kmplayerapp.cpp:1839
+msgid "&Chapters"
+msgstr "段落(&C)"
+
+#: kmplayerapp.cpp:1841
+msgid "Audio &Language"
+msgstr "配音语言(&L)"
+
+#: kmplayerapp.cpp:1842
+msgid "&SubTitles"
+msgstr "字幕(&S)"
+
+#: kmplayerapp.cpp:1993 kmplayerapp.cpp:2169 kmplayertvsource.cpp:570
+#: kmplayervdr.cpp:727 pref.cpp:88 pref.cpp:94
+msgid "Source"
+msgstr "播放源"
+
+#: kmplayerapp.cpp:2006
+msgid "DVDNav"
+msgstr "DVDNav"
+
+#: kmplayerapp.cpp:2024
+msgid "&Next"
+msgstr "下一段(&N)"
+
+#: kmplayerapp.cpp:2025
+msgid "&Root"
+msgstr "根目录(&R)"
+
+#: kmplayerapp.cpp:2026
+msgid "&Up"
+msgstr "向上(&U)"
+
+#: kmplayerapp.cpp:2068
+msgid "Auto play after opening a VCD"
+msgstr "打开 VCD 后自动播放"
+
+#: kmplayerapp.cpp:2069
+msgid "Start playing VCD right after opening VCD"
+msgstr "打开 VCD 后立即播放"
+
+#: kmplayerapp.cpp:2070
+msgid "VCD (CDROM) device:"
+msgstr "VCD(CDROM) 设备:"
+
+#: kmplayerapp.cpp:2072
+msgid "Path to your CDROM/DVD device, you must have read rights to this device"
+msgstr "您的 CDROM/DVD 设备的路径,您必需拥有该设备的读权限"
+
+#: kmplayerapp.cpp:2083 kmplayerapp.cpp:2143 kmplayerapp.cpp:2171
+msgid "VCD"
+msgstr "VCD"
+
+#: kmplayerapp.cpp:2101
+msgid "Track "
+msgstr "轨道 "
+
+#: kmplayerapp.cpp:2182 kmplayerapp.cpp:2248
+msgid "Audio CD"
+msgstr "音频 CD"
+
+#: kmplayerapp.cpp:2203
+#, c-format
+msgid "Track %1"
+msgstr "第 %1 轨"
+
+#: kmplayerapp.cpp:2254
+msgid "Pipe"
+msgstr "管道"
+
+#: kmplayerapp.cpp:2286
+#, c-format
+msgid "Pipe - %1"
+msgstr "管道 - %1"
+
+#: kmplayerbroadcast.cpp:160
+msgid "Bind address:"
+msgstr "Bind 地址:"
+
+#: kmplayerbroadcast.cpp:162
+msgid "If you have multiple network devices, you can limit access"
+msgstr "如果你有多个网络设备,你可以限制访问"
+
+#: kmplayerbroadcast.cpp:165
+msgid "Listen port:"
+msgstr "监听端口:"
+
+#: kmplayerbroadcast.cpp:169
+msgid "Maximum connections:"
+msgstr "最大连接数:"
+
+#: kmplayerbroadcast.cpp:173
+msgid "Maximum bandwidth (kbit):"
+msgstr "最大占用带宽(kbit):"
+
+#: kmplayerbroadcast.cpp:177
+msgid "Temporary feed file:"
+msgstr "临时传播文件:"
+
+#: kmplayerbroadcast.cpp:181
+msgid "Feed file size (kB):"
+msgstr "传播文件大小(kB):"
+
+#: kmplayerbroadcast.cpp:204
+msgid "Format:"
+msgstr "格式:"
+
+#: kmplayerbroadcast.cpp:212
+msgid "Only avi, mpeg and rm work for mplayer playback"
+msgstr "只有 avi,mpeg 和 rm 能够被 mplayer 回放"
+
+#: kmplayerbroadcast.cpp:215
+msgid "Audio codec:"
+msgstr "音频解码器:"
+
+#: kmplayerbroadcast.cpp:216
+msgid "Audio bit rate (kbit):"
+msgstr "音频比特率(kbit):"
+
+#: kmplayerbroadcast.cpp:217
+msgid "Audio sample rate (Hz):"
+msgstr "音频采样频率(Hz):"
+
+#: kmplayerbroadcast.cpp:218
+msgid "Video codec:"
+msgstr "视频解码器:"
+
+#: kmplayerbroadcast.cpp:219
+msgid "Video bit rate (kbit):"
+msgstr "视频比特率(kbit):"
+
+#: kmplayerbroadcast.cpp:220
+msgid "Quality (1-31):"
+msgstr "质量(1-31):"
+
+#: kmplayerbroadcast.cpp:221
+msgid "Frame rate (Hz):"
+msgstr "帧速率(Hz):"
+
+#: kmplayerbroadcast.cpp:222
+msgid "Gop size:"
+msgstr "Gop 大小:"
+
+#: kmplayerbroadcast.cpp:223
+msgid "Width (pixels):"
+msgstr "宽度(像素):"
+
+#: kmplayerbroadcast.cpp:224
+msgid "Height (pixels):"
+msgstr "高度(像素):"
+
+#: kmplayerbroadcast.cpp:225
+msgid "Allow access from:"
+msgstr "允许访问来自:"
+
+#: kmplayerbroadcast.cpp:230
+msgid "'Single IP' or 'start-IP end-IP' for IP ranges"
+msgstr "“单 IP”还是给出“起始 IP”的 IP 范围"
+
+#: kmplayerbroadcast.cpp:232
+msgid "Host/IP or IP Range"
+msgstr "主机/IP 或 IP 范围"
+
+#: kmplayerbroadcast.cpp:245
+msgid "Load"
+msgstr "装入"
+
+#: kmplayerbroadcast.cpp:265 kmplayerbroadcast.cpp:601
+msgid "Start"
+msgstr "开始"
+
+#: kmplayerbroadcast.cpp:458 kmplayerbroadcast.cpp:658
+msgid "Broadcasting"
+msgstr "广播"
+
+#: kmplayerbroadcast.cpp:460
+msgid "Profiles"
+msgstr "配置文件"
+
+#: kmplayerbroadcast.cpp:535 kmplayerbroadcast.cpp:591
+msgid "Failed to end ffserver process."
+msgstr "结束 ffserver 进程失败。"
+
+#: kmplayerbroadcast.cpp:552
+msgid ""
+"Failed to start ffserver.\n"
+msgstr ""
+"启动 ffserver 失败。\n"
+
+#: kmplayerbroadcast.cpp:565
+msgid "Failed to start ffmpeg."
+msgstr "启动 ffmpeg 失败。"
+
+#: kmplayerbroadcast.cpp:660
+msgid "FFServer"
+msgstr "FFServer"
+
+#: kmplayerconfig.cpp:58 kmplayerconfig.cpp:73
+msgid "Auto"
+msgstr "自动"
+
+#: kmplayerconfig.cpp:59
+msgid "Open Sound System"
+msgstr "开放音频系统"
+
+#: kmplayerconfig.cpp:60
+msgid "Simple DirectMedia Layer"
+msgstr "简单 DirectMedia 媒体层"
+
+#: kmplayerconfig.cpp:61
+msgid "Advanced Linux Sound Architecture"
+msgstr "高级 Linux 音频体系(Alsa)"
+
+#: kmplayerconfig.cpp:62
+msgid "Analog Real-Time Synthesizer"
+msgstr "模拟实时合成器"
+
+#: kmplayerconfig.cpp:63
+msgid "JACK Audio Connection Kit"
+msgstr "JACK 音频连接工具"
+
+#: kmplayerconfig.cpp:64
+msgid "OpenAL"
+msgstr "OpenAL"
+
+#: kmplayerconfig.cpp:65
+msgid "Enlightened Sound Daemon"
+msgstr "Enlightened 音频后台程序"
+
+#: kmplayerconfig.cpp:66
+msgid "Advanced Linux Sound Architecture v0.5"
+msgstr "高级 Linux 音频体系 v0.5"
+
+#: kmplayerconfig.cpp:67
+msgid "Advanced Linux Sound Architecture v0.9"
+msgstr "高级 Linux 音频体系 v0.9"
+
+#: kmplayerconfig.cpp:68
+msgid "Use back-end defaults"
+msgstr "使用后端默认值"
+
+#: kmplayerconfig.cpp:74
+msgid "X11Shm"
+msgstr "X11Shm"
+
+#: kmplayerconfig.cpp:75
+msgid "XVidix"
+msgstr "XVidix"
+
+#: kmplayerconfig.cpp:76
+msgid "XvMC"
+msgstr ""
+
+#: kmplayerconfig.cpp:77
+msgid "SDL"
+msgstr ""
+
+#: kmplayerconfig.cpp:78
+msgid "OpenGL"
+msgstr ""
+
+#: kmplayerconfig.cpp:79
+msgid "OpenGL MT"
+msgstr ""
+
+#: kmplayerconfig.cpp:80
+msgid "XVideo"
+msgstr "XVideo"
+
+#: kmplayerconfig.cpp:91
+msgid "Playlist background"
+msgstr "播放列表背景"
+
+#: kmplayerconfig.cpp:94
+msgid "Playlist foreground"
+msgstr "播放列表前景"
+
+#: kmplayerconfig.cpp:97
+msgid "Console background"
+msgstr "控制台背景"
+
+#: kmplayerconfig.cpp:98
+msgid "Playlist active item"
+msgstr "播放列表当前项"
+
+#: kmplayerconfig.cpp:103
+msgid "Console foreground"
+msgstr "控制台前景"
+
+#: kmplayerconfig.cpp:106
+msgid "Video background"
+msgstr "视频背景"
+
+#: kmplayerconfig.cpp:109
+msgid "Viewing area background"
+msgstr "显示区背景"
+
+#: kmplayerconfig.cpp:112
+msgid "Info window background"
+msgstr "信息窗口背景"
+
+#: kmplayerconfig.cpp:115
+msgid "Info window foreground"
+msgstr "信息窗口前景"
+
+#: kmplayerconfig.cpp:118
+msgid "Playlist"
+msgstr "播放列表"
+
+#: kmplayerconfig.cpp:122
+msgid "Info window"
+msgstr "信息窗口"
+
+#: kmplayerconfig.cpp:612
+msgid "File %1 does not exist."
+msgstr "文件 %1 不存在。"
+
+#: kmplayerconfig.cpp:622
+msgid "Sub title file %1 does not exist."
+msgstr "字幕文件 %1 不存在。"
+
+#: kmplayercontrolpanel.cpp:297 kmplayercontrolpanel.cpp:308
+#, c-format
+msgid "Volume is %1"
+msgstr "音量为 %1"
+
+#: kmplayercontrolpanel.cpp:383
+msgid "&Play with"
+msgstr "播放方式(&P)"
+
+#: kmplayercontrolpanel.cpp:386 kmplayerview.cpp:402
+msgid "Con&sole"
+msgstr "控制台(&S)"
+
+#: kmplayercontrolpanel.cpp:387
+msgid "Play&list"
+msgstr "播放列表(&L)"
+
+#: kmplayercontrolpanel.cpp:400
+msgid "&Audio languages"
+msgstr "音频语言(&A)"
+
+#: kmplayercontrolpanel.cpp:401
+msgid "&Subtitles"
+msgstr "字幕(&S)"
+
+#: kmplayercontrolpanel.cpp:402
+msgid "Contrast:"
+msgstr "对比度:"
+
+#: kmplayercontrolpanel.cpp:406
+msgid "Brightness:"
+msgstr "亮度:"
+
+#: kmplayercontrolpanel.cpp:410
+msgid "Hue:"
+msgstr "色调:"
+
+#: kmplayercontrolpanel.cpp:414
+msgid "Saturation:"
+msgstr "饱和度:"
+
+#: kmplayercontrolpanel.cpp:418
+msgid "Co&lors"
+msgstr "色彩(&L):"
+
+#: kmplayercontrolpanel.cpp:420
+msgid "&Configure KMPlayer..."
+msgstr "配置 KMPlayer(&C)..."
+
+#: kmplayerpartbase.cpp:183
+msgid "Edit playlist &item"
+msgstr "编辑播放列表项目(&I)"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Not Running"
+msgstr "未运行"
+
+#: kmplayerpartbase.cpp:1376
+msgid "Buffering"
+msgstr "正缓冲"
+
+#: kmplayerpartbase.cpp:1376 pref.cpp:228
+msgid "Playing"
+msgstr "播放中"
+
+#: kmplayerpartbase.cpp:1384
+msgid "Recorder %1 %2"
+msgstr "录音机 %1 %2"
+
+#: kmplayerpartbase.cpp:1402
+msgid "Player %1 %2"
+msgstr "播放器 %1 %2"
+
+#: kmplayerpartbase.cpp:1461
+msgid "Unknown"
+msgstr "未知"
+
+#: kmplayerpartbase.cpp:1467 kmplayerpartbase.cpp:1543 pref.cpp:93
+msgid "URL"
+msgstr "URL"
+
+#: kmplayerpartbase.cpp:1510
+msgid "Disconnected"
+msgstr "已断开"
+
+#: kmplayerpartbase.cpp:1564 kmplayerpartbase.cpp:1566
+#, c-format
+msgid "URL - %1"
+msgstr "URL - %1"
+
+#: kmplayerpartbase.cpp:1859
+msgid "Connecting"
+msgstr "正连接"
+
+#: kmplayerprocess.cpp:180
+msgid "Failed to end player process."
+msgstr "结束播放器进程失败。"
+
+#: kmplayerprocess.cpp:377
+msgid "&MPlayer"
+msgstr "&Mplayer"
+
+#: kmplayerprocess.cpp:870
+msgid "Size pattern"
+msgstr "大小模式"
+
+#: kmplayerprocess.cpp:871
+msgid "Cache pattern"
+msgstr "缓存模式"
+
+#: kmplayerprocess.cpp:872
+msgid "Position pattern"
+msgstr "位置模式"
+
+#: kmplayerprocess.cpp:873
+msgid "Index pattern"
+msgstr "索引模式"
+
+#: kmplayerprocess.cpp:874
+msgid "Reference URL pattern"
+msgstr "引用 URL 模式"
+
+#: kmplayerprocess.cpp:875
+msgid "Reference pattern"
+msgstr "引用模式"
+
+#: kmplayerprocess.cpp:876
+msgid "Start pattern"
+msgstr "开始模式"
+
+#: kmplayerprocess.cpp:877
+msgid "DVD language pattern"
+msgstr "DVD 语言模式"
+
+#: kmplayerprocess.cpp:878
+msgid "DVD subtitle pattern"
+msgstr "DVD 字幕模式"
+
+#: kmplayerprocess.cpp:879
+msgid "DVD titles pattern"
+msgstr "DVD 标题模式"
+
+#: kmplayerprocess.cpp:880
+msgid "DVD chapters pattern"
+msgstr "DVD 段落模式"
+
+#: kmplayerprocess.cpp:881
+msgid "VCD track pattern"
+msgstr "VCD 轨道模式"
+
+#: kmplayerprocess.cpp:882
+msgid "Audio CD tracks pattern"
+msgstr "音频 CD 轨道模式"
+
+#: kmplayerprocess.cpp:904
+msgid "MPlayer command:"
+msgstr "MPlayer 命令:"
+
+#: kmplayerprocess.cpp:905
+msgid "Additional command line arguments:"
+msgstr "附加命令行参数:"
+
+#: kmplayerprocess.cpp:906
+msgid "Cache size:"
+msgstr "缓存大小:"
+
+#: kmplayerprocess.cpp:906
+msgid "kB"
+msgstr "kB"
+
+#: kmplayerprocess.cpp:908
+msgid "Build new index when possible"
+msgstr "尽可能建立新索引"
+
+#: kmplayerprocess.cpp:910
+msgid "Allows seeking in indexed files (AVIs)"
+msgstr "允许在已建立索引的文件(AVI)中搜索"
+
+#: kmplayerprocess.cpp:976 kmplayerprocess.cpp:1667 pref.cpp:75 pref.cpp:86
+msgid "General Options"
+msgstr "常规选项"
+
+#: kmplayerprocess.cpp:978
+msgid "MPlayer"
+msgstr "Mplayer"
+
+#: kmplayerprocess.cpp:1685 pref.cpp:609
+msgid "&Xine"
+msgstr "&Xine"
+
+#: kmplayerprocess.cpp:1761
+msgid "&GStreamer"
+msgstr "&GStreamer"
+
+#: kmplayerprocess.cpp:2528
+msgid "&Ice Ape"
+msgstr ""
+
+#: kmplayertvsource.cpp:63
+msgid "Video device:"
+msgstr "视频设备:"
+
+#: kmplayertvsource.cpp:66
+msgid "Audio device:"
+msgstr "音频设备:"
+
+#: kmplayertvsource.cpp:68
+msgid "Name:"
+msgstr "名称:"
+
+#: kmplayertvsource.cpp:70
+msgid "Width:"
+msgstr "宽度:"
+
+#: kmplayertvsource.cpp:72
+msgid "Height:"
+msgstr "高度:"
+
+#: kmplayertvsource.cpp:74
+msgid "Do not immediately play"
+msgstr "不要立即播放"
+
+#: kmplayertvsource.cpp:76
+msgid "Only start playing after clicking the play button"
+msgstr "点击播放按钮之后才开始播放"
+
+#: kmplayertvsource.cpp:87
+msgid "Norm:"
+msgstr "标准:"
+
+#: kmplayertvsource.cpp:99
+msgid "Channel"
+msgstr "声道"
+
+#: kmplayertvsource.cpp:100
+msgid "Frequency (MHz)"
+msgstr "频率(MHz)"
+
+#: kmplayertvsource.cpp:140
+#, fuzzy
+msgid ""
+"You are about to remove this device from the Source menu.\n"
+"Continue?"
+msgstr ""
+"您正在从播放源菜单移去此设备。\n"
+"要继续么?"
+
+#: kmplayertvsource.cpp:140
+msgid "Confirm"
+msgstr "确认"
+
+#: kmplayertvsource.cpp:155
+msgid "Driver:"
+msgstr "驱动:"
+
+#: kmplayertvsource.cpp:157
+msgid "dummy, v4l or bsdbt848"
+msgstr "虚拟, v41 或 bsdbt848 模式"
+
+#: kmplayertvsource.cpp:158
+msgid "Device:"
+msgstr "设备:"
+
+#: kmplayertvsource.cpp:160
+msgid "Path to your video device, eg. /dev/video0"
+msgstr "您视频设备的路径,如 /dev/video0"
+
+#: kmplayertvsource.cpp:161
+msgid "Scan..."
+msgstr "扫描 ..."
+
+#: kmplayertvsource.cpp:171 pref.cpp:80 pref.cpp:120 pref.cpp:822
+msgid "General"
+msgstr "常规"
+
+#: kmplayertvsource.cpp:246
+msgid "tv device"
+msgstr "电视设备"
+
+#: kmplayertvsource.cpp:322
+msgid "Television"
+msgstr "电视"
+
+#: kmplayertvsource.cpp:346 kmplayertvsource.cpp:520 kmplayertvsource.cpp:572
+msgid "TV"
+msgstr "电视"
+
+#: kmplayertvsource.cpp:476
+msgid "TV: "
+msgstr "电视:"
+
+#: kmplayertvsource.cpp:599
+msgid "Device already present."
+msgstr "设备已存在。"
+
+#: kmplayertvsource.cpp:610
+msgid "No device found."
+msgstr "未发现任何设备。"
+
+#: kmplayertvsource.cpp:632
+msgid "TVScanner"
+msgstr "TV扫描器"
+
+#: kmplayervdr.cpp:90
+msgid "XVideo port"
+msgstr "XVideo 端口"
+
+#: kmplayervdr.cpp:92
+msgid ""
+"Port base of the X Video extension.\n"
+"If left to default (0), the first available port will be used. However if you "
+"have multiple XVideo instances, you might have to provide the port to use "
+"here.\n"
+"See the output from 'xvinfo' for more information"
+msgstr ""
+
+#: kmplayervdr.cpp:93
+msgid "Communication port:"
+msgstr "通讯端口:"
+
+#: kmplayervdr.cpp:96
+msgid ""
+"Communication port with VDR. Default is port 2001.\n"
+"If you use another port, with the '-p' option of 'vdr', you must set it here "
+"too."
+msgstr ""
+
+#: kmplayervdr.cpp:100
+msgid "Scale"
+msgstr ""
+
+#: kmplayervdr.cpp:101
+msgid "4:3"
+msgstr ""
+
+#: kmplayervdr.cpp:102
+msgid "16:9"
+msgstr ""
+
+#: kmplayervdr.cpp:103
+msgid "Aspects to use when viewing VDR"
+msgstr ""
+
+#: kmplayervdr.cpp:173 kmplayervdr.cpp:729
+msgid "VDR"
+msgstr "VDR"
+
+#: kmplayervdr.cpp:243
+msgid "Dis&connect"
+msgstr "断开(&C)"
+
+#: kmplayervdr.cpp:244
+msgid "VDR Key Up"
+msgstr ""
+
+#: kmplayervdr.cpp:245
+msgid "VDR Key Down"
+msgstr ""
+
+#: kmplayervdr.cpp:246
+msgid "VDR Key Back"
+msgstr ""
+
+#: kmplayervdr.cpp:247
+msgid "VDR Key Ok"
+msgstr ""
+
+#: kmplayervdr.cpp:248
+msgid "VDR Key Setup"
+msgstr ""
+
+#: kmplayervdr.cpp:249
+#, fuzzy
+msgid "VDR Key Channels"
+msgstr "声道"
+
+#: kmplayervdr.cpp:250
+#, fuzzy
+msgid "VDR Key Menu"
+msgstr "声道"
+
+#: kmplayervdr.cpp:251
+#, fuzzy
+msgid "VDR Key Red"
+msgstr "声道"
+
+#: kmplayervdr.cpp:252
+#, fuzzy
+msgid "VDR Key Green"
+msgstr "声道"
+
+#: kmplayervdr.cpp:253
+#, fuzzy
+msgid "VDR Key Yellow"
+msgstr "声道"
+
+#: kmplayervdr.cpp:254
+#, fuzzy
+msgid "VDR Key Blue"
+msgstr "声道"
+
+#: kmplayervdr.cpp:259
+#, fuzzy
+msgid "VDR Key 0"
+msgstr "声道"
+
+#: kmplayervdr.cpp:260
+#, fuzzy
+msgid "VDR Key 1"
+msgstr "声道"
+
+#: kmplayervdr.cpp:261
+#, fuzzy
+msgid "VDR Key 2"
+msgstr "声道"
+
+#: kmplayervdr.cpp:262
+#, fuzzy
+msgid "VDR Key 3"
+msgstr "声道"
+
+#: kmplayervdr.cpp:263
+#, fuzzy
+msgid "VDR Key 4"
+msgstr "声道"
+
+#: kmplayervdr.cpp:264
+#, fuzzy
+msgid "VDR Key 5"
+msgstr "声道"
+
+#: kmplayervdr.cpp:265
+#, fuzzy
+msgid "VDR Key 6"
+msgstr "声道"
+
+#: kmplayervdr.cpp:266
+#, fuzzy
+msgid "VDR Key 7"
+msgstr "声道"
+
+#: kmplayervdr.cpp:267
+#, fuzzy
+msgid "VDR Key 8"
+msgstr "声道"
+
+#: kmplayervdr.cpp:268
+#, fuzzy
+msgid "VDR Key 9"
+msgstr "声道"
+
+#: kmplayervdr.cpp:453
+msgid "Host not found"
+msgstr "主机未找到"
+
+#: kmplayervdr.cpp:455
+msgid "Connection refused"
+msgstr "连接被拒绝"
+
+#: kmplayervdr.cpp:497
+msgid "Custom VDR command"
+msgstr "自定义 VDR 命令"
+
+#: kmplayervdr.cpp:497
+msgid ""
+"You can pass commands to VDR.\n"
+"Enter 'HELP' to see a list of available commands.\n"
+"You can see VDR response in the console window.\n"
+"\n"
+"VDR Command:"
+msgstr ""
+
+#: kmplayervdr.cpp:696
+msgid "Port "
+msgstr "端口 "
+
+#: kmplayervdr.cpp:752
+msgid "X&Video"
+msgstr "X&Video"
+
+#: kmplayerview.cpp:190
+msgid "Play List"
+msgstr "播放列表"
+
+#: kmplayerview.cpp:367
+msgid "Volume:"
+msgstr "音量:"
+
+#: main.cpp:31 main.cpp:47
+msgid "KMPlayer"
+msgstr "KMplayer"
+
+#: main.cpp:36
+msgid "file to open"
+msgstr "要打开的文件"
+
+#: playlistview.cpp:180
+msgid "unnamed"
+msgstr ""
+
+#: playlistview.cpp:180
+msgid "none"
+msgstr ""
+
+#: playlistview.cpp:198
+msgid "[attributes]"
+msgstr "[属性]"
+
+#: playlistview.cpp:353
+msgid "&Copy to Clipboard"
+msgstr "复制到剪贴板(&C)"
+
+#: playlistview.cpp:364
+msgid "&Show all"
+msgstr "全部显示(&S)"
+
+#: pref.cpp:67
+msgid "Preferences"
+msgstr "首选项"
+
+#: pref.cpp:82
+msgid "Looks"
+msgstr "外观"
+
+#: pref.cpp:85
+msgid "Output"
+msgstr "输出"
+
+#: pref.cpp:96 pref.cpp:122
+msgid "Recording"
+msgstr "录制"
+
+#: pref.cpp:103
+msgid "MEncoder"
+msgstr "MEncoder"
+
+#: pref.cpp:107
+msgid "FFMpeg"
+msgstr "FFMpeg"
+
+#: pref.cpp:124
+msgid "Output Plugins"
+msgstr "输出插件"
+
+#: pref.cpp:129 pref.cpp:130
+msgid "Postprocessing"
+msgstr "后期处理"
+
+#: pref.cpp:208
+msgid "Window"
+msgstr "窗口"
+
+#: pref.cpp:212
+msgid "Keep size ratio"
+msgstr "保持大小比例"
+
+#: pref.cpp:213
+msgid ""
+"When checked, movie will keep its aspect ratio\n"
+"when window is resized"
+msgstr ""
+"选中时,当窗口大小被改变的时候,\n"
+"电影画面将保持宽高比。"
+
+#: pref.cpp:214
+msgid "Dock in system tray"
+msgstr "停靠于系统托盘"
+
+#: pref.cpp:215
+msgid ""
+"When checked, an icon of KMPlayer will be added to the system tray.\n"
+"When clicked it will hide KMPlayer's main window and removing KMPlayer's "
+"taskbar button."
+msgstr ""
+
+#: pref.cpp:216
+msgid "Auto resize to video sizes"
+msgstr ""
+
+#: pref.cpp:217
+#, fuzzy
+msgid ""
+"When checked, KMPlayer will resize to movie sizes\n"
+"when video starts"
+msgstr ""
+"选中时,当窗口大小被改变的时候,\n"
+"电影画面将保持宽高比。"
+
+#: pref.cpp:222
+msgid "Remember window size on exit"
+msgstr ""
+
+#: pref.cpp:223
+msgid "Always start with fixed size"
+msgstr ""
+
+#: pref.cpp:229
+msgid "Loop"
+msgstr "循环"
+
+#: pref.cpp:230
+msgid "Makes current movie loop"
+msgstr "循环播放当前电影"
+
+#: pref.cpp:231
+msgid "Allow framedrops"
+msgstr "允许降低播放帧数"
+
+#: pref.cpp:232
+msgid "Allow dropping frames for better audio and video synchronization"
+msgstr "允许降低播放帧数以获得更好的音频和视频的同步"
+
+#: pref.cpp:233
+msgid "Auto set volume on start"
+msgstr "启动时自动设定音量"
+
+#: pref.cpp:234
+msgid ""
+"When a new source is selected, the volume will be set according the volume "
+"control"
+msgstr ""
+
+#: pref.cpp:235
+#, fuzzy
+msgid "Auto set colors on start"
+msgstr "启动时自动设定音量"
+
+#: pref.cpp:236
+msgid ""
+"When a movie starts, the colors will be set according the sliders for colors"
+msgstr ""
+
+#: pref.cpp:238
+msgid "Control Panel"
+msgstr "控制面板"
+
+#: pref.cpp:242
+msgid "Show config button"
+msgstr "显示配置按钮"
+
+#: pref.cpp:243
+msgid "Add a button that will popup a config menu"
+msgstr ""
+
+#: pref.cpp:244
+msgid "Show playlist button"
+msgstr "显示播放列表按钮"
+
+#: pref.cpp:245
+#, fuzzy
+msgid "Add a playlist button to the control buttons"
+msgstr "添加“广播”到控制按钮"
+
+#: pref.cpp:246
+msgid "Show record button"
+msgstr "显示录制按钮"
+
+#: pref.cpp:247
+msgid "Add a record button to the control buttons"
+msgstr "添加“录制”到控制按钮"
+
+#: pref.cpp:248
+msgid "Show broadcast button"
+msgstr "显示广播按钮"
+
+#: pref.cpp:249
+msgid "Add a broadcast button to the control buttons"
+msgstr "添加“广播”到控制按钮"
+
+#: pref.cpp:256
+msgid "Forward/backward seek time:"
+msgstr "向前/向后寻时:"
+
+#: pref.cpp:276
+msgid "Colors"
+msgstr "颜色"
+
+#: pref.cpp:295
+msgid "AaBbCc"
+msgstr ""
+
+#: pref.cpp:337
+msgid "Location:"
+msgstr "饱和度:"
+
+#: pref.cpp:342
+msgid "Location of the playable item"
+msgstr ""
+
+#: pref.cpp:345
+msgid "Sub title:"
+msgstr "字幕:"
+
+#: pref.cpp:350
+msgid "Optional location of a file containing the subtitles of the URL above"
+msgstr ""
+
+#: pref.cpp:353
+msgid "Enable 'Click to Play' support"
+msgstr "启用“点击即播放”支持"
+
+#: pref.cpp:354
+msgid "Support for WEB pages having a start image"
+msgstr ""
+
+#: pref.cpp:364
+msgid "Use movie player:"
+msgstr "使用 Movie 播放器:"
+
+#: pref.cpp:369
+msgid "Network bandwidth"
+msgstr "网络带宽"
+
+#: pref.cpp:373
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets how much bandwidth you would prefer to allocate to video."
+msgstr ""
+
+#: pref.cpp:375
+msgid ""
+"Sometimes it is possible to choose between various streams given a particular "
+"bitrate.\n"
+"This option sets the maximum bandwidth you have available for video."
+msgstr ""
+
+#: pref.cpp:376
+msgid "Preferred bitrate:"
+msgstr ""
+
+#: pref.cpp:378 pref.cpp:381
+msgid "kbit/s"
+msgstr ""
+
+#: pref.cpp:379
+msgid "Maximum bitrate:"
+msgstr "最大比特率:"
+
+#: pref.cpp:401
+msgid "Output file:"
+msgstr "输出文件:"
+
+#: pref.cpp:406
+msgid "Start &Recording"
+msgstr "开始录制(&R)"
+
+#: pref.cpp:411
+msgid "Current source: "
+msgstr "当前来源:"
+
+#: pref.cpp:412
+msgid "Recorder"
+msgstr "录音机"
+
+#: pref.cpp:418
+msgid "Auto Playback"
+msgstr "自动回放"
+
+#: pref.cpp:419
+msgid "&No"
+msgstr "否(&N)"
+
+#: pref.cpp:420
+msgid "&When recording finished"
+msgstr "当录制停止时(&W)"
+
+#: pref.cpp:421
+msgid "A&fter"
+msgstr "之后(&F)"
+
+#: pref.cpp:425
+msgid "Time (seconds):"
+msgstr "时间(秒):"
+
+#: pref.cpp:446
+msgid "Stop Recording"
+msgstr "停止录制"
+
+#: pref.cpp:452
+msgid "Start Recording"
+msgstr "开始录制"
+
+#: pref.cpp:471
+msgid "Current Source: "
+msgstr "当前来源:"
+
+#: pref.cpp:543
+msgid "Format"
+msgstr "格式"
+
+#: pref.cpp:544
+msgid "Same as source"
+msgstr "和源一样"
+
+#: pref.cpp:545 pref.cpp:667
+msgid "Custom"
+msgstr "定制"
+
+#: pref.cpp:548
+msgid "Mencoder arguments:"
+msgstr "附加命令行参数:"
+
+#: pref.cpp:572
+msgid "&MEncoder"
+msgstr "MEncoder(&M)"
+
+#: pref.cpp:580
+msgid "MPlayer -&dumpstream"
+msgstr ""
+
+#: pref.cpp:586
+msgid "FFMpeg arguments:"
+msgstr "FFMpeg 附加命令行参数:"
+
+#: pref.cpp:600
+msgid "&FFMpeg"
+msgstr "FFMpeg(&F)"
+
+#: pref.cpp:620
+msgid ""
+"Sets video driver. Recommended is XVideo, or, if it is not supported, X11, "
+"which is slower."
+msgstr "设定视频驱动。推荐 XVideo,或者 X11(如果前者不被支持的话) (较慢)。"
+
+#: pref.cpp:621
+msgid "Video driver:"
+msgstr "视频驱动:"
+
+#: pref.cpp:627
+msgid "Audio driver:"
+msgstr "音频驱动:"
+
+#: pref.cpp:642
+msgid "Enable use of postprocessing filters"
+msgstr "启用后期处理过滤器"
+
+#: pref.cpp:644
+msgid "Disable use of postprocessing when watching TV/DVD"
+msgstr "观看 电视/DVD 时禁用后期处理"
+
+#: pref.cpp:670
+msgid "Fast"
+msgstr "快速"
+
+#: pref.cpp:693
+msgid "Horizontal deblocking"
+msgstr "水平解块"
+
+#: pref.cpp:694 pref.cpp:713 pref.cpp:733
+msgid "Auto quality"
+msgstr "自动画质"
+
+#: pref.cpp:696 pref.cpp:715 pref.cpp:735
+msgid "Chrominance filtering"
+msgstr "色度过滤"
+
+#: pref.cpp:712
+msgid "Vertical deblocking"
+msgstr "垂直解块"
+
+#: pref.cpp:732
+msgid "Dering filter"
+msgstr "排序过滤器"
+
+#: pref.cpp:752
+msgid "Auto brightness/contrast"
+msgstr "自动亮度/对比度"
+
+#: pref.cpp:753
+msgid "Stretch luminance to full range"
+msgstr "延展至全范围光度"
+
+#: pref.cpp:762
+msgid "Temporal noise reducer"
+msgstr "临时降噪器:"
+
+#: pref.cpp:788
+msgid "Linear blend deinterlacer"
+msgstr "线型混合隔/逐行扫描转换器"
+
+#: pref.cpp:789
+msgid "Linear interpolating deinterlacer"
+msgstr "线型插值隔/逐行扫描转换器"
+
+#: pref.cpp:790
+msgid "Cubic interpolating deinterlacer"
+msgstr "三次方插值隔/逐行扫描转换器"
+
+#: pref.cpp:791
+msgid "Median deinterlacer"
+msgstr "中值隔/逐行扫描转换器"
+
+#: pref.cpp:792
+msgid "FFmpeg deinterlacer"
+msgstr "FFmpeg 隔/逐行扫描转换器"
+
+#: pref.cpp:819
+msgid "Enable mplayer's default postprocessing filters"
+msgstr "启用 mplayer 默认后期处理过滤器"
+
+#: pref.cpp:820
+msgid "Enable custom postprocessing filters (See: Custom preset -tab)"
+msgstr "启用定制的后期处理过滤器(参见:Custom preset -tab)"
+
+#: pref.cpp:821
+msgid "Enable mplayer's fast postprocessing filters"
+msgstr "启用 mplayer 快速后期处理过滤器"
+
+#: pref.cpp:824 pref.cpp:825 pref.cpp:826
+#, fuzzy
+msgid "Filter is used if there is enough CPU"
+msgstr "CPU 资源充足时使用过滤器"
+
+#: pref.cpp:828
+msgid "Stretches luminance to full range (0..255)"
+msgstr "延展至全范围光度(0..255)"
+
+#: pref.cpp:829
+msgid "Custom Preset"
+msgstr "定制预设"
+
+#: pref.cpp:831
+msgid "Deinterlacing"
+msgstr "隔/逐行扫描转换"
+
+#: pref.cpp:837
+msgid "Reset Settings?"
+msgstr "重置设置?"
+
+#: pref.cpp:838
+msgid ""
+"You are about to have all your settings overwritten with defaults.\n"
+"Please confirm.\n"
+msgstr ""
+"您的设定将会被默认值覆盖。\n"
+"请确认。\n"
+
+#. i18n: file kmplayerui.rc line 12
+#: rc.cpp:10
+#, no-c-format
+msgid "VD&R"
+msgstr "VD&R"
+
+#: viewarea.cpp:1360
+msgid "Fullscreen"
+msgstr "全屏"
+
+#: viewarea.cpp:1391
+msgid "Scale:"
+msgstr ""
diff --git a/protocols/Makefile.am b/protocols/Makefile.am
new file mode 100644
index 0000000..c3100fa
--- /dev/null
+++ b/protocols/Makefile.am
@@ -0,0 +1,2 @@
+protocoldir = $(kde_servicesdir)
+protocol_DATA = mms.protocol rtsp.protocol pnm.protocol
diff --git a/protocols/mms.protocol b/protocols/mms.protocol
new file mode 100644
index 0000000..1d0f9a9
--- /dev/null
+++ b/protocols/mms.protocol
@@ -0,0 +1,50 @@
+[Protocol]
+Class=:internet
+Description=Microsoft Media Server Protocol
+Description[af]=Mecrosoft Media Bediener Protokol
+Description[ar]=ميفاق Microsoft لخادم الوسائط
+Description[ca]=Protocol de servidor de medis de Microsoft
+Description[cs]=Microsoft Media Server protokol
+Description[da]=Microsoft Medieserver-protokol
+Description[de]=Microsoft Media Server Protokoll
+Description[el]=Πρωτόκολλο εξυπηρετητή πολυμέσων της Microsoft
+Description[es]=Protocol Media Server de Microsoft
+Description[et]=Microsoft Media Serveri protokoll
+Description[fr]=Protocole Microsoft Media Server
+Description[gl]=Protocolo Microsoft Media Server
+Description[he]=פרוטוקול שרת מדיה של מיקרוסופט
+Description[hi]=माइक्रोसॉफ्ट मीडिया सर्वर प्रोटोकॉल
+Description[it]=Protocollo Microsoft Media Server
+Description[ja]=Microsoft Media サーバプロトコル
+Description[ka]=Microsoft Media Server-ის ოქმი
+Description[lt]=Microsoft media serverio protokolas
+Description[nb]=Microsoft Meida Server-protokoll
+Description[nl]=Microsoft Media Server-protocol
+Description[pa]=ਮਾਈਕਰੋਸਾਫਟ ਮੀਡਿਆ ਸਰਵਰ ਪਰੋਟੋਕਾਲ
+Description[pt]=Protocolo Microsoft Media Server
+Description[pt_BR]=Protocolo do Servidor de Mídia Microsoft
+Description[ru]=Протокол Microsoft Media Server
+Description[rw]=Porotokole Igihuza Seriveri ya Microsoft
+Description[sk]=Microsoft Media Server (mms) Protokol
+Description[sr]=Microsoft-ов протокол сервера медија
+Description[sr@Latn]=Microsoft-ov protokol servera medija
+Description[sv]=Microsoft mediaserver-protokoll
+Description[ta]=மைக்ரோசாப்ட் ஊடக சேவக நெறிமுறை
+Description[th]=โปรโตคอลระบบเซิร์ฟเวอร์กระจายสื่อของ Microsoft (mms)
+Description[tr]=Microsoft Medya Sunucu Protokolü
+Description[uk]=Протокол сервера Microsoft Media
+Description[xx]=xxMicrosoft Media Server Protocolxx
+Description[zh_TW]=Microsoft Media Server 通訊協定
+exec=kmplayer "%u"
+protocol=mms
+input=none
+output=none
+helper=true
+reading=false
+listing=false
+writing=false
+makedir=false
+deleting=false
+linking=false
+moving=false
+Icon=kmplayer
diff --git a/protocols/pnm.protocol b/protocols/pnm.protocol
new file mode 100644
index 0000000..618d774
--- /dev/null
+++ b/protocols/pnm.protocol
@@ -0,0 +1,15 @@
+[Protocol]
+Class=:internet
+exec=kmplayer "%u"
+protocol=pnm
+input=none
+output=none
+helper=true
+reading=false
+listing=false
+writing=false
+makedir=false
+deleting=false
+linking=false
+moving=false
+Icon=kmplayer
diff --git a/protocols/rtsp.protocol b/protocols/rtsp.protocol
new file mode 100644
index 0000000..7fbed46
--- /dev/null
+++ b/protocols/rtsp.protocol
@@ -0,0 +1,15 @@
+[Protocol]
+Class=:internet
+exec=kmplayer "%u"
+protocol=rtsp
+input=none
+output=none
+helper=true
+reading=false
+listing=false
+writing=false
+makedir=false
+deleting=false
+linking=false
+moving=false
+Icon=kmplayer
diff --git a/src/DESIGN.txt b/src/DESIGN.txt
new file mode 100644
index 0000000..e0e3a31
--- /dev/null
+++ b/src/DESIGN.txt
@@ -0,0 +1,38 @@
+The core of kmplayer is in kmplayerpartbase.x. PartBase keeps
+the list of Source objects (dvd/vcd/url/..) and Process objects
+(mplayer/xine/gst/xv), controls the View or respond to its signals. Both
+application as kpart (for plugin) have one PartBase. However, in case of
+plugin for khtml, it's possible one PartBase controls multible View
+objects (see tests/controls.html).
+
+The View is the parent of ViewArea, PlayList and InfoWindow. ViewArea is
+the parent of Viewer (the output for the backend players) and
+ControlPanel.
+In case of smil animations, the Viewer widget can be hidden or made
+smaller so ViewArea background is where the rendering is done.
+Classes in kmplayerplaylist.x are actually base for the XML playlist
+formats (smil/asx/rss/..).
+
+There is always one Source object active. A Source object sets up the
+interface to the user as far possible, handling playlists and launching
+backends. This is not fully worked out yet, eg. URLSource should be able
+to launch multible backends for smil. Which probably means that PartBase
+should have a list of Process factories and Source objects a list of
+running Process objects.
+
+Backends are instances of Process and should be simple, just passing
+data from/to external processes. A Recorder object is also a Process.
+Though for mplayer, there is quite some code for output parsing.
+
+The XML classes and parser provide a quick way for storing any XML file
+in the playlist. Tree nodes build the tree themselves and recognized
+multimedia elements more or less play the playlist themselves too.
+The parser is build to recover from all kinds of typos. This is because
+ASX is quite often full of XML errors that made other parsers give up,
+eg. I've seen something like "<Title>Laurel & Hardy< / title>".
+
+KMPlayerPart and KMPlayerApp are classes that use the above for plugin
+and application.
+
+Finally there is also a Settings class for general usage and for
+launching the configure dialog.
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..c481b8d
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,80 @@
+AM_CPPFLAGS= -I$(kde_includes)/kio $(CFLAGS_GST) $(all_includes) $(LIBCAIRO_CFLAGS) $(LIBNSPR_CFLAGS) $(LIBDBUS_CFLAGS)
+
+METASOURCES= AUTO
+
+lib_LTLIBRARIES= libkmplayercommon.la
+
+libkmplayercommon_la_SOURCES = viewarea.cpp kmplayerview.cpp playlistview.cpp kmplayercontrolpanel.cpp kmplayerconfig.cpp pref.cpp kmplayerprocess.cpp kmplayer_callback.skel kmplayer_backend.stub kmplayerpartbase.cpp kmplayerplaylist.cpp kmplayer_asx.cpp kmplayer_smil.cpp kmplayer_rp.cpp kmplayer_rss.cpp kmplayer_atom.cpp kmplayer_xspf.cpp triestring.cpp kmplayerpartbase.skel
+libkmplayercommon_la_LDFLAGS = -avoid-version $(all_libraries)
+libkmplayercommon_la_LIBADD = -lkmediaplayer $(LIB_KPARTS) $(LIB_KUTILS) $(LIB_EXPAT) -lm $(LIBCAIRO_LIBS) $(LIBQTDBUS)
+
+if include_koffice_support
+kofficeplugin_lib= libkmplayerkofficepart.la
+SERVICES_KOFFICE = kmplayer_koffice.desktop
+endif
+
+kde_module_LTLIBRARIES= libkmplayerpart.la $(kofficeplugin_lib)
+
+libkmplayerpart_la_SOURCES= kmplayer_part.cpp
+libkmplayerpart_la_LDFLAGS= -avoid-version $(all_libraries) $(KDE_RPATH)
+libkmplayerpart_la_LIBADD= libkmplayercommon.la
+
+libkmplayerkofficepart_la_SOURCES=kmplayer_koffice_part.cpp
+libkmplayerkofficepart_la_LDFLAGS= -avoid-version $(all_libraries) $(KDE_RPATH)
+libkmplayerkofficepart_la_LIBADD= libkmplayercommon.la $(LIB_KOFFICE)
+
+kdeinit_LTLIBRARIES=kmplayer.la
+kmplayer_la_SOURCES= main.cpp kmplayerapp.cpp kmplayertvsource.cpp kmplayerbroadcast.cpp kmplayervdr.cpp
+kmplayer_la_LIBADD= libkmplayercommon.la
+kmplayer_la_LDFLAGS= -module $(KDE_PLUGIN)
+
+EXTRA_PROGRAMS = kxineplayer kxvplayer kgstplayer
+if include_kxineplayer
+kxineplayer_app = kxineplayer
+endif
+if include_kgstplayer
+kgstplayer_app = kgstplayer
+endif
+if include_knpplayer
+knpplayer_app = knpplayer
+endif
+
+bin_PROGRAMS= $(kxineplayer_app) kxvplayer $(kgstplayer_app) $(knpplayer_app)
+
+noinst_LTLIBRARIES = libkmplayerbackend.la
+libkmplayerbackend_la_SOURCES = kmplayer_backend.skel kmplayer_callback.stub
+
+kxineplayer_LDADD= libkmplayerbackend.la $(LIB_XINE) -lDCOP
+kxineplayer_CFLAGS= $(CFLAGS_XINE)
+kxineplayer_LDFLAGS= $(all_libraries) $(KDE_RPATH)
+kxineplayer_SOURCES= xineplayer.cpp
+
+kxvplayer_LDADD= libkmplayerbackend.la -lDCOP -lXv
+kxvplayer_LDFLAGS= $(all_libraries) $(KDE_RPATH)
+kxvplayer_SOURCES= xvplayer.cpp
+
+kgstplayer_LDADD= libkmplayerbackend.la $(LIB_GST) $(LIB_GST_PLUGINS) -lgstinterfaces-0.10 -lDCOP
+kgstplayer_LDFLAGS= $(all_libraries) $(KDE_RPATH)
+kgstplayer_SOURCES= gstplayer.cpp
+
+knpplayer_LDADD= $(LIBNSPR_LIBS)
+knpplayer_SOURCES= npplayer.c
+
+xdg_apps_DATA = kmplayer.desktop
+
+kde_services_DATA = kmplayer_part.desktop $(SERVICES_KOFFICE)
+
+rc_DATA = kmplayerui.rc kmplayerpartui.rc
+rcdir = $(kde_datadir)/kmplayer
+
+conf_DATA = kmplayerrc
+confdir = $(kde_confdir)
+
+appsdatadir=$(kde_datadir)/kmplayer
+appsdata_DATA= bookmarks.xml pluginsinfo noise.gif
+
+dummy.cpp:
+ echo > dummy.cpp
+
+messages: rc.cpp
+ $(XGETTEXT) *.cpp -o $(podir)/kmplayer.pot
diff --git a/src/bookmarks.xml b/src/bookmarks.xml
new file mode 100644
index 0000000..bf4c89a
--- /dev/null
+++ b/src/bookmarks.xml
@@ -0,0 +1,670 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE xbel>
+<xbel folded="yes" >
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>South America</title>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>Brazil</title>
+ <bookmark icon="video" href="http://www.bloomberg.com/streams/video/LiveBR_nb.ram" >
+ <title>Bloomberg TV Brazil</title>
+ </bookmark>
+ </folder>
+ </folder>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>Asia</title>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>TV</title>
+ <bookmark icon="video" href="http://www.bloomberg.com/streams/video/LiveAS_nb.ram" >
+ <title>Bloomberg TV Asia-Pacific</title>
+ </bookmark>
+ <bookmark icon="video" href="http://www.bloomberg.com/streams/video/LiveJA_nb.ram" >
+ <title>Bloomberg TV Japan</title>
+ </bookmark>
+ </folder>
+ </folder>
+ <folder folded="no" icon="bookmark_folder" >
+ <title>Europe</title>
+ <folder folded="no" icon="bookmark_folder" >
+ <title>belgium</title>
+ <folder folded="no" >
+ <title>flanders</title>
+ <bookmark icon="www" href="http://mp3.streampower.be/radio1-high.mp3" >
+ <title>Radio 1</title>
+ </bookmark>
+ <bookmark icon="www" href="http://mp3.streampower.be/sporza-high.mp3" >
+ <title>Sporza</title>
+ </bookmark>
+ <bookmark icon="www" href="http://mp3.streampower.be/ra2ant-high.mp3" >
+ <title>Radio 2 Antwerpen</title>
+ </bookmark>
+ <bookmark icon="www" href="http://mp3.streampower.be/ra2vlb-high.mp3" >
+ <title>Radio 2 Vlaams-Brabant</title>
+ </bookmark>
+ <bookmark icon="www" href="http://mp3.streampower.be/ra2lim-high.mp3" >
+ <title>Radio 2 Limburg</title>
+ </bookmark>
+ <bookmark icon="www" href="http://mp3.streampower.be/ra2ovl-high.mp3" >
+ <title>Radio 2 Oost-Vlaanderen</title>
+ </bookmark>
+ <bookmark icon="www" href="http://mp3.streampower.be/ra2wvl-high.mp3" >
+ <title>Radio 2 West-Vlaanderen</title>
+ </bookmark>
+ <bookmark icon="www" href="http://mp3.streampower.be/klara-high.mp3" >
+ <title>Klara</title>
+ </bookmark>
+ <bookmark icon="www" href="http://mp3.streampower.be/klaracontinuo-high.mp3" >
+ <title>Klara Continuo</title>
+ </bookmark>
+ <bookmark icon="www" href="http://mp3.streampower.be/stubru-high.mp3" >
+ <title>Studio Brussel</title>
+ </bookmark>
+ <bookmark icon="www" href="http://mp3.streampower.be/donna-high.mp3" >
+ <title>Donna</title>
+ </bookmark>
+ <bookmark icon="www" href="http://mp3.streampower.be/donnahitbits-high.mp3" >
+ <title>Donna Hitbits</title>
+ </bookmark>
+ <bookmark icon="www" href="http://mp3.streampower.be/rvi-high.mp3" >
+ <title>RVI</title>
+ </bookmark>
+ <bookmark icon="www" href="http://stream.urgent.fm/high.ogg" >
+ <title>Urgent.fm</title>
+ </bookmark>
+ <bookmark icon="www" href="http://www.beoneradio.be/modules/desktop/streaming/pls.aspx?mid=84" >
+ <title>Be One</title>
+ </bookmark>
+ <bookmark icon="www" href="http://mediaserver02.cybernet.be/contactnl" >
+ <title>Radio Contact</title>
+ </bookmark>
+ <bookmark icon="www" href="http://wm.streampower.be/qmusic_ahi" >
+ <title>Q-Music</title>
+ </bookmark>
+ <bookmark icon="www" href="http://www.topradio.be/new/website/topradioHigh.asx" >
+ <title>Topradio</title>
+ </bookmark>
+ <bookmark icon="www" href="http://www.4fm.be/streams/high.asx" >
+ <title>4fm</title>
+ </bookmark>
+ </folder>
+ </folder>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>czech republic</title>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>radio valc</title>
+ <bookmark icon="sound" href="http://www.radiovalc.cz/asx/valc-5.asx" >
+ <title>radio valc live</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://www.radiovalc.cz/asx/valc1-2.asx" >
+ <title>radio valc 1 gold</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://www.radiovalc.cz/asx/valc2-2.asx" >
+ <title>radio valc 2 country</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://www.radiovalc.cz/asx/valc3-2.asx" >
+ <title>radio valc 3 hit</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://www.radiovalc.cz/asx/valc4-2.asx" >
+ <title>radio valc 4 rock</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://www.radiovalc.cz/asx/valc5-2.asx" >
+ <title>radio valc 5 classic</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://www.radiovalc.cz/asx/valc6-2.asx" >
+ <title>radio valc 6 valcarka</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://www.radiovalc.cz/asx/valc7-2.asx" >
+ <title>radio valc 7 folk</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>cesky rozhlas</title>
+ <bookmark icon="sound" href="mms://netshow4.live.cz/cro1-96" >
+ <title>cro1 radiozurnal</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow4.live.cz/cro2-96" >
+ <title>cro2 praha</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://amp1.cesnet.cz:8000/cro3.ogg" >
+ <title>cro3 vltava</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/crocb48" >
+ <title>cro ceske budejovice</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/crohk48" >
+ <title>cro hradec kralove</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/crool48" >
+ <title>cro olomouc</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/croov48" >
+ <title>cro ostrava</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/croplzen64" >
+ <title>cro plzen</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/croregion48" >
+ <title>cro stredni cechy</title>
+ </bookmark>
+ </folder>
+ <bookmark icon="sound" href="http://amp.cesnet.cz:8000/akropolis.ogg" >
+ <title>radio akropolis</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/krokodyl32" >
+ <title>krokodyl</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/joeradioi64" >
+ <title>joe</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/croregina-32" >
+ <title>regina</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/kisshady32" >
+ <title>kiss hady</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/proglas32" >
+ <title>proglas</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow4.live.cz/country128" >
+ <title>country radio</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/kissproton32" >
+ <title>proton</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.atlas.cz/beat32" >
+ <title>radio beat</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://82.208.28.37/expres128" >
+ <title>expresradio</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/kiss64" >
+ <title>kiss 98 fm</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/radio164" >
+ <title>radio1</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/kisspublikum48" >
+ <title>kiss publikum</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/apollo64" >
+ <title>radio apollo</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/evropa2-32" >
+ <title>evropa 2</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/crystal64" >
+ <title>radio crystal</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://195.113.135.100/northmusic" >
+ <title>northmusic</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://82.208.28.37/sumava64" >
+ <title>radio sumava</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://82.208.28.37/karolina64" >
+ <title>radio karolina</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/hity64" >
+ <title>fajn radio hity</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/kisspublikum48" >
+ <title>kiss fm</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/kissmorava48" >
+ <title>kiss morava</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://82.208.28.37/cernahora128" >
+ <title>cerna hora</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://82.208.28.37/fmplus64" >
+ <title>radio fm plus</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://82.208.28.37/helax128" >
+ <title>helax</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://82.208.28.37/impuls128" >
+ <title>radio impuls</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow4.live.cz/inforadio128" >
+ <title>radio info</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://netshow3.live.cz/life64" >
+ <title>radio life fajn</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://82.208.28.37/relax64" >
+ <title>radio relax</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>denmark</title>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e02ch01m?wmcontentbitrate=300000/.wma" >
+ <title>P1</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e02ch02m?wmcontentbitrate=300000/.wma" >
+ <title>P2</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e02ch03m?wmcontentbitrate=300000" >
+ <title>P3</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e04ch04m?wmcontentbitrate=300000/.wma" >
+ <title>Kanal 94</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e04ch06m?wmcontentbitrate=300000/.wma" >
+ <title>Radio Fyn</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e04ch08m?wmcontentbitrate=300000/.wma" >
+ <title>Bornholms Radio</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e04ch07m?wmcontentbitrate=300000/.wma" >
+ <title>Regionalen</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e04ch09m?wmcontentbitrate=300000/.wma" >
+ <title>Københavns Radio</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e04ch05m?wmcontentbitrate=300000/.wma" >
+ <title>Radio Syd</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e04ch03m?wmcontentbitrate=300000/.wma" >
+ <title>Østjyllands Radio</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e04ch02m?wmcontentbitrate=300000/.wma" >
+ <title>Radio Midt &amp; Vest</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e02ch09m?wmcontentbitrate=300000/.wma" >
+ <title>DR Barometer</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e02ch07m?wmcontentbitrate=300000/.wma" >
+ <title>DR Boogieradio</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e06ch02m?wmcontentbitrate=300000/.wma" >
+ <title>DR Erhverv</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e02ch08m?wmcontentbitrate=300000/.wma" >
+ <title>DR Ghetto</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e06ch01m?wmcontentbitrate=300000/.wma" >
+ <title>DR Gyldne Genhør</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e02ch05m?wmcontentbitrate=300000/.wma" >
+ <title>DR Jazz</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e02ch06m?wmcontentbitrate=300000/.wma" >
+ <title>DR Klassisk</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e04ch11m?wmcontentbitrate=300000/.wma" >
+ <title>DR Nyheder</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e02ch04m?wmcontentbitrate=300000/.wma" >
+ <title>DR Rock</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wmsc.dr.dk/e04ch10m?wmcontentbitrate=300000/.wma" >
+ <title>DR Soft</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wms.dr.dk/e02ch12m?wmcontentbitrate=300000/.wma" >
+ <title>DR Sport</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <folder folded="yes" >
+ <title>TV</title>
+ <bookmark icon="video" href="http://www.itele.fr/smi/direct.smi" >
+ <title>I Télévision</title>
+ </bookmark>
+ <bookmark icon="video" href="http://www.bloomberg.com/streams/video/LiveFR_nb.ram" >
+ <title>Bloomberg TV France</title>
+ </bookmark>
+ <bookmark icon="video" href="http://www.bbc.co.uk/newsa/n5ctrl/tvseq/n24.ram" >
+ <title>bbc news</title>
+ </bookmark>
+ </folder>
+ <title>france</title>
+ <bookmark icon="sound" href="mms://vip8.yacast.fr/encodereurope1" >
+ <title>europe1</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://vip6.yacast.fr/encodercheriefm" >
+ <title>cherie FM</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://viptvr.yacast.fr/tvr_vibration?site" >
+ <title>vibration</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://www.tv-radio.com/station/rfi/rfi-20k.asx" >
+ <title>rfi</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://ogg.tv-radio.fr:1441/encoderfinter.ogg" >
+ <title>france-inter</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://viptvr2.yacast.fr/encoderfranceinfo" >
+ <title>france info</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://vip6.yacast.fr/encoderrmc" >
+ <title>rmc</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://vip6.yacast.fr/encoderrtl" >
+ <title>rtl</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://vip6.yacast.fr/encodernrj" >
+ <title>nrj</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://vip6.yacast.fr/encodernostalgie" >
+ <title>nostalgie</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://vip2.yacast.fr/encoderfun" >
+ <title>fun</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://stream.servstream.com/ViewWeb/BBCRadio_music/Event/BBCRadio7.asx" >
+ <title>bbc 7</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://www.live365.com/play/127730?membername=abfjungle" >
+ <title>abf</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://viptvr2.yacast.fr/tvr_europe2" >
+ <title>europe 2</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://ogg.tv-radio.fr:1441/encoderfip.ogg" >
+ <title>fip</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://viptvr.yacast.fr/tvr_franceculture" >
+ <title>franceculture</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://viptvr2.yacast.fr/tvr_rfm" >
+ <title>rfm</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://vip2.yacast.fr/encoderrtl2" >
+ <title>rtl2</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://vip2.yacast.fr/encoderskyrock" >
+ <title>skyrock</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://vip2.yacast.fr/encoderrireetchansons" >
+ <title>rireet chansons</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://viptvr.yacast.fr/tvr_francemusiques2" >
+ <title>france musique</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://trevize.letsgozik.com:44444/letsgozik_56" >
+ <title>Let's Go Zik</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>germany</title>
+ <folder folded="yes" >
+ <title>TV</title>
+ <bookmark icon="video" href="http://www.bloomberg.com/streams/video/LiveDE_nb.ram" >
+ <title>Bloomberg TV Germany</title>
+ </bookmark>
+ <bookmark icon="video" href="http://broadcast.giga.de" >
+ <title>GIGA TV</title>
+ </bookmark>
+ </folder>
+ <bookmark icon="sound" href="mms://213.200.75.252/antenne1$livestream.wma" >
+ <title>hit radio antenne 1</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://213.200.64.231/radiohamburg$livestream.wma" >
+ <title>radio hamburg</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://213.200.64.227/fettesradio$livestream.wma" >
+ <title>89.0 rtl</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://62.146.11.2/2884starfm_live.wmv?cid=47241&amp;dummy=.wmv" >
+ <title>107.8 star fm</title>
+ </bookmark>
+ <bookmark icon="sound" href="rtsp://213.200.64.166/farm/pull2/62.89.187.100%3A2030/encoder/rockland/livestream.rm" >
+ <title>rockland sachsen-anhalt</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>greece</title>
+ <bookmark icon="sound" href="http://64.246.32.39:8906/" >
+ <title>Cosmoradio</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>hungary</title>
+ <bookmark icon="sound" href="http://yp.tilos.hu:9000/tilos_high.ogg" >
+ <title>Tilos Radio </title>
+ </bookmark>
+ <bookmark icon="sound" href="http://195.184.2.4:8000/" >
+ <title>Csaba Radio</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://broadcast.jazzradio.hu/jazzradio-128" >
+ <title>Jazz Radio</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>ireland</title>
+ <bookmark icon="sound" href="http://69.57.152.94:8000" >
+ <title>Live Ireland</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>italy</title>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>TV</title>
+ <bookmark icon="video" href="http://www.bloomberg.com/streams/video/LiveIT_nb.ram" >
+ <title>Bloomberg TV Italy</title>
+ </bookmark>
+ </folder>
+ <bookmark icon="sound" href="mms://62.101.104.172/company" >
+ <title>Company</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://213.92.19.12:80/radiodeejay2?MSWMExt=.asf" >
+ <title>DeeJay</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://livemedia.kataweb.it/Radio_m2o" >
+ <title>M2O</title>
+ </bookmark>
+ <bookmark icon="sound" href="rtsp://live.media.rai.it/broadcast/radiouno.rm" >
+ <title>Radio Uno</title>
+ </bookmark>
+ <bookmark icon="sound" href="rtsp://live.media.rai.it/broadcast/radiodue.rm" >
+ <title>Radio Due</title>
+ </bookmark>
+ <bookmark icon="sound" href="rtsp://live.media.rai.it/broadcast/radiotre.rm" >
+ <title>Radio Tre</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>macedonia</title>
+ <bookmark icon="sound" href="http://195.26.152.92:8000/" >
+ <title>City Radio</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>netherlands</title>
+ <bookmark icon="video" href="http://cgi.omroep.nl/cgi-bin/streams?/tv/nos/journaal/bb.laatste.rm" >
+ <title>NOS Journaal</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://213.10.138.62:8000" >
+ <title>DBS Radio</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>norway</title>
+ <bookmark icon="sound" href="http://radio.metalexpress.no:7128" >
+ <title>metal express</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>russia</title>
+ <bookmark icon="sound" href="http://horus.mtu.ru:9000/" >
+ <title>Europa Plus</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://channel1.region72.ru:8000" >
+ <title>Red Army Radio</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>san marino</title>
+ <bookmark icon="video" href="mms://streaming-1.intelcom.sm/Live Radio" >
+ <title>san marino</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>slovakia</title>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>TV</title>
+ <bookmark icon="video" href="http://www.joj.sk/tvarchiv/video/playlist/playlist.wvx?video=random" >
+ <title>joj</title>
+ </bookmark>
+ <bookmark icon="video" href="mmsh://mslive2.markiza.sk/markiza/" >
+ <title>markíza</title>
+ </bookmark>
+ </folder>
+ <bookmark icon="sound" href="http://www.flash.viapvt.sk/Zive_vysielanie.ram" >
+ <title>flash</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://ra.slovakradio.sk:8000/RockFM_Live_32_kb" >
+ <title>RockFM</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://stream.radiozet.sk:8000/radiozet96kbit" >
+ <title>zet</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://ra.slovakradio.sk:8000/SlovakRadio_Live_32_kb" >
+ <title>slovensko</title>
+ </bookmark>
+ <bookmark icon="sound" href="mmsh://195.98.128.202:80/twist" >
+ <title>twist radio</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://www.rferl.org/realaudio/c13.ram" >
+ <title>Radio Slobodna Europa</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://www.bbc.co.uk/slovak/vak.ram" >
+ <title>BBC World Service Slovak</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://62.168.116.98:8000/dsp0" >
+ <title>fun radio</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://live.okey.sk/OKEY" >
+ <title>radio okey</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://www.lumen.sk/real/live.ram" >
+ <title>lumen</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://www.internetradio.cz/duha.asx" >
+ <title>duha</title>
+ </bookmark>
+ <bookmark icon="sound" href="mms://81.0.210.137/nradio" >
+ <title>nradio</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://live.jaseus.sk:8000/rf32.ogg" >
+ <title>frontinus</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>slovenia</title>
+ <bookmark icon="sound" href="http://193.95.242.36:8000/" >
+ <title>Libra Radio</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>spain</title>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>TV</title>
+ <bookmark icon="video" href="http://www.bloomberg.com/streams/video/LiveES_nb.ram" >
+ <title>Bloomberg TV Spain</title>
+ </bookmark>
+ </folder>
+ <bookmark icon="sound" href="http://www.onamallorca.net:8000/ona.ogg" >
+ <title>Ona Mallorca</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://217.125.97.68:80/" >
+ <title>Alpicat Radio</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>united kingdom</title>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>virgin radio</title>
+ <bookmark icon="sound" href="http://ogg.smgradio.com/vr32.ogg" >
+ <title>1215AM</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://ogg.smgradio.com/vr160.ogg" >
+ <title>1215AM (broadband)</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://ogg.smgradio.com/vc32.ogg" >
+ <title>classic rock</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://ogg.smgradio.com/vc160.ogg" >
+ <title>classic rock (broadband)</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://ogg.smgradio.com/gr32.ogg" >
+ <title>groove</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://ogg.smgradio.com/gr160.ogg" >
+ <title>groove (broadband)</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>TV</title>
+ <bookmark icon="video" href="http://www.bloomberg.com/streams/video/LiveUK_nb.ram" >
+ <title>Bloomberg TV UK</title>
+ </bookmark>
+ </folder>
+ <bookmark icon="sound" href="http://live.urn1350.net:8080/urn_high.ogg" >
+ <title>URN</title>
+ </bookmark>
+ </folder>
+ </folder>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>North America</title>
+ <folder folded="yes" >
+ <title>USA</title>
+ <folder folded="yes" icon="bookmark_folder" >
+ <title>TV</title>
+ <bookmark icon="video" href="http://www.bloomberg.com/streams/video/LiveBTV56.ramx" >
+ <title>Bloomberg TV US</title>
+ </bookmark>
+ <bookmark icon="video" href="http://www.bloomberg.com/streams/video/LiveBTV200.ramx" >
+ <title>Bloomberg TV US (broadband)</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>NH</title>
+ <bookmark icon="sound" href="http://www.WNTK.COM/audio/wntk.ram" >
+ <title>WNTK</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://wunh.unh.edu:8000/" >
+ <title>WUNH</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>NY</title>
+ <bookmark icon="sound" href="http://205.188.234.68:8002" >
+ <title>Digitally Imported - EuroDance</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://64.236.34.97:80/stream/1019" >
+ <title>Digitally Imported - Modern Jazz</title>
+ </bookmark>
+ <bookmark icon="sound" href="http://69.31.76.84:8000" >
+ <title>MostlyClassical.com</title>
+ </bookmark>
+ </folder>
+ <bookmark icon="sound" href="mms://media.apex2000.net/KQRX" >
+ <title>kqrx 95x</title>
+ </bookmark>
+ <bookmark icon="sound" href="rtsp://media.monroe.edu/encoder/live2.ra" >
+ <title>wber 90.5 fm</title>
+ </bookmark>
+ <bookmark icon="sound" href="rtsp://streamer.kozt.com/encoder/live.rm" >
+ <title>the coast kozt fm</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>Canada</title>
+ <bookmark icon="sound" href="http://caracal.rttinc.com:8002/" >
+ <title>CIZZ Zed 99 </title>
+ </bookmark>
+ <bookmark icon="sound" href="http://caracal.rttinc.com:8004/" >
+ <title>CKGY Country </title>
+ </bookmark>
+ <bookmark icon="sound" href="http://oggtrial.nm.cbc.ca:80/cbcr1-toronto.ogg" >
+ <title>CBC - radioONE</title>
+ </bookmark>
+ </folder>
+ <folder folded="yes" >
+ <title>Mexico</title>
+ <bookmark icon="sound" href="http://66.98.138.13:9520/" >
+ <title>XEMA B15 </title>
+ </bookmark>
+ </folder>
+ </folder>
+</xbel>
diff --git a/src/example_kjsembed.js b/src/example_kjsembed.js
new file mode 100644
index 0000000..3412398
--- /dev/null
+++ b/src/example_kjsembed.js
@@ -0,0 +1,38 @@
+#!/usr/bin/env kjscmd
+
+/**
+ * Simple video widget added to your own KJSEmbed application that plays a movie
+ */
+
+// Create main view
+var mw = new KMainWindow();
+var box = new QVBox( mw );
+mw.setCentralWidget(box);
+
+var part = Factory.createROPart("application/x-kmplayer", box, "video_win");
+
+/**
+ * KJS Bindings for KDE-3.3 also allows passing extra arguments to the part
+ * This allows to split of the control panel from the video widget:
+
+var part = Factory.createROPart("application/x-kmplayer", "'KParts/ReadOnlyPart' in ServiceTypes", box, "video_win", ["CONSOLE=foo", "CONTROLS=ImageWindow"]);
+var part1 = Factory.createROPart("application/x-kmplayer", "'KParts/ReadOnlyPart' in ServiceTypes", box, "control_win", ["CONSOLE=foo", "CONTROLS=ControlPanel"]);
+
+ * The order in which the part are created doesn't really matter. Also on which
+ * part openURL is called should not make a difference
+ */
+
+/**
+ * There are at least two ways to communicate with kmplayer part
+ * 1. use the slots of the part (see below), an array of slots is returned by
+ * part.slots()
+ * 2. use kmplayer's DCOP interface
+ */
+
+var stopbutton = new QPushButton( box, 'Stop' );
+stopbutton.text = "&Stop";
+mw.connect( stopbutton, 'clicked()', part, 'stop()' );
+part.openURL( "file:/home/koos/doc/example.avi" );
+
+mw.show();
+application.exec();
diff --git a/src/example_smil.html b/src/example_smil.html
new file mode 100644
index 0000000..c7a29da
--- /dev/null
+++ b/src/example_smil.html
@@ -0,0 +1,59 @@
+<html><head><title>crash.html</title></head>
+<script>
+var entriecount = 0;
+var currentid = -1;
+function writeMenu(node, doc) {
+ if (!node) return;
+ if (node.nodeName == "video") {
+ var src = node.getAttribute("src");
+ var title = node.getAttribute("title");
+ if (!title || title == "")
+ title = "no title";
+ doc.write("<tr><td id='" + entriecount + "'><a href=\"javascript:top.play(" + entriecount + ",'" + src + "')\">" + title + "</a></td></tr>");
+ entriecount++;
+ }
+ for (var i = 0; i < node.childNodes.length; i++)
+ writeMenu(node.childNodes.item(i), doc);
+}
+function loadXML(url) {
+ try {
+ var xmldoc = document.implementation.createDocument("", "", null);
+ xmldoc.async = false;
+ xmldoc.load(url);
+ var doc = menuframe.document;
+ doc.open();
+ doc.write("<html><style>\nbody {color:#a0a0a0;background-color:#323232;}\ntd {font-size:9pt;}\na {color:#fffff0;}\n</style><body bgcolor='#323232'><table>");
+ entriecount = 0;
+ writeMenu(xmldoc.firstChild, doc);
+ doc.write("</table></body></html>");
+ doc.close();
+ doc = playerframe.document;
+ doc.open();
+ doc.write("<html><body bgcolor='#161616'></body></html>");
+ doc.close();
+ } catch(ex) {
+ alert ("Error: " + ex);
+ }
+}
+function play(id, url) {
+ if (currentid > -1) {
+ var td = menuframe.document.getElementById(currentid);
+ td.style.backgroundColor = '#323232';
+ }
+ var td = menuframe.document.getElementById(id);
+ td.style.backgroundColor = '#646464';
+ currentid = id;
+ var doc = playerframe.document;
+ doc.open();
+ doc.write("<html><body bgcolor='#161616'><embed type='video/x-ms-wmv' src='" + url + "' width='100%' height='100%'><script>\nfunction onFinished(){top.finished(" + id + ");}\n<\/script></embed></body></html>");
+ doc.close();
+}
+function finished(id) {
+ var td = menuframe.document.getElementById(id);
+ td.style.backgroundColor = '#323232';
+}
+</script>
+<frameset cols="200,*" onLoad="loadXML('file:/your-smil.xml')">
+ <frame name="menuframe" src="about:blank">
+ <frame name="playerframe" src="about:blank">
+</html>
diff --git a/src/gstplayer.cpp b/src/gstplayer.cpp
new file mode 100644
index 0000000..092a8b2
--- /dev/null
+++ b/src/gstplayer.cpp
@@ -0,0 +1,1027 @@
+/* This file is part of the KMPlayer application
+ Copyright (C) 2004 Koos Vriezen <koos.vriezen@xs4all.nl>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <config.h>
+#include <dcopclient.h>
+#include <qcstring.h>
+#include <qtimer.h>
+#include <qfile.h>
+#include <qurl.h>
+#include <qthread.h>
+#include <qmutex.h>
+#include <qdom.h>
+#include "kmplayer_backend.h"
+#include "kmplayer_callback_stub.h"
+#include "kmplayer_callback.h"
+#include "gstplayer.h"
+#include <X11/X.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/keysym.h>
+#include <X11/Xatom.h>
+#include <gst/gst.h>
+#include <gst/interfaces/xoverlay.h>
+#include <gst/interfaces/colorbalance.h>
+
+static char configfile[2048];
+
+static Display *display;
+static KGStreamerPlayer *gstapp;
+static KMPlayer::Callback_stub * callback;
+static Window wid;
+static QMutex mutex (true);
+static bool window_created = true;
+static bool wants_config;
+static bool verbose;
+static bool notified_playing;
+static int running;
+static int movie_width;
+static int movie_height;
+static int movie_length;
+static int repeat_count;
+static int screen;
+static const int event_finished = QEvent::User;
+static const int event_playing = QEvent::User + 1;
+static const int event_size = QEvent::User + 2;
+static const int event_eos = QEvent::User + 3;
+static const int event_progress = QEvent::User + 4;
+static const int event_error = QEvent::User + 5;
+static const int event_video = QEvent::User + 6;
+static QString mrl;
+static QString sub_mrl;
+static const char *ao_driver;
+static const char *vo_driver;
+static const char *playbin_name = "player";
+static const char *dvd_device;
+static const char *vcd_device;
+static GstElement *gst_elm_play;
+static GstBus *gst_bus;
+static unsigned int /*GstMessageType*/ ignore_messages_mask;
+static GstXOverlay *xoverlay;
+static GstColorBalance *color_balance;
+static gulong gst_bus_sync;
+static gulong gst_bus_async;
+static QString elmentry ("entry");
+static QString elmitem ("item");
+static QString attname ("NAME");
+static QString atttype ("TYPE");
+static QString attdefault ("DEFAULT");
+static QString attvalue ("VALUE");
+static QString attstart ("START");
+static QString attend ("END");
+static QString valrange ("range");
+static QString valnum ("num");
+static QString valbool ("bool");
+static QString valenum ("enum");
+static QString valstring ("string");
+
+extern "C" {
+ // nothing yet
+} // extern "C"
+
+
+static bool gstPollForStateChange (GstElement *, GstState, gint64=GST_SECOND/2);
+
+static void
+cb_error (GstElement * play,
+ GstElement * /*src*/,
+ GError *err,
+ const char *debug,
+ gpointer /*data*/)
+{
+ fprintf (stderr, "cb_error: %s %s\n", err->message, debug);
+ if (GST_STATE (play) == GST_STATE_PLAYING)
+ gst_element_set_state (play, GST_STATE_READY);
+ QApplication::postEvent (gstapp, new QEvent ((QEvent::Type)event_finished));
+}
+
+// NULL -> READY -> PAUSED -> PLAYING
+
+static void
+gstCapsSet (GstPad *pad,
+ GParamSpec * /*pspec*/,
+ gpointer /*data*/)
+{
+ GstCaps *caps = gst_pad_get_negotiated_caps (pad);
+ if (!caps)
+ return;
+ QApplication::postEvent (gstapp, new QEvent ((QEvent::Type) event_video));
+ const GstStructure * s = gst_caps_get_structure (caps, 0);
+ if (s) {
+ const GValue *par;
+
+ gst_structure_get_int (s, "width", &movie_width);
+ gst_structure_get_int (s, "height", &movie_height);
+ if ((par = gst_structure_get_value (s, "pixel-aspect-ratio"))) {
+ int num = gst_value_get_fraction_numerator (par),
+ den = gst_value_get_fraction_denominator (par);
+
+ if (num > den)
+ movie_width = (int) ((float) num * movie_width / den);
+ else
+ movie_height = (int) ((float) den * movie_height / num);
+ }
+ QApplication::postEvent (gstapp, new GstSizeEvent (movie_length, movie_width, movie_height));
+ }
+ gst_caps_unref (caps);
+}
+
+static void gstStreamInfo (GObject *, GParamSpec *, gpointer /*data*/) {
+ GstPad *videopad = 0L;
+ GList *streaminfo = 0L;
+
+ fprintf (stderr, "gstStreamInfo\n");
+ g_object_get (gst_elm_play, "stream-info", &streaminfo, NULL);
+ streaminfo = g_list_copy (streaminfo);
+ g_list_foreach (streaminfo, (GFunc) g_object_ref, NULL);
+ for ( ; streaminfo != NULL; streaminfo = streaminfo->next) {
+ GObject *info = G_OBJECT (streaminfo->data);
+ gint type;
+ GParamSpec *pspec;
+ GEnumValue *val;
+
+ if (!info)
+ continue;
+ g_object_get (info, "type", &type, NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS(info), "type");
+ val = g_enum_get_value (G_PARAM_SPEC_ENUM (pspec)->enum_class, type);
+
+ if (!g_strcasecmp (val->value_nick, "video"))
+ if (!videopad) {
+ g_object_get (info, "object", &videopad, NULL);
+ gstCapsSet (GST_PAD (videopad), 0L, 0L);
+ g_signal_connect (videopad, "notify::caps", G_CALLBACK (gstCapsSet), 0L);
+ }
+ }
+
+ GstMessage * msg = gst_message_new_application (GST_OBJECT (gst_elm_play),
+ gst_structure_new ("notify-streaminfo", NULL));
+ gst_element_post_message (gst_elm_play, msg);
+ g_list_foreach (streaminfo, (GFunc) g_object_unref, NULL);
+ g_list_free (streaminfo);
+}
+
+static void gstSource (GObject *, GParamSpec *, gpointer /*data*/) {
+ GObject *source = 0L;
+ fprintf (stderr, "gstSource\n");
+ g_object_get (gst_elm_play, "source", &source, NULL);
+ if (!source)
+ return;
+ GObjectClass *klass = G_OBJECT_GET_CLASS (source);
+ if (mrl.startsWith ("dvd://") && dvd_device) {
+ if (g_object_class_find_property (klass, "device"))
+ g_object_set (source, "device", dvd_device, NULL);
+ } else if (mrl.startsWith ("vcd://") && vcd_device) {
+ if (g_object_class_find_property (klass, "device"))
+ g_object_set (source, "device", vcd_device, NULL);
+ }
+ g_object_unref (source);
+}
+
+static void gstGetDuration () {
+ GstFormat fmt = GST_FORMAT_TIME;
+ gint64 len = -1; // usec
+ if (gst_element_query_duration (gst_elm_play, &fmt, &len))
+ if (movie_length != len / (GST_MSECOND * 100)) {
+ movie_length = len / (GST_MSECOND * 100);
+ fprintf (stderr, "new length %d\n", movie_length);
+ QApplication::postEvent (gstapp, new GstSizeEvent (movie_length, movie_width, movie_height));
+ }
+}
+
+static void gstTag (const GstTagList *, const gchar *tag, gpointer) {
+ fprintf (stderr, "Tag: %s\n", tag);
+}
+
+//static bool gstStructure (GQuark field_id, const GValue *value, gpointer user_data);
+
+static void gstBusMessage (GstBus *, GstMessage * message, gpointer) {
+ GstMessageType msg_type = GST_MESSAGE_TYPE (message);
+ /* somebody else is handling the message, probably in gstPolForStateChange*/
+ if (ignore_messages_mask & msg_type)
+ return;
+ switch (msg_type) {
+ case GST_MESSAGE_ERROR:
+ fprintf (stderr, "error msg\n");
+ QApplication::postEvent (gstapp, new QEvent ((QEvent::Type) event_error));
+ if (gst_elm_play) {
+ gst_element_set_state (gst_elm_play, GST_STATE_NULL);
+ //gstPollForStateChange (gst_elm_play, GST_STATE_NULL);
+ }
+ break;
+ case GST_MESSAGE_WARNING:
+ fprintf (stderr, "warning msg\n");
+ break;
+ case GST_MESSAGE_TAG: {
+ GstTagList *tag_list;
+ //fprintf (stderr, "tag msg\n");
+ gst_message_parse_tag (message, &tag_list);
+ gst_tag_list_foreach (tag_list, gstTag, 0L);
+ gst_tag_list_free (tag_list);
+ break;
+ }
+ case GST_MESSAGE_EOS:
+ fprintf (stderr, "eos msg\n");
+ gst_element_set_state (gst_elm_play, GST_STATE_READY);
+ break;
+ case GST_MESSAGE_BUFFERING: {
+ gint percent = 0;
+ gst_structure_get_int (message->structure, "buffer-percent", &percent);
+ QApplication::postEvent (gstapp, new GstProgressEvent (percent));
+ //fprintf (stderr, "Buffering message (%u%%)\n", percent);
+ break;
+ }
+ case GST_MESSAGE_APPLICATION: {
+ const char * msg = gst_structure_get_name (message->structure);
+ fprintf (stderr, "app msg %s\n", msg ? msg : "<unknown>");
+ //gst_structure_foreach (message->structure, gstStructure, 0L);
+ break;
+ }
+ case GST_MESSAGE_STATE_CHANGED: {
+ GstState old_state, new_state;
+ //gchar *src_name = gst_object_get_name (message->src);
+ gst_message_parse_state_changed(message, &old_state, &new_state,0L);
+ //fprintf (stderr, "%s changed state from %s to %s\n", src_name, gst_element_state_get_name (old_state), gst_element_state_get_name (new_state));
+ if (GST_IS_ELEMENT (message->src) &&
+ GST_ELEMENT (message->src) == gst_elm_play) {
+ if (old_state == GST_STATE_PAUSED &&
+ new_state >= GST_STATE_PLAYING) {
+ gstGetDuration ();
+ QApplication::postEvent (gstapp, new QEvent ((QEvent::Type) event_playing));
+ } else if (old_state >= GST_STATE_PAUSED &&
+ new_state <= GST_STATE_READY) {
+ if (repeat_count-- > 0 &&
+ (gst_element_set_state(gst_elm_play, GST_STATE_PAUSED),
+ gstPollForStateChange(gst_elm_play, GST_STATE_PAUSED)))
+ gst_element_set_state(gst_elm_play, GST_STATE_PLAYING);
+ else
+ QApplication::postEvent (gstapp,
+ new QEvent ((QEvent::Type) event_finished));
+ }
+ }
+ //g_free (src_name);
+ break;
+ }
+ case GST_MESSAGE_DURATION:
+ gstGetDuration ();
+ break;
+ case GST_MESSAGE_CLOCK_PROVIDE:
+ case GST_MESSAGE_CLOCK_LOST:
+ case GST_MESSAGE_NEW_CLOCK:
+ case GST_MESSAGE_STATE_DIRTY:
+ break;
+ default:
+ fprintf (stderr, "Unhandled msg %s (0x%x)\n",
+ gst_message_type_get_name (msg_type), msg_type);
+ break;
+ }
+}
+
+static void gstMessageElement (GstBus *, GstMessage *msg, gpointer /*data*/) {
+ if (gst_structure_has_name (msg->structure, "prepare-xwindow-id")) {
+ fprintf (stderr, "prepare-xwindow-id\n");
+ if (xoverlay)
+ gst_x_overlay_set_xwindow_id (xoverlay, wid);
+ }
+}
+
+static bool gstPollForStateChange (GstElement *element, GstState state, gint64 timeout) {
+ /*GstMessageType*/ unsigned int events, saved_events;
+ GstBus *bus = gst_element_get_bus (element);
+ GError **error = 0L;
+
+ events = GST_MESSAGE_STATE_CHANGED | GST_MESSAGE_ERROR | GST_MESSAGE_EOS;
+ saved_events = ignore_messages_mask;
+
+ if (element && element == gst_elm_play) {
+ /* we do want the main handler to process state changed messages for
+ * playbin as well, otherwise it won't hook up the timeout etc. */
+ ignore_messages_mask |= (events ^ GST_MESSAGE_STATE_CHANGED);
+ } else {
+ ignore_messages_mask |= events;
+ }
+
+ while (true) {
+ GstMessage *message;
+ GstElement *src;
+
+ message = gst_bus_poll (bus, (GstMessageType) events, timeout);
+ if (!message)
+ goto timed_out;
+
+ src = (GstElement*)GST_MESSAGE_SRC (message);
+
+ switch (GST_MESSAGE_TYPE (message)) {
+ case GST_MESSAGE_STATE_CHANGED: {
+ GstState olds, news, pending;
+ if (src == element) {
+ gst_message_parse_state_changed (message, &olds, &news, &pending);
+ if (news == state) {
+ gst_message_unref (message);
+ goto success;
+ }
+ }
+ break;
+ }
+ case GST_MESSAGE_ERROR: {
+ gchar *debug = NULL;
+ GError *gsterror = NULL;
+ gst_message_parse_error (message, &gsterror, &debug);
+ fprintf (stderr, "Error: %s (%s)\n", gsterror->message, debug);
+ gst_message_unref (message);
+ g_error_free (gsterror);
+ g_free (debug);
+ goto error;
+ }
+ case GST_MESSAGE_EOS: {
+ gst_message_unref (message);
+ goto error;
+ }
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+ gst_message_unref (message);
+ }
+ g_assert_not_reached ();
+
+success:
+ /* state change succeeded */
+ fprintf (stderr, "state change to %s succeeded\n", gst_element_state_get_name (state));
+ ignore_messages_mask = saved_events;
+ return true;
+
+timed_out:
+ /* it's taking a long time to open -- just tell totem it was ok, this allows
+ * the user to stop the loading process with the normal stop button */
+ fprintf (stderr, "state change to %s timed out, returning success and handling errors asynchroneously\n", gst_element_state_get_name (state));
+ ignore_messages_mask = saved_events;
+ return true;
+
+error:
+ fprintf (stderr, "error while waiting for state change to %s: %s\n",
+ gst_element_state_get_name (state),
+ (error && *error) ? (*error)->message : "unknown");
+ /* already set *error */
+ ignore_messages_mask = saved_events;
+ QApplication::postEvent (gstapp, new QEvent ((QEvent::Type) event_error));
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+
+GstSizeEvent::GstSizeEvent (int l, int w, int h)
+ : QEvent ((QEvent::Type) event_size),
+ length (l), width (w), height (h)
+{}
+
+GstProgressEvent::GstProgressEvent (const int p)
+ : QEvent ((QEvent::Type) event_progress), progress (p)
+{}
+
+//-----------------------------------------------------------------------------
+
+using namespace KMPlayer;
+
+Backend::Backend ()
+ : DCOPObject (QCString ("Backend")) {
+}
+
+Backend::~Backend () {}
+
+void Backend::setURL (QString url) {
+ mrl = url;
+}
+
+void Backend::setSubTitleURL (QString url) {
+ sub_mrl = url;
+}
+
+void Backend::play (int repeat) {
+ gstapp->play (repeat);
+}
+
+void Backend::stop () {
+ QTimer::singleShot (0, gstapp, SLOT (stop ()));
+}
+
+void Backend::pause () {
+ gstapp->pause ();
+}
+
+void Backend::seek (int v, bool /*absolute*/) {
+ gstapp->seek (v);
+}
+
+void Backend::hue (int h, bool) {
+ gstapp->hue (h);
+}
+
+void Backend::saturation (int s, bool) {
+ gstapp->saturation (s);
+}
+
+void Backend::contrast (int c, bool) {
+ gstapp->contrast (c);
+}
+
+void Backend::brightness (int b, bool) {
+ gstapp->brightness (b);
+}
+
+void Backend::volume (int v, bool) {
+ gstapp->volume (v);
+}
+
+void Backend::frequency (int) {
+}
+
+void Backend::setAudioLang (int, QString) {
+}
+
+void Backend::setSubtitle (int, QString) {
+}
+
+void Backend::quit () {
+ delete callback;
+ callback = 0L;
+ if (running)
+ stop ();
+ else
+ QTimer::singleShot (0, qApp, SLOT (quit ()));
+}
+
+bool updateConfigEntry (const QString & name, const QString & value) {
+ fprintf (stderr, "%s=%s\n", name.ascii (), (const char *) value.local8Bit ());
+ return true;
+}
+
+void Backend::setConfig (QByteArray /*data*/) {
+ /*QString err;
+ int line, column;
+ QDomDocument dom;
+ if (dom.setContent (data, false, &err, &line, &column)) {
+ if (dom.childNodes().length() == 1) {
+ for (QDomNode node = dom.firstChild().firstChild();
+ !node.isNull ();
+ node = node.nextSibling ()) {
+ QDomNamedNodeMap attr = node.attributes ();
+ updateConfigEntry (attr.namedItem (attname).nodeValue (),
+ attr.namedItem (attvalue).nodeValue ());
+ }
+ } else
+ err = QString ("invalid data");
+ }
+ if (callback)
+ callback->errorMessage (0, err);*/
+}
+
+bool Backend::isPlaying () {
+ mutex.lock ();
+ bool b = gst_elm_play && (GST_STATE (gst_elm_play) == GST_STATE_PLAYING);
+ mutex.unlock ();
+ return b;
+}
+
+KGStreamerPlayer::KGStreamerPlayer (int _argc, char ** _argv)
+ : QApplication (_argc, _argv, false) {
+}
+
+void KGStreamerPlayer::init () {
+ int xpos = 0;
+ int ypos = 0;
+ int width = 320;
+ int height = 200;
+
+ XLockDisplay(display);
+ if (window_created)
+ wid = XCreateSimpleWindow(display, XDefaultRootWindow(display),
+ xpos, ypos, width, height, 1, 0, 0);
+ fprintf (stderr, "init wid %u created:%d\n", wid, window_created);
+ XSelectInput (display, wid,
+ (PointerMotionMask | ExposureMask | KeyPressMask | ButtonPressMask | StructureNotifyMask)); // | SubstructureNotifyMask));
+
+ if (window_created) {
+ //fprintf (stderr, "map %lu\n", wid);
+ XMapRaised(display, wid);
+ XSync(display, False);
+ }
+ XUnlockDisplay(display);
+}
+
+KGStreamerPlayer::~KGStreamerPlayer () {
+ if (window_created) {
+ XLockDisplay (display);
+ fprintf (stderr, "unmap %lu\n", wid);
+ XUnmapWindow (display, wid);
+ XDestroyWindow(display, wid);
+ XSync (display, False);
+ XUnlockDisplay (display);
+ }
+ gstapp = 0L;
+}
+
+void getConfigEntries (QByteArray & buf) {
+ QDomDocument doc;
+ QDomElement root = doc.createElement (QString ("document"));
+ doc.appendChild (root);
+ QCString exp = doc.toCString ();
+ buf = exp;
+ buf.resize (exp.length ()); // strip terminating \0
+}
+
+void KGStreamerPlayer::play (int repeat) {
+ GstElement *element;
+ GstElement *videosink = 0L;
+ GstElement *audiosink = 0L;
+ bool success;
+ fprintf (stderr, "play %s\n", mrl.isEmpty() ? "<empty>" : mrl.ascii ());
+ if (gst_elm_play) {
+ if (GST_STATE (gst_elm_play) == GST_STATE_PAUSED) {
+ gst_element_set_state (gst_elm_play, GST_STATE_PLAYING);
+ gstPollForStateChange (gst_elm_play, GST_STATE_PLAYING);
+ }
+ return;
+ }
+ notified_playing = false;
+ if (mrl.isEmpty ())
+ return;
+ gchar *uri, *sub_uri = 0L;
+ movie_length = movie_width = movie_height = 0;
+ mutex.lock ();
+ gst_elm_play = gst_element_factory_make ("playbin", playbin_name);
+ if (!gst_elm_play) {
+ fprintf (stderr, "couldn't create playbin\n");
+ goto fail;
+ }
+ ignore_messages_mask = 0;
+ gst_bus = gst_element_get_bus (gst_elm_play);
+
+ gst_bus_add_signal_watch (gst_bus);
+
+ gst_bus_async = g_signal_connect (gst_bus, "message",
+ G_CALLBACK (gstBusMessage), 0L);
+ if (ao_driver && !strncmp (ao_driver, "alsa", 4))
+ audiosink = gst_element_factory_make ("alsasink", "audiosink");
+ else if (ao_driver && !strncmp (ao_driver, "arts", 4))
+ audiosink = gst_element_factory_make ("artsdsink", "audiosink");
+ else if (ao_driver && !strncmp (ao_driver, "esd", 3))
+ audiosink = gst_element_factory_make ("esdsink", "audiosink");
+ else
+ audiosink = gst_element_factory_make ("osssink", "audiosink");
+ if (!audiosink)
+ goto fail;
+ if (vo_driver && !strncmp (vo_driver, "xv", 2))
+ videosink = gst_element_factory_make ("xvimagesink", "videosink");
+ else
+ videosink = gst_element_factory_make ("ximagesink", "videosink");
+ if (!videosink)
+ goto fail;
+ if (GST_IS_BIN (videosink))
+ element = gst_bin_get_by_interface (GST_BIN (videosink),
+ GST_TYPE_X_OVERLAY);
+ else
+ element = videosink;
+ if (GST_IS_X_OVERLAY (element)) {
+ xoverlay = GST_X_OVERLAY (element);
+ gst_x_overlay_set_xwindow_id (xoverlay, wid);
+ }
+ gst_element_set_bus (videosink, gst_bus);
+ gst_element_set_state (videosink, GST_STATE_READY);
+ success = gstPollForStateChange (videosink, GST_STATE_READY);
+ //if (!success) {
+ /* Drop this video sink */
+ // gst_element_set_state (videosink, GST_STATE_NULL);
+ // gst_object_unref (videosink);
+ if (audiosink) {
+ gst_element_set_bus (audiosink, gst_bus);
+ gst_element_set_state (audiosink, GST_STATE_READY);
+ success = gstPollForStateChange (audiosink, GST_STATE_READY);
+ }
+ g_object_set (G_OBJECT (gst_elm_play),
+ "video-sink", videosink,
+ "audio-sink", audiosink,
+ NULL);
+ gst_bus_set_sync_handler (gst_bus, gst_bus_sync_signal_handler, 0L);
+ gst_bus_sync = g_signal_connect (gst_bus, "sync-message::element",
+ G_CALLBACK (gstMessageElement), 0L);
+ g_signal_connect (gst_elm_play, "notify::source",
+ G_CALLBACK (gstSource), 0L);
+ g_signal_connect (gst_elm_play, "notify::stream-info",
+ G_CALLBACK (gstStreamInfo), 0L);
+ if (GST_IS_COLOR_BALANCE (videosink))
+ color_balance = GST_COLOR_BALANCE (videosink);
+
+ if (GST_STATE (gst_elm_play) > GST_STATE_READY)
+ gst_element_set_state (gst_elm_play, GST_STATE_READY);
+
+ if (mrl.startsWith (QChar ('/')))
+ mrl = QString ("file://") + mrl;
+ uri = g_strdup (mrl.local8Bit ());
+ g_object_set (gst_elm_play, "uri", uri, NULL);
+ if (!sub_mrl.isEmpty ()) {
+ if (sub_mrl.startsWith (QChar ('/')))
+ sub_mrl = QString ("file://") + sub_mrl;
+ sub_uri = g_strdup (sub_mrl.local8Bit ());
+ g_object_set (gst_elm_play, "suburi", sub_uri, NULL);
+ g_free (sub_uri);
+ }
+ repeat_count = repeat;
+ mutex.unlock ();
+ gst_element_set_state (gst_elm_play, GST_STATE_PAUSED);
+ if (gstPollForStateChange (gst_elm_play, GST_STATE_PAUSED)) {
+ gst_element_set_state (gst_elm_play, GST_STATE_PLAYING);
+ gstPollForStateChange (gst_elm_play, GST_STATE_PLAYING);
+ }
+ g_free (uri);
+ QTimer::singleShot (500, this, SLOT (updatePosition ()));
+ return;
+fail:
+ if (videosink) {
+ gst_element_set_state (videosink, GST_STATE_NULL);
+ gst_object_unref (videosink);
+ }
+ if (audiosink) {
+ gst_element_set_state (audiosink, GST_STATE_NULL);
+ gst_object_unref (audiosink);
+ }
+ mutex.unlock ();
+ QApplication::postEvent (gstapp, new QEvent ((QEvent::Type)event_finished));
+}
+
+void KGStreamerPlayer::pause () {
+ mutex.lock ();
+ if (gst_elm_play) {
+ GstState state = GST_STATE (gst_elm_play) == GST_STATE_PLAYING ?
+ GST_STATE_PAUSED : GST_STATE_PLAYING;
+ gst_element_set_state (gst_elm_play, state);
+ gstPollForStateChange (gst_elm_play, state);
+ }
+ mutex.unlock ();
+}
+
+void KGStreamerPlayer::stop () {
+ fprintf (stderr, "stop %s\n", mrl.isEmpty () ? "<empty>" : mrl.ascii ());
+ mutex.lock ();
+ repeat_count = 0;
+ if (gst_elm_play) {
+ GstState current_state;
+ gst_element_get_state (gst_elm_play, &current_state, NULL, 0);
+ if (current_state > GST_STATE_READY) {
+ gst_element_set_state (gst_elm_play, GST_STATE_READY);
+ mutex.unlock ();
+ gstPollForStateChange (gst_elm_play, GST_STATE_READY, -1);
+ mutex.lock ();
+ }
+ gst_element_set_state (gst_elm_play, GST_STATE_NULL);
+ gst_element_get_state (gst_elm_play, NULL, NULL, -1);
+ }
+ mutex.unlock ();
+ if (!gst_elm_play || (gst_elm_play && !notified_playing))
+ QApplication::postEvent (gstapp, new QEvent ((QEvent::Type) event_finished));
+}
+
+void KGStreamerPlayer::finished () {
+ QTimer::singleShot (10, this, SLOT (stop ()));
+}
+
+static void adjustColorSetting (const char * channel, int val) {
+ //fprintf (stderr, "adjustColorSetting %s\n", channel);
+ mutex.lock ();
+ if (color_balance) {
+ for (const GList *item =gst_color_balance_list_channels (color_balance);
+ item != NULL; item = item->next) {
+ GstColorBalanceChannel *chan = (GstColorBalanceChannel*) item->data;
+
+ if (!strstr (chan->label, channel))
+ gst_color_balance_set_value (color_balance, chan,
+ ((val + 100) * (chan->max_value - chan->min_value)/200 + chan->min_value));
+ }
+ }
+ mutex.unlock ();
+}
+
+void KGStreamerPlayer::saturation (int s) {
+ adjustColorSetting ("SATURATION", s);
+}
+
+void KGStreamerPlayer::hue (int h) {
+ adjustColorSetting ("HUE", h);
+}
+
+void KGStreamerPlayer::contrast (int c) {
+ adjustColorSetting ("CONTRAST", c);
+}
+
+void KGStreamerPlayer::brightness (int b) {
+ adjustColorSetting ("BRIGHTNESS", b);
+}
+
+void KGStreamerPlayer::seek (int val /*offset_in_deciseconds*/) {
+ //fprintf (stderr, "seek %d\n", val);
+ mutex.lock ();
+ if (gst_elm_play)
+ gst_element_seek (gst_elm_play, 1.0, GST_FORMAT_TIME,
+ (GstSeekFlags) (GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT),
+ GST_SEEK_TYPE_SET, val * GST_MSECOND * 100,
+ GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE);
+ mutex.unlock ();
+}
+
+void KGStreamerPlayer::volume (int val) {
+ //fprintf (stderr, "position %d\n", val);
+ if (gst_elm_play)
+ g_object_set (G_OBJECT (gst_elm_play), "volume", 1.0*val/100, 0L);
+}
+
+void KGStreamerPlayer::updatePosition () {
+ if (gst_elm_play) {
+ do {
+ GstMessage * msg = gst_bus_poll (gst_bus, (GstMessageType) (GST_MESSAGE_STATE_CHANGED | GST_MESSAGE_ERROR | GST_MESSAGE_EOS | GST_MESSAGE_DURATION), GST_MSECOND * 10);
+ if (!msg)
+ break;
+ gst_message_unref (msg);
+ } while (gst_bus);
+
+ mutex.lock ();
+ if (gst_elm_play && callback) {
+ GstFormat fmt = GST_FORMAT_TIME;
+ gint64 val = 0; // usec
+ if (gst_element_query_position (gst_elm_play, &fmt, &val))
+ callback->moviePosition (int (val / (GST_MSECOND * 100)));
+ }
+ mutex.unlock ();
+ QTimer::singleShot (500, this, SLOT (updatePosition ()));
+ }
+}
+
+bool KGStreamerPlayer::event (QEvent * e) {
+ switch (e->type()) {
+ case event_finished: {
+ fprintf (stderr, "event_finished\n");
+ mutex.lock ();
+ if (gst_elm_play) {
+ gst_bus_set_flushing (gst_bus, true);
+ if (gst_bus_sync)
+ g_signal_handler_disconnect (gst_bus, gst_bus_sync);
+ if (gst_bus_async)
+ g_signal_handler_disconnect (gst_bus, gst_bus_async);
+ gst_object_unref (gst_bus);
+ gst_object_unref (GST_OBJECT (gst_elm_play));
+ gst_bus = 0L;
+ gst_elm_play = 0L;
+ color_balance = 0L;
+ gst_bus_sync = gst_bus_async = 0;
+ xoverlay = 0L;
+ }
+ mutex.unlock ();
+ if (callback)
+ callback->finished ();
+ else
+ QTimer::singleShot (0, this, SLOT (quit ()));
+ break;
+ }
+ //callback->movieParams (se->length/100, se->width, se->height, se->height ? 1.0*se->width/se->height : 1.0);
+ case event_size: {
+ GstSizeEvent * se = static_cast <GstSizeEvent *> (e);
+ fprintf (stderr, "movie parms: %d %d %d\n", se->length, se->width, se->height);
+ if (callback) {
+ if (se->length < 0) se->length = 0;
+ callback->movieParams (se->length, se->width, se->height, se->height ? 1.0*se->width/se->height : 1.0, QStringList (), QStringList ());
+ }
+ if (window_created && movie_width > 0 && movie_height > 0) {
+ XLockDisplay (display);
+ XResizeWindow (display, wid, movie_width, movie_height);
+ XFlush (display);
+ XUnlockDisplay (display);
+ }
+ // fall through
+ }
+ case event_playing:
+ notified_playing = true;
+ if (callback)
+ callback->playing ();
+ break;
+ case event_progress:
+ if (callback)
+ callback->loadingProgress
+ (static_cast <GstProgressEvent *> (e)->progress);
+ break;
+ case event_eos:
+ case event_error:
+ stop ();
+ break;
+ case event_video:
+ if (callback)
+ callback->statusMessage ((int) KMPlayer::Callback::stat_hasvideo, QString ());
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+void KGStreamerPlayer::saveState (QSessionManager & sm) {
+ if (callback)
+ sm.setRestartHint (QSessionManager::RestartNever);
+}
+
+class XEventThread : public QThread {
+protected:
+ void run () {
+ Time prev_click_time = 0;
+ int prev_click_x = 0;
+ int prev_click_y = 0;
+ while (true) {
+ XEvent xevent;
+ XNextEvent(display, &xevent);
+ switch(xevent.type) {
+ case ClientMessage:
+ if (xevent.xclient.format == 8 &&
+ !strncmp(xevent.xclient.data.b, "quit_now", 8)) {
+ fprintf(stderr, "request quit\n");
+ return;
+ }
+ break;
+ case KeyPress: {
+ XKeyEvent kevent;
+ KeySym ksym;
+ char kbuf[256];
+ int len;
+ kevent = xevent.xkey;
+ XLockDisplay(display);
+ len = XLookupString(&kevent, kbuf, sizeof(kbuf), &ksym, NULL);
+ XUnlockDisplay(display);
+ fprintf(stderr, "keypressed 0x%x 0x%x\n", kevent.keycode, ksym);
+ switch (ksym) {
+ case XK_q:
+ case XK_Q:
+ gstapp->lock ();
+ gstapp->stop ();
+ gstapp->unlock ();
+ break;
+ }
+ break;
+ }
+ case Expose:
+ if (!xevent.xexpose.count && xevent.xexpose.window == wid) {
+ mutex.lock ();
+ if (gst_elm_play) {
+ GstElement *videosink;
+ g_object_get (gst_elm_play, "video-sink", &videosink, NULL);
+ if (videosink && GST_IS_X_OVERLAY (videosink)) {
+ gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (videosink), wid);
+ gst_x_overlay_expose (GST_X_OVERLAY (videosink));
+ gst_object_unref (videosink);
+ }
+ }
+ mutex.unlock ();
+ }
+ break;
+
+ case ConfigureNotify:
+ mutex.lock ();
+ if (xoverlay && GST_IS_X_OVERLAY (xoverlay))
+ gst_x_overlay_expose (xoverlay);
+ mutex.unlock ();
+ break;
+ case ButtonPress: {
+ XButtonEvent *bev = (XButtonEvent *) &xevent;
+ int dx = prev_click_x - bev->x;
+ int dy = prev_click_y - bev->y;
+ if (bev->time - prev_click_time < 400 &&
+ (dx * dx + dy * dy) < 25) {
+ gstapp->lock ();
+ if (callback)
+ callback->toggleFullScreen ();
+ gstapp->unlock ();
+ }
+ prev_click_time = bev->time;
+ prev_click_x = bev->x;
+ prev_click_y = bev->y;
+ break;
+ }
+ default:
+ ; //if (xevent.type < LASTEvent)
+ // fprintf (stderr, "event %d\n", xevent.type);
+ }
+ }
+ }
+};
+
+int main(int argc, char **argv) {
+ if (!XInitThreads ()) {
+ fprintf (stderr, "XInitThreads () failed\n");
+ return 1;
+ }
+ display = XOpenDisplay(NULL);
+ screen = XDefaultScreen(display);
+
+ gst_init (NULL, NULL);
+
+ gstapp = new KGStreamerPlayer (argc, argv);
+
+ for(int i = 1; i < argc; i++) {
+ if (!strcmp (argv [i], "-ao")) {
+ ao_driver = argv [++i];
+ } else if (!strcmp (argv [i], "-vo")) {
+ vo_driver = argv [++i];
+ } else if (!strcmp (argv [i], "-dvd-device") && ++i < argc) {
+ dvd_device = argv [i];
+ } else if (!strcmp (argv [i], "-vcd-device") && ++i < argc) {
+ vcd_device = argv [i];
+ } else if (!strcmp (argv [i], "-wid") || !strcmp (argv [i], "-window-id")) {
+ wid = atol (argv [++i]);
+ window_created = false;
+ } else if (!strcmp (argv [i], "-root")) {
+ wid = XDefaultRootWindow (display);
+ window_created = false;
+ } else if (!strcmp (argv [i], "-window")) {
+ ;
+ } else if (!strcmp (argv [i], "-v")) {
+ verbose = true;
+ } else if (!strcmp (argv [i], "-c")) {
+ wants_config = true;
+ } else if (!strcmp (argv [i], "-f") && i < argc - 1) {
+ strncpy (configfile, argv [++i], sizeof (configfile));
+ configfile[sizeof (configfile) - 1] = 0;
+ } else if (!strcmp (argv [i], "-loop") && i < argc - 1) {
+ repeat_count = atol (argv [++i]);
+ } else if (!strcmp (argv [i], "-cb")) {
+ QString str = argv [++i];
+ int pos = str.find ('/');
+ if (pos > -1) {
+ fprintf (stderr, "callback is %s %s\n", str.left (pos).ascii (), str.mid (pos + 1).ascii ());
+ callback = new KMPlayer::Callback_stub
+ (str.left (pos).ascii (), str.mid (pos + 1).ascii ());
+ }
+ } else if (!strncmp (argv [i], "-", 1)) {
+ fprintf (stderr, "usage: %s [-vo (xv|xshm)] [-ao <audio driver>] [-f <config file>] [-dvd-device <device>] [-vcd-device <device>] [-v] [(-wid|-window-id) <window>] [(-root|-window)] [-cb <DCOP callback name> [-c]] [<url>]\n", argv[0]);
+ delete gstapp;
+ return 1;
+ } else {
+ mrl = QString::fromLocal8Bit (argv[i]);
+ }
+ }
+
+ DCOPClient dcopclient;
+ dcopclient.registerAs ("kgstreamerplayer");
+ Backend * backend = new Backend;
+
+ XEventThread * eventThread = new XEventThread;
+ eventThread->start ();
+
+ gstapp->init ();
+
+ if (callback) {
+ QByteArray buf;
+ if (wants_config)
+ getConfigEntries (buf);
+ callback->started (dcopclient.appId (), buf);
+ } else
+ QTimer::singleShot (10, gstapp, SLOT (play (int)));
+
+ gstapp->exec ();
+
+ XLockDisplay(display);
+ XClientMessageEvent ev = {
+ ClientMessage, 0, true, display, wid,
+ XInternAtom (display, "XVIDEO", false), 8, {b: "quit_now"}
+ };
+ XSendEvent (display, wid, false, StructureNotifyMask, (XEvent *) & ev);
+ XFlush (display);
+ XUnlockDisplay(display);
+ eventThread->wait (500);
+ delete eventThread;
+
+ gstapp->stop ();
+ delete backend;
+ delete gstapp;
+
+ fprintf (stderr, "closing display\n");
+ XCloseDisplay (display);
+ fprintf (stderr, "done\n");
+ fflush (stderr);
+ return 0;
+}
+
+#include "gstplayer.moc"
diff --git a/src/gstplayer.h b/src/gstplayer.h
new file mode 100644
index 0000000..5eec508
--- /dev/null
+++ b/src/gstplayer.h
@@ -0,0 +1,64 @@
+/* This file is part of the KMPlayer application
+ Copyright (C) 2004 Koos Vriezen <koos.vriezen@xs4all.nl>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef _K_GST_PLAYER_H_
+#define _K_GST_PLAYER_H_
+
+#include <qapplication.h>
+#include <qstring.h>
+#include <qsessionmanager.h>
+
+struct GstSizeEvent : public QEvent {
+ GstSizeEvent (int l, int w, int h);
+ int length;
+ int width;
+ int height;
+};
+
+struct GstProgressEvent : public QEvent {
+ GstProgressEvent (int p);
+ int progress;
+};
+
+class KGStreamerPlayer : public QApplication {
+ Q_OBJECT
+public:
+ KGStreamerPlayer (int argc, char ** argv);
+ ~KGStreamerPlayer ();
+
+ void init ();
+ void finished ();
+ void saturation (int val);
+ void hue (int val);
+ void contrast (int val);
+ void brightness (int val);
+ void volume (int val);
+ void seek (int val);
+ bool event (QEvent * e);
+public slots:
+ void play (int repeat_count);
+ void stop ();
+ void pause ();
+ void updatePosition ();
+ //void postFinished ();
+protected:
+ void saveState (QSessionManager & sm);
+};
+
+#endif //_K_GST_PLAYER_H_
diff --git a/src/kmplayer.desktop b/src/kmplayer.desktop
new file mode 100644
index 0000000..4969c07
--- /dev/null
+++ b/src/kmplayer.desktop
@@ -0,0 +1,100 @@
+# KDE Config File
+[Desktop Entry]
+Encoding=UTF-8
+Type=Application
+Exec=kmplayer -caption "%c" %i %m %U
+Icon=kmplayer.png
+DocPath=kmplayer/index.html
+Comment=KDE interface for MPlayer
+Comment[af]=KDE koppelvlak na MPlayer
+Comment[ar]=واجهة KDE لِــ MPlayer
+Comment[be]=KDE інтэрфейс да MPlayer
+Comment[bg]=KDE интерфейс за MPlayer
+Comment[br]=Etrefas MPlayer evit KDE
+Comment[bs]=KDE interfejs za MPlayer
+Comment[ca]=Interfície KDE per a MPlayer
+Comment[cs]=KDE rozhraní pro MPlayer
+Comment[csb]=Interfejs KDE dlô MPlayer
+Comment[da]=KDE-grænseflade for MPlayer
+Comment[de]=KDE-Oberfläche für MPlayer
+Comment[el]=Περιβάλλον χρήσης του MPlayer για το KDE
+Comment[es]=Interfaz KDE para MPlayer
+Comment[et]=KDE MPlayeri liides
+Comment[fi]=KDE-käyttöliittymä MPlayerille
+Comment[fr]=Une interface de MPlayer pour KDE
+Comment[gl]=Interface de KDE para MPlayer
+Comment[he]=ממשק KDE של MPlayer
+Comment[hi]=एमप्लेयर हेतु केडीई इंटरफेस
+Comment[hu]=KDE-alapú felület az MPlayerhez
+Comment[it]=Interfaccia KDE per MPlayer
+Comment[ja]=MPlayer の KDE インターフェース
+Comment[nb]=KDE-grensesnitt for MPlayer
+Comment[nl]=KDE-interface voor MPlayer
+Comment[pa]=MPlayer ਲਈ KDE ਇੰਟਰਫੇਸ
+Comment[pt]=Interface KDE para o MPlayer
+Comment[pt_BR]=Interface do KDE para o MPlayer
+Comment[ru]=Интерфейс KDE для MPlayer
+Comment[sk]=KDE rozhranie pre MPlayer
+Comment[sr]=KDE-ов интерфејс за MPlayer
+Comment[sr@Latn]=KDE-ov interfejs za MPlayer
+Comment[sv]=KDE-gränssnitt för Mplayer
+Comment[ta]=எம் இயக்கிக்கான கேடீஇ இடைமுகம்
+Comment[th]=ระบบติดต่อผู้ใช้แบบ KDE ของ MPlayer
+Comment[tr]=MPlayer için KDE arayüzü
+Comment[uk]=Інтерфейс KDE для MPlayer
+Comment[xx]=xxKDE interface for MPlayerxx
+Comment[zh_CN]=MPlayer 的 KDE 界面
+Comment[zh_TW]=Mplayer 的 KDE 介面
+Terminal=false
+Name=KMPlayer
+Name[hi]=केएमप्लेयर
+Name[hu]=KMPLayer
+Name[sv]=Kmplayer
+Name[ta]=கேஎம்இயக்கி
+Name[xx]=xxKMPlayerxx
+MimeType=application/ogg;application/smil;application/vnd.ms-asf;application/vnd.rn-realmedia;application/x-kmplayer;application/x-mplayer2;application/x-ogg;application/xspf+xml;video/avi;video/mediaplayer;video/mp4;video/mpeg;video/quicktime;video/vnd.rn-realvideo;video/x-avi;video/x-flic;video/x-matroska;video/x-ms-asf;video/x-msvideo;video/x-ms-wmp;video/x-ms-wmv;video/x-ms-wvx;video/x-ogm;video/x-theora;uri/mms;uri/pnm;uri/rtspt;uri/rtspu;
+InitialPreference=5
+Categories=Qt;KDE;AudioVideo;
+GenericName=Media Player
+GenericName[af]=Media Speler
+GenericName[ar]= قارئ الوسئط
+GenericName[be]=Медыяпрайгравальнік
+GenericName[bg]=Медия плеър
+GenericName[br]=Soner liesvedia
+GenericName[ca]=Reproductor de medis
+GenericName[cs]=Přehrávač médií
+GenericName[csb]=Òdgrëwôcz lopków wideò
+GenericName[cy]=Chwaraeydd Cyfryngau
+GenericName[da]=Medieafspiller
+GenericName[el]=Αναπαραγωγή πολυμέσων
+GenericName[es]=Reproductor multimedia
+GenericName[et]=Meediamängija
+GenericName[fr]=Lecteur multimédia
+GenericName[ga]=Seinnteoir Meán
+GenericName[gl]=Reprodutor Multimédia
+GenericName[he]=נגן מדיה
+GenericName[hi]=मीडिया प्लेयर
+GenericName[hu]=Médialejátszó
+GenericName[it]=Lettore multimediale
+GenericName[ja]=メディアプレーヤ
+GenericName[ka]=მედიადამკვრელი
+GenericName[lt]=Media grotuvas
+GenericName[mk]=Изведувач на мултимедиа
+GenericName[nb]=Mediaspiller
+GenericName[nl]=Mediaspeler
+GenericName[pa]=ਮੀਡਿਆ ਪਲੇਅਰ
+GenericName[pt]=Leitor Multimédia
+GenericName[pt_BR]=Reprodutor de Mídia
+GenericName[ru]=Медиаплеер
+GenericName[sk]=Multimediálny prehrávač
+GenericName[sr]=Медија плејер
+GenericName[sr@Latn]=Medija plejer
+GenericName[sv]=Mediaspelare
+GenericName[th]=โปรแกรมเล่นสื่อ
+GenericName[tr]=Medya Oynatıcı
+GenericName[uk]=Аудіо-відео програвач
+GenericName[xh]=Umdlali we Midia
+GenericName[xx]=xxMedia Playerxx
+GenericName[zh_CN]=媒体播放器
+GenericName[zh_TW]=媒體播放程式
+GenericName[zu]=Umdlali Wezezindaba
diff --git a/src/kmplayer.h b/src/kmplayer.h
new file mode 100644
index 0000000..f2faa92
--- /dev/null
+++ b/src/kmplayer.h
@@ -0,0 +1,204 @@
+/***************************************************************************
+ kmplayer.h - description
+ -------------------
+ begin : Sat Dec 7 16:14:51 CET 2002
+ copyright : (C) 2002 by Koos Vriezen
+ email :
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMPLAYER_H
+#define KMPLAYER_H
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <kapp.h>
+#include <kmainwindow.h>
+#include <kaccel.h>
+#include <kaction.h>
+#include <kurl.h>
+#include "kmplayerplaylist.h"
+
+static const int id_status_msg = 1;
+static const int id_status_timer = 2;
+
+class QPopupMenu;
+class QMenuItem;
+class QListViewItem;
+class KProcess;
+class KMPlayerBroadcastConfig;
+class KMPlayerFFServerConfig;
+class KSystemTray;
+
+namespace KMPlayer {
+ class View;
+ class PartBase;
+ class Source;
+ class KMPlayerDVDSource;
+ class KMPlayerDVDNavSource;
+ class KMPlayerVCDSource;
+ class KMPlayerPipeSource;
+ class KMPlayerTVSource;
+ class FFMpeg;
+ class PlayListItem;
+} // namespace
+
+
+class KMPlayerApp : public KMainWindow
+{
+ Q_OBJECT
+
+public:
+ KMPlayerApp (QWidget* parent=0, const char* name=0);
+ ~KMPlayerApp ();
+ void openDocumentFile (const KURL& url=KURL());
+ void addURL (const KURL& url);
+ KMPlayer::PartBase * player () const { return m_player; }
+ void resizePlayer (int percentage);
+ KDE_NO_EXPORT KRecentFilesAction * recentFiles () const { return fileOpenRecent; }
+ KDE_NO_EXPORT KMPlayer::View *view () const { return m_view; }
+ bool broadcasting () const;
+ void showBroadcastConfig ();
+ void hideBroadcastConfig ();
+ KDE_NO_EXPORT KMPlayerBroadcastConfig * broadcastConfig () const { return m_broadcastconfig; }
+ /* After createGUI() some menu's have to readded again */
+ void initMenu ();
+ void restoreFromConfig ();
+protected:
+ void saveOptions ();
+ void readOptions ();
+ void saveProperties (KConfig * config);
+ void readProperties (KConfig * config);
+ void initActions ();
+ void initStatusBar ();
+ void initView ();
+ virtual bool queryClose ();
+ virtual bool queryExit ();
+
+public slots:
+ void slotFileNewWindow ();
+ void slotFileOpen ();
+ void slotFileOpenRecent (const KURL& url);
+ void slotSaveAs ();
+ void slotFileClose ();
+ void slotFileQuit ();
+ void slotPreferences ();
+ void slotViewToolBar ();
+ void slotViewStatusBar ();
+ void slotViewMenuBar ();
+ void slotStatusMsg (const QString &text);
+ void slotSourceChanged (KMPlayer::Source *, KMPlayer::Source *);
+private slots:
+ void dvdNav ();
+ void openDVD ();
+ void openVCD ();
+ void openAudioCD ();
+ void openPipe ();
+ void openVDR ();
+ void fullScreen ();
+ void configChanged ();
+ void keepSizeRatio ();
+ void startArtsControl();
+ void loadingProgress (int percentage);
+ void positioned (int pos, int length);
+ void zoom50 ();
+ void zoom100 ();
+ void zoom150 ();
+ void editMode ();
+ void syncEditMode ();
+ void broadcastClicked ();
+ void broadcastStarted ();
+ void broadcastStopped ();
+ void playerStarted ();
+ void slotMinimalMode ();
+ void slotConfigureKeys();
+ void slotConfigureToolbars ();
+ void slotClearHistory ();
+ void windowVideoConsoleToggled (int wt);
+ void playListItemSelected (QListViewItem *);
+ void playListItemDropped (QDropEvent * e, QListViewItem * after);
+ void playListItemMoved ();
+ void menuDropInList ();
+ void menuDropInGroup ();
+ void menuCopyDrop ();
+ void menuDeleteNode ();
+ void menuMoveUpNode ();
+ void menuMoveDownNode ();
+ void preparePlaylistMenu (KMPlayer::PlayListItem *, QPopupMenu *);
+
+private:
+ void menuItemClicked (QPopupMenu * menu, int id);
+ void minimalMode (bool deco=true);
+ KConfig * config;
+ KSystemTray * m_systray;
+ KMPlayer::PartBase * m_player;
+ KMPlayer::View * m_view;
+ KMPlayer::NodePtr recents;
+ KMPlayer::NodePtr playlist;
+ KMPlayer::NodePtrW manip_node;
+
+ KAction * fileNewWindow;
+ KAction * fileOpen;
+ KRecentFilesAction * fileOpenRecent;
+ KAction * fileClose;
+ KAction * fileQuit;
+ KAction * editVolumeInc;
+ KAction * editVolumeDec;
+ KAction * toggleView;
+ KAction * viewSyncEditMode;
+#if KDE_IS_VERSION(3,1,90)
+ KToggleAction * viewFullscreen;
+#else
+ KAction * viewFullscreen;
+#endif
+ KToggleAction * viewEditMode;
+ KToggleAction * viewToolBar;
+ KToggleAction * viewStatusBar;
+ KToggleAction * viewMenuBar;
+ KToggleAction * viewKeepRatio;
+ QMenuItem * m_sourcemenu;
+ QPopupMenu * m_dvdmenu;
+ QPopupMenu * m_dvdnavmenu;
+ QPopupMenu * m_vcdmenu;
+ QPopupMenu * m_audiocdmenu;
+ QPopupMenu * m_tvmenu;
+ QPopupMenu * m_dropmenu;
+ KMPlayerFFServerConfig * m_ffserverconfig;
+ KMPlayerBroadcastConfig * m_broadcastconfig;
+ QCString m_dcopName;
+ KURL::List m_drop_list;
+ QListViewItem * m_drop_after;
+ int edit_tree_id;
+ int manip_tree_id;
+ int last_time_left;
+ int recents_id;
+ int playlist_id;
+ bool m_showToolbar;
+ bool m_showStatusbar;
+ bool m_showMenubar;
+ bool m_played_intro;
+ bool m_played_exit;
+ bool m_minimal_mode;
+ bool m_auto_resize;
+};
+
+class KMPLAYER_NO_EXPORT FileDocument : public KMPlayer::Document {
+public:
+ FileDocument (short id, const QString &, KMPlayer::PlayListNotify * notify = 0L);
+ KMPlayer::NodePtr childFromTag (const QString & tag);
+ void readFromFile (const QString & file);
+ void writeToFile (const QString & file);
+};
+
+#endif // KMPLAYER_H
diff --git a/src/kmplayer_asx.cpp b/src/kmplayer_asx.cpp
new file mode 100644
index 0000000..9ab333a
--- /dev/null
+++ b/src/kmplayer_asx.cpp
@@ -0,0 +1,146 @@
+/**
+ * Copyright (C) 2005 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include <config.h>
+#include <kdebug.h>
+#include <kurl.h>
+
+#include "kmplayer_asx.h"
+
+using namespace KMPlayer;
+
+static QString getAsxAttribute (Element * e, const QString & attr) {
+ for (AttributePtr a = e->attributes ()->first (); a; a = a->nextSibling ())
+ if (attr == a->name ().toString ().lower ())
+ return a->value ();
+ return QString ();
+}
+
+KDE_NO_EXPORT NodePtr ASX::Asx::childFromTag (const QString & tag) {
+ const char * name = tag.latin1 ();
+ if (!strcasecmp (name, "entry"))
+ return new ASX::Entry (m_doc);
+ else if (!strcasecmp (name, "entryref"))
+ return new ASX::EntryRef (m_doc);
+ else if (!strcasecmp (name, "title"))
+ return new DarkNode (m_doc, name, id_node_title);
+ else if (!strcasecmp (name, "base"))
+ return new DarkNode (m_doc, name, id_node_base);
+ else if (!strcasecmp (name, "param"))
+ return new DarkNode (m_doc, name, id_node_param);
+ return 0L;
+}
+
+KDE_NO_EXPORT Node::PlayType ASX::Asx::playType () {
+ if (cached_ismrl_version != document ()->m_tree_version)
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ()) {
+ if (e->id == id_node_title)
+ pretty_name = e->innerText ().simplifyWhiteSpace ();
+ else if (e->id == id_node_base)
+ src = getAsxAttribute (convertNode <Element> (e), "href");
+ }
+ return Mrl::playType ();
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT NodePtr ASX::Entry::childFromTag (const QString & tag) {
+ const char * name = tag.latin1 ();
+ if (!strcasecmp (name, "ref"))
+ return new ASX::Ref (m_doc);
+ else if (!strcasecmp (name, "title"))
+ return new DarkNode (m_doc, name, id_node_title);
+ else if (!strcasecmp (name, "base"))
+ return new DarkNode (m_doc, name, id_node_base);
+ else if (!strcasecmp (name, "param"))
+ return new DarkNode (m_doc, name, id_node_param);
+ else if (!strcasecmp (name, "starttime"))
+ return new DarkNode (m_doc, name, id_node_starttime);
+ else if (!strcasecmp (name, "duration"))
+ return new DarkNode (m_doc, name, id_node_duration);
+ return 0L;
+}
+
+KDE_NO_EXPORT Node::PlayType ASX::Entry::playType () {
+ if (cached_ismrl_version != document ()->m_tree_version) {
+ ref_child_count = 0;
+ NodePtr ref;
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ()) {
+ switch (e->id) {
+ case id_node_title:
+ pretty_name = e->innerText (); // already normalized (hopefully)
+ break;
+ case id_node_base:
+ src = getAsxAttribute (convertNode <Element> (e), "href");
+ break;
+ case id_node_ref:
+ ref = e;
+ ref_child_count++;
+ }
+ }
+ if (ref_child_count == 1 && !pretty_name.isEmpty ())
+ convertNode <ASX::Ref> (ref)->pretty_name = pretty_name;
+ cached_ismrl_version = document()->m_tree_version;
+ }
+ return play_type_none;
+}
+
+KDE_NO_EXPORT void ASX::Entry::activate () {
+ resolved = true;
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ if (e->id == id_node_param) {
+ Element * elm = convertNode <Element> (e);
+ if (getAsxAttribute(elm,"name").lower() == QString("clipsummary")) {
+ PlayListNotify * n = document ()->notify_listener;
+ if (n)
+ n->setInfoMessage (KURL::decode_string (
+ getAsxAttribute (elm, "value")));
+ break;
+ }
+ }
+ Mrl::activate ();
+}
+
+KDE_NO_EXPORT void ASX::Entry::deactivate () {
+ PlayListNotify * n = document ()->notify_listener;
+ if (n)
+ n->setInfoMessage (QString ());
+}
+
+KDE_NO_EXPORT bool ASX::Entry::expose () const {
+ return ref_child_count > 1 && !pretty_name.isEmpty ();
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT void ASX::Ref::opened () {
+ src = getAsxAttribute (this, "href");
+ //kdDebug () << "Ref attr found src: " << src << endl;
+}
+
+KDE_NO_EXPORT bool ASX::Ref::expose () const {
+ return !src.isEmpty ();
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT void ASX::EntryRef::opened () {
+ src = getAsxAttribute (this, "href");
+ //kdDebug () << "EntryRef attr found src: " << src << endl;
+}
+
diff --git a/src/kmplayer_asx.h b/src/kmplayer_asx.h
new file mode 100644
index 0000000..bfdbd7f
--- /dev/null
+++ b/src/kmplayer_asx.h
@@ -0,0 +1,101 @@
+/* This file is part of the KDE project
+ *
+ * Copyright (C) 2005 Koos Vriezen <koos.vriezen@xs4all.nl>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _KMPLAYER_ASX_H_
+#define _KMPLAYER_ASX_H_
+
+#include <qstring.h>
+
+#include "kmplayerplaylist.h"
+
+namespace KMPlayer {
+
+namespace ASX {
+
+const short id_node_asx = 400;
+const short id_node_entry = 401;
+const short id_node_ref = 402;
+const short id_node_entryref = 403;
+const short id_node_title = 404;
+const short id_node_base = 405;
+const short id_node_param = 406;
+const short id_node_starttime = 407;
+const short id_node_duration = 408;
+
+/**
+ * '<ASX>' tag
+ */
+class KMPLAYER_NO_EXPORT Asx : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Asx (NodePtr & d) : Mrl (d, id_node_asx) {}
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "ASX"; }
+ bool expose () const { return !pretty_name.isEmpty (); }
+ PlayType playType ();
+};
+
+/**
+ * Entry tag as found in ASX for playlist item
+ */
+class KMPLAYER_NO_EXPORT Entry : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Entry (NodePtr & d)
+ : Mrl (d, id_node_entry), ref_child_count (0) {}
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "Entry"; }
+ /**
+ * False, but since we might have a 'base' child, we can have a rel. src
+ */
+ PlayType playType ();
+ void activate ();
+ void deactivate ();
+ bool expose () const;
+ int ref_child_count;
+};
+
+/**
+ * Ref tag as found in ASX for URL item in playlist item
+ */
+class KMPLAYER_NO_EXPORT Ref : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Ref (NodePtr & d) : Mrl (d, id_node_ref) {}
+ //NodePtr childFromTag (const QString & tag);
+ void opened ();
+ KDE_NO_EXPORT const char * nodeName () const { return "Ref"; }
+ bool expose () const;
+};
+
+/**
+ * EntryRef tag as found in ASX for shortcut of Entry plus Ref playlist item
+ */
+class KMPLAYER_NO_EXPORT EntryRef : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT EntryRef (NodePtr & d) : Mrl (d, id_node_entryref) {}
+ //NodePtr childFromTag (const QString & tag);
+ void opened ();
+ KDE_NO_EXPORT const char * nodeName () const { return "EntryRef"; }
+};
+
+} //namespace ASX
+
+
+} // namespace KMPlayer
+
+#endif //_KMPLAYER_ASX_H_
diff --git a/src/kmplayer_atom.cpp b/src/kmplayer_atom.cpp
new file mode 100644
index 0000000..da79902
--- /dev/null
+++ b/src/kmplayer_atom.cpp
@@ -0,0 +1,107 @@
+/**
+ * Copyright (C) 2005-2006 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include <config.h>
+#include <kdebug.h>
+#include "kmplayer_atom.h"
+
+using namespace KMPlayer;
+
+NodePtr ATOM::Feed::childFromTag (const QString & tag) {
+ if (!strcmp (tag.latin1 (), "entry"))
+ return new ATOM::Entry (m_doc);
+ else if (!strcmp (tag.latin1 (), "link"))
+ return new ATOM::Link (m_doc);
+ else if (!strcmp (tag.latin1 (), "title"))
+ return new DarkNode (m_doc, tag, id_node_title);
+ return 0L;
+}
+
+void ATOM::Feed::closed () {
+ for (NodePtr c = firstChild (); c; c = c->nextSibling ())
+ if (c->id == id_node_title) {
+ pretty_name = c->innerText ().simplifyWhiteSpace ();
+ break;
+ }
+}
+
+NodePtr ATOM::Entry::childFromTag (const QString & tag) {
+ if (!strcmp (tag.latin1 (), "link"))
+ return new ATOM::Link (m_doc);
+ else if (!strcmp (tag.latin1 (), "content"))
+ return new ATOM::Content (m_doc);
+ else if (!strcmp (tag.latin1 (), "title"))
+ return new DarkNode (m_doc, tag, id_node_title);
+ else if (!strcmp (tag.latin1 (), "summary"))
+ return new DarkNode (m_doc, tag, id_node_summary);
+ return 0L;
+}
+
+void ATOM::Entry::closed () {
+ for (NodePtr c = firstChild (); c; c = c->nextSibling ())
+ if (c->id == id_node_title) {
+ pretty_name = c->innerText ().simplifyWhiteSpace ();
+ break;
+ }
+}
+
+Node::PlayType ATOM::Link::playType () {
+ return src.isEmpty () ? play_type_none : play_type_unknown;
+}
+
+void ATOM::Link::closed () {
+ QString href;
+ QString rel;
+ for (AttributePtr a = attributes ()->first (); a; a = a->nextSibling ()) {
+ if (a->name () == StringPool::attr_href)
+ href = a->value ();
+ else if (a->name () == StringPool::attr_title)
+ pretty_name = a->value ();
+ else if (a->name () == "rel")
+ rel = a->value ();
+ }
+ if (!href.isEmpty () && rel == QString::fromLatin1 ("enclosure"))
+ src = href;
+ else if (pretty_name.isEmpty ())
+ pretty_name = href;
+}
+
+void ATOM::Content::closed () {
+ for (AttributePtr a = attributes ()->first (); a; a = a->nextSibling ()) {
+ if (a->name () == StringPool::attr_src)
+ src = a->value ();
+ else if (a->name () == StringPool::attr_type) {
+ QString v = a->value ().lower ();
+ if (v == QString::fromLatin1 ("text"))
+ mimetype = QString::fromLatin1 ("text/plain");
+ else if (v == QString::fromLatin1 ("html"))
+ mimetype = QString::fromLatin1 ("text/html");
+ else if (v == QString::fromLatin1 ("xhtml"))
+ mimetype = QString::fromLatin1 ("application/xhtml+xml");
+ else
+ mimetype = v;
+ }
+ }
+}
+
+Node::PlayType ATOM::Content::playType () {
+ if (!hasChildNodes () && !src.isEmpty ())
+ return play_type_unknown;
+ return play_type_none;
+}
+
diff --git a/src/kmplayer_atom.h b/src/kmplayer_atom.h
new file mode 100644
index 0000000..b121ead
--- /dev/null
+++ b/src/kmplayer_atom.h
@@ -0,0 +1,82 @@
+/* This file is part of the KDE project
+ *
+ * Copyright (C) 2005-2006 Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _KMPLAYER_ATOM_H_
+#define _KMPLAYER_ATOM_H_
+
+#include <qstringlist.h>
+
+#include "kmplayerplaylist.h"
+
+namespace KMPlayer {
+
+namespace ATOM {
+
+const short id_node_feed = 300;
+const short id_node_entry = 301;
+const short id_node_link = 302;
+const short id_node_title = 303;
+const short id_node_summary = 304;
+const short id_node_content = 305;
+
+/**
+ * '<feed>' tag
+ */
+class KMPLAYER_NO_EXPORT Feed : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Feed (NodePtr & d) : Mrl (d, id_node_feed) {}
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "feed"; }
+ void closed ();
+ bool expose () const { return !pretty_name.isEmpty (); }
+};
+
+class KMPLAYER_NO_EXPORT Entry : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Entry (NodePtr & d) : Mrl (d, id_node_entry) {}
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "entry"; }
+ PlayType playType () { return play_type_none; }
+ void closed ();
+};
+
+class KMPLAYER_NO_EXPORT Link : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Link (NodePtr & d) : Mrl (d, id_node_link) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "link"; }
+ PlayType playType ();
+ void closed ();
+};
+
+class KMPLAYER_NO_EXPORT Content : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Content (NodePtr &d) : Mrl(d, id_node_content) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "content"; }
+ PlayType playType ();
+ void closed ();
+ //bool expose () const { return isPlayable (); }
+};
+
+} //namespace ATOM
+
+
+} // namespace KMPlayer
+
+#endif //_KMPLAYER_ATOM_H_
diff --git a/src/kmplayer_backend.h b/src/kmplayer_backend.h
new file mode 100644
index 0000000..242ee32
--- /dev/null
+++ b/src/kmplayer_backend.h
@@ -0,0 +1,58 @@
+/**
+ * Copyright (C) 2003 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#ifndef _KMPLAYER_BACKEND_H_
+#define _KMPLAYER_BACKEND_H_
+
+#include <dcopobject.h>
+
+namespace KMPlayer {
+
+class BackendPrivate;
+
+class Backend : public DCOPObject {
+ K_DCOP
+public:
+ Backend ();
+ virtual ~Backend ();
+k_dcop:
+ virtual ASYNC setURL (QString url);
+ virtual ASYNC setSubTitleURL (QString url);
+ virtual ASYNC play (int repeat_count);
+ virtual ASYNC stop ();
+ virtual ASYNC pause ();
+ /* seek (pos, abs) seek position in deci-seconds */
+ virtual ASYNC seek (int pos, bool absolute);
+ virtual ASYNC hue (int h, bool absolute);
+ virtual ASYNC saturation (int s, bool absolute);
+ virtual ASYNC contrast (int c, bool absolute);
+ virtual ASYNC brightness (int b, bool absolute);
+ virtual ASYNC volume (int v, bool absolute);
+ virtual ASYNC frequency (int f);
+ virtual ASYNC quit ();
+ virtual ASYNC setConfig (QByteArray);
+ virtual ASYNC setAudioLang (int, QString);
+ virtual ASYNC setSubtitle (int, QString);
+ virtual bool isPlaying ();
+private:
+ BackendPrivate * d;
+};
+
+} // namespace
+
+#endif //_KMPLAYER_BACKEND_H_
diff --git a/src/kmplayer_callback.h b/src/kmplayer_callback.h
new file mode 100644
index 0000000..45d4f88
--- /dev/null
+++ b/src/kmplayer_callback.h
@@ -0,0 +1,51 @@
+/**
+ * Copyright (C) 2003 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#ifndef _KMPLAYER_CALLBACK_H_
+#define _KMPLAYER_CALLBACK_H_
+
+#include <dcopobject.h>
+#include <qstringlist.h>
+
+namespace KMPlayer {
+
+class CallbackProcess;
+
+class Callback : public DCOPObject {
+ K_DCOP
+public:
+ enum StatusCode { stat_addurl = 0, stat_newtitle, stat_hasvideo };
+ Callback (CallbackProcess *);
+k_dcop:
+ ASYNC statusMessage (int code, QString msg);
+ ASYNC errorMessage (int code, QString msg);
+ ASYNC subMrl (QString mrl, QString title);
+ ASYNC finished ();
+ ASYNC playing ();
+ ASYNC started (QCString dcopname, QByteArray data);
+ ASYNC movieParams (int length, int width, int height, float aspect, QStringList alang, QStringList slang);
+ ASYNC moviePosition (int position);
+ ASYNC loadingProgress (int percentage);
+ ASYNC toggleFullScreen ();
+private:
+ CallbackProcess * m_process;
+};
+
+} // namespace
+
+#endif //_KMPLAYER_CALLBACK_H_
diff --git a/src/kmplayer_def.h b/src/kmplayer_def.h
new file mode 100644
index 0000000..7c3ee7f
--- /dev/null
+++ b/src/kmplayer_def.h
@@ -0,0 +1,69 @@
+/* This file is part of the KDE project
+ *
+ * Copyright (C) 2006 Koos Vriezen <koos.vriezen@xs4all.nl>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * until boost gets common, a more or less compatable one ..
+ */
+
+#ifndef _KMPLAYER_DEF_H_
+#define _KMPLAYER_DEF_H_
+
+#include <config.h>
+#ifndef ASSERT
+#define ASSERT Q_ASSERT
+#endif
+
+#include <kdemacros.h>
+
+#undef KDE_NO_CDTOR_EXPORT
+#undef KDE_NO_EXPORT
+#ifndef KDE_EXPORT
+ #define KDE_EXPORT
+#endif
+#if __GNUC__ - 0 > 3 && __GNUC_MINOR__ - 0 > 1
+# define KMPLAYER_NO_EXPORT __attribute__ ((visibility("hidden")))
+# define KMPLAYER_EXPORT __attribute__ ((visibility("default")))
+# define KMPLAYER_NO_MBR_EXPORT __attribute__ ((visibility("hidden")))
+# define KDE_NO_CDTOR_EXPORT
+# define KDE_NO_EXPORT
+#elif __GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 > 3)
+ #if __GNUC__ - 0 > 3
+ #define KMPLAYER_NO_EXPORT __attribute__ ((visibility("hidden")))
+ #else
+ #define KMPLAYER_NO_EXPORT
+ #endif
+ #define KDE_NO_CDTOR_EXPORT __attribute__ ((visibility("hidden")))
+ #define KDE_NO_EXPORT __attribute__ ((visibility("hidden")))
+ #define KMPLAYER_EXPORT __attribute__ ((visibility("default")))
+ #define KMPLAYER_NO_MBR_EXPORT
+#elif __GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 > 2)
+ #define KDE_NO_CDTOR_EXPORT
+ #define KDE_NO_EXPORT __attribute__ ((visibility("hidden")))
+ #define KMPLAYER_EXPORT
+ #define KMPLAYER_NO_EXPORT
+ #define KMPLAYER_NO_MBR_EXPORT
+#else
+ #define KDE_NO_CDTOR_EXPORT
+ #define KDE_NO_EXPORT
+ #define KMPLAYER_EXPORT
+ #define KMPLAYER_NO_EXPORT
+ #define KMPLAYER_NO_MBR_EXPORT
+#endif
+
+
+#endif //_KMPLAYER_DEF_H_
diff --git a/src/kmplayer_koffice.desktop b/src/kmplayer_koffice.desktop
new file mode 100644
index 0000000..faff60e
--- /dev/null
+++ b/src/kmplayer_koffice.desktop
@@ -0,0 +1,15 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=KMPlayer
+Name[hi]=केएमप्लेयर
+Name[hu]=KMPLayer
+Name[sv]=Kmplayer
+Name[ta]=கேஎம்இயக்கி
+Name[xx]=xxKMPlayerxx
+X-KDE-Library=libkmplayerkofficepart
+MimeType=application/ogg;application/smil;application/vnd.ms-asf;application/vnd.rn-realmedia;application/x-kmplayer;application/x-mplayer2;application/x-ogg;video/avi;video/mediaplayer;video/mp4;video/mpeg;video/quicktime;video/vnd.rn-realvideo;video/x-avi;video/x-flic;video/x-matroska;video/x-ms-asf;video/x-msvideo;video/x-ms-wmp;video/x-ms-wmv;video/x-ogm;video/x-theora;uri/mms;uri/pnm;uri/rtspt;uri/rtspu;
+Type=Service
+Icon=kmplayer
+ServiceTypes=KOfficePart,KParts/ReadOnlyPart,KParts/ReadWritePart,Browser/View,KMediaPlayer/Player
+X-KDE-NativeMimeType=application/x-kmplayer
+InitialPreference=5
diff --git a/src/kmplayer_koffice_part.cpp b/src/kmplayer_koffice_part.cpp
new file mode 100644
index 0000000..756402a
--- /dev/null
+++ b/src/kmplayer_koffice_part.cpp
@@ -0,0 +1,168 @@
+/**
+ * Copyright (C) 2002-2003 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <signal.h>
+
+#include <qapplication.h>
+#include <qcstring.h>
+#include <qtimer.h>
+#include <qmultilineedit.h>
+#include <qpushbutton.h>
+#include <qpopupmenu.h>
+#include <qslider.h>
+#include <qvaluelist.h>
+
+#include <kprocess.h>
+#include <kmessagebox.h>
+#include <kaboutdata.h>
+#include <kdebug.h>
+#include <kconfig.h>
+#include <kaction.h>
+#include <kstandarddirs.h>
+#include <kparts/factory.h>
+
+#include "kmplayerpartbase.h"
+#include "kmplayer_koffice_part.h"
+#include "kmplayerview.h"
+#include "kmplayerconfig.h"
+
+#ifdef HAVE_KOFFICE
+
+#include <qdom.h>
+//#include <qmetaobject.h>
+#include <qlayout.h>
+#include <qptrlist.h>
+#include <qpainter.h>
+#include <koFrame.h>
+
+class KMPlayerFactory : public KParts::Factory {
+public:
+ KMPlayerFactory ();
+ virtual ~KMPlayerFactory ();
+ virtual KParts::Part *createPartObject
+ (QWidget *wparent, const char *wname, QObject *parent, const char *name,
+ const char *className, const QStringList &args);
+ static KInstance * instance () { return s_instance; }
+private:
+ static KInstance * s_instance;
+};
+
+K_EXPORT_COMPONENT_FACTORY (libkmplayerkofficepart, KMPlayerFactory)
+
+KInstance *KMPlayerFactory::s_instance = 0;
+
+KMPlayerFactory::KMPlayerFactory () {
+ s_instance = new KInstance ("KMPlayerKofficePart");
+}
+
+KMPlayerFactory::~KMPlayerFactory () {
+ delete s_instance;
+}
+
+KParts::Part *KMPlayerFactory::createPartObject
+ (QWidget *wparent, const char *wname,
+ QObject *parent, const char * name,
+ const char * cls, const QStringList & args) {
+ if (strstr (cls, "KoDocument"))
+ return new KOfficeMPlayer (wparent, wname, parent, name);
+ return 0L;
+}
+
+//-----------------------------------------------------------------------------
+
+
+KOfficeMPlayer::KOfficeMPlayer (QWidget *parentWidget, const char *widgetName, QObject* parent, const char* name, bool singleViewMode)
+ : KoDocument (parentWidget, widgetName, parent, name, singleViewMode),
+ m_config (new KConfig ("kmplayerrc")),
+ m_player (new KMPlayer (parentWidget, 0L, 0L, 0L, m_config))
+{
+ setInstance (KMPlayerFactory::instance (), false);
+ setReadWrite (false);
+ m_player->init();
+ m_player->setSource (m_player->sources () ["urlsource"]);
+ //setWidget (view);
+}
+
+KOfficeMPlayer::~KOfficeMPlayer () {
+ kdDebug() << "KOfficeMPlayer::~KOfficeMPlayer" << /*kdBacktrace() <<*/ endl;
+}
+
+void KOfficeMPlayer::paintContent (QPainter& p, const QRect& r, bool, double, double) {
+ p.fillRect (r, QBrush (QColor (0, 0, 0)));
+}
+
+bool KOfficeMPlayer::initDoc() {
+ kdDebug() << "KOfficeMPlayer::initDoc" << endl;
+ return true;
+}
+
+bool KOfficeMPlayer::loadXML (QIODevice *, const QDomDocument & doc) {
+ QDomNode node = doc.firstChild ();
+ if (node.isNull ()) return true;
+ kdDebug() << "KOfficeMPlayer::loadXML " << node.nodeName () << endl;
+ node = node.firstChild ();
+ if (node.isNull ()) return true;
+ kdDebug() << "KOfficeMPlayer::loadXML " << node.nodeName () << endl;
+ node = node.firstChild ();
+ if (node.isNull () || !node.isText ()) return true;
+ m_player->setURL (KURL (node.toText ().data ()));
+ return true;
+}
+
+bool KOfficeMPlayer::loadOasis (const QDomDocument &, KoOasisStyles &, const QDomDocument &, KoStore *) {
+ return true;
+}
+
+QDomDocument KOfficeMPlayer::saveXML() {
+ QDomDocument doc = createDomDocument ("kmplayer", QString::number(1.0));
+ QDomElement docelm = doc.documentElement();
+ docelm.setAttribute ("editor", "KMPlayer");
+ docelm.setAttribute ("mime", "application/x-kmplayer");
+ QDomElement url = doc.createElement ("url");
+ url.appendChild (doc.createTextNode (m_player->url ().url ()));
+ doc.appendChild (url);
+ return doc;
+}
+
+KoView* KOfficeMPlayer::createViewInstance (QWidget* parent, const char* name) {
+ kdDebug() << "KOfficeMPlayer::createViewInstance" << endl;
+ return new KOfficeMPlayerView (this, parent);
+}
+
+KOfficeMPlayerView::KOfficeMPlayerView (KOfficeMPlayer* part, QWidget* parent, const char* name)
+ : KoView (part, parent, name),
+ m_view (static_cast <KMPlayer::View*> (part->player ()->view ())) {
+ kdDebug() << "KOfficeMPlayerView::KOfficeMPlayerView this:" << this << " parent:" << parent << endl;
+ m_oldparent = static_cast <QWidget*> (m_view->parent());
+ m_view->reparent (this, QPoint (0, 0));
+ QVBoxLayout * box = new QVBoxLayout (this, 0, 0);
+ box->addWidget (m_view);
+}
+
+KOfficeMPlayerView::~KOfficeMPlayerView () {
+ kdDebug() << "KOfficeMPlayerView::~KOfficeMPlayerView this:" << this << endl;
+ m_view->reparent (m_oldparent, QPoint (0, 0));
+}
+
+#include "kmplayer_koffice_part.moc"
+#endif
diff --git a/src/kmplayer_koffice_part.h b/src/kmplayer_koffice_part.h
new file mode 100644
index 0000000..632a570
--- /dev/null
+++ b/src/kmplayer_koffice_part.h
@@ -0,0 +1,85 @@
+/**
+ * Copyright (C) 2002-2003 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#ifndef KMPLAYER_KOFFICE_PART_H
+#define KMPLAYER_KOFFICE_PART_H
+
+#include <config.h>
+#include <kmediaplayer/player.h>
+#include <kparts/browserextension.h>
+#include <kparts/factory.h>
+#include <kurl.h>
+#ifdef HAVE_KOFFICE
+#include <koDocument.h>
+#include <koView.h>
+#endif //HAVE_KOFFICE
+#include <qobject.h>
+#include <qvaluelist.h>
+#include <qstringlist.h>
+#include <qguardedptr.h>
+#include <qregexp.h>
+#include "kmplayerview.h"
+#include "kmplayersource.h"
+
+
+class KProcess;
+class KAboutData;
+class KMPlayer;
+class KInstance;
+class KConfig;
+class QIODevice;
+
+#ifdef HAVE_KOFFICE
+class KOfficeMPlayer;
+
+class KOfficeMPlayerView : public KoView {
+ Q_OBJECT
+public:
+ KOfficeMPlayerView (KOfficeMPlayer* part, QWidget* parent, const char* name = 0 );
+ ~KOfficeMPlayerView ();
+ void updateReadWrite(bool) {}
+private:
+ KMPlayer::View * m_view;
+ QGuardedPtr <QWidget> m_oldparent;
+};
+
+class KOfficeMPlayer : public KoDocument {
+ Q_OBJECT
+public:
+ KOfficeMPlayer (QWidget *parentWidget = 0, const char *widgetName = 0, QObject* parent = 0, const char* name = 0, bool singleViewMode = false);
+ ~KOfficeMPlayer ();
+
+ virtual void paintContent (QPainter& painter, const QRect& rect,
+ bool transparent = false, double zoomX = 1.0, double zoomY = 1.0);
+ virtual bool initDoc ();
+ virtual bool loadXML (QIODevice *, const QDomDocument &);
+ virtual bool loadOasis (const QDomDocument &, KoOasisStyles &, const QDomDocument &, KoStore *);
+ virtual QDomDocument saveXML ();
+ virtual QCString mimeType() const { return "application/x-kmplayer"; }
+
+ KMPlayer * player () const { return m_player; }
+protected:
+ virtual KoView* createViewInstance (QWidget* parent, const char* name);
+private:
+ KConfig * m_config;
+ KMPlayer * m_player;
+ KOfficeMPlayerView * m_view;
+};
+#endif //HAVE_KOFFICE
+
+#endif
diff --git a/src/kmplayer_part.cpp b/src/kmplayer_part.cpp
new file mode 100644
index 0000000..74698b9
--- /dev/null
+++ b/src/kmplayer_part.cpp
@@ -0,0 +1,1197 @@
+/**
+ * Copyright (C) 2002-2003 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#ifdef KDE_USE_FINAL
+#undef Always
+#endif
+#include <list>
+#include <algorithm>
+
+#include <config.h>
+#include <qpopupmenu.h>
+#include <qtimer.h>
+#include <qpushbutton.h>
+#include <qslider.h>
+
+class KXMLGUIClient; // workaround for kde3.3 on sarge with gcc4, kactioncollection.h does not forward declare KXMLGUIClient
+#include <klibloader.h>
+#include <kdebug.h>
+#include <kconfig.h>
+#include <ksimpleconfig.h>
+#include <kaction.h>
+#include <kapplication.h>
+#include <klocale.h>
+#include <kinstance.h>
+#include <kparts/factory.h>
+#include <kstaticdeleter.h>
+#include <kstatusbar.h>
+
+#include "kmplayer_part.h"
+#include "kmplayerview.h"
+#include "viewarea.h"
+#include "kmplayercontrolpanel.h"
+#include "kmplayerconfig.h"
+#include "kmplayerprocess.h"
+
+using namespace KMPlayer;
+
+typedef std::list <KMPlayerPart *> KMPlayerPartList;
+
+struct KMPLAYER_NO_EXPORT KMPlayerPartStatic {
+ KMPlayerPartStatic ();
+ ~KMPlayerPartStatic ();
+ KMPlayerPartList partlist;
+};
+
+static KMPlayerPartStatic * kmplayerpart_static = 0L;
+
+KDE_NO_CDTOR_EXPORT KMPlayerPartStatic::KMPlayerPartStatic () {
+ StringPool::init ();
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerPartStatic::~KMPlayerPartStatic () {
+ kmplayerpart_static = 0L;
+ StringPool::reset ();
+ // delete map content
+}
+
+struct KMPLAYER_NO_EXPORT GroupPredicate {
+ const KMPlayerPart * m_part;
+ const QString & m_group;
+ bool m_get_any;
+ GroupPredicate(const KMPlayerPart *part, const QString &group, bool b=false)
+ : m_part (part), m_group (group), m_get_any (b) {}
+ bool operator () (const KMPlayerPart * part) const {
+ return ((m_get_any && part != m_part &&
+ !part->master () && !part->url ().isEmpty ()) ||
+ (m_part->allowRedir (part->m_docbase) &&
+ (part->m_group == m_group ||
+ part->m_group == QString::fromLatin1("_master") ||
+ m_group == QString::fromLatin1("_master")) &&
+ (part->m_features & KMPlayerPart::Feat_Viewer) !=
+ (m_part->m_features & KMPlayerPart::Feat_Viewer)));
+ }
+};
+
+static KStaticDeleter <KMPlayerPartStatic> kmplayerpart_staticdeleter;
+
+//-----------------------------------------------------------------------------
+
+class KMPlayerFactory : public KParts::Factory {
+public:
+ KMPlayerFactory ();
+ virtual ~KMPlayerFactory ();
+ virtual KParts::Part *createPartObject
+ (QWidget *wparent, const char *wname,
+ QObject *parent, const char *name,
+ const char *className, const QStringList &args);
+ static KInstance * instance () { return s_instance; }
+private:
+ static KInstance * s_instance;
+};
+
+K_EXPORT_COMPONENT_FACTORY (libkmplayerpart, KMPlayerFactory)
+
+KInstance *KMPlayerFactory::s_instance = 0;
+
+KDE_NO_CDTOR_EXPORT KMPlayerFactory::KMPlayerFactory () {
+ s_instance = new KInstance ("kmplayer");
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerFactory::~KMPlayerFactory () {
+ delete s_instance;
+}
+
+KDE_NO_EXPORT KParts::Part *KMPlayerFactory::createPartObject
+ (QWidget *wparent, const char *wname,
+ QObject *parent, const char * name,
+ const char * cls, const QStringList & args) {
+ kdDebug() << "KMPlayerFactory::createPartObject " << cls << endl;
+ return new KMPlayerPart (wparent, wname, parent, name, args);
+}
+
+//-----------------------------------------------------------------------------
+
+static bool getBoolValue (const QString & value) {
+ return (value.lower() != QString::fromLatin1("false") &&
+ value.lower() != QString::fromLatin1("off") &&
+ value.lower() != QString::fromLatin1("0"));
+}
+
+#define SET_FEAT_ON(f) { m_features |= f; turned_off_features &= ~f; }
+#define SET_FEAT_OFF(f) { m_features &= ~f; turned_off_features |= f; }
+
+KDE_NO_CDTOR_EXPORT KMPlayerPart::KMPlayerPart (QWidget * wparent, const char *wname,
+ QObject * parent, const char *name, const QStringList &args)
+ : PartBase (wparent, wname, parent, name, new KConfig ("kmplayerrc")),
+ m_master (0L),
+ m_browserextension (new KMPlayerBrowserExtension (this)),
+ m_liveconnectextension (new KMPlayerLiveConnectExtension (this)),
+ m_features (Feat_Unknown),
+ m_started_emited (false),
+ m_havehref (false) {
+ kdDebug () << "KMPlayerPart(" << this << ")::KMPlayerPart ()" << endl;
+ bool show_fullscreen = false;
+ if (!kmplayerpart_static)
+ kmplayerpart_static = kmplayerpart_staticdeleter.setObject (new KMPlayerPartStatic ());
+ setInstance (KMPlayerFactory::instance (), true);
+ init (actionCollection ());
+ m_sources ["hrefsource"] = (new KMPlayerHRefSource (this));
+#ifdef HAVE_NSPR
+ KMPlayer::NpPlayer *npp = (KMPlayer::NpPlayer *) players () ["npp"];
+ connect (npp, SIGNAL (evaluate (const QString &, QString &)),
+ m_liveconnectextension, SLOT (evaluate (const QString &, QString &)));
+ connect (npp, SIGNAL (openUrl (const KURL &, const QString &)),
+ m_browserextension,
+ SLOT (slotRequestOpenURL (const KURL &, const QString &)));
+#endif
+ /*KAction *playact =*/ new KAction(i18n("P&lay"), QString ("player_play"), KShortcut (), this, SLOT(play ()), actionCollection (), "play");
+ /*KAction *pauseact =*/ new KAction(i18n("&Pause"), QString ("player_pause"), KShortcut (), this, SLOT(pause ()), actionCollection (), "pause");
+ /*KAction *stopact =*/ new KAction(i18n("&Stop"), QString ("player_stop"), KShortcut (), this, SLOT(stop ()), actionCollection (), "stop");
+ new KAction (i18n ("Increase Volume"), QString ("player_volume"), KShortcut (), this, SLOT (increaseVolume ()), actionCollection (), "edit_volume_up");
+ new KAction (i18n ("Decrease Volume"), QString ("player_volume"), KShortcut (), this, SLOT (decreaseVolume ()), actionCollection (), "edit_volume_down");
+ Source * urlsource = m_sources ["urlsource"];
+ KMPlayer::ControlPanel * panel = m_view->controlPanel ();
+ QStringList::const_iterator it = args.begin ();
+ QStringList::const_iterator end = args.end ();
+ int turned_off_features = 0;
+ for ( ; it != end; ++it) {
+ int equalPos = (*it).find("=");
+ if (equalPos > 0) {
+ QString name = (*it).left (equalPos).lower ();
+ QString value = (*it).right ((*it).length () - equalPos - 1);
+ if (value.at(0)=='\"')
+ value = value.right (value.length () - 1);
+ if (value.at (value.length () - 1) == '\"')
+ value.truncate (value.length () - 1);
+ kdDebug () << "name=" << name << " value=" << value << endl;
+ if (name == "href") {
+ urlsource->setURL (KURL (value));
+ urlsource->setIdentified (false);
+ m_havehref = true;
+ } else if (name == QString::fromLatin1("width")) {
+ m_noresize = true;
+ } else if (name == QString::fromLatin1("height")) {
+ m_noresize = true;
+ } else if (name == QString::fromLatin1("type")) {
+ urlsource->document ()->mrl ()->mimetype = value;
+ } else if (name == QString::fromLatin1("controls")) {
+ //http://service.real.com/help/library/guides/production8/realpgd.htm?src=noref,rnhmpg_080301,rnhmtn,nosrc
+ //http://service.real.com/help/library/guides/production8/htmfiles/control.htm
+ QStringList sl = QStringList::split (QChar (','), value);
+ QStringList::const_iterator it = sl.begin ();
+ const QStringList::const_iterator e = sl.end ();
+ for (QStringList::const_iterator i = sl.begin (); i != e; ++i) {
+ QString val_lower ((*i).lower ());
+ if (val_lower == QString::fromLatin1("imagewindow")) {
+ SET_FEAT_ON (Feat_ImageWindow | Feat_Viewer)
+ } else if (val_lower == QString::fromLatin1("all")) {
+ m_features = (Feat_Controls | Feat_StatusBar);
+ } else if (val_lower == QString::fromLatin1("tacctrl")) {
+ SET_FEAT_ON (Feat_Label)
+ } else if (val_lower == QString::fromLatin1("controlpanel")) {
+ SET_FEAT_ON (Feat_Controls)
+ } else if (val_lower == QString::fromLatin1("infovolumepanel")){
+ SET_FEAT_ON (Feat_Controls) // TODO
+ } else if (val_lower == QString::fromLatin1("positionfield") ||
+ val_lower == QString::fromLatin1("positionslider")) {
+ setAutoControls (false);
+ panel->positionSlider ()->show ();
+ SET_FEAT_ON (Feat_Controls)
+ } else if ( val_lower == QString::fromLatin1("homectrl")) {
+ setAutoControls (false);
+ panel->button (KMPlayer::ControlPanel::button_config)->show();
+ } else if (val_lower == QString::fromLatin1("mutectrl") ||
+ val_lower == QString::fromLatin1("mutevolume")) {
+ setAutoControls (false);
+ panel->volumeBar()->setMinimumSize (QSize (20, panel->volumeBar()->minimumSize ().height ()));
+ panel->volumeBar()->show ();
+ SET_FEAT_ON (Feat_Controls)
+ } else if (val_lower == QString::fromLatin1("rwctrl")) {
+ setAutoControls (false);
+ panel->button (KMPlayer::ControlPanel::button_back)->show (); // rewind ?
+ SET_FEAT_ON (Feat_Controls)
+ } else if ( val_lower == QString::fromLatin1("ffctrl")) {
+ setAutoControls (false);
+ panel->button(KMPlayer::ControlPanel::button_forward)->show();
+ m_features = Feat_Controls;
+ } else if ( val_lower ==QString::fromLatin1("stopbutton")) {
+ setAutoControls (false);
+ panel->button (KMPlayer::ControlPanel::button_stop)->show ();
+ SET_FEAT_ON (Feat_Controls)
+ } else if (val_lower == QString::fromLatin1("playbutton") ||
+ val_lower ==QString::fromLatin1("playonlybutton")) {
+ setAutoControls (false);
+ panel->button (KMPlayer::ControlPanel::button_play)->show ();
+ SET_FEAT_ON (Feat_Controls)
+ } else if (val_lower ==QString::fromLatin1("pausebutton")) {
+ setAutoControls (false);
+ panel->button (KMPlayer::ControlPanel::button_pause)->show ();
+ SET_FEAT_ON (Feat_Controls)
+ } else if (val_lower == QString::fromLatin1("statusbar") ||
+ val_lower == QString::fromLatin1("statusfield")) {
+ SET_FEAT_ON (Feat_StatusBar)
+ } else if (val_lower == QString::fromLatin1("infopanel")) {
+ SET_FEAT_ON (Feat_InfoPanel)
+ } else if (val_lower == QString::fromLatin1("playlist")) {
+ SET_FEAT_ON (Feat_PlayList)
+ } else if (val_lower==QString::fromLatin1("volumeslider")) {
+ SET_FEAT_ON (Feat_VolumeSlider)
+ setAutoControls (false);
+ panel->volumeBar()->show ();
+ panel->volumeBar()->setMinimumSize (QSize (20, panel->volumeBar()->minimumSize ().height ()));
+ }
+ }
+ } else if (name == QString::fromLatin1("uimode")) {
+ QString val_lower (value.lower ());
+ if (val_lower == QString::fromLatin1("full"))
+ SET_FEAT_ON (Feat_All & ~(Feat_PlayList | Feat_ImageWindow))
+ // TODO: invisible, none, mini
+ } else if (name == QString::fromLatin1("nolabels")) {
+ SET_FEAT_OFF (Feat_Label)
+ } else if (name == QString::fromLatin1("nocontrols")) {
+ SET_FEAT_OFF (Feat_Controls | Feat_VolumeSlider)
+ } else if (name == QString::fromLatin1("showdisplay")) {
+ // the author name, the clip name, and the copyright information
+ if (getBoolValue (value))
+ SET_FEAT_ON (Feat_InfoPanel)
+ else
+ SET_FEAT_OFF (Feat_InfoPanel)
+ } else if (name == QString::fromLatin1("showcontrols")) {
+ if (getBoolValue (value))
+ SET_FEAT_ON (Feat_Viewer | Feat_Controls)
+ else
+ SET_FEAT_OFF (Feat_Controls | Feat_VolumeSlider)
+ } else if (name == QString::fromLatin1("showstatusbar")) {
+ if (getBoolValue (value))
+ SET_FEAT_ON (Feat_Viewer | Feat_StatusBar)
+ else
+ SET_FEAT_OFF (Feat_StatusBar)
+ // else showcaptioning/showgotobar/showpositioncontrols/showtracker
+ } else if (name == QString::fromLatin1("console")) {
+ m_group = value.isEmpty() ? QString::fromLatin1("_anonymous") : value;
+ } else if (name == QString::fromLatin1("__khtml__pluginbaseurl")) {
+ m_docbase = KURL (value);
+ } else if (name == QString::fromLatin1("src")) {
+ m_src_url = value;
+ } else if (name == QString::fromLatin1("filename")) {
+ m_file_name = value;
+ } else if (name == QString::fromLatin1 ("fullscreenmode")) {
+ show_fullscreen = getBoolValue (value);
+ } else if (name == QString::fromLatin1 ("autostart")) {
+ urlsource->setAutoPlay (getBoolValue (value));
+ }
+ // volume/clicktoplay/transparentatstart/animationatstart
+ // autorewind/displaysize/border
+ if (name.startsWith (QString::fromLatin1 ("__khtml__")))
+ name = name.mid (9);
+ convertNode <KMPlayer::Element> (urlsource->document ())->setAttribute (name, value);
+ }
+ }
+ if (turned_off_features) {
+ if (m_features == Feat_Unknown)
+ m_features = (Feat_All & ~(Feat_PlayList | Feat_ImageWindow));
+ m_features &= ~turned_off_features;
+ }
+ //KParts::Part::setWidget (m_view);
+ setXMLFile("kmplayerpartui.rc");
+ panel->zoomMenu ()->connectItem (KMPlayer::ControlPanel::menu_zoom50,
+ this, SLOT (setMenuZoom (int)));
+ panel->zoomMenu ()->connectItem (KMPlayer::ControlPanel::menu_zoom100,
+ this, SLOT (setMenuZoom (int)));
+ panel->zoomMenu ()->connectItem (KMPlayer::ControlPanel::menu_zoom150,
+ this, SLOT (setMenuZoom (int)));
+
+ m_view->setNoInfoMessages (m_features != Feat_InfoPanel);
+ if (m_features == Feat_InfoPanel)
+ m_view->setInfoPanelOnly ();
+ else if (m_features == Feat_PlayList)
+ m_view->setPlaylistOnly ();
+ else {
+ if (m_features & Feat_StatusBar)
+ m_view->setStatusBarMode (KMPlayer::View::SB_Show);
+ if (m_features & (Feat_Controls | Feat_VolumeSlider))
+ m_view->setControlPanelMode (m_features & Feat_Viewer ? KMPlayer::View::CP_Show : KMPlayer::View::CP_Only);
+ else if (m_features & Feat_ImageWindow)
+ m_view->setControlPanelMode (KMPlayer::View::CP_Hide);
+ else
+ m_view->setControlPanelMode (KMPlayer::View::CP_AutoHide);
+ }
+ bool group_member = !m_group.isEmpty () && m_group != QString::fromLatin1("_unique") && m_features != Feat_Unknown;
+ if (!group_member || m_features & Feat_Viewer) {
+ // not part of a group or we're the viewer
+ setProcess ("mplayer");
+ setRecorder ("mencoder");
+ connectPanel (m_view->controlPanel ());
+ if (m_features & Feat_StatusBar) {
+ last_time_left = 0;
+ connect (this, SIGNAL (positioned (int, int)),
+ this, SLOT (statusPosition (int, int)));
+ m_view->statusBar ()->insertItem (QString ("--:--"), 1, 0, true);
+ }
+ }
+ if (group_member) {
+ KMPlayerPartList::iterator i =kmplayerpart_static->partlist.begin ();
+ KMPlayerPartList::iterator e =kmplayerpart_static->partlist.end ();
+ GroupPredicate pred (this, m_group);
+ for (i = std::find_if (i, e, pred);
+ i != e;
+ i = std::find_if (++i, e, pred)) {
+ // found viewer and control part, exchange players now
+ KMPlayerPart * vp = (m_features & Feat_Viewer) ? this : *i;
+ KMPlayerPart * cp = (m_features & Feat_Viewer) ? *i : this;
+ setProcess ("mplayer");
+ cp->connectToPart (vp);
+ }
+ } else
+ m_group.truncate (0);
+ kmplayerpart_static->partlist.push_back (this);
+
+ QWidget *pwidget = view ()->parentWidget ();
+ if (pwidget) {
+ m_view->viewArea()->setPaletteBackgroundColor(pwidget->paletteBackgroundColor ());
+ m_view->viewer()->setBackgroundColor(pwidget->paletteBackgroundColor());
+ }
+
+ if (m_view->isFullScreen () != show_fullscreen)
+ m_view->fullScreen ();
+}
+
+#undef SET_FEAT_ON
+#undef SET_FEAT_OFF
+
+KDE_NO_CDTOR_EXPORT KMPlayerPart::~KMPlayerPart () {
+ kdDebug() << "KMPlayerPart::~KMPlayerPart" << endl;
+ //if (!m_group.isEmpty ()) {
+ KMPlayerPartList::iterator i = std::find (kmplayerpart_static->partlist.begin (), kmplayerpart_static->partlist.end (), this);
+ if (i != kmplayerpart_static->partlist.end ())
+ kmplayerpart_static->partlist.erase (i);
+ else
+ kdError () << "KMPlayerPart::~KMPlayerPart group lost" << endl;
+ //}
+ delete m_config;
+ m_config = 0L;
+}
+
+KDE_NO_EXPORT bool KMPlayerPart::allowRedir (const KURL & url) const {
+ return kapp->authorizeURLAction ("redirect", m_docbase, url);
+}
+
+KDE_NO_EXPORT void KMPlayerPart::setAutoControls (bool b) {
+ m_auto_controls = b;
+ m_view->controlPanel ()->setAutoControls (b);
+}
+
+KDE_NO_EXPORT void KMPlayerPart::viewerPartDestroyed (QObject * o) {
+ if (o == m_master)
+ m_master = 0L;
+ kdDebug () << "KMPlayerPart(" << this << ")::viewerPartDestroyed" << endl;
+ const KMPlayerPartList::iterator e =kmplayerpart_static->partlist.end();
+ KMPlayerPartList::iterator i = std::find_if (kmplayerpart_static->partlist.begin (), e, GroupPredicate (this, m_group));
+ if (i != e && *i != this)
+ (*i)->updatePlayerMenu (m_view->controlPanel ());
+}
+
+KDE_NO_EXPORT void KMPlayerPart::viewerPartProcessChanged (const char *) {
+ const KMPlayerPartList::iterator e =kmplayerpart_static->partlist.end();
+ KMPlayerPartList::iterator i = std::find_if (kmplayerpart_static->partlist.begin (), e, GroupPredicate (this, m_group));
+ if (i != e && *i != this)
+ (*i)->updatePlayerMenu (m_view->controlPanel ());
+}
+
+KDE_NO_EXPORT void KMPlayerPart::viewerPartSourceChanged(Source *o, Source *s) {
+ kdDebug () << "KMPlayerPart::source changed " << m_master << endl;
+ if (m_master && m_view) {
+ connectSource (o, s);
+ m_master->updatePlayerMenu (m_view->controlPanel ());
+ }
+}
+
+KDE_NO_EXPORT bool KMPlayerPart::openURL (const KURL & _url) {
+ kdDebug () << "KMPlayerPart::openURL " << _url.url() << endl;
+ Source * urlsource = m_sources ["urlsource"];
+ KMPlayerHRefSource * hrefsource = static_cast <KMPlayerHRefSource *>(m_sources ["hrefsource"]);
+ KMPlayerPartList::iterator i =kmplayerpart_static->partlist.begin ();
+ KMPlayerPartList::iterator e =kmplayerpart_static->partlist.end ();
+ GroupPredicate pred (this, m_group);
+ KURL url;
+ if (!m_file_name.isEmpty () && (_url.isEmpty () || _url == m_docbase))
+ url = KURL (m_docbase, m_file_name); // fix misdetected SRC attr
+ else if (_url != m_docbase) {
+ url = _url;
+ if (!m_file_name.isEmpty () && _url.url ().find (m_file_name) < 0) {
+ KURL u (m_file_name);
+ if ((u.protocol () == QString ("mms")) ||
+ _url.protocol ().isEmpty ()) {
+ // see if we somehow have to merge these
+ int p = _url.port ();
+ if (p > 0)
+ u.setPort (p);
+ if (u.path ().isEmpty ())
+ u.setPath (QChar ('/') + _url.host ());
+ if (allowRedir (u)) {
+ url = u;
+ kdDebug () << "KMPlayerPart::openURL compose " << m_file_name << " " << _url.url() << " ->" << u.url() << endl;
+ }
+ }
+ }
+ } else { // if url is the container document, then it's an empty URL
+ if (m_features & Feat_Viewer) // damn, look in the group
+ for (i = std::find_if (i, e, pred);
+ i != e;
+ i = std::find_if (++i, e, pred))
+ if (!(*i)->url ().isEmpty ()) {
+ url = (*i)->url ();
+ break;
+ }
+ }
+ if (m_havehref && (!kapp->authorizeURLAction ("redirect", url, urlsource->url ()) || !m_settings->allowhref)) {
+ m_havehref = false;
+ url = urlsource->url ();
+ }
+ if (!m_havehref)
+ setURL (url);
+ if (url.isEmpty ()) {
+ if (!m_master && !(m_features & Feat_Viewer))
+ // no master set, wait for a viewer to attach or timeout
+ QTimer::singleShot (50, this, SLOT (waitForImageWindowTimeOut ()));
+ return true;
+ }
+ if (!m_group.isEmpty () && !(m_features & Feat_Viewer)) {
+ // group member, not the image window
+ for (i = std::find_if (i, e, pred);
+ i != e;
+ i = std::find_if (++i, e, pred))
+ if ((*i)->url ().isEmpty ()) // image window created w/o url
+ return (*i)->openURL (_url);
+ QTimer::singleShot (50, this, SLOT (waitForImageWindowTimeOut ()));
+ //kdError () << "Not the ImageWindow and no ImageWindow found" << endl;
+ return true;
+ }
+ if (!m_view || !url.isValid ()) return false;
+ KParts::URLArgs args = m_browserextension->urlArgs();
+ if (!args.serviceType.isEmpty ())
+ urlsource->document ()->mrl ()->mimetype = args.serviceType;
+ if (m_havehref && m_settings->allowhref) {
+ hrefsource->setURL (url);
+ setSource (hrefsource);
+ } else {
+ hrefsource->clear ();
+ PartBase::openURL (m_havehref ? urlsource->url () : url);
+ if (urlsource->autoPlay ()) {
+ emit started (0L);
+ m_started_emited = true;
+ }
+ m_havehref = false;
+ }
+ return true;
+}
+
+KDE_NO_EXPORT bool KMPlayerPart::openNewURL (const KURL & url) {
+ m_file_name.truncate (0);
+ m_havehref = false;
+ m_sources ["urlsource"]->setAutoPlay (true);
+ return openURL (url);
+}
+
+KDE_NO_EXPORT void KMPlayerPart::waitForImageWindowTimeOut () {
+ if (!m_master) {
+ // still no ImageWindow attached, eg. audio only
+ const KMPlayerPartList::iterator e =kmplayerpart_static->partlist.end();
+ GroupPredicate pred (this, m_group);
+ KMPlayerPartList::iterator i = std::find_if (kmplayerpart_static->partlist.begin (), e, pred);
+ bool noattach = (i == e || *i == this);
+ if (noattach) {
+ if (!url ().isEmpty ()) {
+ m_features |= KMPlayerPart::Feat_Viewer; //hack, become the view
+ for (i = std::find_if (kmplayerpart_static->partlist.begin (), e, pred); i != e; i = std::find_if (++i, e, pred))
+ (*i)->connectToPart (this);
+ PartBase::openURL (url ());
+ } else { // see if we can attach to something out there ..
+ i = std::find_if (kmplayerpart_static->partlist.begin (), e, GroupPredicate (this, m_group, true));
+ noattach = (i == e);
+ }
+ }
+ if (!noattach)
+ connectToPart (*i);
+ }
+}
+
+KDE_NO_EXPORT bool KMPlayerPart::closeURL () {
+ if (!m_group.isEmpty ()) {
+ kmplayerpart_static->partlist.remove (this);
+ m_group.truncate (0);
+ }
+ return PartBase::closeURL ();
+}
+
+KDE_NO_EXPORT void KMPlayerPart::connectToPart (KMPlayerPart * m) {
+ m_master = m;
+ m->connectPanel (m_view->controlPanel ());
+ m->updatePlayerMenu (m_view->controlPanel ());
+ if (m_features & Feat_PlayList)
+ m->connectPlaylist (m_view->playList ());
+ if (m_features & Feat_InfoPanel)
+ m->connectInfoPanel (m_view->infoPanel ());
+ connectSource (m_source, m->source ());
+ connect (m, SIGNAL (destroyed (QObject *)),
+ this, SLOT (viewerPartDestroyed (QObject *)));
+ connect (m, SIGNAL (processChanged (const char *)),
+ this, SLOT (viewerPartProcessChanged (const char *)));
+ connect (m, SIGNAL (sourceChanged (KMPlayer::Source *, KMPlayer::Source *)),
+ this, SLOT (viewerPartSourceChanged (KMPlayer::Source *, KMPlayer::Source *)));
+ if (m_features & Feat_StatusBar) {
+ last_time_left = 0;
+ connect (m, SIGNAL (positioned (int, int)),
+ this, SLOT (statusPosition (int, int)));
+ m_view->statusBar ()->insertItem (QString ("--:--"), 1, 0, true);
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerPart::setLoaded (int percentage) {
+ PartBase::setLoaded (percentage);
+ if (percentage < 100) {
+ m_browserextension->setLoadingProgress (percentage);
+ m_browserextension->infoMessage
+ (QString::number (percentage) + i18n ("% Cache fill"));
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerPart::playingStarted () {
+ const KMPlayerPartList::iterator e =kmplayerpart_static->partlist.end();
+ KMPlayerPartList::iterator i = std::find_if (kmplayerpart_static->partlist.begin (), e, GroupPredicate (this, m_group));
+ if (i != e && *i != this && m_view && (*i)->source()) {
+ m_view->controlPanel ()->setPlaying (true);
+ m_view->controlPanel ()->showPositionSlider(!!(*i)->source()->length());
+ m_view->controlPanel()->enableSeekButtons((*i)->source()->isSeekable());
+ emit loading (100);
+ } else if (m_source)
+ KMPlayer::PartBase::playingStarted ();
+ else
+ return; // ugh
+ kdDebug () << "KMPlayerPart::processStartedPlaying " << endl;
+ if (m_settings->sizeratio && !m_noresize && m_source->width() > 0 && m_source->height() > 0)
+ m_liveconnectextension->setSize (m_source->width(), m_source->height());
+ m_browserextension->setLoadingProgress (100);
+ if (m_started_emited) {
+ emit completed ();
+ m_started_emited = false;
+ }
+ m_liveconnectextension->started ();
+ m_browserextension->infoMessage (i18n("KMPlayer: Playing"));
+}
+
+KDE_NO_EXPORT void KMPlayerPart::playingStopped () {
+ KMPlayer::PartBase::playingStopped ();
+ if (m_started_emited) {
+ m_started_emited = false;
+ m_browserextension->setLoadingProgress (100);
+ emit completed ();
+ }
+ m_liveconnectextension->finished ();
+ if (m_havehref)
+ static_cast <KMPlayerHRefSource *>(m_sources["hrefsource"])->finished();
+ m_browserextension->infoMessage (i18n ("KMPlayer: Stop Playing"));
+ if (m_view)
+ m_view->controlPanel ()->setPlaying (false);
+}
+
+KDE_NO_EXPORT void KMPlayerPart::setMenuZoom (int id) {
+ int w = 0, h = 0;
+ if (m_source)
+ m_source->dimensions (w, h);
+ if (id == KMPlayer::ControlPanel::menu_zoom100) {
+ m_liveconnectextension->setSize (w, h);
+ return;
+ }
+ float scale = 1.5;
+ if (id == KMPlayer::ControlPanel::menu_zoom50)
+ scale = 0.5;
+ if (m_view->viewer ())
+ m_liveconnectextension->setSize (int (scale * m_view->viewer ()->width ()),
+ int (scale * m_view->viewer ()->height()));
+}
+
+KDE_NO_EXPORT void KMPlayerPart::statusPosition (int pos, int length) {
+ int left = (length - pos) / 10;
+ if (left != last_time_left) {
+ last_time_left = left;
+ QString text ("--:--");
+ if (left > 0) {
+ int h = left / 3600;
+ int m = (left % 3600) / 60;
+ int s = left % 60;
+ if (h > 0)
+ text.sprintf ("%d:%02d:%02d", h, m, s);
+ else
+ text.sprintf ("%02d:%02d", m, s);
+ }
+ m_view->statusBar ()->changeItem (text, 1);
+ }
+}
+
+//---------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerBrowserExtension::KMPlayerBrowserExtension (KMPlayerPart * parent)
+ : KParts::BrowserExtension (parent, "KMPlayer Browser Extension") {
+}
+
+KDE_NO_EXPORT void KMPlayerBrowserExtension::urlChanged (const QString & url) {
+ emit setLocationBarURL (url);
+}
+
+KDE_NO_EXPORT void KMPlayerBrowserExtension::setLoadingProgress (int percentage) {
+ emit loadingProgress (percentage);
+}
+
+KDE_NO_EXPORT void KMPlayerBrowserExtension::saveState (QDataStream & stream) {
+ stream << static_cast <PartBase *> (parent ())->url ().url ();
+}
+
+KDE_NO_EXPORT void KMPlayerBrowserExtension::restoreState (QDataStream & stream) {
+ QString url;
+ stream >> url;
+ static_cast <PartBase *> (parent ())->openURL (KURL(url));
+}
+
+KDE_NO_EXPORT void KMPlayerBrowserExtension::requestOpenURL (const KURL & url, const QString & target, const QString & service) {
+ KParts::URLArgs args;
+ args.frameName = target;
+ args.serviceType = service;
+ emit openURLRequest (url, args);
+}
+
+KDE_NO_EXPORT void KMPlayerBrowserExtension::slotRequestOpenURL (const KURL &url, const QString &target) {
+ requestOpenURL (url, target, QString ());
+}
+
+//---------------------------------------------------------------------
+/*
+ * add
+ * .error.errorCount
+ * .error.item(count)
+ * .errorDescription
+ * .errorCode
+ * .controls.stop()
+ * .controls.play()
+ */
+
+enum JSCommand {
+ notsupported,
+ canpause, canplay, canstop, canseek,
+ isfullscreen, isloop, isaspect, showcontrolpanel,
+ length, width, height, playstate, position, source, setsource, protocol,
+ gotourl, nextentry, jsc_pause, play, preventry, start, stop,
+ volume, setvolume,
+ prop_error, prop_source, prop_volume
+};
+
+struct KMPLAYER_NO_EXPORT JSCommandEntry {
+ const char * name;
+ JSCommand command;
+ const char * defaultvalue;
+ const KParts::LiveConnectExtension::Type rettype;
+};
+
+// keep this list in alphabetic order
+// http://service.real.com/help/library/guides/realonescripting/browse/htmfiles/embedmet.htm
+static const JSCommandEntry JSCommandList [] = {
+ { "CanPause", canpause, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "CanPlay", canplay, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "CanStop", canstop, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "DoGotoURL", notsupported, 0L, KParts::LiveConnectExtension::TypeVoid },
+ { "DoNextEntry", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "DoPause", jsc_pause, "true", KParts::LiveConnectExtension::TypeBool },
+ { "DoPlay", play, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "DoPlayPause", play, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "DoPrevEntry", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "DoStop", stop, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "FileName", prop_source, 0L, KParts::LiveConnectExtension::TypeString },
+ { "GetAuthor", notsupported, "noname", KParts::LiveConnectExtension::TypeString },
+ { "GetAutoGoToURL", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "GetBackgroundColor", notsupported, "#ffffff", KParts::LiveConnectExtension::TypeString },
+ { "GetBandwidthAverage", notsupported, "64", KParts::LiveConnectExtension::TypeNumber },
+ { "GetBandwidthCurrent", notsupported, "64", KParts::LiveConnectExtension::TypeNumber },
+ { "GetBufferingTimeElapsed", notsupported, "0", KParts::LiveConnectExtension::TypeNumber },
+ { "GetBufferingTimeRemaining", notsupported, "0", KParts::LiveConnectExtension::TypeNumber },
+ { "GetCanSeek", canseek, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "GetCenter", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "GetClipHeight", height, 0L, KParts::LiveConnectExtension::TypeNumber },
+ { "GetClipWidth", width, 0L, KParts::LiveConnectExtension::TypeNumber },
+ { "GetConnectionBandwidth", notsupported, "64", KParts::LiveConnectExtension::TypeNumber },
+ { "GetConsole", notsupported, "unknown", KParts::LiveConnectExtension::TypeString },
+ { "GetConsoleEvents", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "GetControls", notsupported, "buttons", KParts::LiveConnectExtension::TypeString },
+ { "GetCopyright", notsupported, "(c) whoever", KParts::LiveConnectExtension::TypeString },
+ { "GetCurrentEntry", notsupported, "1", KParts::LiveConnectExtension::TypeNumber },
+ { "GetDRMInfo", notsupported, "RNBA", KParts::LiveConnectExtension::TypeString },
+ { "GetDoubleSize", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "GetEntryAbstract", notsupported, "abstract", KParts::LiveConnectExtension::TypeString },
+ { "GetEntryAuthor", notsupported, "noname", KParts::LiveConnectExtension::TypeString },
+ { "GetEntryCopyright", notsupported, "(c)", KParts::LiveConnectExtension::TypeString },
+ { "GetEntryTitle", notsupported, "title", KParts::LiveConnectExtension::TypeString },
+ { "GetFullScreen", isfullscreen, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "GetImageStatus", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "GetLastErrorMoreInfoURL", notsupported, "no error", KParts::LiveConnectExtension::TypeString },
+ { "GetLastErrorRMACode", notsupported, "0", KParts::LiveConnectExtension::TypeNumber },
+ { "GetLastErrorSeverity", notsupported, "6", KParts::LiveConnectExtension::TypeNumber },
+ { "GetLastErrorUserCode", notsupported, "0", KParts::LiveConnectExtension::TypeNumber },
+ { "GetLastErrorUserString", notsupported, "no error", KParts::LiveConnectExtension::TypeString },
+ { "GetLastMessage", notsupported, "no error", KParts::LiveConnectExtension::TypeString },
+ { "GetLastStatus", notsupported, "no error", KParts::LiveConnectExtension::TypeString },
+ { "GetLength", length, 0L, KParts::LiveConnectExtension::TypeNumber },
+ { "GetLiveState", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "GetLoop", isloop, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "GetMaintainAspect", isaspect, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "GetMute", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "GetNumEntries", notsupported, "1", KParts::LiveConnectExtension::TypeNumber },
+ { "GetNumLoop", notsupported, "0", KParts::LiveConnectExtension::TypeNumber },
+ { "GetNumSources", notsupported, "1", KParts::LiveConnectExtension::TypeNumber },
+ { "GetOriginalSize", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "GetPacketsEarly", notsupported, "0", KParts::LiveConnectExtension::TypeNumber },
+ { "GetPacketsLate", notsupported, "0", KParts::LiveConnectExtension::TypeNumber },
+ { "GetPacketsMissing", notsupported, "0", KParts::LiveConnectExtension::TypeNumber },
+ { "GetPacketsOutOfOrder", notsupported, "0", KParts::LiveConnectExtension::TypeNumber },
+ { "GetPacketsReceived", notsupported, "0", KParts::LiveConnectExtension::TypeNumber },
+ { "GetPacketsTotal", notsupported, "0", KParts::LiveConnectExtension::TypeNumber },
+ { "GetPlayState", playstate, 0L, KParts::LiveConnectExtension::TypeNumber },
+ { "GetPosition", position, 0L, KParts::LiveConnectExtension::TypeNumber },
+ { "GetPreFetch", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "GetShowAbout", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "GetShowPreferences", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "GetShowStatistics", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "GetShuffle", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "GetSource", source, 0L, KParts::LiveConnectExtension::TypeString },
+ { "GetSourceTransport", protocol, 0L, KParts::LiveConnectExtension::TypeString },
+ { "GetStereoState", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "GetTitle", notsupported, "title", KParts::LiveConnectExtension::TypeString },
+ { "GetVersionInfo", notsupported, "version", KParts::LiveConnectExtension::TypeString },
+ { "GetVolume", volume, "100", KParts::LiveConnectExtension::TypeNumber },
+ { "GetWantErrors", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "GetWantKeyboardEvents", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "GetWantMouseEvents", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "HasNextEntry", notsupported, "false", KParts::LiveConnectExtension::TypeBool },
+ { "Pause", jsc_pause, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "Play", play, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "SetAuthor", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetAutoGoToURL", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetAutoStart", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetBackgroundColor", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetCanSeek", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetCenter", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetConsole", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetConsoleEvents", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetControls", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetCopyright", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetCurrentPosition", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetDoubleSize", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetFileName", setsource, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "SetFullScreen", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetImageStatus", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetLoop", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetMaintainAspect", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetMute", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetNumLoop", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetOriginalSize", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetPosition", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetPreFetch", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetShowAbout", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetShowPreferences", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetShowStatistics", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetShuffle", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetSource", setsource, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "SetTitle", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetVolume", setvolume, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetWantErrors", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetWantKeyboardEvents", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "SetWantMouseEvents", notsupported, "true", KParts::LiveConnectExtension::TypeBool },
+ { "ShowControls", showcontrolpanel, "true", KParts::LiveConnectExtension::TypeBool },
+ { "Start", start, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "Stop", stop, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "Volume", prop_volume, "100", KParts::LiveConnectExtension::TypeNumber },
+ { "errorCode", prop_error, "0",KParts::LiveConnectExtension::TypeNumber },
+ { "pause", jsc_pause, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "play", play, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "put", prop_source, 0L, KParts::LiveConnectExtension::TypeString },
+ { "stop", stop, 0L, KParts::LiveConnectExtension::TypeBool },
+ { "volume", volume, 0L, KParts::LiveConnectExtension::TypeBool },
+};
+
+static const JSCommandEntry * getJSCommandEntry (const char * name, int start = 0, int end = sizeof (JSCommandList)/sizeof (JSCommandEntry)) {
+ if (end - start < 2) {
+ if (start != end && !strcasecmp (JSCommandList[start].name, name))
+ return &JSCommandList[start];
+ return 0L;
+ }
+ int mid = (start + end) / 2;
+ int cmp = strcasecmp (JSCommandList[mid].name, name);
+ if (cmp < 0)
+ return getJSCommandEntry (name, mid + 1, end);
+ if (cmp > 0)
+ return getJSCommandEntry (name, start, mid);
+ return &JSCommandList[mid];
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerLiveConnectExtension::KMPlayerLiveConnectExtension (KMPlayerPart * parent)
+ : KParts::LiveConnectExtension (parent), player (parent),
+ lastJSCommandEntry (0L),
+ m_started (false),
+ m_enablefinish (false),
+ m_evaluating (false) {
+ connect (parent, SIGNAL (started (KIO::Job *)), this, SLOT (started ()));
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerLiveConnectExtension::~KMPlayerLiveConnectExtension() {
+ kdDebug () << "KMPlayerLiveConnectExtension::~KMPlayerLiveConnectExtension()" << endl;
+}
+
+KDE_NO_EXPORT void KMPlayerLiveConnectExtension::started () {
+ m_started = true;
+}
+
+KDE_NO_EXPORT void KMPlayerLiveConnectExtension::finished () {
+ if (m_started && m_enablefinish) {
+ KParts::LiveConnectExtension::ArgList args;
+ args.push_back (qMakePair (KParts::LiveConnectExtension::TypeString, QString("if (window.onFinished) onFinished();")));
+ emit partEvent (0, "eval", args);
+ m_started = true;
+ m_enablefinish = false;
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerLiveConnectExtension::evaluate (
+ const QString & scr, QString & result) {
+ QString script (scr);
+ KParts::LiveConnectExtension::ArgList args;
+ script = script.replace ('\\', "\\\\");
+ script = script.replace ('\n', "\\n");
+ script = script.replace ('\r', "");
+ script = script.replace ('"', "\\\"");
+ script = QString ("this.__kmplayer__res=eval(\"%1\")").arg (script);
+ args.push_back(qMakePair(KParts::LiveConnectExtension::TypeString, script));
+
+ script_result = "undefined";
+ m_evaluating = true;
+ emit partEvent (0, "eval", args);
+ m_evaluating = false;
+ result = script_result;
+}
+
+KDE_NO_EXPORT bool KMPlayerLiveConnectExtension::get
+ (const unsigned long id, const QString & name,
+ KParts::LiveConnectExtension::Type & type,
+ unsigned long & rid, QString & rval)
+{
+ if (name.startsWith ("__kmplayer__obj_")) {
+ if (m_evaluating)
+ return false;
+ rid = 0;
+ type = KParts::LiveConnectExtension::TypeString;
+ rval = "Access denied";
+ return true;
+ }
+ const char * str = name.ascii ();
+ kdDebug () << "get " << str << endl;
+ const JSCommandEntry * entry = getJSCommandEntry (str);
+ if (!entry)
+ return false;
+ rid = id;
+ type = entry->rettype;
+ switch (entry->command) {
+ case prop_source:
+ type = KParts::LiveConnectExtension::TypeString;
+ rval = player->url ().url ();
+ break;
+ case prop_volume:
+ if (player->view ())
+ rval = QString::number (player->process()->viewer ()->view()->controlPanel()->volumeBar()->value());
+ break;
+ case prop_error:
+ type = KParts::LiveConnectExtension::TypeNumber;
+ rval = QString::number (0);
+ break;
+ default:
+ lastJSCommandEntry = entry;
+ type = KParts::LiveConnectExtension::TypeFunction;
+ }
+ return true;
+}
+
+KDE_NO_EXPORT bool KMPlayerLiveConnectExtension::put
+ (const unsigned long, const QString & name, const QString & val) {
+ if (name == "__kmplayer__res") {
+ script_result = val;
+ return true;
+ }
+ if (name.startsWith ("__kmplayer__obj_"))
+ return !m_evaluating;
+
+ kdDebug () << "put " << name << "=" << val << endl;
+
+ const JSCommandEntry * entry = getJSCommandEntry (name.ascii ());
+ if (!entry)
+ return false;
+ switch (entry->command) {
+ case prop_source: {
+ KURL url (val);
+ if (player->allowRedir (url))
+ player->openNewURL (url);
+ break;
+ }
+ case prop_volume:
+ if (player->view ())
+ player->process()->viewer ()->view()->controlPanel()->volumeBar()->setValue(val.toInt ());
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+KDE_NO_EXPORT bool KMPlayerLiveConnectExtension::call
+ (const unsigned long id, const QString & name,
+ const QStringList & args, KParts::LiveConnectExtension::Type & type,
+ unsigned long & rid, QString & rval) {
+ const JSCommandEntry * entry = lastJSCommandEntry;
+ const char * str = name.ascii ();
+ if (!entry || strcmp (entry->name, str))
+ entry = getJSCommandEntry (str);
+ if (!entry)
+ return false;
+ kdDebug () << "entry " << entry->name << endl;
+ for (unsigned int i = 0; i < args.size (); ++i)
+ kdDebug () << " " << args[i] << endl;
+ KMPlayer::View * view = static_cast <KMPlayer::View*> (player->view ());
+ if (!view)
+ return false;
+ rid = id;
+ type = entry->rettype;
+ switch (entry->command) {
+ case notsupported:
+ if (entry->rettype != KParts::LiveConnectExtension::TypeVoid)
+ rval = entry->defaultvalue;
+ break;
+ case canpause:
+ rval = (player->process ()->playing () && !view->controlPanel()->button (KMPlayer::ControlPanel::button_pause)->isOn ()) ? "true" : "false";
+ break;
+ case canplay:
+ rval = (!player->process ()->playing () || view->controlPanel()->button (KMPlayer::ControlPanel::button_pause)->isOn ()) ? "true" : "false";
+ break;
+ case canstop:
+ rval = player->process ()->playing () ? "true" : "false";
+ break;
+ case canseek:
+ rval = player->source ()->isSeekable () ? "true" : "false";
+ break;
+ case play:
+ if (args.size ()) {
+ KURL url (args.first ());
+ if (player->allowRedir (url))
+ player->openNewURL (url);
+ } else
+ player->play ();
+ rval = "true";
+ break;
+ case start:
+ player->play ();
+ rval = "true";
+ break;
+ case stop:
+ player->stop ();
+ rval = "true";
+ break;
+ case showcontrolpanel:
+ if (args.size () &&
+ (args.first () == QString::fromLatin1 ("0") ||
+ args.first () == QString::fromLatin1 ("false")))
+ static_cast <KMPlayer::View*> (player->view ())->setControlPanelMode (KMPlayer::View::CP_Hide);
+ else
+ static_cast <KMPlayer::View*> (player->view ())->setControlPanelMode (KMPlayer::View::CP_Show);
+ break;
+ case jsc_pause:
+ player->pause ();
+ rval = "true";
+ break;
+ case isloop:
+ rval = player->settings ()->loop ? "true" : "false";
+ break;
+ case isaspect:
+ rval = player->settings ()->sizeratio ? "true" : "false";
+ break;
+ case isfullscreen:
+ rval = static_cast <KMPlayer::View*> (player->view ())->isFullScreen () ? "true" : "false";
+ break;
+ case length:
+ rval.setNum (player->source ()->length ());
+ break;
+ case width:
+ rval.setNum (player->source ()->width ());
+ break;
+ case height:
+ rval.setNum (player->source ()->height ());
+ break;
+ case playstate: // FIXME 0-6
+ rval = player->process ()->playing () ? "3" : "0";
+ break;
+ case position:
+ rval.setNum (player->position ());
+ break;
+ case protocol:
+ rval = player->url ().protocol ();
+ break;
+ case setsource:
+ rval ="false";
+ if (args.size ()) {
+ KURL url (args.first ());
+ if (player->allowRedir (url) && player->openNewURL (url))
+ rval = "true";
+ }
+ break;
+ case setvolume:
+ if (!args.size ())
+ return false;
+ player->process()->viewer ()->view()->controlPanel()->volumeBar()->setValue(args.first ().toInt ());
+ rval = "true";
+ break;
+ case source:
+ rval = player->url ().url ();
+ break;
+ case volume:
+ if (player->view ())
+ rval = QString::number (player->process()->viewer ()->view()->controlPanel()->volumeBar()->value());
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+KDE_NO_EXPORT void KMPlayerLiveConnectExtension::unregister (const unsigned long) {
+}
+
+KDE_NO_EXPORT void KMPlayerLiveConnectExtension::setSize (int w, int h) {
+ KMPlayer::View * view = static_cast <KMPlayer::View*> (player->view ());
+ if (view->controlPanelMode () == KMPlayer::View::CP_Show)
+ h += view->controlPanel()->height();
+ QString jscode;
+ jscode.sprintf("try { eval(\"this.setAttribute('WIDTH',%d);this.setAttribute('HEIGHT',%d)\"); } catch(e){}", w, h);
+ KParts::LiveConnectExtension::ArgList args;
+ args.push_back (qMakePair (KParts::LiveConnectExtension::TypeString, jscode));
+ emit partEvent (0, "eval", args);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerHRefSource::KMPlayerHRefSource (PartBase * player)
+ : Source (i18n ("HREF"), player, "hrefsource") {
+ //kdDebug () << "KMPlayerHRefSource::KMPlayerHRefSource" << endl;
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerHRefSource::~KMPlayerHRefSource () {
+ //kdDebug () << "KMPlayerHRefSource::~KMPlayerHRefSource" << endl;
+}
+
+KDE_NO_EXPORT void KMPlayerHRefSource::init () {
+ Source::init ();
+ setIdentified ();
+}
+
+KDE_NO_EXPORT bool KMPlayerHRefSource::hasLength () {
+ return false;
+}
+
+KDE_NO_EXPORT bool KMPlayerHRefSource::processOutput (const QString & /*str*/) {
+ //return Source::processOutput (str);
+ return true;
+}
+
+KDE_NO_EXPORT void KMPlayerHRefSource::setURL (const KURL & url) {
+ m_url = url;
+ m_identified = false;
+ m_finished = false;
+ Source::setURL (url);
+ kdDebug () << "KMPlayerHRefSource::setURL " << m_url.url() << endl;
+}
+
+KDE_NO_EXPORT void KMPlayerHRefSource::play () {
+ kdDebug () << "KMPlayerHRefSource::play " << m_url.url() << endl;
+ Source * src = m_player->sources () ["urlsource"];
+ QString target = src->document ()->document ()->
+ getAttribute (StringPool::attr_target);
+ if (!target.isEmpty ()) {
+ KMPlayer::Mrl * mrl = src->document ()->mrl ();
+ static_cast <KMPlayerPart *> (m_player)->browserextension ()->requestOpenURL (mrl->src, target, mrl->mimetype);
+ } else
+ m_player->setSource (m_player->sources () ["urlsource"]);
+}
+
+KDE_NO_EXPORT void KMPlayerHRefSource::activate () {
+ m_player->stop ();
+ if (m_finished) {
+ QTimer::singleShot (0, this, SLOT (finished ()));
+ return;
+ }
+ init ();
+ m_player->setProcess ("mplayer");
+ if (m_player->process ()->grabPicture (m_url, 0))
+ connect (m_player->process (), SIGNAL (grabReady (const QString &)),
+ this, SLOT (grabReady (const QString &)));
+ else {
+ setURL (KURL ());
+ QTimer::singleShot (0, this, SLOT (play ()));
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerHRefSource::clear () {
+ setURL (KURL ());
+}
+
+KDE_NO_EXPORT void KMPlayerHRefSource::grabReady (const QString & path) {
+ kdDebug () << "KMPlayerHRefSource::grabReady(" << path << ")" << endl;
+ m_finished = true;
+ m_grabfile = path;
+ finished ();
+}
+
+KDE_NO_EXPORT void KMPlayerHRefSource::finished () {
+ kdDebug () << "KMPlayerHRefSource::finished()" << endl;
+ KMPlayer::View * view = static_cast <KMPlayer::View*> (m_player->view ());
+ if (!view) return;
+ if (!view->setPicture (m_grabfile)) {
+ clear ();
+ QTimer::singleShot (0, this, SLOT (play ()));
+ return;
+ }
+ if (view->viewer ())
+ connect (view, SIGNAL (pictureClicked ()), this, SLOT (play ()));
+}
+
+KDE_NO_EXPORT void KMPlayerHRefSource::deactivate () {
+ kdDebug () << "KMPlayerHRefSource::deactivate()" << endl;
+ KMPlayer::View * view = static_cast <KMPlayer::View*> (m_player->view ());
+ if (!view) return;
+ view->setPicture (QString ());
+ if (view->viewer ())
+ disconnect (view, SIGNAL (pictureClicked ()), this, SLOT (play ()));
+}
+
+KDE_NO_EXPORT QString KMPlayerHRefSource::prettyName () {
+ return i18n ("WEB");
+}
+
+#include "kmplayer_part.moc"
diff --git a/src/kmplayer_part.desktop b/src/kmplayer_part.desktop
new file mode 100644
index 0000000..86d597f
--- /dev/null
+++ b/src/kmplayer_part.desktop
@@ -0,0 +1,88 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Embedded MPlayer for KDE
+Name[af]=Ingelegde MPlayer vir KDE
+Name[ar]=MPlayer مدمج في KDE
+Name[be]=Убудаваны MPlayer для KDE
+Name[bg]=Вграден MPlayer за KDE
+Name[br]=MPlayer enframmet evit KDE
+Name[bs]=Ugrađeni MPlayer za KDE
+Name[ca]=MPlayer encastat per al KDE
+Name[cs]=MPlayer pro KDE
+Name[csb]=Wbùdowóny MPlayer dlô KDE
+Name[da]=Indlejret MPlayer for KDE
+Name[de]=Eingebetteter MPlayer für KDE
+Name[el]=Ενσωμάτωση του MPlayer για το KDE
+Name[es]=MPlayer embebido para KDE
+Name[et]=KDE põimitud MPlayer
+Name[fi]=Upotettu MPlayer KDE:lle
+Name[fr]=MPlayer intégré pour KDE
+Name[gl]=MPlayer Embebido para KDE
+Name[he]=נגן MPlayer עבור KDE
+Name[hi]=केडीई हेतु एम्बेडेड एमप्लेयर
+Name[hu]=Beágyazott MPlayer a KDE-hez
+Name[it]=MPlayer integrato per KDE
+Name[ja]=KDE のための埋め込み MPlayer
+Name[mk]=Вгнезден MPlayer за KDE
+Name[nb]=Innebygget MPlayer for KDE
+Name[nl]=Ingebedde MPlayer voor KDE
+Name[pa]=KDE ਲਈ ਸ਼ਾਮਲ MPlayer
+Name[pt]=MPlayer Embebido para o KDE
+Name[pt_BR]=MPlayer Integrado ao KDE
+Name[ru]=Встроенный MPlayer для KDE
+Name[sk]=Vložený MPlayer pre KDE
+Name[sr]=Угњеждени MPlayer за KDE
+Name[sr@Latn]=Ugnježdeni MPlayer za KDE
+Name[sv]=Inbäddad Mplayer för KDE
+Name[ta]= KDEவிற்கு விதைத்த ஊடக வாசிப்பான்
+Name[th]=โปรแกรมเล่นสื่อ MPlayer แบบฝังตัวสำหรับ KDE
+Name[tr]=KDE için gömülmüş MPlayer
+Name[uk]=Вбудований MPlayer для KDE
+Name[xx]=xxEmbedded MPlayer for KDExx
+Name[zh_CN]=KDE 嵌入的 MPlayer
+Name[zh_TW]=MPlayer 的 KDE 嵌入式介面
+Comment=Video player plugin (QuickTime, XMovie, Windows Media and RealPlayer compatible)
+Comment[af]=Video speler inprop module (Ondersteun QuickTime, XMovie, Windows Media en RealPlayer)
+Comment[ar]=قابس القارئ المرئي ( ملائم مع QuickTime, XMovie, Windows Media و RealPlayer)
+Comment[be]=Утулка прайгравання відэа (сумяшчальны з QuickTime, XMovie, Windows Media і RealPlayer)
+Comment[bg]=Приставка за видео плеър (QuickTime, XMovie, Windows Media и RealPlayer съвместима)
+Comment[ca]=Connector per a la reproducció de vídeo (compatible amb QuickTime, XMovie, Windows Media i RealPlayer)
+Comment[cs]=Modul video přehrávače (kompatibilní s QuickTime, XMovie, Windows Media a RealPlayer)
+Comment[csb]=Pluginsë òdgrëwôcza wideò (zgódne z QickTime, XMovie, Windows Media ë RealPlayer)
+Comment[da]=Videoafspiller plugin (QuickTime, XMovie, Windows Media og RealPlayer kompatibel)
+Comment[de]=Video player plugin (QuickTime, XMovie, Windows Media und RealPlayer kompatibel)
+Comment[el]=Πρόσθετο αναπαραγωγής βίντεο (συμβατό με QuickTime, XMovie, πολυμέσα Windows και RealPlayer)
+Comment[es]=Complemento de reproducción de vídeo (compatible con QuickTime, XMovie, Windows Media y RealPlayer)
+Comment[et]=Videomängija plugin (QuickTime, XMovie, Windows Media ja RealPlayer)
+Comment[fr]=Module de lecture de vidéos (compatible QuickTime, XMovie, Windows Media et RealPlayer)
+Comment[gl]=Plugin de reproduzón de vídeo (compatível con QuickTime, XMovie, Windows Media e RealPlayer)
+Comment[he]=תוסף וידאו לניגון (QuickTime, XMovie, מדיה של חלונות ותואם RealPlayer)
+Comment[hi]=वीडियो प्लेयर प्लगइन (क्विक-टाइम, एक्समूवी, विंडोज़ मीडिया तथा रीयल-प्लेयर कंपेटिबल)
+Comment[it]=Plugin lettore video (compatibile con QuickTime, XMovie, Windows Media e RealPlayer)
+Comment[ja]=ビデオプレーヤプラグイン (QuickTime, XMovie, Windows Media, RealPlayer をサポート)
+Comment[ka]=ვიდეოდამკვრელის მოდული (QuickTime, XMovie, Windows Media და RealPlayer თავსებადი)
+Comment[mk]=Приклучок за видеоизведувач (компатибилен со QuickTime, XMovie, Windows Media и RealPlayer)
+Comment[nb]=Tilleggsmodul for videospiller (kompatibel med QuickTime, XMovie, Windows Media og RealPlayer)
+Comment[nl]=Videospelerplugin (ondersteuning voor Quicktime, XMovie, Windows Media- en RealAudio-speler)
+Comment[pa]=ਵੀਡਿਆ ਪਲੇਅਰ ਪਲੱਗਿੰਨ (QuickTime, XMovie, Windows Media ਅਤੇ RealPlayer ਅਨੁਕੂਲ)
+Comment[pt]='Plugin' de reprodução de vídeo (compatível com QuickTime, XMovie, Windows Media e RealPlayer)
+Comment[pt_BR]=Plugin de reprodução de vídeo (compatível com QuickTime, XMovie, Windows Media e RealPlayer)
+Comment[ru]=Модуль видеоплеера (совместимый с QuickTime, XMovie, Windows Media и RealPlayer)
+Comment[sk]=Plugin prehrávača videa (kompatibilný s QuickTime, XMovie, Windows Media a RealPlayer)
+Comment[sr]=Прикључак за пуштање видеа (компатибилан са: QuickTime, XMovie, Windows Media, RealPlayer)
+Comment[sr@Latn]=Priključak za puštanje videa (kompatibilan sa: QuickTime, XMovie, Windows Media, RealPlayer)
+Comment[sv]=Insticksprogram för videospelare (fungerar med Quicktime, Xmovie, Windows Media och Realplayer)
+Comment[ta]=வீடியோ சொருகி(விரைவுநேரம், Xபடம், Windows படம் மற்றும் RealPlayer compatible)
+Comment[th]=ปลั๊กอินโปรแกรมเล่นวิดีโอ (ใช้ด้วยกันได้กับ QuickTime, XMovie, Windows Media และ RealPlayer)
+Comment[tr]=Video oynatıcı eklentisi (QuickTime, XMovie, Windows Media ve RealPlayer ile uyumlu)
+Comment[uk]=Втулок відео-програвача (програє QuickTime, XMovie, Windows Media і RealPlayer)
+Comment[xx]=xxVideo player plugin (QuickTime, XMovie, Windows Media and RealPlayer compatible)xx
+Comment[zh_TW]=視像播放程式 (可播放 QuickTime, XMovie, Windows Media 和 RealPlayer)
+X-KDE-Library=libkmplayerpart
+# Keep in sync with the audio types in kmplayer.desktop
+MimeType=application/ogg;application/smil;application/vnd.ms-asf;application/vnd.rn-realmedia;application/x-kmplayer;application/x-mplayer2;application/x-ogg;application/xspf+xml;video/avi;video/mediaplayer;video/mp4;video/mpeg;video/quicktime;video/vnd.rn-realvideo;video/x-avi;video/x-flic;video/x-matroska;video/x-ms-asf;video/x-msvideo;video/x-ms-wmp;video/x-ms-wmv;video/x-ms-wvx;video/x-ogm;video/x-theora;uri/mms;uri/pnm;uri/rtspt;uri/rtspu;
+Type=Service
+Icon=kmplayer
+ServiceTypes=KParts/ReadOnlyPart,Browser/View,KMediaPlayer/Player
+X-KDE-BrowserView-PluginsInfo=kmplayer/pluginsinfo
+InitialPreference=5
diff --git a/src/kmplayer_part.h b/src/kmplayer_part.h
new file mode 100644
index 0000000..e60d983
--- /dev/null
+++ b/src/kmplayer_part.h
@@ -0,0 +1,176 @@
+/**
+ * Copyright (C) 2002-2003 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#ifndef KMPLAYER_PART_H
+#define KMPLAYER_PART_H
+
+#include <kparts/browserextension.h>
+#include "kmplayerpartbase.h"
+#include "kmplayersource.h"
+
+
+class KAboutData;
+class KMPlayerPart;
+class KInstance;
+class JSCommandEntry;
+
+/*
+ * Wrapper source for URLSource that has a HREF attribute
+ */
+class KMPLAYER_NO_EXPORT KMPlayerHRefSource : public KMPlayer::Source {
+ Q_OBJECT
+public:
+ KMPlayerHRefSource (KMPlayer::PartBase * player);
+ virtual ~KMPlayerHRefSource ();
+ virtual bool processOutput (const QString & line);
+ virtual bool hasLength ();
+
+ void setURL (const KURL &);
+ void clear ();
+ virtual QString prettyName ();
+public slots:
+ virtual void init ();
+ virtual void activate ();
+ virtual void deactivate ();
+ void finished ();
+private slots:
+ void grabReady (const QString & path);
+ void play ();
+private:
+ QString m_grabfile;
+ bool m_finished;
+};
+
+
+/*
+ * Part notifications to hosting application
+ */
+class KMPLAYER_NO_EXPORT KMPlayerBrowserExtension : public KParts::BrowserExtension {
+ Q_OBJECT
+public:
+ KMPlayerBrowserExtension(KMPlayerPart *parent);
+ KDE_NO_CDTOR_EXPORT ~KMPlayerBrowserExtension () {}
+ void urlChanged (const QString & url);
+ void setLoadingProgress (int percentage);
+
+ void saveState (QDataStream & stream);
+ void restoreState (QDataStream & stream);
+ void requestOpenURL (const KURL & url, const QString & target, const QString & service);
+public slots:
+ void slotRequestOpenURL (const KURL & url, const QString & target);
+};
+
+/*
+ * Part javascript support
+ */
+class KMPLAYER_NO_EXPORT KMPlayerLiveConnectExtension : public KParts::LiveConnectExtension {
+ Q_OBJECT
+public:
+ KMPlayerLiveConnectExtension (KMPlayerPart * parent);
+ ~KMPlayerLiveConnectExtension ();
+
+ // LiveConnect interface
+ bool get (const unsigned long, const QString &,
+ KParts::LiveConnectExtension::Type &, unsigned long &, QString &);
+ bool put (const unsigned long, const QString &, const QString &);
+ bool call (const unsigned long, const QString &,
+ const QStringList &, KParts::LiveConnectExtension::Type &,
+ unsigned long &, QString &);
+ void unregister (const unsigned long);
+ void sendEvent(const unsigned long objid, const QString & event, const KParts::LiveConnectExtension::ArgList & args ) {
+ emit partEvent(objid, event, args);
+ }
+
+ void enableFinishEvent (bool b = true) { m_enablefinish = b; }
+signals:
+ void partEvent (const unsigned long, const QString &,
+ const KParts::LiveConnectExtension::ArgList &);
+public slots:
+ void setSize (int w, int h);
+ void started ();
+ void finished ();
+ void evaluate (const QString & script, QString & result);
+private:
+ KMPlayerPart * player;
+ QString script_result;
+ const JSCommandEntry * lastJSCommandEntry;
+ bool m_started;
+ bool m_enablefinish;
+ bool m_evaluating;
+};
+
+
+/*
+ * Part that gets created when used a KPart
+ */
+class KMPLAYER_NO_EXPORT KMPlayerPart : public KMPlayer::PartBase {
+ Q_OBJECT
+ friend struct GroupPredicate;
+public:
+ enum Features {
+ Feat_Unknown = 0,
+ Feat_Viewer = 0x01, Feat_Controls = 0x02,
+ Feat_Label = 0x04, Feat_StatusBar = 0x08,
+ Feat_InfoPanel = 0x10, Feat_VolumeSlider = 0x20, Feat_PlayList = 0x40,
+ Feat_ImageWindow = 0x80, Feat_All = 0xff
+ };
+ KMPlayerPart (QWidget * wparent, const char * wname,
+ QObject * parent, const char * name, const QStringList &args);
+ ~KMPlayerPart ();
+
+ KDE_NO_EXPORT KMPlayerBrowserExtension * browserextension() const
+ { return m_browserextension; }
+ KMPlayerLiveConnectExtension * liveconnectextension () const
+ { return m_liveconnectextension; }
+ KDE_NO_EXPORT bool hasFeature (int f) { return m_features & f; }
+ bool allowRedir (const KURL & url) const;
+ void connectToPart (KMPlayerPart *);
+ KMPlayerPart * master () const { return m_master; }
+ void setMaster (KMPlayerPart * m) { m_master = m; }
+ virtual void setLoaded (int percentage);
+ bool openNewURL (const KURL & url); // for JS interface
+public slots:
+ virtual bool openURL (const KURL & url);
+ virtual bool closeURL ();
+ void setMenuZoom (int id);
+protected slots:
+ virtual void playingStarted ();
+ virtual void playingStopped ();
+ void viewerPartDestroyed (QObject *);
+ void viewerPartProcessChanged (const char *);
+ void viewerPartSourceChanged (KMPlayer::Source *, KMPlayer::Source *);
+ void waitForImageWindowTimeOut ();
+ void statusPosition (int pos, int length);
+private:
+ void setAutoControls (bool);
+ KMPlayerPart * m_master;
+ KMPlayerBrowserExtension * m_browserextension;
+ KMPlayerLiveConnectExtension * m_liveconnectextension;
+ QString m_group;
+ KURL m_docbase;
+ QString m_src_url;
+ QString m_file_name;
+ int m_features;
+ int last_time_left;
+ bool m_started_emited : 1;
+ //bool m_noresize : 1;
+ bool m_havehref : 1;
+};
+
+
+#endif
diff --git a/src/kmplayer_rp.cpp b/src/kmplayer_rp.cpp
new file mode 100644
index 0000000..c255e39
--- /dev/null
+++ b/src/kmplayer_rp.cpp
@@ -0,0 +1,497 @@
+/**
+ * Copyright (C) 2006 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include <config.h>
+
+#include <qcolor.h>
+#include <qimage.h>
+#include <qtimer.h>
+
+#include <kdebug.h>
+
+#include "kmplayer_rp.h"
+#include "kmplayer_smil.h"
+
+using namespace KMPlayer;
+
+
+KDE_NO_CDTOR_EXPORT RP::Imfl::Imfl (NodePtr & d)
+ : Mrl (d, id_node_imfl),
+ fit (fit_hidden),
+ duration (0),
+ needs_scene_img (0) {}
+
+KDE_NO_CDTOR_EXPORT RP::Imfl::~Imfl () {
+}
+
+KDE_NO_EXPORT void RP::Imfl::closed () {
+ for (NodePtr n = firstChild (); n; n = n->nextSibling ())
+ if (RP::id_node_head == n->id) {
+ AttributePtr a = convertNode <Element> (n)->attributes ()->first ();
+ for (; a; a = a->nextSibling ()) {
+ if (StringPool::attr_width == a->name ()) {
+ width = a->value ().toInt ();
+ } else if (StringPool::attr_height == a->name ()) {
+ height = a->value ().toInt ();
+ } else if (a->name () == "duration") {
+ int dur;
+ parseTime (a->value ().lower (), dur);
+ duration = dur;
+ }
+ }
+ }
+}
+
+KDE_NO_EXPORT void RP::Imfl::defer () {
+ kdDebug () << "RP::Imfl::defer " << endl;
+ setState (state_deferred);
+ for (Node * n = firstChild ().ptr (); n; n = n->nextSibling ().ptr ())
+ if (n->id == RP::id_node_image && !n->active ())
+ n->activate ();
+}
+
+KDE_NO_EXPORT void RP::Imfl::activate () {
+ kdDebug () << "RP::Imfl::activate " << endl;
+ resolved = true;
+ setState (state_activated);
+ int timings_count = 0;
+ for (NodePtr n = firstChild (); n; n = n->nextSibling ())
+ switch (n->id) {
+ case RP::id_node_crossfade:
+ case RP::id_node_fadein:
+ case RP::id_node_fadeout:
+ case RP::id_node_fill:
+ case RP::id_node_wipe:
+ case RP::id_node_viewchange:
+ n->activate (); // set their start timers
+ timings_count++;
+ break;
+ case RP::id_node_image:
+ if (!n->active ())
+ n->activate ();
+ break;
+ }
+ if (duration > 0)
+ duration_timer = document ()->setTimeout (this, duration * 100);
+ else if (!timings_count)
+ finish ();
+}
+
+KDE_NO_EXPORT void RP::Imfl::finish () {
+ kdDebug () << "RP::Imfl::finish " << endl;
+ Mrl::finish ();
+ if (duration_timer) {
+ document ()->cancelTimer (duration_timer);
+ duration_timer = 0;
+ }
+ for (NodePtr n = firstChild (); n; n = n->nextSibling ())
+ if (n->unfinished ())
+ n->finish ();
+}
+
+KDE_NO_EXPORT void RP::Imfl::childDone (NodePtr) {
+ if (unfinished () && !duration_timer) {
+ for (NodePtr n = firstChild (); n; n = n->nextSibling ())
+ switch (n->id) {
+ case RP::id_node_crossfade:
+ case RP::id_node_fadein:
+ case RP::id_node_fadeout:
+ case RP::id_node_fill:
+ if (n->unfinished ())
+ return;
+ }
+ finish ();
+ }
+}
+
+KDE_NO_EXPORT void RP::Imfl::deactivate () {
+ kdDebug () << "RP::Imfl::deactivate " << endl;
+ if (unfinished ())
+ finish ();
+ if (!active ())
+ return; // calling finish might call deactivate() as well
+ setState (state_deactivated);
+ for (NodePtr n = firstChild (); n; n = n->nextSibling ())
+ if (n->active ())
+ n->deactivate ();
+ rp_surface = Mrl::getSurface (0L);
+}
+
+KDE_NO_EXPORT bool RP::Imfl::handleEvent (EventPtr event) {
+ if (event->id () == event_timer) {
+ TimerEvent * te = static_cast <TimerEvent *> (event.ptr ());
+ if (te->timer_info == duration_timer) {
+ kdDebug () << "RP::Imfl timer " << duration << endl;
+ duration_timer = 0;
+ if (unfinished ())
+ finish ();
+ }
+ }
+ return true;
+}
+
+KDE_NO_EXPORT void RP::Imfl::accept (Visitor * v) {
+ v->visit (this);
+}
+
+KDE_NO_EXPORT Surface *RP::Imfl::surface () {
+ if (!rp_surface) {
+ rp_surface = Mrl::getSurface (this);
+ if (rp_surface) {
+ if (width <= 0 || width > 32000)
+ width = rp_surface->bounds.width ();
+ if (height <= 0 || height > 32000)
+ height = rp_surface->bounds.height ();
+ }
+ }
+ return rp_surface.ptr ();
+}
+
+KDE_NO_EXPORT NodePtr RP::Imfl::childFromTag (const QString & tag) {
+ const char * ctag = tag.latin1 ();
+ if (!strcmp (ctag, "head"))
+ return new DarkNode (m_doc, "head", RP::id_node_head);
+ else if (!strcmp (ctag, "image"))
+ return new RP::Image (m_doc);
+ else if (!strcmp (ctag, "fill"))
+ return new RP::Fill (m_doc);
+ else if (!strcmp (ctag, "wipe"))
+ return new RP::Wipe (m_doc);
+ else if (!strcmp (ctag, "viewchange"))
+ return new RP::ViewChange (m_doc);
+ else if (!strcmp (ctag, "crossfade"))
+ return new RP::Crossfade (m_doc);
+ else if (!strcmp (ctag, "fadein"))
+ return new RP::Fadein (m_doc);
+ else if (!strcmp (ctag, "fadeout"))
+ return new RP::Fadeout (m_doc);
+ return 0L;
+}
+
+KDE_NO_EXPORT void RP::Imfl::repaint () {
+ if (!active ())
+ kdWarning () << "Spurious Imfl repaint" << endl;
+ else if (surface () && width > 0 && height > 0)
+ rp_surface->repaint (SRect (0, 0, width, height));
+}
+
+KDE_NO_CDTOR_EXPORT RP::Image::Image (NodePtr & doc)
+ : Mrl (doc, id_node_image)
+{}
+
+KDE_NO_CDTOR_EXPORT RP::Image::~Image () {
+}
+
+KDE_NO_EXPORT void RP::Image::closed () {
+ src = getAttribute (StringPool::attr_name);
+}
+
+KDE_NO_EXPORT void RP::Image::activate () {
+ kdDebug () << "RP::Image::activate" << endl;
+ setState (state_activated);
+ isPlayable (); // update src attribute
+ cached_img.setUrl (absolutePath ());
+ if (cached_img.isEmpty ()) {
+ wget (absolutePath ());
+ } else {
+ width = cached_img.data->image->width ();
+ height = cached_img.data->image->height ();
+ }
+}
+
+KDE_NO_EXPORT void RP::Image::begin () {
+ Node::begin ();
+}
+
+KDE_NO_EXPORT void RP::Image::deactivate () {
+ cached_img.setUrl (QString ());
+ if (img_surface) {
+ img_surface->remove ();
+ img_surface = NULL;
+ }
+ setState (state_deactivated);
+ postpone_lock = 0L;
+}
+
+
+KDE_NO_EXPORT void RP::Image::remoteReady (QByteArray & data) {
+ kdDebug () << "RP::Image::remoteReady" << endl;
+ if (!data.isEmpty () && cached_img.isEmpty ()) {
+ QImage * img = new QImage (data);
+ if (!img->isNull ()) {
+ cached_img.data->image = img;
+ width = img->width ();
+ height = img->height ();
+ } else {
+ delete img;
+ }
+ }
+ postpone_lock = 0L;
+}
+
+KDE_NO_EXPORT bool RP::Image::isReady (bool postpone_if_not) {
+ if (downloading () && postpone_if_not)
+ postpone_lock = document ()->postpone ();
+ return !downloading ();
+}
+
+KDE_NO_EXPORT Surface *RP::Image::surface () {
+ if (!img_surface && !cached_img.isEmpty ()) {
+ Node * p = parentNode ().ptr ();
+ if (p && p->id == RP::id_node_imfl) {
+ Surface *ps = static_cast <RP::Imfl *> (p)->surface ();
+ if (ps)
+ img_surface = ps->createSurface (this,
+ SRect (0, 0, width, height));
+ }
+ }
+ return img_surface;
+}
+
+KDE_NO_CDTOR_EXPORT RP::TimingsBase::TimingsBase (NodePtr & d, const short i)
+ : Element (d, i), x (0), y (0), w (0), h (0), start (0), duration (0) {}
+
+KDE_NO_EXPORT void RP::TimingsBase::activate () {
+ setState (state_activated);
+ x = y = w = h = 0;
+ srcx = srcy = srcw = srch = 0;
+ for (Attribute * a= attributes ()->first ().ptr (); a; a = a->nextSibling ().ptr ()) {
+ if (a->name () == StringPool::attr_target) {
+ for (NodePtr n = parentNode()->firstChild(); n; n= n->nextSibling())
+ if (convertNode <Element> (n)->
+ getAttribute ("handle") == a->value ())
+ target = n;
+ } else if (a->name () == "start") {
+ int dur;
+ parseTime (a->value ().lower (), dur);
+ start = dur;
+ } else if (a->name () == "duration") {
+ int dur;
+ parseTime (a->value ().lower (), dur);
+ duration = dur;
+ } else if (a->name () == "dstx") {
+ x = a->value ().toInt ();
+ } else if (a->name () == "dsty") {
+ y = a->value ().toInt ();
+ } else if (a->name () == "dstw") {
+ w = a->value ().toInt ();
+ } else if (a->name () == "dsth") {
+ h = a->value ().toInt ();
+ } else if (a->name () == "srcx") {
+ srcx = a->value ().toInt ();
+ } else if (a->name () == "srcy") {
+ srcy = a->value ().toInt ();
+ } else if (a->name () == "srcw") {
+ srcw = a->value ().toInt ();
+ } else if (a->name () == "srch") {
+ srch = a->value ().toInt ();
+ }
+ }
+ start_timer = document ()->setTimeout (this, start *100);
+}
+
+KDE_NO_EXPORT void RP::TimingsBase::deactivate () {
+ if (unfinished ())
+ finish ();
+ setState (state_deactivated);
+}
+
+KDE_NO_EXPORT bool RP::TimingsBase::handleEvent (EventPtr event) {
+ if (event->id () == event_timer) {
+ TimerEvent * te = static_cast <TimerEvent *> (event.ptr ());
+ if (te->timer_info == update_timer && duration > 0) {
+ update (100 * ++curr_step / duration);
+ te->interval = true;
+ } else if (te->timer_info == start_timer) {
+ start_timer = 0;
+ duration_timer = document ()->setTimeout (this, duration * 100);
+ begin ();
+ } else if (te->timer_info == duration_timer) {
+ duration_timer = 0;
+ update (100);
+ finish ();
+ } else
+ return false;
+ return true;
+ } else if (event->id () == event_postponed) {
+ if (!static_cast <PostponedEvent *> (event.ptr ())->is_postponed) {
+ document_postponed = 0L; // disconnect
+ update (duration > 0 ? 0 : 100);
+ }
+ }
+ return false;
+}
+
+KDE_NO_EXPORT void RP::TimingsBase::begin () {
+ progress = 0;
+ setState (state_began);
+ if (target)
+ target->begin ();
+ if (duration > 0) {
+ steps = duration; // 10/s updates
+ update_timer = document ()->setTimeout (this, 100); // 50ms
+ curr_step = 1;
+ }
+}
+
+KDE_NO_EXPORT void RP::TimingsBase::update (int percentage) {
+ progress = percentage;
+ Node * p = parentNode ().ptr ();
+ if (p->id == RP::id_node_imfl)
+ static_cast <RP::Imfl *> (p)->repaint ();
+}
+
+KDE_NO_EXPORT void RP::TimingsBase::finish () {
+ progress = 100;
+ if (start_timer) {
+ document ()->cancelTimer (start_timer);
+ start_timer = 0;
+ } else if (duration_timer) {
+ document ()->cancelTimer (duration_timer);
+ duration_timer = 0;
+ }
+ if (update_timer) {
+ document ()->cancelTimer (update_timer);
+ update_timer = 0;
+ }
+ document_postponed = 0L; // disconnect
+ Element::finish ();
+}
+
+KDE_NO_EXPORT void RP::Crossfade::activate () {
+ TimingsBase::activate ();
+}
+
+KDE_NO_EXPORT void RP::Crossfade::begin () {
+ //kdDebug () << "RP::Crossfade::begin" << endl;
+ TimingsBase::begin ();
+ if (target && target->id == id_node_image) {
+ RP::Image * img = static_cast <RP::Image *> (target.ptr ());
+ if (!img->isReady (true))
+ document_postponed = document()->connectTo (this, event_postponed);
+ else
+ update (duration > 0 ? 0 : 100);
+ }
+}
+
+KDE_NO_EXPORT void RP::Crossfade::accept (Visitor * v) {
+ v->visit (this);
+}
+
+KDE_NO_EXPORT void RP::Fadein::activate () {
+ // pickup color from Fill that should be declared before this node
+ from_color = 0;
+ TimingsBase::activate ();
+}
+
+KDE_NO_EXPORT void RP::Fadein::begin () {
+ //kdDebug () << "RP::Fadein::begin" << endl;
+ TimingsBase::begin ();
+ if (target && target->id == id_node_image) {
+ RP::Image * img = static_cast <RP::Image *> (target.ptr ());
+ if (!img->isReady (true))
+ document_postponed = document()->connectTo (this, event_postponed);
+ else
+ update (duration > 0 ? 0 : 100);
+ }
+}
+
+KDE_NO_EXPORT void RP::Fadein::accept (Visitor * v) {
+ v->visit (this);
+}
+
+KDE_NO_EXPORT void RP::Fadeout::activate () {
+ to_color = QColor (getAttribute ("color")).rgb ();
+ TimingsBase::activate ();
+}
+
+KDE_NO_EXPORT void RP::Fadeout::begin () {
+ //kdDebug () << "RP::Fadeout::begin" << endl;
+ TimingsBase::begin ();
+}
+
+KDE_NO_EXPORT void RP::Fadeout::accept (Visitor * v) {
+ v->visit (this);
+}
+
+KDE_NO_EXPORT void RP::Fill::activate () {
+ color = QColor (getAttribute ("color")).rgb ();
+ TimingsBase::activate ();
+}
+
+KDE_NO_EXPORT void RP::Fill::begin () {
+ setState (state_began);
+ update (0);
+}
+
+KDE_NO_EXPORT void RP::Fill::accept (Visitor * v) {
+ v->visit (this);
+}
+
+KDE_NO_EXPORT void RP::Wipe::activate () {
+ //TODO implement 'type="push"'
+ QString dir = getAttribute ("direction").lower ();
+ direction = dir_right;
+ if (dir == QString::fromLatin1 ("left"))
+ direction = dir_left;
+ else if (dir == QString::fromLatin1 ("up"))
+ direction = dir_up;
+ else if (dir == QString::fromLatin1 ("down"))
+ direction = dir_down;
+ TimingsBase::activate ();
+}
+
+KDE_NO_EXPORT void RP::Wipe::begin () {
+ //kdDebug () << "RP::Wipe::begin" << endl;
+ TimingsBase::begin ();
+ if (target && target->id == id_node_image) {
+ RP::Image * img = static_cast <RP::Image *> (target.ptr ());
+ if (!img->isReady (true))
+ document_postponed = document()->connectTo (this, event_postponed);
+ else
+ update (duration > 0 ? 0 : 100);
+ }
+}
+
+KDE_NO_EXPORT void RP::Wipe::accept (Visitor * v) {
+ v->visit (this);
+}
+
+KDE_NO_EXPORT void RP::ViewChange::activate () {
+ TimingsBase::activate ();
+}
+
+KDE_NO_EXPORT void RP::ViewChange::begin () {
+ kdDebug () << "RP::ViewChange::begin" << endl;
+ setState (state_began);
+ Node * p = parentNode ().ptr ();
+ if (p->id == RP::id_node_imfl)
+ static_cast <RP::Imfl *> (p)->needs_scene_img++;
+ update (0);
+}
+
+KDE_NO_EXPORT void RP::ViewChange::finish () {
+ Node * p = parentNode ().ptr ();
+ if (p && p->id == RP::id_node_imfl)
+ static_cast <RP::Imfl *> (p)->needs_scene_img--;
+ TimingsBase::finish ();
+}
+
+KDE_NO_EXPORT void RP::ViewChange::accept (Visitor * v) {
+ v->visit (this);
+}
diff --git a/src/kmplayer_rp.h b/src/kmplayer_rp.h
new file mode 100644
index 0000000..5c43a0f
--- /dev/null
+++ b/src/kmplayer_rp.h
@@ -0,0 +1,193 @@
+/* This file is part of the KDE project
+ *
+ * Copyright (C) 2006-2007 Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _KMPLAYER_RP_H_
+#define _KMPLAYER_RP_H_
+
+#include <qobject.h>
+#include <qstring.h>
+
+#include "kmplayerplaylist.h"
+#include "kmplayer_smil.h"
+
+namespace KIO {
+ class Job;
+}
+
+namespace KMPlayer {
+
+/**
+ * RealPix support classes
+ */
+namespace RP {
+
+const short id_node_imfl = 150;
+const short id_node_head = 151;
+const short id_node_image = 152;
+const short id_node_crossfade = 153;
+const short id_node_fill = 154;
+const short id_node_wipe = 155;
+const short id_node_fadein = 156;
+const short id_node_fadeout = 157;
+const short id_node_viewchange = 158;
+const short id_node_animate = 159;
+
+class KMPLAYER_NO_EXPORT Imfl : public Mrl {
+public:
+ Imfl (NodePtr & d);
+ ~Imfl ();
+ KDE_NO_EXPORT virtual const char * nodeName () const { return "imfl"; }
+ virtual NodePtr childFromTag (const QString & tag);
+ virtual void closed ();
+ virtual void defer (); // start loading the images if not yet done
+ virtual void activate (); // start timings, handle paint events
+ virtual void finish (); // end the timings
+ virtual void deactivate (); // stop handling paint events
+ virtual void childDone (NodePtr child); // for if no duration_timer set
+ KDE_NO_EXPORT virtual bool expose () const { return false; }
+ KDE_NO_EXPORT virtual PlayType playType () const { return play_type_image; }
+ virtual bool handleEvent (EventPtr event);
+ virtual void accept (Visitor *);
+ Surface *surface ();
+ void repaint (); // called whenever something changes on image
+ Fit fit; // how to layout images
+ unsigned int duration; // cached attributes of head
+ TimerInfoPtrW duration_timer;
+ SurfacePtrW rp_surface;
+ int needs_scene_img;
+};
+
+class KMPLAYER_NO_EXPORT TimingsBase : public Element {
+public:
+ TimingsBase (NodePtr & d, const short id);
+ KDE_NO_CDTOR_EXPORT ~TimingsBase () {}
+ virtual void activate (); // start the 'start_timer'
+ virtual void begin (); // start_timer has expired
+ virtual void finish (); // ?duration_timer has expired?
+ virtual void deactivate (); // disabled
+ virtual bool handleEvent (EventPtr event);
+ KDE_NO_EXPORT virtual bool expose () const { return false; }
+ int progress;
+ Single x, y, w, h;
+ Single srcx, srcy, srcw, srch;
+ NodePtrW target;
+protected:
+ void update (int percentage);
+ unsigned int start, duration;
+ int steps, curr_step;
+ TimerInfoPtrW start_timer;
+ TimerInfoPtrW duration_timer;
+ TimerInfoPtrW update_timer;
+ ConnectionPtr document_postponed;
+};
+
+class KMPLAYER_NO_EXPORT Crossfade : public TimingsBase {
+public:
+ KDE_NO_CDTOR_EXPORT Crossfade (NodePtr & d)
+ : TimingsBase (d, id_node_crossfade) {}
+ KDE_NO_CDTOR_EXPORT ~Crossfade () {}
+ KDE_NO_EXPORT virtual const char * nodeName () const { return "crossfade"; }
+ virtual void activate ();
+ virtual void begin ();
+ virtual void accept (Visitor *);
+};
+
+class KMPLAYER_NO_EXPORT Fadein : public TimingsBase {
+public:
+ KDE_NO_CDTOR_EXPORT Fadein (NodePtr & d) : TimingsBase(d, id_node_fadein) {}
+ KDE_NO_CDTOR_EXPORT ~Fadein () {}
+ KDE_NO_EXPORT virtual const char * nodeName () const { return "fadein"; }
+ virtual void activate ();
+ virtual void begin ();
+ virtual void accept (Visitor *);
+ unsigned int from_color;
+};
+
+class KMPLAYER_NO_EXPORT Fadeout : public TimingsBase {
+public:
+ KDE_NO_CDTOR_EXPORT Fadeout(NodePtr &d) : TimingsBase(d, id_node_fadeout) {}
+ KDE_NO_CDTOR_EXPORT ~Fadeout () {}
+ KDE_NO_EXPORT virtual const char * nodeName () const { return "fadeout"; }
+ virtual void activate ();
+ virtual void begin ();
+ virtual void accept (Visitor *);
+ unsigned int to_color;
+};
+
+class KMPLAYER_NO_EXPORT Fill : public TimingsBase {
+public:
+ KDE_NO_CDTOR_EXPORT Fill (NodePtr & d) : TimingsBase (d, id_node_fill) {}
+ KDE_NO_CDTOR_EXPORT ~Fill () {}
+ KDE_NO_EXPORT virtual const char * nodeName () const { return "fill"; }
+ virtual void activate ();
+ virtual void begin ();
+ unsigned int fillColor () const { return color; }
+ virtual void accept (Visitor *);
+ unsigned int color;
+};
+
+class KMPLAYER_NO_EXPORT Wipe : public TimingsBase {
+public:
+ KDE_NO_CDTOR_EXPORT Wipe (NodePtr & d) : TimingsBase (d, id_node_wipe) {}
+ KDE_NO_CDTOR_EXPORT ~Wipe () {}
+ KDE_NO_EXPORT virtual const char * nodeName () const { return "wipe"; }
+ virtual void activate ();
+ virtual void begin ();
+ virtual void accept (Visitor *);
+ enum { dir_right, dir_left, dir_up, dir_down } direction;
+};
+
+class KMPLAYER_NO_EXPORT ViewChange : public TimingsBase {
+public:
+ KDE_NO_CDTOR_EXPORT ViewChange (NodePtr & d)
+ : TimingsBase (d, id_node_viewchange) {}
+ KDE_NO_CDTOR_EXPORT ~ViewChange () {}
+ KDE_NO_EXPORT virtual const char * nodeName() const { return "viewchange"; }
+ virtual void activate ();
+ virtual void begin ();
+ virtual void finish ();
+ virtual void accept (Visitor *);
+};
+
+class KMPLAYER_NO_EXPORT Image : public RemoteObject, public Mrl {
+ PostponePtr postpone_lock;
+public:
+ Image (NodePtr & d);
+ ~Image ();
+ KDE_NO_EXPORT virtual const char * nodeName () const { return "image"; }
+ virtual void activate ();
+ virtual void begin ();
+ virtual void deactivate ();
+ virtual void closed ();
+ bool isReady (bool postpone_if_not = false); // is downloading ready
+ Surface *surface ();
+ SurfacePtrW img_surface;
+ CachedImage cached_img;
+ bool expose () const { return false; }
+protected:
+ virtual void remoteReady (QByteArray & data);
+};
+
+} // RP namespace
+
+} // KMPlayer namespace
+
+#endif //_KMPLAYER_RP_H_
+
diff --git a/src/kmplayer_rss.cpp b/src/kmplayer_rss.cpp
new file mode 100644
index 0000000..133b4e8
--- /dev/null
+++ b/src/kmplayer_rss.cpp
@@ -0,0 +1,130 @@
+/**
+ * Copyright (C) 2005 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include <config.h>
+#include <kdebug.h>
+#include "kmplayer_rss.h"
+
+using namespace KMPlayer;
+
+KDE_NO_EXPORT NodePtr RSS::Rss::childFromTag (const QString & tag) {
+ if (!strcmp (tag.latin1 (), "channel"))
+ return new RSS::Channel (m_doc);
+ return 0L;
+}
+
+KDE_NO_EXPORT NodePtr RSS::Channel::childFromTag (const QString & tag) {
+ const char *ctag = tag.ascii ();
+ if (!strcmp (ctag, "item"))
+ return new RSS::Item (m_doc);
+ else if (!strcmp (ctag, "title"))
+ return new DarkNode (m_doc, tag, id_node_title);
+ return 0L;
+}
+
+KDE_NO_EXPORT void RSS::Channel::closed () {
+ for (NodePtr c = firstChild (); c; c = c->nextSibling ())
+ if (c->id == id_node_title) {
+ pretty_name = c->innerText ().simplifyWhiteSpace ();
+ break;
+ }
+}
+
+KDE_NO_EXPORT bool RSS::Channel::expose () const {
+ return !pretty_name.isEmpty () || //return false if no title and only one
+ previousSibling () || nextSibling ();
+}
+
+KDE_NO_EXPORT NodePtr RSS::Item::childFromTag (const QString & tag) {
+ const char *ctag = tag.ascii ();
+ if (!strcmp (ctag, "enclosure"))
+ return new RSS::Enclosure (m_doc);
+ else if (!strcmp (ctag, "title"))
+ return new DarkNode (m_doc, tag, id_node_title);
+ else if (!strcmp (ctag, "description"))
+ return new DarkNode (m_doc, tag, id_node_description);
+ return 0L;
+}
+
+KDE_NO_EXPORT void RSS::Item::closed () {
+ cached_play_type = play_type_none;
+ for (NodePtr c = firstChild (); c; c = c->nextSibling ()) {
+ switch (c->id) {
+ case id_node_title:
+ pretty_name = c->innerText ().simplifyWhiteSpace ();
+ break;
+ case id_node_enclosure:
+ enclosure = c;
+ src = c->mrl ()->src;
+ break;
+ case id_node_description:
+ cached_play_type = play_type_info;
+ break;
+ }
+ }
+ if (enclosure && !enclosure->mrl ()->src.isEmpty ())
+ cached_play_type = play_type_audio;
+}
+
+KDE_NO_EXPORT Mrl * RSS::Item::linkNode () {
+ if (enclosure)
+ return enclosure->mrl ();
+ return Mrl::linkNode ();
+}
+
+KDE_NO_EXPORT void RSS::Item::activate () {
+ PlayListNotify * n = document()->notify_listener;
+ if (n) {
+ for (NodePtr c = firstChild (); c; c = c->nextSibling ())
+ if (c->id == id_node_description) {
+ QString s = c->innerText ();
+ n->setInfoMessage (s);
+ if (!enclosure && !s.isEmpty ()) {
+ setState (state_activated);
+ begin ();
+ timer = document ()->setTimeout (this, 5000+s.length()*200);
+ return;
+ }
+ break;
+ }
+ }
+ Mrl::activate ();
+}
+
+KDE_NO_EXPORT void RSS::Item::deactivate () {
+ if (timer) {
+ document ()->cancelTimer (timer);
+ timer = 0L;
+ }
+ PlayListNotify * n = document()->notify_listener;
+ if (n)
+ n->setInfoMessage (QString ());
+ Mrl::deactivate ();
+}
+
+KDE_NO_EXPORT bool RSS::Item::handleEvent (EventPtr event) {
+ if (event->id () == event_timer) {
+ timer = 0L;
+ finish ();
+ }
+ return true;
+}
+
+KDE_NO_EXPORT void RSS::Enclosure::closed () {
+ src = getAttribute (StringPool::attr_url);
+}
diff --git a/src/kmplayer_rss.h b/src/kmplayer_rss.h
new file mode 100644
index 0000000..229610d
--- /dev/null
+++ b/src/kmplayer_rss.h
@@ -0,0 +1,88 @@
+/* This file is part of the KDE project
+ *
+ * Copyright (C) 2005-2006 Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _KMPLAYER_RSS_H_
+#define _KMPLAYER_RSS_H_
+
+#include <qstring.h>
+
+#include "kmplayerplaylist.h"
+
+namespace KMPlayer {
+
+namespace RSS {
+
+const short id_node_rss = 200;
+const short id_node_channel = 201;
+const short id_node_item = 202;
+const short id_node_title = 203;
+const short id_node_description = 204;
+const short id_node_enclosure = 205;
+
+/**
+ * '<RSS>' tag
+ */
+class KMPLAYER_NO_EXPORT Rss : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Rss (NodePtr & d) : Mrl (d, id_node_rss) {}
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "rss"; }
+ bool expose () const { return false; }
+};
+
+class KMPLAYER_NO_EXPORT Channel : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Channel (NodePtr & d) : Mrl (d, id_node_channel) {}
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "channel"; }
+ PlayType playType () { return play_type_none; }
+ void closed ();
+ bool expose () const;
+};
+
+class KMPLAYER_NO_EXPORT Item : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Item (NodePtr & d) : Mrl (d, id_node_item) {}
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "item"; }
+ PlayType playType () { return cached_play_type; }
+ Mrl * linkNode ();
+ void closed ();
+ void activate ();
+ void deactivate ();
+ bool handleEvent (EventPtr event);
+ NodePtrW enclosure;
+ TimerInfoPtrW timer;
+};
+
+class KMPLAYER_NO_EXPORT Enclosure : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Enclosure(NodePtr &d) : Mrl(d, id_node_enclosure) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "enclosure"; }
+ void closed ();
+ bool expose () const { return false; }
+};
+
+} //namespace RSS
+
+
+} // namespace KMPlayer
+
+#endif //_KMPLAYER_RSS_H_
diff --git a/src/kmplayer_smil.cpp b/src/kmplayer_smil.cpp
new file mode 100644
index 0000000..467fbaa
--- /dev/null
+++ b/src/kmplayer_smil.cpp
@@ -0,0 +1,3604 @@
+/**
+ * Copyright (C) 2005-2007 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include <config.h>
+
+#include <stdlib.h>
+
+#include <qtextstream.h>
+#include <qcolor.h>
+#include <qpixmap.h>
+#include <qmovie.h>
+#include <qimage.h>
+#include <qtextcodec.h>
+#include <qfont.h>
+#include <qapplication.h>
+#include <qregexp.h>
+#include <qtimer.h>
+
+#include <kdebug.h>
+#include <kurl.h>
+#include <kmimetype.h>
+#include <kio/job.h>
+#include <kio/jobclasses.h>
+
+#include "kmplayer_smil.h"
+#include "kmplayer_rp.h"
+
+using namespace KMPlayer;
+
+namespace KMPlayer {
+static const unsigned int event_activated = (unsigned int) Runtime::dur_activated;
+const unsigned int event_inbounds = (unsigned int) Runtime::dur_inbounds;
+const unsigned int event_outbounds = (unsigned int) Runtime::dur_outbounds;
+static const unsigned int event_stopped = (unsigned int) Runtime::dur_end;
+static const unsigned int event_started = (unsigned int)Runtime::dur_start;
+static const unsigned int event_to_be_started = 1 + (unsigned int) Runtime::dur_last_dur;
+const unsigned int event_pointer_clicked = (unsigned int) event_activated;
+const unsigned int event_pointer_moved = (unsigned int) -11;
+const unsigned int event_timer = (unsigned int) -12;
+const unsigned int event_postponed = (unsigned int) -13;
+const unsigned int mediatype_attached = (unsigned int) -14;
+
+static const unsigned int started_timer_id = (unsigned int) 1;
+static const unsigned int stopped_timer_id = (unsigned int) 2;
+static const unsigned int start_timer_id = (unsigned int) 3;
+static const unsigned int dur_timer_id = (unsigned int) 4;
+static const unsigned int anim_timer_id = (unsigned int) 5;
+static const unsigned int trans_timer_id = (unsigned int) 6;
+static const unsigned int trans_out_timer_id = (unsigned int) 7;
+}
+
+/* Intrinsic duration
+ * duration_time | end_time |
+ * =======================================================================
+ * dur_media | dur_media | wait for event
+ * 0 | dur_media | only wait for child elements
+ * dur_media | 0 | intrinsic duration finished
+ */
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT bool KMPlayer::parseTime (const QString & vl, int & dur) {
+ const char * cval = vl.ascii ();
+ if (!cval) {
+ dur = 0;
+ return false;
+ }
+ int sign = 1;
+ bool fp_seen = false;
+ QString num;
+ const char * p = cval;
+ for ( ; *p; p++ ) {
+ if (*p == '+') {
+ if (!num.isEmpty ())
+ break;
+ else
+ sign = 1;
+ } else if (*p == '-') {
+ if (!num.isEmpty ())
+ break;
+ else
+ sign = -1;
+ } else if (*p >= '0' && *p <= '9') {
+ num += QChar (*p);
+ } else if (*p == '.') {
+ if (fp_seen)
+ break;
+ else
+ num += QChar (*p);
+ fp_seen = true;
+ } else if (*p == ' ') {
+ if (!num.isEmpty ())
+ break;
+ } else
+ break;
+ }
+ bool ok = false;
+ double t;
+ if (!num.isEmpty ())
+ t = sign * num.toDouble (&ok);
+ if (ok) {
+ dur = (unsigned int) (10 * t);
+ for ( ; *p; p++ ) {
+ if (*p == 'm') {
+ dur = (unsigned int) (t * 60);
+ break;
+ } else if (*p == 'h') {
+ dur = (unsigned int) (t * 60 * 60);
+ break;
+ } else if (*p != ' ')
+ break;
+ }
+ } else {
+ dur = 0;
+ return false;
+ }
+ return true;
+}
+
+static SMIL::Region * findRegion (NodePtr p, const QString & id) {
+ TrieString regionname_attr ("regionName");
+ for (NodePtr c = p->firstChild (); c; c = c->nextSibling ()) {
+ if (c->id == SMIL::id_node_region) {
+ SMIL::Region * r = convertNode <SMIL::Region> (c);
+ QString a = r->getAttribute (regionname_attr);
+ if (a.isEmpty ())
+ a = r->getAttribute (StringPool::attr_id);
+ if ((a.isEmpty () && id.isEmpty ()) || a == id) {
+ //kdDebug () << "MediaType region found " << id << endl;
+ return r;
+ }
+ }
+ SMIL::Region * r = findRegion (c, id);
+ if (r)
+ return r;
+ }
+ return 0L;
+}
+
+static SMIL::Transition * findTransition (NodePtr n, const QString & id) {
+ SMIL::Smil * s = SMIL::Smil::findSmilNode (n);
+ if (s) {
+ Node * head = s->firstChild ().ptr ();
+ while (head && head->id != SMIL::id_node_head)
+ head = head->nextSibling ().ptr ();
+ if (head)
+ for (Node * c = head->firstChild (); c; c = c->nextSibling().ptr ())
+ if (c->id == SMIL::id_node_transition &&
+ id == static_cast <Element *> (c)->
+ getAttribute (StringPool::attr_id))
+ return static_cast <SMIL::Transition *> (c);
+ }
+ return 0L;
+}
+
+static NodePtr findLocalNodeById (NodePtr n, const QString & id) {
+ //kdDebug() << "findLocalNodeById " << id << endl;
+ SMIL::Smil * s = SMIL::Smil::findSmilNode (n);
+ if (s)
+ return s->document ()->getElementById (s, id, false);
+ return 0L;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT ToBeStartedEvent::ToBeStartedEvent (NodePtr n)
+ : Event (event_to_be_started), node (n) {}
+
+TimerEvent::TimerEvent (TimerInfoPtr tinfo)
+ : Event (event_timer), timer_info (tinfo), interval (false) {}
+
+PostponedEvent::PostponedEvent (bool postponed)
+ : Event (event_postponed), is_postponed (postponed) {}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT Runtime::Runtime (NodePtr e)
+ : timingstate (timings_reset),
+ element (e), repeat_count (0) {}
+
+KDE_NO_CDTOR_EXPORT Runtime::~Runtime () {
+ if (start_timer || duration_timer) // ugh
+ reset ();
+}
+
+KDE_NO_EXPORT void Runtime::reset () {
+ if (element) {
+ if (start_timer) {
+ element->document ()->cancelTimer (start_timer);
+ ASSERT (!start_timer);
+ }
+ if (duration_timer) {
+ element->document ()->cancelTimer (duration_timer);
+ ASSERT (!duration_timer);
+ }
+ } else {
+ start_timer = 0L;
+ duration_timer = 0L;
+ }
+ repeat_count = 0;
+ timingstate = timings_reset;
+ for (int i = 0; i < (int) durtime_last; i++) {
+ if (durations [i].connection)
+ durations [i].connection->disconnect ();
+ durations [i].durval = dur_timer;
+ durations [i].offset = 0;
+ }
+ endTime ().durval = dur_media;
+}
+
+KDE_NO_EXPORT
+void Runtime::setDurationItem (DurationTime item, const QString & val) {
+ int dur = -2; // also 0 for 'media' duration, so it will not update then
+ QString vs = val.stripWhiteSpace ();
+ QString vl = vs.lower ();
+ const char * cval = vl.ascii ();
+ int offset = 0;
+ //kdDebug () << "setDuration1 " << vl << endl;
+ if (cval && cval[0]) {
+ QString idref;
+ const char * p = cval;
+ if (parseTime (vl, offset)) {
+ dur = dur_timer;
+ } else if (!strncmp (cval, "id(", 3)) {
+ p = strchr (cval + 3, ')');
+ if (p) {
+ idref = vs.mid (3, p - cval - 3);
+ p++;
+ }
+ if (*p) {
+ const char *q = strchr (p, '(');
+ if (q)
+ p = q;
+ }
+ } else if (!strncmp (cval, "indefinite", 10)) {
+ dur = dur_infinite;
+ } else if (!strncmp (cval, "media", 5)) {
+ dur = dur_media;
+ }
+ if (dur == -2) {
+ NodePtr target;
+ const char * q = p;
+ if (idref.isEmpty ()) {
+ bool last_esc = false;
+ for ( ; *q; q++) {
+ if (*q == '\\') {
+ if (last_esc) {
+ idref += QChar ('\\');
+ last_esc = false;
+ } else
+ last_esc = true;
+ } else if (*q == '.' && !last_esc) {
+ break;
+ } else
+ idref += QChar (*q);
+ }
+ if (!*q)
+ idref = vs.mid (p - cval);
+ else
+ idref = vs.mid (p - cval, q - p);
+ }
+ ++q;
+ if (!idref.isEmpty ()) {
+ target = findLocalNodeById (element, idref);
+ if (!target)
+ kdWarning () << "Element not found " << idref << endl;
+ }
+ //kdDebug () << "setDuration q:" << q << endl;
+ if (parseTime (vl.mid (q-cval), offset)) {
+ dur = dur_start;
+ } else if (*q && !strncmp (q, "end", 3)) {
+ dur = dur_end;
+ parseTime (vl.mid (q + 3 - cval), offset);
+ } else if (*q && !strncmp (q, "begin", 5)) {
+ dur = dur_start;
+ parseTime (vl.mid (q + 5 - cval), offset);
+ } else if (*q && !strncmp (q, "activateevent", 13)) {
+ dur = dur_activated;
+ parseTime (vl.mid (q + 13 - cval), offset);
+ } else if (*q && !strncmp (q, "inboundsevent", 13)) {
+ dur = dur_inbounds;
+ parseTime (vl.mid (q + 13 - cval), offset);
+ } else if (*q && !strncmp (q, "outofboundsevent", 16)) {
+ dur = dur_outbounds;
+ parseTime (vl.mid (q + 16 - cval), offset);
+ } else
+ kdWarning () << "setDuration no match " << cval << endl;
+ if (target && dur != dur_timer) {
+ durations [(int) item].connection =
+ target->connectTo (element, dur);
+ }
+ }
+ //kdDebug () << "setDuration " << dur << " id:'" << idref << "' off:" << offset << endl;
+ }
+ durations [(int) item].durval = (Duration) dur;
+ durations [(int) item].offset = offset;
+}
+
+/**
+ * start, or restart in case of re-use, the durations
+ */
+KDE_NO_EXPORT void Runtime::begin () {
+ if (!element) {
+ reset ();
+ return;
+ }
+ //kdDebug () << "Runtime::begin " << element->nodeName() << endl;
+ if (start_timer || duration_timer)
+ convertNode <SMIL::TimedMrl> (element)->init ();
+ timingstate = timings_began;
+
+ int offset = 0;
+ bool stop = true;
+ if (beginTime ().durval == dur_start) { // check started/finished
+ Connection * con = beginTime ().connection.ptr ();
+ if (con && con->connectee &&
+ con->connectee->state >= Node::state_began) {
+ offset = beginTime ().offset;
+ if (SMIL::TimedMrl::isTimedMrl (con->connectee))
+ offset -= element->document ()->last_event_time -
+ convertNode <SMIL::TimedMrl>(con->connectee)->begin_time;
+ stop = false;
+ kdWarning() << "start trigger on started element" << endl;
+ } // else wait for start event
+ } else if (beginTime ().durval == dur_end) { // check finished
+ Connection * con = beginTime ().connection.ptr ();
+ if (con && con->connectee &&
+ con->connectee->state >= Node::state_finished) {
+ int offset = beginTime ().offset;
+ if (SMIL::TimedMrl::isTimedMrl (con->connectee))
+ offset -= element->document ()->last_event_time -
+ convertNode<SMIL::TimedMrl>(con->connectee)->finish_time;
+ stop = false;
+ kdWarning() << "start trigger on finished element" << endl;
+ } // else wait for end event
+ } else if (beginTime ().durval == dur_timer) {
+ offset = beginTime ().offset;
+ stop = false;
+ }
+ if (stop) // wait for event
+ propagateStop (false);
+ else if (offset > 0) // start timer
+ start_timer = element->document ()->setTimeout (
+ element, 100 * offset, start_timer_id);
+ else // start now
+ propagateStart ();
+}
+
+KDE_NO_EXPORT void Runtime::beginAndStart () {
+ if (element) {
+ if (start_timer || duration_timer)
+ convertNode <SMIL::TimedMrl> (element)->init ();
+ timingstate = timings_began;
+ propagateStart ();
+ }
+}
+
+KDE_NO_EXPORT
+bool Runtime::parseParam (const TrieString & name, const QString & val) {
+ //kdDebug () << "Runtime::parseParam " << name << "=" << val << endl;
+ if (name == StringPool::attr_begin) {
+ setDurationItem (begin_time, val);
+ if ((timingstate == timings_began && !start_timer) ||
+ timingstate == timings_stopped) {
+ if (beginTime ().offset > 0) { // create a timer for start
+ if (start_timer)
+ element->document ()->cancelTimer (start_timer);
+ if (beginTime ().durval == dur_timer)
+ start_timer = element->document ()->setTimeout
+ (element, 100 * beginTime ().offset, start_timer_id);
+ } else // start now
+ propagateStart ();
+ }
+ } else if (name == StringPool::attr_dur) {
+ setDurationItem (duration_time, val);
+ } else if (name == StringPool::attr_end) {
+ setDurationItem (end_time, val);
+ if (endTime ().durval == dur_timer &&
+ endTime ().offset > beginTime ().offset)
+ durTime ().offset = endTime ().offset - beginTime ().offset;
+ else if (endTime ().durval != dur_timer)
+ durTime ().durval = dur_media; // event
+ } else if (name == StringPool::attr_title) {
+ Mrl * mrl = static_cast <Mrl *> (element.ptr ());
+ if (mrl)
+ mrl->pretty_name = val;
+ } else if (name == "endsync") {
+ if ((durTime ().durval == dur_media || durTime ().durval == 0) &&
+ endTime ().durval == dur_media) {
+ NodePtr e = findLocalNodeById (element, val);
+ if (SMIL::TimedMrl::isTimedMrl (e)) {
+ SMIL::TimedMrl * tm = static_cast <SMIL::TimedMrl *> (e.ptr ());
+ durations [(int) end_time].connection =
+ tm->connectTo (element, event_stopped);
+ durations [(int) end_time].durval = (Duration) event_stopped;
+ }
+ }
+ } else if (name.startsWith ("repeat")) {
+ if (val.find ("indefinite") > -1)
+ repeat_count = dur_infinite;
+ else
+ repeat_count = val.toInt ();
+ } else
+ return false;
+ return true;
+}
+
+KDE_NO_EXPORT void Runtime::processEvent (unsigned int event) {
+ SMIL::TimedMrl * tm = convertNode <SMIL::TimedMrl> (element);
+ if (tm) {
+ if (timingstate != timings_started && beginTime ().durval == event) {
+ if (start_timer)
+ element->document ()->cancelTimer (start_timer);
+ if (element && beginTime ().offset > 0)
+ start_timer = element->document ()->setTimeout (element,
+ 100 * beginTime ().offset, start_timer_id);
+ else //FIXME neg. offsets
+ propagateStart ();
+ if (tm->state == Node::state_finished)
+ tm->state = Node::state_activated; // rewind to activated
+ } else if (timingstate == timings_started &&
+ (unsigned int) endTime ().durval == event)
+ propagateStop (true);
+ } else
+ reset ();
+}
+
+KDE_NO_EXPORT void Runtime::propagateStop (bool forced) {
+ if (state() == timings_reset || state() == timings_stopped)
+ return; // nothing to stop
+ if (!forced && element) {
+ if (durTime ().durval == dur_media && endTime ().durval == dur_media)
+ return; // wait for external eof
+ if (endTime ().durval != dur_timer && endTime ().durval != dur_media &&
+ (state() == timings_started || beginTime().durval == dur_timer))
+ return; // wait for event
+ if (durTime ().durval == dur_infinite)
+ return; // this may take a while :-)
+ if (duration_timer)
+ return; // timerEvent will call us with forced=true
+ // bail out if a child still running
+ for (NodePtr c = element->firstChild (); c; c = c->nextSibling ())
+ if (c->unfinished ())
+ return; // a child still running
+ }
+ bool was_started (timingstate == timings_started);
+ timingstate = timings_stopped;
+ if (element) {
+ if (start_timer) {
+ element->document ()->cancelTimer (start_timer);
+ ASSERT (!start_timer);
+ }
+ if (duration_timer) {
+ element->document ()->cancelTimer (duration_timer);
+ ASSERT (!duration_timer);
+ }
+ if (was_started && element->document ()->active ())
+ element->document ()->setTimeout (element, 0, stopped_timer_id);
+ else if (element->unfinished ())
+ element->finish ();
+ } else {
+ start_timer = 0L;
+ duration_timer = 0L;
+ }
+}
+
+KDE_NO_EXPORT void Runtime::propagateStart () {
+ SMIL::TimedMrl * tm = convertNode <SMIL::TimedMrl> (element);
+ if (tm) {
+ tm->propagateEvent (new ToBeStartedEvent (element));
+ if (start_timer)
+ tm->document ()->cancelTimer (start_timer);
+ ASSERT (!start_timer);
+ } else
+ start_timer = 0L;
+ timingstate = timings_started;
+ element->document ()->setTimeout (element, 0, started_timer_id);
+}
+
+/**
+ * start_timer timer expired
+ */
+KDE_NO_EXPORT void Runtime::started () {
+ //kdDebug () << "Runtime::started " << (element ? element->nodeName() : "-") << endl;
+ NodePtr e = element; // element is weak
+ SMIL::TimedMrl * tm = convertNode <SMIL::TimedMrl> (e);
+ if (tm) {
+ if (start_timer)
+ tm->document ()->cancelTimer (start_timer);
+ if (durTime ().offset > 0 && durTime ().durval == dur_timer) {
+ if (duration_timer)
+ tm->document ()->cancelTimer (duration_timer);
+ duration_timer = element->document ()->setTimeout
+ (element, 100 * durTime ().offset, dur_timer_id);
+ }
+ // kdDebug () << "Runtime::started set dur timer " << durTime ().offset << endl;
+ tm->propagateEvent (new Event (event_started));
+ tm->begin ();
+ } else
+ reset ();
+}
+
+/**
+ * duration_timer timer expired or no duration set after started
+ */
+KDE_NO_EXPORT void Runtime::stopped () {
+ if (!element) {
+ reset ();
+ } else if (element->active ()) {
+ if (repeat_count == dur_infinite || 0 < repeat_count--) {
+ if (beginTime ().offset > 0 &&
+ beginTime ().durval == dur_timer) {
+ if (start_timer)
+ element->document ()->cancelTimer (start_timer);
+ start_timer = element->document ()->setTimeout
+ (element, 100 * beginTime ().offset, start_timer_id);
+ } else {
+ propagateStart ();
+ }
+ } else {
+ repeat_count = 0;
+ element->finish ();
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT SizeType::SizeType () {
+ reset ();
+}
+
+KDE_NO_CDTOR_EXPORT SizeType::SizeType (const QString & s) {
+ *this = s;
+}
+
+void SizeType::reset () {
+ perc_size = 0;
+ abs_size = 0;
+ isset = false;
+}
+
+SizeType & SizeType::operator = (const QString & s) {
+ QString strval (s);
+ int p = strval.find (QChar ('%'));
+ if (p > -1) {
+ strval.truncate (p);
+ perc_size = strval.toDouble (&isset);
+ } else
+ abs_size = strval.toDouble (&isset);
+ return *this;
+}
+
+SizeType & SizeType::operator += (const SizeType & s) {
+ perc_size += s.perc_size;
+ abs_size += s.abs_size;
+ return *this;
+}
+
+SizeType & SizeType::operator -= (const SizeType & s) {
+ perc_size -= s.perc_size;
+ abs_size -= s.abs_size;
+ return *this;
+}
+
+Single SizeType::size (Single relative_to) const {
+ Single s = abs_size;
+ s += perc_size * relative_to / 100;
+ return s;
+}
+
+//-----------------%<----------------------------------------------------------
+
+SRect SRect::unite (const SRect & r) const {
+ if (!(_w > 0 && _h > 0))
+ return r;
+ if (!(r._w > 0 && r._h > 0))
+ return *this;
+ Single a (_x < r._x ? _x : r._x);
+ Single b (_y < r._y ? _y : r._y);
+ return SRect (a, b,
+ ((_x + _w < r._x + r._w) ? r._x + r._w : _x + _w) - a,
+ ((_y + _h < r._y + r._h) ? r._y + r._h : _y + _h) - b);
+}
+
+SRect SRect::intersect (const SRect & r) const {
+ Single a (_x < r._x ? r._x : _x);
+ Single b (_y < r._y ? r._y : _y);
+ return SRect (a, b,
+ ((_x + _w < r._x + r._w) ? _x + _w : r._x + r._w) - a,
+ ((_y + _h < r._y + r._h) ? _y + _h : r._y + r._h) - b);
+}
+
+IRect IRect::unite (const IRect & r) const {
+ if (isEmpty ())
+ return r;
+ if (r.isEmpty ())
+ return *this;
+ int a (x < r.x ? x : r.x);
+ int b (y < r.y ? y : r.y);
+ return IRect (a, b,
+ ((x + w < r.x + r.w) ? r.x + r.w : x + w) - a,
+ ((y + h < r.y + r.h) ? r.y + r.h : y + h) - b);
+}
+
+IRect IRect::intersect (const IRect & r) const {
+ int a (x < r.x ? r.x : x);
+ int b (y < r.y ? r.y : y);
+ return IRect (a, b,
+ ((x + w < r.x + r.w) ? x + w : r.x + r.w) - a,
+ ((y + h < r.y + r.h) ? y + h : r.y + r.h) - b);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT void CalculatedSizer::resetSizes () {
+ left.reset ();
+ top.reset ();
+ width.reset ();
+ height.reset ();
+ right.reset ();
+ bottom.reset ();
+ reg_point.truncate (0);
+ reg_align = QString::fromLatin1 ("topLeft");
+}
+
+static bool regPoints (const QString & str, Single & x, Single & y) {
+ QString lower = str.lower ();
+ const char * rp = lower.ascii ();
+ if (!rp)
+ return false;
+ if (!strcmp (rp, "center")) {
+ x = 50;
+ y = 50;
+ } else {
+ if (!strncmp (rp, "top", 3)) {
+ y = 0;
+ rp += 3;
+ } else if (!strncmp (rp, "mid", 3)) {
+ y = 50;
+ rp += 3;
+ } else if (!strncmp (rp, "bottom", 6)) {
+ y = 100;
+ rp += 6;
+ } else
+ return false;
+ if (!strcmp (rp, "left")) {
+ x = 0;
+ } else if (!strcmp (rp, "mid")) {
+ x = 50;
+ } else if (!strcmp (rp, "right")) {
+ x = 100;
+ } else
+ return false;
+ }
+ return true;
+}
+
+KDE_NO_EXPORT
+bool CalculatedSizer::applyRegPoints (Node * node, Single w, Single h,
+ Single & xoff, Single & yoff, Single & w1, Single & h1) {
+ if (reg_point.isEmpty ())
+ return false;
+ Single rpx, rpy, rax, ray;
+ if (!regPoints (reg_point, rpx, rpy)) {
+ node = SMIL::Smil::findSmilNode (node);
+ if (!node)
+ return false;
+ node = static_cast <SMIL::Smil *> (node)->layout_node.ptr ();
+ if (!node)
+ return false;
+ NodePtr c = node->firstChild ();
+ for (; c; c = c->nextSibling ())
+ if (c->id == SMIL::id_node_regpoint &&
+ convertNode<Element>(c)->getAttribute (StringPool::attr_id)
+ == reg_point) {
+ Single i1, i2; // dummies
+ SMIL::RegPoint *rp_elm = static_cast<SMIL::RegPoint*>(c.ptr());
+ rp_elm->sizes.calcSizes (0L, 100, 100, rpx, rpy, i1, i2);
+ QString ra = rp_elm->getAttribute ("regAlign");
+ if (!ra.isEmpty () && reg_align.isEmpty ())
+ reg_align = ra;
+ break;
+ }
+ if (!c)
+ return false; // not found
+ }
+ if (!regPoints (reg_align, rax, ray))
+ rax = ray = 0; // default back to topLeft
+ if (!(int)w1 || !(int)h1) {
+ xoff = w * (rpx - rax) / 100;
+ yoff = h * (rpy - ray) / 100;
+ w1 = w - w * (rpx > rax ? (rpx - rax) : (rax - rpx)) / 100;
+ h1 = h - h * (rpy > ray ? (rpy - ray) : (ray - rpy)) / 100;
+ } else {
+ xoff = (w * rpx - w1 * rax) / 100;
+ yoff = (h * rpy - h1 * ray) / 100;
+ }
+ // kdDebug () << "calc rp:" << reg_point << " ra:" << reg_align << " w:" << (int)w << " h:" << (int)h << " xoff:" << (int)xoff << " yoff:" << (int)yoff << " w1:" << (int)w1 << " h1:" << (int)h1 << endl;
+ return true; // success getting sizes based on regPoint
+}
+
+KDE_NO_EXPORT void CalculatedSizer::calcSizes (Node * node, Single w, Single h,
+ Single & xoff, Single & yoff, Single & w1, Single & h1) {
+ if (applyRegPoints (node, w, h, xoff, yoff, w1, h1))
+ return;
+ if (left.isSet ())
+ xoff = left.size (w);
+ else if (width.isSet ()) {
+ if (right.isSet ())
+ xoff = w - width.size (w) - right.size (w);
+ else
+ xoff = (w - width.size (w)) / 2;
+ } else
+ xoff = 0;
+ if (top.isSet ())
+ yoff = top.size (h);
+ else if (height.isSet ()) {
+ if (bottom.isSet ())
+ yoff = h - height.size (h) - bottom.size (h);
+ else
+ yoff = (h - height.size (h)) / 2;
+ } else
+ yoff = 0;
+ if (width.isSet ())
+ w1 = width.size (w);
+ else if (right.isSet ())
+ w1 = w - xoff - right.size (w);
+ else
+ w1 = w - xoff;
+ if (w1 < 0)
+ w1 = 0;
+ if (height.isSet ())
+ h1 = height.size (h);
+ else if (bottom.isSet ())
+ h1 = h - yoff - bottom.size (h);
+ else
+ h1 = h - yoff;
+ if (h1 < 0)
+ h1 = 0;
+}
+
+KDE_NO_EXPORT
+bool CalculatedSizer::setSizeParam(const TrieString &name, const QString &val, bool &dim_changed) {
+ dim_changed = true;
+ if (name == StringPool::attr_left) {
+ left = val;
+ dim_changed = right.isSet ();
+ } else if (name == StringPool::attr_top) {
+ top = val;
+ dim_changed = bottom.isSet ();
+ } else if (name == StringPool::attr_width) {
+ width = val;
+ } else if (name == StringPool::attr_height) {
+ height = val;
+ } else if (name == StringPool::attr_right) {
+ right = val;
+ dim_changed = left.isSet ();
+ } else if (name == StringPool::attr_bottom) {
+ bottom = val;
+ dim_changed = top.isSet ();
+ } else if (name == "regPoint") {
+ reg_point = val;
+ dim_changed = false;
+ } else if (name == "regAlign") {
+ reg_align = val;
+ dim_changed = false;
+ } else
+ return false;
+ return true;
+}
+
+KDE_NO_EXPORT void
+CalculatedSizer::move (const SizeType &x, const SizeType &y) {
+ if (left.isSet ()) {
+ if (right.isSet ()) {
+ right += x;
+ right -= left;
+ }
+ left = x;
+ } else if (right.isSet ()) {
+ right = x;
+ } else {
+ left = x;
+ }
+ if (top.isSet ()) {
+ if (bottom.isSet ()) {
+ bottom += y;
+ bottom -= top;
+ }
+ top = y;
+ } else if (bottom.isSet ()) {
+ bottom = y;
+ } else {
+ top = y;
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT AnimateGroupData::AnimateGroupData (NodePtr e)
+ : Runtime (e), modification_id (-1) {}
+
+bool AnimateGroupData::parseParam (const TrieString &name, const QString &val) {
+ //kdDebug () << "AnimateGroupData::parseParam " << name << "=" << val << endl;
+ if (name == StringPool::attr_target || name == "targetElement") {
+ if (element)
+ target_element = findLocalNodeById (element, val);
+ } else if (name == "attribute" || name == "attributeName") {
+ changed_attribute = TrieString (val);
+ } else if (name == "to") {
+ change_to = val;
+ } else
+ return Runtime::parseParam (name, val);
+ return true;
+}
+
+/**
+ * animation finished
+ */
+KDE_NO_EXPORT void AnimateGroupData::stopped () {
+ //kdDebug () << "AnimateGroupData::stopped " << durTime ().durval << endl;
+ if (!SMIL::TimedMrl::keepContent (element))
+ restoreModification ();
+ Runtime::stopped ();
+}
+
+KDE_NO_EXPORT void AnimateGroupData::reset () {
+ restoreModification ();
+ Runtime::reset ();
+}
+
+KDE_NO_EXPORT void AnimateGroupData::restoreModification () {
+ if (modification_id > -1 && target_element &&
+ target_element->state > Node::state_init) {
+ //kdDebug () << "AnimateGroupData(" << this << ")::restoreModificatio " <<modification_id << endl;
+ convertNode <Element> (target_element)->resetParam (
+ changed_attribute, modification_id);
+ }
+ modification_id = -1;
+}
+
+//-----------------------------------------------------------------------------
+
+/**
+ * start_timer timer expired, execute it
+ */
+KDE_NO_EXPORT void SetData::started () {
+ restoreModification ();
+ if (element) {
+ if (target_element) {
+ convertNode <Element> (target_element)->setParam (
+ changed_attribute, change_to, &modification_id);
+ //kdDebug () << "SetData(" << this << ")::started " << target_element->nodeName () << "." << changed_attribute << " ->" << change_to << " modid:" << modification_id << endl;
+ } else
+ kdWarning () << "target element not found" << endl;
+ } else
+ kdWarning () << "set element disappeared" << endl;
+ AnimateGroupData::started ();
+}
+
+//-----------------------------------------------------------------------------
+
+//http://en.wikipedia.org/wiki/B%C3%A9zier_curve
+typedef struct {
+ float x;
+ float y;
+} Point2D;
+
+static Point2D PointOnCubicBezier (Point2D *cp, float t) {
+ float ax, bx, cx;
+ float ay, by, cy;
+ float tSquared, tCubed;
+ Point2D result;
+
+ /* calculate the polynomial coefficients */
+
+ cx = 3.0 * (cp[1].x - cp[0].x);
+ bx = 3.0 * (cp[2].x - cp[1].x) - cx;
+ ax = cp[3].x - cp[0].x - cx - bx;
+
+ cy = 3.0 * (cp[1].y - cp[0].y);
+ by = 3.0 * (cp[2].y - cp[1].y) - cy;
+ ay = cp[3].y - cp[0].y - cy - by;
+
+ /* calculate the curve point at parameter value t */
+
+ tSquared = t * t;
+ tCubed = tSquared * t;
+
+ result.x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x;
+ result.y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y;
+
+ return result;
+}
+
+KDE_NO_CDTOR_EXPORT AnimateData::AnimateData (NodePtr e)
+ : AnimateGroupData (e), change_by (0), steps (0) {}
+
+KDE_NO_EXPORT void AnimateData::reset () {
+ AnimateGroupData::reset ();
+ if (element) {
+ if (anim_timer)
+ element->document ()->cancelTimer (anim_timer);
+ ASSERT (!anim_timer);
+ } else
+ anim_timer = 0;
+ accumulate = acc_none;
+ additive = add_replace;
+ change_by = 0;
+ calcMode = calc_linear;
+ change_from.truncate (0);
+ change_values.clear ();
+ steps = 0;
+ change_delta = change_to_val = change_from_val = 0.0;
+ change_from_unit.truncate (0);
+}
+
+bool AnimateData::parseParam (const TrieString & name, const QString & val) {
+ //kdDebug () << "AnimateData::parseParam " << name << "=" << val << endl;
+ if (name == "change_by") {
+ change_by = val.toInt ();
+ } else if (name == "from") {
+ change_from = val;
+ } else if (name == "values") {
+ change_values = QStringList::split (QString (";"), val);
+ } else if (name == "calcMode") {
+ if (val == QString::fromLatin1 ("discrete"))
+ calcMode = calc_discrete;
+ else if (val == QString::fromLatin1 ("linear"))
+ calcMode = calc_linear;
+ else if (val == QString::fromLatin1 ("paced"))
+ calcMode = calc_paced;
+ } else
+ return AnimateGroupData::parseParam (name, val);
+ return true;
+}
+
+/**
+ * start_timer timer expired, execute it
+ */
+KDE_NO_EXPORT void AnimateData::started () {
+ //kdDebug () << "AnimateData::started " << durTime ().durval << endl;
+ restoreModification ();
+ if (anim_timer) {
+ kdWarning () << "AnimateData::started " << anim_timer.ptr() << endl;
+ element->document ()->cancelTimer (anim_timer);
+ }
+ bool success = false;
+ do {
+ if (!element) {
+ kdWarning () << "set element disappeared" << endl;
+ break;
+ }
+ NodePtr protect = target_element;
+ Element * target = convertNode <Element> (target_element);
+ if (!target) {
+ kdWarning () << "target element not found" << endl;
+ break;
+ }
+ if (calcMode == calc_linear) {
+ QRegExp reg ("^\\s*(-?[0-9\\.]+)(\\s*[%a-z]*)?");
+ if (change_from.isEmpty ()) {
+ if (change_values.size () > 0) // check 'values' attribute
+ change_from = change_values.first ();
+ else // take current
+ change_from = target->param (changed_attribute);
+ }
+ if (!change_from.isEmpty ()) {
+ target->setParam (changed_attribute, change_from,
+ &modification_id);
+ if (reg.search (change_from) > -1) {
+ change_from_val = reg.cap (1).toDouble ();
+ change_from_unit = reg.cap (2);
+ }
+ } else {
+ kdWarning() << "animate couldn't determine start value" << endl;
+ break;
+ }
+ if (change_to.isEmpty () && change_values.size () > 1)
+ change_to = change_values.last (); // check 'values' attribute
+ if (!change_to.isEmpty () && reg.search (change_to) > -1) {
+ change_to_val = reg.cap (1).toDouble ();
+ } else {
+ kdWarning () << "animate couldn't determine end value" << endl;
+ break;
+ }
+ steps = 20 * durTime ().offset / 5; // 40 per sec
+ if (steps > 0) {
+ anim_timer = element->document ()->setTimeout (element, 25, anim_timer_id); // 25 ms for now FIXME
+ change_delta = (change_to_val - change_from_val) / steps;
+ //kdDebug () << "AnimateData::started " << target_element->nodeName () << "." << changed_attribute << " " << change_from_val << "->" << change_to_val << " in " << steps << " using:" << change_delta << " inc" << endl;
+ success = true;
+ }
+ } else if (calcMode == calc_discrete) {
+ steps = change_values.size () - 1; // we do already the first step
+ if (steps < 1) {
+ kdWarning () << "animate needs at least two values" << endl;
+ break;
+ }
+ int interval = 100 * durTime ().offset / (1 + steps);
+ if (interval <= 0 || durTime ().durval != dur_timer) {
+ kdWarning () << "animate needs a duration time" << endl;
+ break;
+ }
+ //kdDebug () << "AnimateData::started " << target_element->nodeName () << "." << changed_attribute << " " << change_values.first () << "->" << change_values.last () << " in " << steps << " interval:" << interval << endl;
+ anim_timer = element->document ()->setTimeout (element, interval, anim_timer_id); // 50 /s for now FIXME
+ target->setParam (changed_attribute, change_values.first (),
+ &modification_id);
+ success = true;
+ }
+ } while (false);
+ if (success)
+ AnimateGroupData::started ();
+ else
+ propagateStop (true);
+}
+
+/**
+ * undo if necessary
+ */
+KDE_NO_EXPORT void AnimateData::stopped () {
+ if (element) {
+ if (anim_timer) // make sure timers are stopped
+ element->document ()->cancelTimer (anim_timer);
+ ASSERT (!anim_timer);
+ if (steps > 0 && element->active ()) {
+ steps = 0;
+ if (calcMode == calc_linear)
+ change_from_val = change_to_val;
+ applyStep (); // we lost some steps ..
+ }
+ } else
+ anim_timer = 0;
+ AnimateGroupData::stopped ();
+}
+
+KDE_NO_EXPORT void AnimateData::applyStep () {
+ Element * target = convertNode <Element> (target_element);
+ if (target && calcMode == calc_linear)
+ target->setParam (changed_attribute, QString ("%1%2").arg (
+ change_from_val).arg(change_from_unit),
+ &modification_id);
+ else if (target && calcMode == calc_discrete)
+ target->setParam (changed_attribute,
+ change_values[change_values.size () - steps -1],
+ &modification_id);
+}
+
+/**
+ * for animations
+ */
+KDE_NO_EXPORT bool AnimateData::timerTick () {
+ if (!anim_timer) {
+ kdError () << "spurious anim timer tick" << endl;
+ } else if (steps-- > 0) {
+ if (calcMode == calc_linear)
+ change_from_val += change_delta;
+ applyStep ();
+ return true;
+ } else {
+ if (element)
+ element->document ()->cancelTimer (anim_timer);
+ ASSERT (!anim_timer);
+ propagateStop (true); // not sure, actually
+ }
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT AnimateMotionData::AnimateMotionData (NodePtr e)
+ : AnimateGroupData (e), keytimes (NULL), steps (0) {}
+
+KDE_NO_CDTOR_EXPORT AnimateMotionData::~AnimateMotionData () {
+ reset ();
+}
+
+bool AnimateMotionData::checkTarget (Node *n) {
+ if (!n ||
+ (SMIL::id_node_region != n->id &&
+ !(SMIL::id_node_first_mediatype <= n->id &&
+ SMIL::id_node_last_mediatype >= n->id))) {
+ kdWarning () << "animateMotion target element not " <<
+ (n ? "supported" : "found") << endl;
+ if (element && anim_timer)
+ element->document ()->cancelTimer (anim_timer);
+ propagateStop (true);
+ return false;
+ }
+ return true;
+}
+
+KDE_NO_EXPORT void AnimateMotionData::reset () {
+ AnimateGroupData::reset ();
+ if (element) {
+ if (anim_timer)
+ element->document ()->cancelTimer (anim_timer);
+ ASSERT (!anim_timer);
+ } else
+ anim_timer = 0;
+ accumulate = acc_none;
+ additive = add_replace;
+ calcMode = calc_linear;
+ change_from.truncate (0);
+ change_by.truncate (0);
+ values.clear ();
+ delete keytimes;
+ keytimes = NULL;
+ keytime_count = 0;
+ splines.clear ();
+ steps = 0;
+ cur_x = cur_y = delta_x = delta_y = SizeType();
+}
+
+bool AnimateMotionData::parseParam (const TrieString & name, const QString & val) {
+ //kdDebug () << "AnimateMotionData::parseParam " << name << "=" << val << endl;
+ if (name == "from") {
+ change_from = val;
+ } else if (name == "by") {
+ change_by = val;
+ } else if (name == "values") {
+ values = QStringList::split (QString (";"), val);
+ } else if (name == "keyTimes") {
+ QStringList kts = QStringList::split (QString (";"), val);
+ delete keytimes;
+ keytime_count = kts.size ();
+ keytimes = new float [keytime_count];
+ for (int i = 0; i < keytime_count; i++) {
+ keytimes[i] = kts[i].stripWhiteSpace().toDouble();
+ if (keytimes[i] < 0.0 || keytimes[i] > 1.0)
+ kdWarning() << "animateMotion wrong keyTimes values" << endl;
+ else if (i == 0 && keytimes[i] > 0.01)
+ kdWarning() << "animateMotion first keyTimes value not 0" << endl;
+ else
+ continue;
+ delete keytimes;
+ keytimes = NULL;
+ keytime_count = 0;
+ return true;
+ }
+ } else if (name == "keySplines") {
+ splines = QStringList::split (QString (";"), val);
+ } else if (name == "calcMode") {
+ if (val == QString::fromLatin1 ("discrete"))
+ calcMode = calc_discrete;
+ else if (val == QString::fromLatin1 ("linear"))
+ calcMode = calc_linear;
+ else if (val == QString::fromLatin1 ("paced"))
+ calcMode = calc_paced;
+ else if (val == QString::fromLatin1 ("spline"))
+ calcMode = calc_spline;
+ } else
+ return AnimateGroupData::parseParam (name, val);
+ return true;
+}
+
+bool AnimateMotionData::getCoordinates (const QString &coord, SizeType &x, SizeType &y) {
+ int p = coord.find (QChar (','));
+ if (p > 0) {
+ x = coord.left (p).stripWhiteSpace ();
+ y = coord.mid (p + 1).stripWhiteSpace ();
+ return true;
+ }
+ return false;
+}
+
+bool AnimateMotionData::setInterval () {
+ int cs = 10 * durTime ().offset;
+ if (keytime_count > interval + 1)
+ cs = (int) (cs * (keytimes[interval+1] - keytimes[interval]));
+ else if (values.size () > 1)
+ cs /= values.size () - 1;
+ if (cs < 0) {
+ kdWarning () << "animateMotion has no valid duration interval " <<
+ interval << endl;
+ propagateStop (true);
+ return false;
+ }
+ steps = cs * 4 / 10; // 40 per sec
+ cur_step = 0;
+ cur_x = begin_x;
+ cur_y = begin_y;
+ delta_x = end_x;
+ delta_x -= begin_x;
+ delta_y = end_y;
+ delta_y -= begin_y;
+ switch (calcMode) {
+ case calc_paced: // FIXME
+ case calc_linear:
+ delta_x /= steps;
+ delta_y /= steps;
+ break;
+ case calc_spline:
+ if (splines.size () > interval) {
+ QStringList kss = QStringList::split (
+ QString (" "), splines[interval]);
+ control_point[0] = control_point[1] = 0;
+ control_point[2] = control_point[3] = 1;
+ if (kss.size () == 4) {
+ for (int i = 0; i < 4; ++i) {
+ control_point[i] = kss[i].toDouble();
+ if (control_point[i] < 0 || control_point[i] > 1) {
+ kdWarning () << "keySplines values not between 0-1"
+ << endl;
+ control_point[i] = i > 1 ? 1 : 0;
+ break;
+ }
+ }
+ } else {
+ kdWarning () << "keySplines " << interval <<
+ " has not 4 values" << endl;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ //kdDebug() << "setInterval " << steps << " " <<
+ // cur_x.size() << "," << cur_y.size() << "=>"
+ // << end_x.size() << "," << end_y.size() << " d:" <<
+ // delta_x.size() << "," << delta_y.size() << endl;
+ return true;
+}
+
+KDE_NO_EXPORT void AnimateMotionData::started () {
+ //kdDebug () << "AnimateMotionData::started " << durTime ().durval << endl;
+ Element *target = convertNode <Element> (target_element);
+ if (!element || !checkTarget (target))
+ return;
+ if (anim_timer)
+ element->document ()->cancelTimer (anim_timer);
+ interval = 0;
+ if (change_from.isEmpty ()) {
+ if (values.size () > 1) {
+ getCoordinates (values[0], begin_x, begin_y);
+ getCoordinates (values[1], end_x, end_y);
+ } else {
+ CalculatedSizer sizes;
+ if (SMIL::id_node_region == target->id)
+ sizes = static_cast<SMIL::Region*>(target)->sizes;
+ else if (SMIL::id_node_first_mediatype <= target->id &&
+ SMIL::id_node_last_mediatype >= target->id)
+ sizes = static_cast<SMIL::MediaType*>(target)->sizes;
+ if (sizes.left.isSet ()) {
+ begin_x = sizes.left;
+ } else if (sizes.right.isSet() && sizes.width.isSet ()) {
+ begin_x = sizes.right;
+ begin_x -= sizes.width;
+ } else {
+ begin_x = "0";
+ }
+ if (sizes.top.isSet ()) {
+ begin_y = sizes.top;
+ } else if (sizes.bottom.isSet() && sizes.height.isSet ()) {
+ begin_y = sizes.bottom;
+ begin_y -= sizes.height;
+ } else {
+ begin_y = "0";
+ }
+ }
+ } else {
+ getCoordinates (change_from, begin_x, begin_y);
+ }
+ if (!change_by.isEmpty ()) {
+ getCoordinates (change_by, delta_x, delta_y);
+ end_x = begin_x;
+ end_y = begin_y;
+ end_x += delta_x;
+ end_y += delta_y;
+ } else if (!change_to.isEmpty ()) {
+ getCoordinates (change_to, end_x, end_y);
+ }
+ if (!setInterval ())
+ return;
+ applyStep ();
+ anim_timer = element->document ()->setTimeout (element, 25, anim_timer_id);
+ AnimateGroupData::started ();
+}
+
+
+KDE_NO_EXPORT void AnimateMotionData::stopped () {
+ if (element) {
+ if (anim_timer) // make sure timers are stopped
+ element->document ()->cancelTimer (anim_timer);
+ ASSERT (!anim_timer);
+ if (cur_step < steps && element->active () ||
+ (interval > 1 && calcMode == calc_discrete)) {
+ steps = 0;
+ if (cur_x.size () != end_x.size () ||
+ cur_y.size () != end_y.size ()) {
+ cur_x = end_x;
+ cur_y = end_y;
+ applyStep (); // we lost some steps ..
+ }
+ }
+ } else
+ anim_timer = 0;
+ AnimateGroupData::stopped ();
+}
+
+KDE_NO_EXPORT void AnimateMotionData::applyStep () {
+ Node *target = target_element.ptr ();
+ if (!checkTarget (target))
+ return;
+ if (SMIL::id_node_region == target->id) {
+ SMIL::Region* r = static_cast <SMIL::Region*> (target);
+ if (r->surface ()) {
+ r->sizes.move (cur_x, cur_y);
+ r->boundsUpdate ();
+ }
+ } else {
+ SMIL::MediaType *mt = static_cast <SMIL::MediaType *> (target);
+ if (mt->surface ()) {
+ mt->sizes.move (cur_x, cur_y);
+ mt->boundsUpdate ();
+ }
+ }
+}
+
+KDE_NO_EXPORT bool AnimateMotionData::timerTick () {
+ if (!anim_timer) {
+ kdError () << "spurious animateMotion timer tick" << endl;
+ } else if (cur_step++ < steps) {
+ switch (calcMode) {
+ case calc_paced: // FIXME
+ case calc_linear:
+ cur_x += delta_x;
+ cur_y += delta_y;
+ break;
+ case calc_spline: {
+ Point2D ps[4] = {
+ { 0, 0 },
+ { control_point[0], control_point[1] },
+ { control_point[2], control_point[3] },
+ { 1, 1 }
+ };
+ Point2D p = PointOnCubicBezier (ps, 1.0 * cur_step / steps);
+ cur_x = delta_x;
+ cur_y = delta_y;
+ cur_x *= p.y;
+ cur_y *= p.y;
+ cur_x += begin_x;
+ cur_y += begin_y;
+ break;
+ }
+ case calc_discrete:
+ return true; // very sub-optimal timer
+ }
+ applyStep ();
+ return true;
+ } else if (values.size () > ++interval + 1) {
+ getCoordinates (values[interval], begin_x, begin_y);
+ getCoordinates (values[interval+1], end_x, end_y);
+ if (setInterval ()) {
+ applyStep ();
+ return true;
+ }
+ }
+ anim_timer = NULL;
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+
+static NodePtr findExternalTree (NodePtr mrl) {
+ for (NodePtr c = mrl->firstChild (); c; c = c->nextSibling ()) {
+ Mrl * m = c->mrl ();
+ if (m && m->opener == mrl)
+ return c;
+ }
+ return 0L;
+}
+
+KDE_NO_CDTOR_EXPORT MediaTypeRuntime::MediaTypeRuntime (NodePtr e)
+ : Runtime (e) {}
+
+KDE_NO_CDTOR_EXPORT MediaTypeRuntime::~MediaTypeRuntime () {
+ killWGet ();
+}
+
+/**
+ * re-implement for pending KIO::Job operations
+ */
+KDE_NO_EXPORT void KMPlayer::MediaTypeRuntime::reset () {
+ clear ();
+ postpone_lock = 0L;
+ Runtime::reset ();
+}
+
+/**
+ * will request a repaint of attached region
+ */
+KDE_NO_EXPORT void MediaTypeRuntime::stopped () {
+ clipStop ();
+ document_postponed = 0L;
+ Node * e = element.ptr ();
+ if (e) {
+ for (NodePtr n = e->firstChild (); n; n = n->nextSibling ())
+ if (n->unfinished ()) // finish child documents
+ n->finish ();
+ }
+ Runtime::stopped ();
+}
+
+KDE_NO_EXPORT void MediaTypeRuntime::clipStart () {
+ SMIL::MediaType * mt = convertNode <SMIL::MediaType> (element);
+ SMIL::RegionBase *r =mt ? convertNode<SMIL::RegionBase>(mt->region_node):0L;
+ if (r && r->surface ())
+ for (NodePtr n = mt->firstChild (); n; n = n->nextSibling ())
+ if ((n->mrl () && n->mrl ()->opener.ptr () == mt) ||
+ n->id == SMIL::id_node_smil ||
+ n->id == RP::id_node_imfl) {
+ n->activate ();
+ break;
+ }
+}
+
+KDE_NO_EXPORT void MediaTypeRuntime::clipStop () {
+ SMIL::MediaType * mt = convertNode <SMIL::MediaType> (element);
+ if (mt) {
+ mt->resetSurface ();
+ if (mt->external_tree && mt->external_tree->active ())
+ mt->external_tree->deactivate ();
+ }
+}
+
+KDE_NO_EXPORT void MediaTypeRuntime::postpone (bool) {
+}
+
+KDE_NO_CDTOR_EXPORT AudioVideoData::AudioVideoData (NodePtr e)
+ : MediaTypeRuntime (e) {}
+
+KDE_NO_EXPORT bool AudioVideoData::isAudioVideo () {
+ return timingstate == timings_started;
+}
+
+/**
+ * reimplement for request backend to play audio/video
+ */
+KDE_NO_EXPORT void AudioVideoData::started () {
+ if (element && !element->mrl ()->resolved) {
+ element->defer ();
+ return;
+ }
+ if (0 == durTime ().offset && dur_media == endTime ().durval)
+ durTime ().durval = dur_media; // duration of clip
+ MediaTypeRuntime::started ();
+}
+
+static void setSmilLinkNode (NodePtr n, NodePtr link) {
+ // this works only because we can only play one at a time FIXME
+ SMIL::Smil * s = SMIL::Smil::findSmilNode (n.ptr ());
+ if (s && (link || s->current_av_media_type == n)) // only reset ones own
+ s->current_av_media_type = link;
+}
+
+KDE_NO_EXPORT void AudioVideoData::clipStart () {
+ NodePtr element_protect = element; // note element is weak
+ SMIL::MediaType * mt = convertNode <SMIL::MediaType> (element);
+ PlayListNotify * n = mt ? mt->document ()->notify_listener : 0L;
+ //kdDebug() << "AudioVideoData::clipStart " << mt->resolved << endl;
+ if (n && mt->region_node && !mt->external_tree && !mt->src.isEmpty()) {
+ setSmilLinkNode (element, element);
+ mt->repeat = repeat_count == dur_infinite ? 9998 : repeat_count;
+ repeat_count = 0;
+ n->requestPlayURL (mt);
+ document_postponed = mt->document()->connectTo(mt, event_postponed);
+ }
+ MediaTypeRuntime::clipStart ();
+}
+
+KDE_NO_EXPORT void AudioVideoData::clipStop () {
+ if (durTime ().durval == dur_media)
+ durTime ().durval = dur_timer;//reset to make this finish
+ MediaTypeRuntime::clipStop ();
+ setSmilLinkNode (element, 0L);
+}
+
+KDE_NO_EXPORT
+bool AudioVideoData::parseParam(const TrieString &name, const QString &val) {
+ //kdDebug () << "AudioVideoData::parseParam " << name << "=" << val << endl;
+ if (name == StringPool::attr_src) {
+ NodePtr element_protect = element; // note element is weak
+ SMIL::MediaType * mt = convertNode <SMIL::MediaType> (element);
+ if (mt) {
+ if (!mt->resolved || mt->src != val) {
+ if (mt->external_tree)
+ mt->removeChild (mt->external_tree);
+ mt->src = val;
+ mt->resolved = mt->document ()->notify_listener->resolveURL (element);
+ }
+ if (timingstate == timings_started && mt->resolved)
+ clipStart ();
+ }
+ } else
+ return MediaTypeRuntime::parseParam (name, val);
+ return true;
+}
+
+KDE_NO_EXPORT void AudioVideoData::postpone (bool b) {
+ kdDebug () << "AudioVideoData::postpone " << b << endl;
+ if (element->unfinished () && b)
+ element->setState (Node::state_deferred);
+ else if (element->state == Node::state_deferred && !b)
+ element->setState (Node::state_began);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT MouseListeners::MouseListeners () :
+ m_ActionListeners (new NodeRefList),
+ m_OutOfBoundsListeners (new NodeRefList),
+ m_InBoundsListeners (new NodeRefList) {}
+
+NodeRefListPtr MouseListeners::listeners (unsigned int eid) {
+ switch (eid) {
+ case event_activated:
+ return m_ActionListeners;
+ case event_inbounds:
+ return m_InBoundsListeners;
+ case event_outbounds:
+ return m_OutOfBoundsListeners;
+ }
+ return 0L;
+}
+
+//-----------------------------------------------------------------------------
+
+static Element * fromScheduleGroup (NodePtr & d, const QString & tag) {
+ const char * ctag = tag.ascii ();
+ if (!strcmp (ctag, "par"))
+ return new SMIL::Par (d);
+ else if (!strcmp (ctag, "seq"))
+ return new SMIL::Seq (d);
+ else if (!strcmp (ctag, "excl"))
+ return new SMIL::Excl (d);
+ return 0L;
+}
+
+static Element * fromParamGroup (NodePtr & d, const QString & tag) {
+ const char * ctag = tag.ascii ();
+ if (!strcmp (ctag, "param"))
+ return new SMIL::Param (d);
+ else if (!strcmp (ctag, "area") || !strcmp (ctag, "anchor"))
+ return new SMIL::Area (d, tag);
+ return 0L;
+}
+
+static Element * fromAnimateGroup (NodePtr & d, const QString & tag) {
+ const char * ctag = tag.ascii ();
+ if (!strcmp (ctag, "set"))
+ return new SMIL::Set (d);
+ else if (!strcmp (ctag, "animate"))
+ return new SMIL::Animate (d);
+ else if (!strcmp (ctag, "animateMotion"))
+ return new SMIL::AnimateMotion (d);
+ return 0L;
+}
+
+static Element * fromMediaContentGroup (NodePtr & d, const QString & tag) {
+ const char * taglatin = tag.latin1 ();
+ if (!strcmp (taglatin, "video") || !strcmp (taglatin, "audio"))
+ return new SMIL::AVMediaType (d, tag);
+ else if (!strcmp (taglatin, "img"))
+ return new SMIL::ImageMediaType (d);
+ else if (!strcmp (taglatin, "text"))
+ return new SMIL::TextMediaType (d);
+ else if (!strcmp (taglatin, "ref"))
+ return new SMIL::RefMediaType (d);
+ else if (!strcmp (taglatin, "brush"))
+ return new SMIL::Brush (d);
+ else if (!strcmp (taglatin, "a"))
+ return new SMIL::Anchor (d);
+ // animation, textstream
+ return 0L;
+}
+
+static Element * fromContentControlGroup (NodePtr & d, const QString & tag) {
+ if (!strcmp (tag.latin1 (), "switch"))
+ return new SMIL::Switch (d);
+ return 0L;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT NodePtr SMIL::Smil::childFromTag (const QString & tag) {
+ const char * ctag = tag.ascii ();
+ if (!strcmp (ctag, "body"))
+ return new SMIL::Body (m_doc);
+ else if (!strcmp (ctag, "head"))
+ return new SMIL::Head (m_doc);
+ return NodePtr ();
+}
+
+KDE_NO_EXPORT void SMIL::Smil::activate () {
+ //kdDebug () << "Smil::activate" << endl;
+ current_av_media_type = NodePtr ();
+ resolved = true;
+ SMIL::Layout * layout = convertNode <SMIL::Layout> (layout_node);
+ if (layout && layout->region_surface) {
+ kdError() << "Layout already has a surface" << endl;
+ }
+ if (layout)
+ Element::activate ();
+ else
+ Element::deactivate(); // some unfortunate reset in parent doc
+}
+
+KDE_NO_EXPORT void SMIL::Smil::deactivate () {
+ if (layout_node)
+ convertNode <SMIL::Layout> (layout_node)->repaint ();
+ if (layout_node)
+ convertNode <SMIL::Layout> (layout_node)->region_surface = NULL;
+ Mrl::getSurface(0L);
+ Mrl::deactivate ();
+}
+
+KDE_NO_EXPORT bool SMIL::Smil::handleEvent (EventPtr event) {
+ return layout_node ? layout_node->handleEvent (event) : false;
+}
+
+KDE_NO_EXPORT void SMIL::Smil::closed () {
+ NodePtr head;
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ if (e->id == id_node_head) {
+ head = e;
+ break;
+ }
+ if (!head) {
+ SMIL::Head * h = new SMIL::Head (m_doc);
+ insertBefore (h, firstChild ());
+ h->setAuxiliaryNode (true);
+ h->closed ();
+ head = h;
+ }
+ for (NodePtr e = head->firstChild (); e; e = e->nextSibling ()) {
+ if (e->id == id_node_layout) {
+ layout_node = e;
+ } else if (e->id == id_node_title) {
+ QString str = e->innerText ();
+ pretty_name = str.left (str.find (QChar ('\n')));
+ } else if (e->id == id_node_meta) {
+ Element * elm = convertNode <Element> (e);
+ const QString name = elm->getAttribute (StringPool::attr_name);
+ if (name == QString::fromLatin1 ("title"))
+ pretty_name = elm->getAttribute ("content");
+ else if (name == QString::fromLatin1 ("base"))
+ src = elm->getAttribute ("content");
+ }
+ }
+ if (!layout_node) {
+ kdError () << "no <root-layout>" << endl;
+ return;
+ }
+}
+
+KDE_NO_EXPORT void SMIL::Smil::childDone (NodePtr child) {
+ if (unfinished ()) {
+ if (child->nextSibling ())
+ child->nextSibling ()->activate ();
+ else {
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ if (e->active ())
+ e->deactivate ();
+ finish ();
+ }
+ }
+}
+
+KDE_NO_EXPORT Mrl * SMIL::Smil::linkNode () {
+ return current_av_media_type ? current_av_media_type->mrl () : this;
+}
+
+KDE_NO_EXPORT bool SMIL::Smil::expose () const {
+ return !pretty_name.isEmpty () || //return false if no title and only one
+ previousSibling () || nextSibling ();
+}
+
+KDE_NO_EXPORT void SMIL::Smil::accept (Visitor * v) {
+ if (active () && layout_node)
+ layout_node->accept( v );
+}
+
+void SMIL::Smil::jump (const QString & id) {
+ NodePtr n = document ()->getElementById (this, id, false);
+ if (n) {
+ if (n->unfinished ())
+ kdDebug() << "Smil::jump node is unfinished " << id << endl;
+ else {
+ for (NodePtr p = n; p; p = p->parentNode ()) {
+ if (p->unfinished () &&
+ p->id >= id_node_first_group &&
+ p->id <= id_node_last_group) {
+ convertNode <GroupBase> (p)->setJumpNode (n);
+ break;
+ }
+ if (n->id == id_node_body || n->id == id_node_smil) {
+ kdError() << "Smil::jump node passed body for " <<id<< endl;
+ break;
+ }
+ }
+ }
+ }
+}
+
+SMIL::Smil * SMIL::Smil::findSmilNode (Node * node) {
+ for (Node * e = node; e; e = e->parentNode ().ptr ())
+ if (e->id == SMIL::id_node_smil)
+ return static_cast <SMIL::Smil *> (e);
+ return 0L;
+}
+
+//-----------------------------------------------------------------------------
+
+static void headChildDone (NodePtr node, NodePtr child) {
+ if (node->unfinished ()) {
+ if (child->nextSibling ())
+ child->nextSibling ()->activate ();
+ else
+ node->finish (); // we're done
+ }
+}
+
+KDE_NO_EXPORT NodePtr SMIL::Head::childFromTag (const QString & tag) {
+ const char * ctag = tag.ascii ();
+ if (!strcmp (ctag, "layout"))
+ return new SMIL::Layout (m_doc);
+ else if (!strcmp (ctag, "title"))
+ return new DarkNode (m_doc, tag, id_node_title);
+ else if (!strcmp (ctag, "meta"))
+ return new DarkNode (m_doc, tag, id_node_meta);
+ else if (!strcmp (ctag, "transition"))
+ return new SMIL::Transition (m_doc);
+ return NodePtr ();
+}
+
+KDE_NO_EXPORT bool SMIL::Head::expose () const {
+ return false;
+}
+
+KDE_NO_EXPORT void SMIL::Head::closed () {
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ if (e->id == id_node_layout)
+ return;
+ SMIL::Layout * layout = new SMIL::Layout (m_doc);
+ appendChild (layout);
+ layout->setAuxiliaryNode (true);
+ layout->closed (); // add root-layout and a region
+}
+
+KDE_NO_EXPORT void SMIL::Head::childDone (NodePtr child) {
+ headChildDone (this, child);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT SMIL::Layout::Layout (NodePtr & d)
+ : RegionBase (d, id_node_layout) {}
+
+KDE_NO_EXPORT NodePtr SMIL::Layout::childFromTag (const QString & tag) {
+ const char * ctag = tag.ascii ();
+ if (!strcmp (ctag, "root-layout")) {
+ NodePtr e = new SMIL::RootLayout (m_doc);
+ rootLayout = e;
+ return e;
+ } else if (!strcmp (ctag, "region"))
+ return new SMIL::Region (m_doc);
+ else if (!strcmp (ctag, "regPoint"))
+ return new SMIL::RegPoint (m_doc);
+ return NodePtr ();
+}
+
+KDE_NO_EXPORT void SMIL::Layout::closed () {
+ SMIL::RegionBase * rl = convertNode <SMIL::RootLayout> (rootLayout);
+ bool has_root (rl);
+ if (!has_root) { // just add one if none there
+ rl = new SMIL::RootLayout (m_doc);
+ NodePtr sr = rl; // protect against destruction
+ rl->setAuxiliaryNode (true);
+ rootLayout = rl;
+ int w_root =0, h_root = 0, reg_count = 0;
+ for (NodePtr n = firstChild (); n; n = n->nextSibling ()) {
+ if (n->id == id_node_region) {
+ SMIL::Region * rb =convertNode <SMIL::Region> (n);
+ rb->init ();
+ rb->calculateBounds (0, 0);
+ if (int (rb->x + rb->w) > w_root)
+ w_root = rb->x + rb->w;
+ if (int (rb->y + rb->h) > h_root)
+ h_root = rb->y + rb->h;
+ reg_count++;
+ }
+ }
+ if (!reg_count) {
+ w_root = 320; h_root = 240; // have something to start with
+ SMIL::Region * r = new SMIL::Region (m_doc);
+ appendChild (r);
+ r->setAuxiliaryNode (true);
+ }
+ rl->setAttribute(StringPool::attr_width, QString::number(w_root));
+ rl->setAttribute(StringPool::attr_height,QString::number(h_root));
+ insertBefore (sr, firstChild ());
+ } else {
+ if (childNodes ()->length () < 2) { // only a root-layout
+ SMIL::Region * r = new SMIL::Region (m_doc);
+ appendChild (r);
+ r->setAuxiliaryNode (true);
+ }
+ Smil *s = Smil::findSmilNode (this);
+ if (s) {
+ s->width = rl->getAttribute(StringPool::attr_width).toDouble ();
+ s->height = rl->getAttribute(StringPool::attr_height).toDouble();
+ }
+ }
+}
+
+KDE_NO_EXPORT void SMIL::Layout::activate () {
+ //kdDebug () << "SMIL::Layout::activate" << endl;
+ RegionBase::activate ();
+ if (surface ()) {
+ updateDimensions ();
+ repaint ();
+ }
+ finish (); // proceed and allow 'head' to finish
+}
+
+KDE_NO_EXPORT void SMIL::Layout::updateDimensions () {
+ RegionBase * rb = static_cast <RegionBase *> (rootLayout.ptr ());
+ x = y = 0;
+ w = rb->sizes.width.size ();
+ h = rb->sizes.height.size ();
+ //kdDebug () << "Layout::updateDimensions " << w << "," << h <<endl;
+ SMIL::RegionBase::updateDimensions ();
+}
+
+KDE_NO_EXPORT Surface *SMIL::Layout::surface () {
+ if (!region_surface) {
+ SMIL::Smil * s = Smil::findSmilNode (this);
+ if (s) {
+ SMIL::RegionBase *rl = convertNode <SMIL::RootLayout> (rootLayout);
+ region_surface = s->getSurface (s);
+ w = s->width;
+ h = s->height;
+ if (region_surface) {
+ SRect rect = region_surface->bounds;
+ if (rl && auxiliaryNode ()) {
+ w = rect.width ();
+ h = rect.height ();
+ rl->setAttribute (StringPool::attr_width, QString::number ((int)w));
+ rl->setAttribute (StringPool::attr_height, QString::number ((int)h));
+ rl->setParam (StringPool::attr_width, QString::number((int)w));
+ rl->setParam (StringPool::attr_height,QString::number((int)h));
+ } else if (region_surface && w > 0 && h > 0) {
+ updateDimensions ();
+ }
+ //kdDebug() << "Layout::surface bounds " << rect.width () << "x" << rect.height () << " w:" << w << " h:" << h << " xs:" << region_surface->xscale << " ys:" << region_surface->yscale << endl;
+ }
+ }
+ }
+ return region_surface.ptr ();
+}
+
+KDE_NO_EXPORT void SMIL::Layout::accept (Visitor * v) {
+ v->visit (this);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT SMIL::RegionBase::RegionBase (NodePtr & d, short id)
+ : Element (d, id), x (0), y (0), w (0), h (0),
+ z_order (1), background_color (0)
+ {}
+
+KDE_NO_CDTOR_EXPORT SMIL::RegionBase::~RegionBase () {
+ if (region_surface)
+ region_surface->remove ();
+}
+
+KDE_NO_EXPORT void SMIL::RegionBase::activate () {
+ show_background = ShowAlways;
+ init ();
+ setState (state_activated);
+ for (NodePtr r = firstChild (); r; r = r->nextSibling ())
+ if (r->id == id_node_region || r->id == id_node_root_layout)
+ r->activate ();
+}
+
+KDE_NO_EXPORT void SMIL::RegionBase::childDone (NodePtr child) {
+ headChildDone (this, child);
+}
+
+KDE_NO_EXPORT void SMIL::RegionBase::deactivate () {
+ background_color = 0;
+ background_image.truncate (0);
+ if (region_surface)
+ region_surface->background_color = 0;
+ cached_img.setUrl (QString ());
+ postpone_lock = NULL;
+ killWGet ();
+ sizes.resetSizes ();
+ Element::deactivate ();
+}
+
+KDE_NO_EXPORT void SMIL::RegionBase::remoteReady (QByteArray & data) {
+ QImage *pix = new QImage (data);
+ if (!pix->isNull ()) {
+ cached_img.data->image = pix;
+ if (region_surface)
+ region_surface->remove (); // FIXME: only surface
+ } else {
+ delete pix;
+ }
+ postpone_lock = 0L;
+}
+
+KDE_NO_EXPORT void SMIL::RegionBase::repaint () {
+ if (surface ())
+ region_surface->repaint (SRect (0, 0, w, h));
+}
+
+KDE_NO_EXPORT void SMIL::RegionBase::repaint (const SRect & rect) {
+ if (surface ())
+ region_surface->repaint (SRect (0, 0, w, h).intersect (rect));
+}
+
+KDE_NO_EXPORT void SMIL::RegionBase::updateDimensions () {
+ if (surface () && active ())
+ for (NodePtr r = firstChild (); r; r = r->nextSibling ())
+ if (r->id == id_node_region) {
+ SMIL::Region * cr = static_cast <SMIL::Region *> (r.ptr ());
+ cr->calculateBounds (w, h);
+ cr->updateDimensions ();
+ }
+}
+
+KDE_NO_EXPORT void SMIL::RegionBase::boundsUpdate () {
+ // if there is a region_surface and it's moved, do a limit repaint
+ NodePtr p = parentNode ();
+ if (p && (p->id==SMIL::id_node_region || p->id==SMIL::id_node_layout) &&
+ region_surface) {
+ RegionBase *pr = convertNode <SMIL::RegionBase> (p);
+ SRect old_bounds = region_surface->bounds;
+ w = 0; h = 0;
+ sizes.calcSizes (this, pr->w, pr->h, x, y, w, h);
+ region_surface->bounds = SRect (x, y, w, h);
+ pr->repaint (region_surface->bounds.unite (old_bounds));
+ }
+}
+
+KDE_NO_EXPORT Surface *SMIL::RegionBase::surface () {
+ if (!region_surface) {
+ Node *n = parentNode ().ptr ();
+ if (n &&
+ (SMIL::id_node_region == n->id ||
+ SMIL::id_node_layout == n->id)) {
+ Surface *ps = static_cast <SMIL::Region *> (n)->surface ();
+ if (ps) {
+ region_surface = ps->createSurface (this, SRect (x, y, w, h));
+ region_surface->background_color = background_color;
+ }
+ }
+ }
+ return region_surface.ptr ();
+}
+
+KDE_NO_EXPORT
+void SMIL::RegionBase::parseParam (const TrieString & name, const QString & val) {
+ //kdDebug () << "RegionBase::parseParam " << getAttribute ("id") << " " << name << "=" << val << " active:" << active() << endl;
+ bool need_repaint = false;
+ SRect rect = SRect (x, y, w, h);
+ bool dim_changed;
+ if (name == "background-color" || name == "backgroundColor") {
+ if (val.isEmpty ())
+ background_color = 0;
+ else
+ background_color = 0xff000000 | QColor (val).rgb ();
+ if (region_surface || (active () && surface ()))
+ region_surface->background_color = background_color;
+ need_repaint = true;
+ } else if (name == "z-index") {
+ z_order = val.toInt ();
+ need_repaint = true;
+ } else if (sizes.setSizeParam (name, val, dim_changed)) {
+ if (active ()) {
+ if (region_surface) {
+ if (dim_changed) {
+ region_surface->remove ();
+ } else {
+ boundsUpdate ();
+ return; // smart update of old bounds to new moved one
+ }
+ }
+ NodePtr p = parentNode ();
+ if (p &&(p->id==SMIL::id_node_region ||p->id==SMIL::id_node_layout))
+ convertNode <SMIL::RegionBase> (p)->updateDimensions ();
+ rect = rect.unite (SRect (x, y, w, h));
+ need_repaint = true;
+ }
+ } else if (name == "showBackground") {
+ if (val == "whenActive")
+ show_background = ShowWhenActive;
+ else
+ show_background = ShowAlways;
+ need_repaint = true;
+ } else if (name == "backgroundImage") {
+ background_image = val;
+ Smil * s = SMIL::Smil::findSmilNode (this);
+ if (s) {
+ killWGet ();
+ need_repaint = !cached_img.isEmpty ();
+ Mrl *mrl = s->parentNode () ? s->parentNode ()->mrl () : NULL;
+ QString url = mrl ? KURL (mrl->absolutePath (), val).url () : val;
+ cached_img.setUrl (url);
+ if (cached_img.isEmpty ()) {
+ postpone_lock = document ()->postpone ();
+ wget (url);
+ } else {
+ need_repaint = true;
+ }
+ }
+ }
+ if (need_repaint && active () && surface() && region_surface->parentNode ())
+ region_surface->parentNode ()->repaint (rect);
+ Element::parseParam (name, val);
+}
+
+KDE_NO_CDTOR_EXPORT SMIL::Region::Region (NodePtr & d)
+ : RegionBase (d, id_node_region),
+ has_mouse (false),
+ m_AttachedMediaTypes (new NodeRefList) {}
+
+KDE_NO_EXPORT NodePtr SMIL::Region::childFromTag (const QString & tag) {
+ if (!strcmp (tag.latin1 (), "region"))
+ return new SMIL::Region (m_doc);
+ return NodePtr ();
+}
+
+/**
+ * calculates dimensions of this regions with _w and _h as width and height
+ * of parent Region (representing 100%)
+ */
+KDE_NO_EXPORT
+void SMIL::Region::calculateBounds (Single pw, Single ph) {
+ Single x1 (x), y1 (y), w1 (w), h1 (h);
+ sizes.calcSizes (this, pw, ph, x, y, w, h);
+ if (surface ())
+ region_surface->bounds = SRect (x, y, w, h);
+ //kdDebug () << "Region::calculateBounds parent:" << pw << "x" << ph << " this:" << x << "," << y << " " << w << "x" << h << endl;
+}
+
+NodeRefListPtr SMIL::Region::listeners (unsigned int eid) {
+ NodeRefListPtr l = mouse_listeners.listeners (eid);
+ if (l)
+ return l;
+ switch (eid) {
+ case mediatype_attached:
+ return m_AttachedMediaTypes;
+ }
+ return RegionBase::listeners (eid);
+}
+
+KDE_NO_EXPORT void SMIL::Region::accept (Visitor * v) {
+ v->visit (this);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT
+void SMIL::RegPoint::parseParam (const TrieString & p, const QString & v) {
+ bool b;
+ sizes.setSizeParam (p, v, b); // TODO: if dynamic, make sure to repaint
+ Element::parseParam (p, v);
+}
+
+//-----------------------------------------------------------------------------
+
+static struct TransTypeInfo {
+ const char *name;
+ SMIL::Transition::TransType type;
+ short sub_types;
+ SMIL::Transition::TransSubType sub_type[8];
+} transition_type_info[] = {
+#include "transitions.txt"
+};
+
+static struct SubTransTypeInfo {
+ const char *name;
+ SMIL::Transition::TransSubType sub_type;
+} sub_transition_type_info[] = {
+#include "subtrans.txt"
+};
+
+static TransTypeInfo *transInfoFromString (const char *t) {
+ // TODO binary search
+ for (int i = 0; transition_type_info[i].name; ++i)
+ if (!strcmp (t, transition_type_info[i].name))
+ return transition_type_info + i;
+ return NULL;
+}
+
+static
+SMIL::Transition::TransSubType subTransInfoFromString (const char *s) {
+ for (int i = 0; sub_transition_type_info[i].name; ++i)
+ if (!strcmp (s, sub_transition_type_info[i].name))
+ return sub_transition_type_info[i].sub_type;
+ return SMIL::Transition::SubTransTypeNone;
+}
+
+KDE_NO_CDTOR_EXPORT SMIL::Transition::Transition (NodePtr & d)
+ : Element (d, id_node_transition),
+ type_info (NULL), direction (dir_forward), dur (10), fade_color (0) {}
+
+KDE_NO_EXPORT void SMIL::Transition::activate () {
+ type = TransTypeNone;
+ sub_type = SubTransTypeNone;
+ start_progress = 0.0;
+ end_progress = 1.0;
+ type_info = NULL;
+ init ();
+ Element::activate ();
+}
+
+KDE_NO_EXPORT
+void SMIL::Transition::parseParam (const TrieString & para, const QString & val) {
+ if (para == StringPool::attr_type) {
+ type_info = transInfoFromString (val.ascii ());
+ if (type_info) {
+ type = type_info->type;
+ if (SubTransTypeNone != sub_type) {
+ for (int i = 0; i < type_info->sub_types; ++i)
+ if (type_info->sub_type[i] == sub_type)
+ return;
+ }
+ if (type_info->sub_types > 0)
+ sub_type = type_info->sub_type[0];
+ }
+ } else if (para == StringPool::attr_dur) {
+ parseTime (val, dur);
+ } else if (para == "subtype") {
+ sub_type = subTransInfoFromString (val.ascii ());
+ if (type_info) {
+ if (SubTransTypeNone != sub_type) {
+ for (int i = 0; i < type_info->sub_types; ++i)
+ if (type_info->sub_type[i] == sub_type)
+ return;
+ }
+ if (type_info->sub_types > 0)
+ sub_type = type_info->sub_type[0];
+ }
+ } else if (para == "fadeColor") {
+ fade_color = QColor (getAttribute (val)).rgb ();
+ } else if (para == "direction") {
+ direction = val == "reverse" ? dir_reverse : dir_forward;
+ } else if (para == "startProgress") {
+ start_progress = val.toDouble();
+ if (start_progress < 0.0)
+ start_progress = 0.0;
+ else if (start_progress > 1.0)
+ start_progress = 1.0;
+ } else if (para == "endProgress") {
+ end_progress = val.toDouble();
+ if (end_progress < start_progress)
+ end_progress = start_progress;
+ else if (end_progress > 1.0)
+ end_progress = 1.0;
+ } else {
+ Element::parseParam (para, val);
+ }
+}
+
+KDE_NO_EXPORT bool SMIL::Transition::supported () {
+ switch (type) {
+ case Fade:
+ case BarWipe:
+ case BowTieWipe:
+ case PushWipe:
+ case IrisWipe:
+ case ClockWipe:
+ case EllipseWipe:
+ return true;
+ default:
+ return false;
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT SMIL::TimedMrl::TimedMrl (NodePtr & d, short id)
+ : Mrl (d, id),
+ fill_active (fill_auto),
+ m_StartListeners (new NodeRefList),
+ m_StartedListeners (new NodeRefList),
+ m_StoppedListeners (new NodeRefList),
+ m_runtime (0L) {}
+
+KDE_NO_CDTOR_EXPORT SMIL::TimedMrl::~TimedMrl () {
+ delete m_runtime;
+}
+
+KDE_NO_EXPORT void SMIL::TimedMrl::closed () {
+ pretty_name = getAttribute (StringPool::attr_title);
+ Mrl::closed ();
+}
+
+KDE_NO_EXPORT void SMIL::TimedMrl::init () {
+ runtime ()->reset ();
+ begin_time = finish_time = 0;
+ fill = fill_default;
+ fill_def = fill_inherit;
+ fill_active = getDefaultFill (this);
+ Mrl::init ();
+}
+
+KDE_NO_EXPORT void SMIL::TimedMrl::activate () {
+ //kdDebug () << "SMIL::TimedMrl(" << nodeName() << ")::activate" << endl;
+ Runtime * rt = runtime ();
+ init ();
+ setState (state_activated);
+ if (rt == m_runtime) // Runtime might already be dead
+ rt->begin ();
+ else
+ deactivate ();
+}
+
+KDE_NO_EXPORT void SMIL::TimedMrl::begin () {
+ begin_time = document ()->last_event_time;
+ Element::begin ();
+ runtime ()->propagateStop (false); //see whether this node has a livetime or not
+}
+
+KDE_NO_EXPORT void SMIL::TimedMrl::deactivate () {
+ //kdDebug () << "SMIL::TimedMrl(" << nodeName() << ")::deactivate" << endl;
+ if (unfinished ())
+ finish ();
+ if (m_runtime) {
+ m_runtime->reset ();
+ delete m_runtime;
+ m_runtime = 0L;
+ }
+ Mrl::deactivate ();
+}
+
+KDE_NO_EXPORT void SMIL::TimedMrl::finish () {
+ if (m_runtime &&
+ (m_runtime->state () == Runtime::timings_started ||
+ m_runtime->state () == Runtime::timings_began)) {
+ runtime ()->propagateStop (true); // reschedule through Runtime::stopped
+ } else {
+ finish_time = document ()->last_event_time;
+ Mrl::finish ();
+ propagateEvent (new Event (event_stopped));
+ }
+}
+
+KDE_NO_EXPORT void SMIL::TimedMrl::reset () {
+ //kdDebug () << "SMIL::TimedMrl::reset " << endl;
+ Mrl::reset ();
+ delete m_runtime;
+ m_runtime = 0L;
+}
+
+KDE_NO_EXPORT void SMIL::TimedMrl::childBegan (NodePtr) {
+ if (state != state_began)
+ begin ();
+}
+
+/*
+ * Re-implement, but keeping sequential behaviour.
+ * Bail out if Runtime is running. In case of dur_media, give Runtime
+ * a hand with calling propagateStop(true)
+ */
+KDE_NO_EXPORT void SMIL::TimedMrl::childDone (NodePtr c) {
+ if (!active ())
+ return; // forced reset
+ if (c->nextSibling ())
+ c->nextSibling ()->activate ();
+ else { // check if Runtime still running
+ Runtime * tr = runtime ();
+ if (tr->state () < Runtime::timings_stopped) {
+ if (tr->state () == Runtime::timings_started)
+ tr->propagateStop (false);
+ return; // still running, wait for runtime to finish
+ }
+ finish ();
+ }
+}
+
+KDE_NO_EXPORT NodeRefListPtr SMIL::TimedMrl::listeners (unsigned int id) {
+ if (id == event_stopped)
+ return m_StoppedListeners;
+ else if (id == event_started)
+ return m_StartedListeners;
+ else if (id == event_to_be_started)
+ return m_StartListeners;
+ kdWarning () << "unknown event requested" << endl;
+ return NodeRefListPtr ();
+}
+
+KDE_NO_EXPORT bool SMIL::TimedMrl::handleEvent (EventPtr event) {
+ int id = event->id ();
+ switch (id) {
+ case event_timer: {
+ TimerEvent * te = static_cast <TimerEvent *> (event.ptr ());
+ if (te && te->timer_info) {
+ if (te->timer_info->event_id == started_timer_id)
+ runtime ()->started ();
+ else if (te->timer_info->event_id == stopped_timer_id)
+ runtime ()->stopped ();
+ else if (te->timer_info->event_id == start_timer_id)
+ runtime ()->propagateStart ();
+ else if (te->timer_info->event_id == dur_timer_id)
+ runtime ()->propagateStop (true);
+ else
+ kdWarning () << "unhandled timer event" << endl;
+ }
+ break;
+ }
+ default:
+ if (m_runtime)
+ m_runtime->processEvent (id);
+ }
+ return true;
+}
+
+KDE_NO_EXPORT Runtime * SMIL::TimedMrl::getNewRuntime () {
+ return new Runtime (this);
+}
+
+KDE_NO_EXPORT
+void SMIL::TimedMrl::parseParam (const TrieString &para, const QString &value) {
+ if (para.startsWith (StringPool::attr_fill)) {
+ Fill * f = &fill;
+ if (para != StringPool::attr_fill) {
+ f = &fill_def;
+ *f = fill_inherit;
+ } else
+ *f = fill_default;
+ fill_active = fill_auto;
+ if (value == "freeze")
+ *f = fill_freeze;
+ else if (value == "hold")
+ *f = fill_hold;
+ else if (value == "auto")
+ *f = fill_auto;
+ else if (value == "remove")
+ *f = fill_remove;
+ else if (value == "transition")
+ *f = fill_transition;
+ if (fill == fill_default) {
+ if (fill_def == fill_inherit)
+ fill_active = getDefaultFill (this);
+ else
+ fill_active = fill_def;
+ } else
+ fill_active = fill;
+ } else if (!runtime ()->parseParam (para, value)) {
+ if (para == StringPool::attr_src) //block Mrl src parsing for now
+ kdDebug() << "parseParam src on " << nodeName() << endl;
+ else
+ Mrl::parseParam (para, value);
+ }
+}
+
+KDE_NO_EXPORT
+Runtime::DurationItem * SMIL::TimedMrl::getDuration (NodePtr n) {
+ if (!isTimedMrl (n) || !n->active ())
+ return 0L;
+ TimedMrl * tm = convertNode <SMIL::TimedMrl> (n);
+ return &tm->runtime ()->durations [Runtime::duration_time];
+}
+
+KDE_NO_EXPORT bool SMIL::TimedMrl::keepContent (Node *n) {
+ if (isTimedMrl (n)) {
+ TimedMrl * tm = convertNode <SMIL::TimedMrl> (n);
+ if (tm->runtime ()->timingstate == Runtime::timings_started)
+ return true;
+ Node *p = n->parentNode ();
+ Node *np = tm;
+ while (p && id_node_body != p->id && !isTimedMrl (p)) {
+ np = p;
+ p = p->parentNode ().ptr (); // skip anchors
+ }
+ if (tm->m_runtime && p && p->active ()) {
+ if (tm->runtime ()->timingstate == Runtime::timings_stopped)
+ switch (tm->fill_active) {
+ case fill_hold: // keep while parent active
+ return true;
+ case fill_freeze: // keep in parent duration
+ if (p->unfinished() &&
+ (p->id == SMIL::id_node_par ||
+ p->id == SMIL::id_node_excl ||
+ p->id == SMIL::id_node_switch ||
+ p->lastChild().ptr () == np))
+ return true;
+ // else fall through
+ case fill_default: // as freeze when no duration is set
+ case fill_auto: // or when parent finished w/o duration
+ return keepContent (p) &&
+ (p->id == SMIL::id_node_par ||
+ p->id == SMIL::id_node_excl ||
+ p->id == SMIL::id_node_switch ||
+ p->lastChild().ptr () == np) &&
+ tm->runtime ()->durTime ().durval == Runtime::dur_timer &&
+ !tm->runtime ()->durTime ().offset;
+ default:
+ break;
+ }
+ }
+ return false;
+ }
+ return true;
+}
+
+KDE_NO_EXPORT SMIL::TimedMrl::Fill SMIL::TimedMrl::getDefaultFill (NodePtr n) {
+ for (NodePtr p = n->parentNode (); p; p = p->parentNode ())
+ if (isTimedMrl (p)) {
+ SMIL::TimedMrl * tm = convertNode<SMIL::TimedMrl>(p);
+ if (tm->fill_def != fill_inherit)
+ return tm->fill_def;
+ else if (tm->fill == fill_default)
+ return tm->fill_active; // assume parent figured out this
+ } else if (p->id == SMIL::id_node_smil)
+ break;
+ return fill_auto;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT NodePtr SMIL::GroupBase::childFromTag (const QString & tag) {
+ Element * elm = fromScheduleGroup (m_doc, tag);
+ if (!elm) elm = fromMediaContentGroup (m_doc, tag);
+ if (!elm) elm = fromContentControlGroup (m_doc, tag);
+ if (!elm) elm = fromAnimateGroup (m_doc, tag);
+ if (elm)
+ return elm;
+ return NULL;
+}
+
+KDE_NO_EXPORT void SMIL::GroupBase::finish () {
+ setState (state_finished); // avoid recurstion through childDone
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ if (keepContent (e)) {
+ if (e->unfinished ())
+ e->finish ();
+ } else if (e->active ())
+ e->deactivate ();
+ TimedMrl::finish ();
+}
+
+KDE_NO_EXPORT void SMIL::GroupBase::deactivate () {
+ setState (state_deactivated); // avoid recurstion through childDone
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ if (e->active ())
+ e->deactivate ();
+ TimedMrl::deactivate ();
+}
+
+KDE_NO_EXPORT void SMIL::GroupBase::setJumpNode (NodePtr n) {
+ NodePtr child = n;
+ if (state > state_init) {
+ for (NodePtr c = firstChild (); c; c = c->nextSibling ())
+ if (c->active ())
+ c->reset ();
+ for (NodePtr c = n->parentNode (); c; c = c->parentNode ()) {
+ if (c.ptr () == this || c->id == id_node_body)
+ break;
+ if (c->id >= id_node_first_group && c->id <= id_node_last_group)
+ convertNode <GroupBase> (c)->jump_node = child;
+ child = c;
+ }
+ }
+ jump_node = child;
+ state = state_activated;
+ init ();
+ runtime()->beginAndStart (); // undefer through begin()
+}
+
+//-----------------------------------------------------------------------------
+
+// SMIL::Body was here
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT void SMIL::Par::begin () {
+ jump_node = 0L; // TODO: adjust timings
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ e->activate ();
+ GroupBase::begin ();
+}
+
+KDE_NO_EXPORT void SMIL::Par::reset () {
+ GroupBase::reset ();
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ e->reset ();
+}
+
+KDE_NO_EXPORT void SMIL::Par::childDone (NodePtr) {
+ if (unfinished ()) {
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ()) {
+ if (e->unfinished ())
+ return; // not all finished
+ }
+ Runtime * tr = runtime ();
+ if (tr->state () == Runtime::timings_started) {
+ Runtime::Duration dv = tr->durTime ().durval;
+ if ((dv == Runtime::dur_timer && !tr->durTime ().offset)
+ || dv == Runtime::dur_media)
+ tr->propagateStop (false);
+ return; // still running, wait for runtime to finish
+ }
+ finish (); // we're done
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT void SMIL::Seq::begin () {
+ if (jump_node) {
+ for (NodePtr c = firstChild (); c; c = c->nextSibling ())
+ if (c == jump_node) {
+ jump_node = 0L;
+ c->activate ();
+ break;
+ } else {
+ c->state = state_activated; // TODO: ..
+ if (c->isElementNode ())
+ convertNode <Element> (c)->init ();
+ c->state = state_finished; // TODO: ..
+ }
+ } else if (firstChild ())
+ firstChild ()->activate ();
+ GroupBase::begin ();
+}
+
+KDE_NO_EXPORT void SMIL::Seq::childDone (NodePtr child) {
+ if (unfinished ()) {
+ if (state != state_deferred) {
+ if (!keepContent (child) && child->active ())
+ child->deactivate ();
+ if (child->nextSibling ())
+ child->nextSibling ()->activate ();
+ else
+ finish ();
+ } else if (jump_node)
+ finish ();
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT void SMIL::Excl::begin () {
+ //kdDebug () << "SMIL::Excl::begin" << endl;
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ e->activate ();
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ if (isTimedMrl (e)) {
+ SMIL::TimedMrl * tm = static_cast <SMIL::TimedMrl *> (e.ptr ());
+ if (tm) { // make aboutToStart connection with TimedMrl children
+ ConnectionPtr c = tm->connectTo (this, event_to_be_started);
+ started_event_list.append (new ConnectionStoreItem (c));
+ }
+ }
+ GroupBase::begin ();
+}
+
+KDE_NO_EXPORT void SMIL::Excl::deactivate () {
+ started_event_list.clear (); // auto disconnect on destruction of data items
+ GroupBase::deactivate ();
+}
+
+KDE_NO_EXPORT void SMIL::Excl::childDone (NodePtr /*child*/) {
+ // first check if somenode has taken over
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ if (isTimedMrl (e)) {
+ Runtime *tr = convertNode <SMIL::TimedMrl> (e)->runtime();
+ if (tr->state () == Runtime::timings_started)
+ return;
+ }
+ // now finish unless 'dur="indefinite/some event/.."'
+ Runtime * tr = runtime ();
+ if (tr->state () == Runtime::timings_started)
+ tr->propagateStop (false); // still running, wait for runtime to finish
+ else
+ finish (); // we're done
+}
+
+KDE_NO_EXPORT bool SMIL::Excl::handleEvent (EventPtr event) {
+ if (event->id () == event_to_be_started) {
+ ToBeStartedEvent * se = static_cast <ToBeStartedEvent *> (event.ptr ());
+ //kdDebug () << "Excl::handleEvent " << se->node->nodeName()<<endl;
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ()) {
+ if (e == se->node) // stop all _other_ child elements
+ continue;
+ if (!isTimedMrl (e))
+ continue; // definitely a stowaway
+ convertNode<SMIL::TimedMrl>(e)->runtime()->propagateStop(true);
+ }
+ return true;
+ } else
+ return TimedMrl::handleEvent (event);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT void SMIL::Switch::begin () {
+ //kdDebug () << "SMIL::Switch::activate" << endl;
+ PlayListNotify * n = document()->notify_listener;
+ int pref = 0, max = 0x7fffffff, currate = 0;
+ if (n)
+ n->bitRates (pref, max);
+ if (firstChild ()) {
+ NodePtr fallback;
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ if (e->isElementNode ()) {
+ Element *elm = convertNode <Element> (e);
+ QString lang = elm->getAttribute ("systemLanguage");
+ if (!lang.isEmpty ()) {
+ lang = lang.replace (QChar ('-'), QChar ('_'));
+ char *clang = getenv ("LANG");
+ if (!clang) {
+ if (!fallback)
+ fallback = e;
+ } else if (QString (clang).lower ().startsWith (lang)) {
+ chosenOne = e;
+ } else if (!fallback) {
+ fallback = e->nextSibling ();
+ }
+ }
+ if (e->id == id_node_audio_video) {
+ SMIL::MediaType * mt = convertNode <SMIL::MediaType> (e);
+ if (!chosenOne) {
+ chosenOne = e;
+ currate = mt->bitrate;
+ } else if (int (mt->bitrate) <= max) {
+ int delta1 = pref > currate ? pref-currate : currate-pref;
+ int delta2 = pref > int (mt->bitrate) ? pref-mt->bitrate : mt->bitrate-pref;
+ if (delta2 < delta1) {
+ chosenOne = e;
+ currate = mt->bitrate;
+ }
+ }
+ } else if (!fallback && e->isPlayable ())
+ fallback = e;
+ }
+ if (!chosenOne)
+ chosenOne = (fallback ? fallback : firstChild ());
+ chosenOne->activate ();
+ }
+ GroupBase::begin ();
+}
+
+KDE_NO_EXPORT void SMIL::Switch::deactivate () {
+ Element::deactivate ();
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ if (e->active ()) {
+ e->deactivate ();
+ break; // deactivate only the one running
+ }
+}
+
+KDE_NO_EXPORT void SMIL::Switch::reset () {
+ Element::reset ();
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ()) {
+ if (e->state != state_init)
+ e->reset ();
+ }
+}
+
+KDE_NO_EXPORT void SMIL::Switch::childDone (NodePtr child) {
+ if (child->state == state_finished)
+ child->deactivate ();
+ //kdDebug () << "SMIL::Switch::childDone" << endl;
+ finish (); // only one child can run
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT SMIL::LinkingBase::LinkingBase (NodePtr & d, short id)
+ : Element(d, id), show (show_replace) {}
+
+KDE_NO_EXPORT void SMIL::LinkingBase::deactivate () {
+ mediatype_activated = 0L;
+ mediatype_attach = 0L;
+ Element::deactivate ();
+}
+
+KDE_NO_EXPORT
+void SMIL::LinkingBase::parseParam(const TrieString &para, const QString &val) {
+ if (para == StringPool::attr_href) {
+ href = val;
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT SMIL::Anchor::Anchor (NodePtr & d)
+ : LinkingBase (d, id_node_anchor) {}
+
+KDE_NO_EXPORT void SMIL::Anchor::activate () {
+ init ();
+ for (NodePtr c = firstChild(); c; c = c->nextSibling ())
+ if (c->id >=id_node_first_mediatype && c->id <=id_node_last_mediatype) {
+ mediatype_activated = c->connectTo (this, event_activated);
+ mediatype_attach = c->connectTo (this, mediatype_attached);
+ break;
+ }
+ Element::activate ();
+}
+
+KDE_NO_EXPORT void SMIL::Anchor::childDone (NodePtr child) {
+ if (unfinished ()) {
+ if (child->nextSibling ())
+ child->nextSibling ()->activate ();
+ else
+ finish ();
+ }
+}
+
+NodePtr SMIL::Anchor::childFromTag (const QString & tag) {
+ return fromMediaContentGroup (m_doc, tag);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT SMIL::Area::Area (NodePtr & d, const QString & t)
+ : LinkingBase (d, id_node_area), coords (0L), nr_coords (0), tag (t) {}
+
+KDE_NO_CDTOR_EXPORT SMIL::Area::~Area () {
+ delete [] coords;
+}
+
+KDE_NO_EXPORT void SMIL::Area::activate () {
+ init ();
+ if (parentNode () &&
+ parentNode ()->id >= id_node_first_mediatype &&
+ parentNode ()->id <= id_node_last_mediatype) {
+ mediatype_activated = parentNode ()->connectTo (this, event_activated);
+ mediatype_attach = parentNode ()->connectTo (this, mediatype_attached);
+ }
+ Element::activate ();
+}
+
+KDE_NO_EXPORT
+void SMIL::Area::parseParam (const TrieString & para, const QString & val) {
+ if (para == "coords") {
+ delete [] coords;
+ QStringList clist = QStringList::split (QString (","), val);
+ nr_coords = clist.count ();
+ coords = new SizeType [nr_coords];
+ for (int i = 0; i < nr_coords; ++i)
+ coords[i] = clist[i];
+ } else
+ LinkingBase::parseParam (para, val);
+}
+
+KDE_NO_EXPORT NodeRefListPtr SMIL::Area::listeners (unsigned int id) {
+ NodeRefListPtr l = mouse_listeners.listeners (id);
+ if (l)
+ return l;
+ return Element::listeners (id);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT SMIL::MediaType::MediaType (NodePtr &d, const QString &t, short id)
+ : TimedMrl (d, id), m_type (t), bitrate (0), trans_step (0), trans_steps (0),
+ sensitivity (sens_opaque), trans_out_active (false),
+ m_MediaAttached (new NodeRefList) {
+ view_mode = Mrl::WindowMode;
+}
+
+KDE_NO_EXPORT NodePtr SMIL::MediaType::childFromTag (const QString & tag) {
+ Element * elm = fromContentControlGroup (m_doc, tag);
+ if (!elm) elm = fromParamGroup (m_doc, tag);
+ if (!elm) elm = fromAnimateGroup (m_doc, tag);
+ if (elm)
+ return elm;
+ return 0L;
+}
+
+KDE_NO_EXPORT void SMIL::MediaType::closed () {
+ external_tree = findExternalTree (this);
+ Mrl *mrl = external_tree ? external_tree->mrl () : NULL;
+ if (mrl) {
+ width = mrl->width;
+ height = mrl->height;
+ }
+ TimedMrl::closed ();
+}
+
+KDE_NO_EXPORT
+void SMIL::MediaType::parseParam (const TrieString &para, const QString & val) {
+ bool update_surface = true;
+ if (para == "fit") {
+ const char * cval = val.ascii ();
+ if (!cval)
+ fit = fit_hidden;
+ else if (!strcmp (cval, "fill"))
+ fit = fit_fill;
+ else if (!strcmp (cval, "hidden"))
+ fit = fit_hidden;
+ else if (!strcmp (cval, "meet"))
+ fit = fit_meet;
+ else if (!strcmp (cval, "scroll"))
+ fit = fit_scroll;
+ else if (!strcmp (cval, "slice"))
+ fit = fit_slice;
+ else
+ fit = fit_hidden;
+ } else if (para == "rn:mediaOpacity") {
+ opacity = (int) SizeType (val).size (100);
+ } else if (para == "system-bitrate") {
+ bitrate = val.toInt ();
+ } else if (para == StringPool::attr_type) {
+ mimetype = val;
+ } else if (para == "transIn") {
+ trans_in = findTransition (this, val);
+ if (!trans_in)
+ kdWarning() << "Transition " << val << " not found in head" << endl;
+ } else if (para == "transOut") {
+ trans_out = findTransition (this, val);
+ if (!trans_out)
+ kdWarning() << "Transition " << val << " not found in head" << endl;
+ } else if (para == "sensitivity") {
+ if (val == "transparent")
+ sensitivity = sens_transparent;
+ //else if (val == "percentage") // TODO
+ // sensitivity = sens_percentage;
+ else
+ sensitivity = sens_opaque;
+ } else if (sizes.setSizeParam (para, val, update_surface)) {
+ if (!update_surface && fit_hidden == fit &&
+ sub_surface
+#ifdef HAVE_CAIRO
+ && sub_surface->surface
+#endif
+ ) {
+ boundsUpdate ();
+ return; // preserved surface by recalculationg sub_surface top-left
+ }
+ } else {
+ TimedMrl::parseParam (para, val);
+ }
+ if (sub_surface)
+ sub_surface->repaint ();
+ resetSurface ();
+ if (surface ())
+ sub_surface->repaint ();
+}
+
+KDE_NO_EXPORT void SMIL::MediaType::boundsUpdate () {
+ SMIL::RegionBase *rb = convertNode <SMIL::RegionBase> (region_node);
+ if (rb && sub_surface) {
+ SRect new_bounds = calculateBounds ();
+ SRect repaint_rect = sub_surface->bounds.unite (new_bounds);
+ sub_surface->bounds = new_bounds;
+ rb->repaint (repaint_rect);
+ }
+}
+
+KDE_NO_EXPORT void SMIL::MediaType::activate () {
+ trans_out_active = false;
+ fit = fit_hidden;
+ opacity = 100;
+ init (); // sets all attributes
+ setState (state_activated);
+ for (NodePtr c = firstChild (); c; c = c->nextSibling ())
+ if (c != external_tree) {
+ // activate param/set/animate.. children
+ c->activate ();
+ break; // childDone will handle next siblings
+ }
+ runtime ()->begin ();
+}
+
+KDE_NO_EXPORT void SMIL::MediaType::deactivate () {
+ region_paint = 0L;
+ region_mouse_enter = 0L;
+ region_mouse_leave = 0L;
+ region_mouse_click = 0L;
+ region_attach = 0L;
+ trans_step = trans_steps = 0;
+ if (region_node)
+ convertNode <SMIL::RegionBase> (region_node)->repaint ();
+ if (trans_timer)
+ document ()->cancelTimer (trans_timer);
+ if (trans_out_timer)
+ document ()->cancelTimer (trans_out_timer);
+ TimedMrl::deactivate (); // keep region for runtime rest
+ region_node = 0L;
+}
+
+KDE_NO_EXPORT void SMIL::MediaType::begin () {
+ SMIL::Smil * s = Smil::findSmilNode (parentNode ().ptr ());
+ SMIL::Region * r = s ?
+ findRegion (s->layout_node, param (StringPool::attr_region)) : 0L;
+ MediaTypeRuntime *tr = static_cast<MediaTypeRuntime*>(runtime ());
+ if (trans_timer) // eg transOut and we're repeating
+ document ()->cancelTimer (trans_timer);
+ if (r) {
+ region_node = r;
+ region_mouse_enter = r->connectTo (this, event_inbounds);
+ region_mouse_leave = r->connectTo (this, event_outbounds);
+ region_mouse_click = r->connectTo (this, event_activated);
+ region_attach = r->connectTo (this, mediatype_attached);
+ r->repaint ();
+ tr->clipStart ();
+ Transition * trans = convertNode <Transition> (trans_in);
+ if (trans && trans->supported ()) {
+ active_trans = trans_in;
+ trans_step = 1;
+ if (Transition::Fade == trans->type) {
+ trans_steps = trans->dur;
+ trans_timer = document()->setTimeout(this, 100, trans_timer_id);
+ } else {
+ trans_steps = 4 * trans->dur;
+ trans_timer = document()->setTimeout(this, 25, trans_timer_id);
+ }
+ }
+ if (Runtime::dur_timer == tr->durTime().durval &&
+ tr->durTime().offset > 0) {
+ // FIXME: also account for fill duration
+ trans = convertNode <Transition> (trans_out);
+ if (trans && trans->supported () &&
+ (int) trans->dur < tr->durTime().offset)
+ trans_out_timer = document()->setTimeout (
+ this,
+ (tr->durTime().offset - trans->dur) * 100,
+ trans_out_timer_id);
+ }
+ } else
+ kdWarning () << nodeName() << "::begin " << src << " region '" <<
+ param (StringPool::attr_region) << "' not found" << endl;
+ TimedMrl::begin ();
+}
+
+KDE_NO_EXPORT void SMIL::MediaType::finish () {
+ if (trans_timer && !keepContent (this)) {
+ document ()->cancelTimer (trans_timer);
+ ASSERT(!trans_timer);
+ }
+ if (region_node)
+ convertNode <SMIL::RegionBase> (region_node)->repaint ();
+ TimedMrl::finish ();
+ static_cast <MediaTypeRuntime *> (runtime ())->clipStop ();
+}
+
+/**
+ * Re-implement from TimedMrl, because we may have children like
+ * param/set/animatie that should all be activate, but also other smil or imfl
+ * documents, that should only be activated if the runtime has started
+ */
+KDE_NO_EXPORT void SMIL::MediaType::childDone (NodePtr child) {
+ bool child_doc = child->mrl () && child->mrl ()->opener.ptr () == this;
+ if (child_doc) {
+ child->deactivate (); // should only if fill not is freeze or hold
+ } else if (active ()) { // traverse param or area children
+ for (NodePtr c = child->nextSibling(); c; c = c->nextSibling ())
+ if (!c->mrl () || c->mrl ()->opener.ptr () != this ) {
+ c->activate ();
+ return;
+ }
+ Runtime * tr = runtime ();
+ if (tr->state () < Runtime::timings_stopped) {
+ if (tr->state () == Runtime::timings_started)
+ tr->propagateStop (child_doc); // what about repeat_count ..
+ return; // still running, wait for runtime to finish
+ }
+ }
+ if (active ())
+ finish ();
+}
+
+KDE_NO_EXPORT bool SMIL::MediaType::needsVideoWidget () {
+ MediaTypeRuntime * mtr = static_cast <MediaTypeRuntime *> (runtime ());
+ SMIL::Smil * s = SMIL::Smil::findSmilNode (this);
+ Node * link = s ? s->current_av_media_type.ptr () : 0L;
+ return ((link == this || !link) &&
+ (state == state_deferred || unfinished ()) && link &&
+ mtr->state () != Runtime::timings_stopped &&
+ (!strcmp (nodeName (), "video") || !strcmp (nodeName (), "ref")) &&
+ surface ());
+}
+
+SurfacePtr SMIL::MediaType::getSurface (NodePtr node) {
+ resetSurface ();
+ Surface *s = surface ();
+ if (s && node)
+ s->node = node;
+ return s;
+}
+
+KDE_NO_EXPORT Surface *SMIL::MediaType::surface () {
+ if (!keepContent (this)) {
+ resetSurface ();
+ return NULL;
+ }
+ if (!sub_surface) {
+ SMIL::RegionBase *rb = convertNode <SMIL::RegionBase> (region_node);
+ if (rb && rb->surface ()) {
+ SRect rect = calculateBounds ();
+ sub_surface =rb->region_surface->createSurface (this, rect);
+ if (width > 0 && height > 0) {
+ sub_surface->xscale = 1.0 * rect.width () / width;
+ sub_surface->yscale = 1.0 * rect.height () / height;
+ }
+ //kdDebug() << sub_surface.ptr() << " " << nodeName() << " " << src << " " << rr.width() << "," << rr.height() << " => " << x << "," << y << w << "," << h << endl;
+ }
+ }
+ return sub_surface.ptr ();
+}
+
+KDE_NO_EXPORT void SMIL::MediaType::resetSurface () {
+ if (sub_surface)
+ sub_surface->remove ();
+ sub_surface = NULL;
+}
+
+KDE_NO_EXPORT SRect SMIL::MediaType::calculateBounds () {
+ SMIL::RegionBase *rb = convertNode <SMIL::RegionBase> (region_node);
+ if (rb && rb->surface ()) {
+ SRect rr = rb->region_surface->bounds;
+ Single x, y, w = width, h = height;
+ sizes.calcSizes (this, rr.width(), rr.height(), x, y, w, h);
+ if (width > 0 && height > 0 && w > 0 && h > 0)
+ switch (fit) {
+ case fit_meet: {
+ float iasp = 1.0 * width / height;
+ float rasp = 1.0 * w / h;
+ if (iasp > rasp)
+ h = height * w / width;
+ else
+ w = width * h / height;
+ break;
+ }
+ case fit_scroll:
+ case fit_hidden:
+ w = width;
+ h = height;
+ break;
+ case fit_slice: {
+ float iasp = 1.0 * width / height;
+ float rasp = 1.0 * w / h;
+ if (iasp > rasp)
+ w = width * h / height;
+ else
+ h = height * w / width;
+ break;
+ }
+ default: {} // fit_fill
+ }
+ return SRect (x, y, w, h);
+ }
+ return SRect ();
+}
+
+bool SMIL::MediaType::handleEvent (EventPtr event) {
+ Surface *s = surface();
+ switch (event->id ()) {
+ case event_postponed: {
+ PostponedEvent * pe = static_cast <PostponedEvent *> (event.ptr ());
+ static_cast<MediaTypeRuntime*>(runtime())->postpone (pe->is_postponed);
+ return true;
+ }
+ case event_timer: {
+ TimerEvent * te = static_cast <TimerEvent *> (event.ptr ());
+ if (te && te->timer_info) {
+ if (te->timer_info->event_id == trans_timer_id) {
+ if (trans_step >= trans_steps)
+ active_trans = NULL;
+ else
+ te->interval = trans_step++ < trans_steps;
+ if (s && s->parentNode())
+ s->parentNode()->repaint (s->bounds);
+ return true;
+ } else if (te->timer_info->event_id == trans_out_timer_id) {
+ active_trans = trans_out;
+ Transition * trans = convertNode <Transition> (trans_out);
+ if (trans) {
+ if (trans_timer) // eg. overlapping transIn/transOut
+ document ()->cancelTimer (trans_timer);
+ trans_step = 1;
+ if (Transition::Fade == trans->type) {
+ trans_steps = trans->dur;
+ trans_timer = document()->setTimeout(this, 100, trans_timer_id);
+ } else {
+ trans_steps = 4 * trans->dur;
+ trans_timer = document()->setTimeout(this, 25, trans_timer_id);
+ }
+ trans_out_active = true;
+ if (s)
+ s->repaint ();
+ }
+ return true;
+ }
+ }
+ } // fall through
+ default:
+ return TimedMrl::handleEvent (event);
+ }
+}
+
+KDE_NO_EXPORT NodeRefListPtr SMIL::MediaType::listeners (unsigned int id) {
+ NodeRefListPtr l = mouse_listeners.listeners (id);
+ if (l)
+ return l;
+ switch (id) {
+ case mediatype_attached:
+ return m_MediaAttached;
+ }
+ return TimedMrl::listeners (id);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT
+SMIL::AVMediaType::AVMediaType (NodePtr & d, const QString & t)
+ : SMIL::MediaType (d, t, id_node_audio_video) {}
+
+KDE_NO_EXPORT NodePtr SMIL::AVMediaType::childFromTag (const QString & tag) {
+ return fromXMLDocumentTag (m_doc, tag);
+}
+
+KDE_NO_EXPORT void SMIL::AVMediaType::defer () {
+ setState (state_deferred);
+ MediaTypeRuntime * mr = static_cast <MediaTypeRuntime *> (runtime ());
+ if (mr->state () == Runtime::timings_started)
+ mr->postpone_lock = document ()->postpone ();
+}
+
+KDE_NO_EXPORT void SMIL::AVMediaType::undefer () {
+ setState (state_activated);
+ MediaTypeRuntime * mr = static_cast <MediaTypeRuntime *> (runtime ());
+ if (mr->state () == Runtime::timings_started) {
+ mr->postpone_lock = 0L;
+ mr->started ();
+ }
+}
+
+KDE_NO_EXPORT void SMIL::AVMediaType::endOfFile () {
+ if (!active())
+ return; // backend eof after a reset
+ MediaTypeRuntime * mr = static_cast <MediaTypeRuntime *> (runtime ());
+ mr->postpone_lock = 0L;
+ mr->propagateStop (true);
+}
+
+KDE_NO_EXPORT Runtime * SMIL::AVMediaType::getNewRuntime () {
+ return new AudioVideoData (this);
+}
+
+KDE_NO_EXPORT void SMIL::AVMediaType::accept (Visitor * v) {
+ v->visit (this);
+}
+
+KDE_NO_EXPORT bool SMIL::AVMediaType::expose () const {
+ return !src.isEmpty () && !external_tree;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT
+SMIL::ImageMediaType::ImageMediaType (NodePtr & d)
+ : SMIL::MediaType (d, "img", id_node_img) {}
+
+KDE_NO_EXPORT Runtime * SMIL::ImageMediaType::getNewRuntime () {
+ return new ImageRuntime (this);
+}
+
+KDE_NO_EXPORT NodePtr SMIL::ImageMediaType::childFromTag (const QString & tag) {
+ if (!strcmp (tag.latin1 (), "imfl"))
+ return new RP::Imfl (m_doc);
+ return SMIL::MediaType::childFromTag (tag);
+}
+
+KDE_NO_EXPORT void SMIL::ImageMediaType::accept (Visitor * v) {
+ v->visit (this);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT
+SMIL::TextMediaType::TextMediaType (NodePtr & d)
+ : SMIL::MediaType (d, "text", id_node_text) {}
+
+KDE_NO_EXPORT Runtime * SMIL::TextMediaType::getNewRuntime () {
+ return new TextRuntime (this);
+}
+
+KDE_NO_EXPORT void SMIL::TextMediaType::accept (Visitor * v) {
+ v->visit (this);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT
+SMIL::RefMediaType::RefMediaType (NodePtr & d)
+ : SMIL::MediaType (d, "ref", id_node_ref) {}
+
+KDE_NO_EXPORT Runtime * SMIL::RefMediaType::getNewRuntime () {
+ return new AudioVideoData (this); // FIXME check mimetype first
+}
+
+KDE_NO_EXPORT void SMIL::RefMediaType::accept (Visitor * v) {
+ v->visit (this);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT SMIL::Brush::Brush (NodePtr & d)
+ : SMIL::MediaType (d, "brush", id_node_brush) {}
+
+KDE_NO_EXPORT void SMIL::Brush::accept (Visitor * v) {
+ v->visit (this);
+}
+
+KDE_NO_EXPORT Runtime * SMIL::Brush::getNewRuntime () {
+ return new MediaTypeRuntime (this);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT Runtime * SMIL::Set::getNewRuntime () {
+ return new SetData (this);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT Runtime * SMIL::Animate::getNewRuntime () {
+ return new AnimateData (this);
+}
+
+KDE_NO_EXPORT bool SMIL::Animate::handleEvent (EventPtr event) {
+ if (event->id () == event_timer) {
+ TimerEvent * te = static_cast <TimerEvent *> (event.ptr ());
+ if (te && te->timer_info && te->timer_info->event_id == anim_timer_id) {
+ if (static_cast <AnimateData *> (runtime ())->timerTick () &&
+ te->timer_info)
+ te->interval = true;
+ return true;
+ }
+ }
+ return TimedMrl::handleEvent (event);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT Runtime *SMIL::AnimateMotion::getNewRuntime () {
+ return new AnimateMotionData (this);
+}
+
+KDE_NO_EXPORT bool SMIL::AnimateMotion::handleEvent (EventPtr event) {
+ if (event->id () == event_timer) {
+ TimerEvent * te = static_cast <TimerEvent *> (event.ptr ());
+ if (te && te->timer_info && te->timer_info->event_id == anim_timer_id) {
+ if (static_cast <AnimateMotionData *> (runtime ())->timerTick () &&
+ te->timer_info)
+ te->interval = true;
+ return true;
+ }
+ }
+ return TimedMrl::handleEvent (event);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT void SMIL::Param::activate () {
+ setState (state_activated);
+ QString name = getAttribute (StringPool::attr_name);
+ Node * parent = parentNode ().ptr ();
+ if (!name.isEmpty () && parent && parent->isElementNode ())
+ static_cast<Element*>(parent)->setParam (name,
+ getAttribute (StringPool::attr_value));
+ Element::activate (); //finish (); // no livetime of itself, will deactivate
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT void Visitor::visit (SMIL::Region * n) {
+ visit (static_cast <SMIL::RegionBase *> (n));
+}
+
+KDE_NO_EXPORT void Visitor::visit (SMIL::Layout * n) {
+ visit (static_cast <SMIL::RegionBase *> (n));
+}
+
+KDE_NO_EXPORT void Visitor::visit (SMIL::Transition * n) {
+ visit (static_cast <Element *> (n));
+}
+
+KDE_NO_EXPORT void Visitor::visit (SMIL::TimedMrl * n) {
+ visit (static_cast <Element *> (n));
+}
+
+KDE_NO_EXPORT void Visitor::visit (SMIL::MediaType * n) {
+ visit (static_cast <SMIL::TimedMrl *> (n));
+}
+
+KDE_NO_EXPORT void Visitor::visit (SMIL::ImageMediaType * n) {
+ visit (static_cast <SMIL::MediaType *> (n));
+}
+
+KDE_NO_EXPORT void Visitor::visit (SMIL::TextMediaType * n) {
+ visit (static_cast <SMIL::MediaType *> (n));
+}
+
+KDE_NO_EXPORT void Visitor::visit (SMIL::RefMediaType * n) {
+ visit (static_cast <SMIL::MediaType *> (n));
+}
+
+KDE_NO_EXPORT void Visitor::visit (SMIL::AVMediaType * n) {
+ visit (static_cast <SMIL::MediaType *> (n));
+}
+
+KDE_NO_EXPORT void Visitor::visit (SMIL::Brush * n) {
+ visit (static_cast <SMIL::MediaType *> (n));
+}
+
+KDE_NO_EXPORT void Visitor::visit (SMIL::Anchor * n) {
+ visit (static_cast <SMIL::LinkingBase *> (n));
+}
+
+KDE_NO_EXPORT void Visitor::visit (SMIL::Area * n) {
+ visit (static_cast <SMIL::LinkingBase *> (n));
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT ImageRuntime::ImageRuntime (NodePtr e)
+ : MediaTypeRuntime (e), img_movie (0L)
+{}
+
+KDE_NO_CDTOR_EXPORT ImageRuntime::~ImageRuntime () {
+ delete img_movie;
+}
+
+KDE_NO_EXPORT
+bool ImageRuntime::parseParam (const TrieString & name, const QString & val) {
+ //kdDebug () << "ImageRuntime::param " << name << "=" << val << endl;
+ if (name == StringPool::attr_src) {
+ killWGet ();
+ NodePtr element_protect = element;
+ SMIL::MediaType * mt = convertNode <SMIL::MediaType> (element);
+ if (!mt)
+ return false; // can not happen
+ if (mt->external_tree)
+ mt->removeChild (mt->external_tree);
+ mt->src = val;
+ if (!val.isEmpty ()) {
+ QString abs = mt->absolutePath ();
+ cached_img.setUrl (abs);
+ if (cached_img.isEmpty ()) {
+ wget (abs);
+ } else {
+ mt->width = cached_img.data->image->width ();
+ mt->height = cached_img.data->image->height ();
+ }
+ }
+ } else
+ return MediaTypeRuntime::parseParam (name, val);
+ return true;
+}
+
+/**
+ * start_timer timer expired, repaint if we have an image
+ */
+KDE_NO_EXPORT void ImageRuntime::started () {
+ if (element && downloading ()) {
+ postpone_lock = element->document ()->postpone ();
+ return;
+ }
+ MediaTypeRuntime::started ();
+}
+
+KDE_NO_EXPORT void ImageRuntime::clipStart () {
+ if (img_movie) {
+ img_movie->restart ();
+ if (img_movie->paused ())
+ img_movie->unpause ();
+ }
+ MediaTypeRuntime::clipStart ();
+}
+
+KDE_NO_EXPORT void ImageRuntime::clipStop () {
+ if (img_movie && frame_nr)
+ img_movie->pause ();
+ MediaTypeRuntime::clipStop ();
+}
+
+KDE_NO_EXPORT void ImageRuntime::remoteReady (QByteArray & data) {
+ NodePtr element_protect = element; // note element is weak
+ SMIL::MediaType * mt = convertNode <SMIL::MediaType> (element);
+ if (data.size () && mt) {
+ mt->resetSurface ();
+ QString mime = mimetype ();
+ kdDebug () << "ImageRuntime::remoteReady " << mime << " empty:" << cached_img.isEmpty () << " " << mt->src << endl;
+ if (mime.startsWith (QString::fromLatin1 ("text/"))) {
+ QTextStream ts (data, IO_ReadOnly);
+ readXML (element, ts, QString ());
+ Mrl *mrl = mt->external_tree ? mt->external_tree->mrl () : NULL;
+ if (mrl) {
+ mt->width = mrl->width;
+ mt->height = mrl->height;
+ }
+ }
+ if (!mt->external_tree && cached_img.isEmpty ()) {
+ delete img_movie;
+ img_movie = 0L;
+ QImage *pix = new QImage (data);
+ if (!pix->isNull ()) {
+ cached_img.data->image = pix;
+ img_movie = new QMovie (data, data.size ());
+ img_movie->connectUpdate(this,SLOT(movieUpdated(const QRect&)));
+ img_movie->connectStatus (this, SLOT (movieStatus (int)));
+ img_movie->connectResize(this,SLOT (movieResize(const QSize&)));
+ frame_nr = 0;
+ mt->width = pix->width ();
+ mt->height = pix->height ();
+ if (mt->surface ())
+ mt->sub_surface->repaint ();
+ } else
+ delete pix;
+ }
+ }
+ postpone_lock = 0L;
+ if (timingstate == timings_started)
+ started ();
+}
+
+KDE_NO_EXPORT void ImageRuntime::movieUpdated (const QRect &) {
+ SMIL::MediaType * mt = convertNode <SMIL::MediaType> (element);
+ if (mt && frame_nr++) {
+ mt->resetSurface ();
+ cached_img.setUrl (QString ());
+ ASSERT (cached_img.data && cached_img.isEmpty ());
+ cached_img.data->image = new QImage;
+ *cached_img.data->image = (img_movie->framePixmap ());
+ if (mt->surface())
+ mt->sub_surface->repaint ();
+ }
+ if (timingstate != timings_started && img_movie)
+ img_movie->pause ();
+}
+
+KDE_NO_EXPORT void ImageRuntime::movieStatus (int s) {
+ if (element && element->state >= Node::state_began &&
+ SMIL::TimedMrl::keepContent (element)) {
+ if (s == QMovie::EndOfMovie) {
+ propagateStop (false);
+ }
+ }
+}
+
+KDE_NO_EXPORT void ImageRuntime::movieResize (const QSize &) {
+ SMIL::MediaType * mt = convertNode <SMIL::MediaType> (element);
+ if (mt->surface ())
+ mt->sub_surface->repaint ();
+ //kdDebug () << "movieResize" << endl;
+}
+
+KDE_NO_EXPORT void ImageRuntime::postpone (bool b) {
+ kdDebug () << "ImageRuntime::postpone " << b << endl;
+ if (img_movie) {
+ if (!img_movie->paused () && b)
+ img_movie->pause ();
+ else if (img_movie->paused () && !b)
+ img_movie->unpause ();
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+namespace KMPlayer {
+ class TextRuntimePrivate {
+ public:
+ TextRuntimePrivate () {
+ reset ();
+ }
+ void reset () {
+ codec = 0L;
+ font = QApplication::font ();
+ data.truncate (0);
+ }
+ QByteArray data;
+ QTextCodec * codec;
+ QFont font;
+ };
+}
+
+KDE_NO_CDTOR_EXPORT TextRuntime::TextRuntime (NodePtr e)
+ : MediaTypeRuntime (e), d (new TextRuntimePrivate) {
+ reset ();
+}
+
+KDE_NO_CDTOR_EXPORT TextRuntime::~TextRuntime () {
+ delete d;
+}
+
+KDE_NO_EXPORT void TextRuntime::reset () {
+ d->reset ();
+ font_size = d->font.pointSize ();
+ font_color = 0;
+ background_color = 0xffffff;
+ bg_opacity = 100;
+ halign = align_left;
+ MediaTypeRuntime::reset ();
+}
+
+KDE_NO_EXPORT
+bool TextRuntime::parseParam (const TrieString & name, const QString & val) {
+ //kdDebug () << "TextRuntime::parseParam " << name << "=" << val << endl;
+ SMIL::MediaType * mt = convertNode <SMIL::MediaType> (element);
+ if (!mt)
+ return false; // cannot happen
+ if (name == StringPool::attr_src) {
+ killWGet ();
+ mt->src = val;
+ d->data.resize (0);
+ if (!val.isEmpty ())
+ wget (mt->absolutePath ());
+ return true;
+ }
+ if (name == "backgroundColor" || name == "background-color") {
+ background_color = val.isEmpty () ? 0xffffff : QColor (val).rgb ();
+ } else if (name == "fontColor") {
+ font_color = val.isEmpty () ? 0 : QColor (val).rgb ();
+ } else if (name == "charset") {
+ d->codec = QTextCodec::codecForName (val.ascii ());
+ } else if (name == "fontFace") {
+ ; //FIXME
+ } else if (name == "fontPtSize") {
+ font_size = val.isEmpty () ? d->font.pointSize () : val.toInt ();
+ } else if (name == "fontSize") {
+ font_size += val.isEmpty () ? d->font.pointSize () : val.toInt ();
+ } else if (name == "backgroundOpacity") {
+ bg_opacity = (int) SizeType (val).size (100);
+ } else if (name == "hAlign") {
+ const char * cval = val.ascii ();
+ if (!cval)
+ halign = align_left;
+ else if (!strcmp (cval, "center"))
+ halign = align_center;
+ else if (!strcmp (cval, "right"))
+ halign = align_right;
+ else
+ halign = align_left;
+ // TODO: expandTabs fontBackgroundColor fontSize fontStyle fontWeight hAlig vAlign wordWrap
+ } else
+ return MediaTypeRuntime::parseParam (name, val);
+ mt->resetSurface ();
+ if (mt->surface ())
+ mt->sub_surface->repaint ();
+ return true;
+}
+
+/**
+ * start_timer timer expired, repaint if we have text
+ */
+KDE_NO_EXPORT void TextRuntime::started () {
+ if (element && downloading ()) {
+ postpone_lock = element->document ()->postpone ();
+ return;
+ }
+ MediaTypeRuntime::started ();
+}
+
+KDE_NO_EXPORT void TextRuntime::remoteReady (QByteArray & data) {
+ QString str (data);
+ SMIL::MediaType * mt = convertNode <SMIL::MediaType> (element);
+ if (mt && data.size ()) {
+ d->data = data;
+ mt->resetSurface ();
+ if (d->data.size () > 0 && !d->data [d->data.size () - 1])
+ d->data.resize (d->data.size () - 1); // strip zero terminate char
+ QTextStream ts (d->data, IO_ReadOnly);
+ if (d->codec)
+ ts.setCodec (d->codec);
+ text = ts.read ();
+ if (mt->surface ())
+ mt->sub_surface->repaint ();
+ }
+ postpone_lock = 0L;
+ if (timingstate == timings_started)
+ started ();
+}
+
+//-----------------------------------------------------------------------------
+
+#include "kmplayer_smil.moc"
diff --git a/src/kmplayer_smil.h b/src/kmplayer_smil.h
new file mode 100644
index 0000000..3ecfd18
--- /dev/null
+++ b/src/kmplayer_smil.h
@@ -0,0 +1,898 @@
+/* This file is part of the KDE project
+ *
+ * Copyright (C) 2005-2007 Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _KMPLAYER_SMILL_H_
+#define _KMPLAYER_SMILL_H_
+
+#include <config.h>
+#include <qobject.h>
+#include <qstring.h>
+#include <qstringlist.h>
+
+#include "kmplayerplaylist.h"
+
+class QTextStream;
+class QImage;
+class QPainter;
+
+namespace KIO {
+ class Job;
+}
+
+struct TransTypeInfo;
+
+namespace KMPlayer {
+
+struct KMPLAYER_NO_EXPORT ImageData {
+ ImageData( const QString & img);
+ ~ImageData();
+ QImage *image;
+private:
+ QString url;
+};
+
+typedef SharedPtr <ImageData> ImageDataPtr;
+typedef WeakPtr <ImageData> ImageDataPtrW;
+
+struct KMPLAYER_NO_EXPORT CachedImage {
+ void setUrl (const QString & url);
+ bool isEmpty ();
+ ImageDataPtr data;
+};
+
+class TextRuntimePrivate;
+
+/*
+ * Event signaled before the actual starting takes place. Use by SMIL::Excl
+ * to stop possible other children
+ */
+class ToBeStartedEvent : public Event {
+public:
+ ToBeStartedEvent (NodePtr n);
+ NodePtrW node;
+};
+
+/*
+ * Interpretation of sizes
+ */
+class KMPLAYER_NO_EXPORT SizeType {
+public:
+ SizeType ();
+ SizeType (const QString & s);
+ void reset ();
+ SizeType & operator = (const QString & s);
+ SizeType & operator += (const SizeType & s);
+ SizeType & operator -= (const SizeType & s);
+ SizeType & operator /= (const int i)
+ { perc_size /= i; abs_size /= i; return *this; }
+ SizeType & operator *= (const float f)
+ { perc_size *= f; abs_size *= f; return *this; }
+ Single size (Single relative_to = 100) const;
+ bool isSet () const { return isset; }
+private:
+ Single perc_size;
+ Single abs_size;
+ bool isset;
+};
+
+/**
+ * For RegPoint, RegionRuntime and MediaRuntime, having sizes
+ */
+class KMPLAYER_NO_EXPORT CalculatedSizer {
+public:
+ KDE_NO_CDTOR_EXPORT CalculatedSizer () {}
+ KDE_NO_CDTOR_EXPORT ~CalculatedSizer () {}
+
+ void resetSizes ();
+ void calcSizes (Node *, Single w, Single h,
+ Single & xoff, Single & yoff, Single & w1, Single & h1);
+ bool applyRegPoints (Node *, Single w, Single h,
+ Single & xoff, Single & yoff, Single & w1, Single & h1);
+ SizeType left, top, width, height, right, bottom;
+ QString reg_point, reg_align;
+ bool setSizeParam (const TrieString &name, const QString &value, bool &dim);
+ void move (const SizeType &x, const SizeType &y);
+};
+
+/**
+ * Live representation of a SMIL element having timings
+ */
+class KMPLAYER_NO_EXPORT Runtime {
+public:
+ enum TimingState {
+ timings_reset = 0, timings_began, timings_started, timings_stopped
+ };
+ enum DurationTime { begin_time = 0, duration_time, end_time, durtime_last };
+ enum Duration {
+ dur_infinite = -1, dur_timer = 0, dur_media,
+ dur_activated, dur_inbounds, dur_outbounds,
+ dur_end, dur_start, dur_last_dur
+ };
+ Runtime (NodePtr e);
+ virtual ~Runtime ();
+ /**
+ * Called when element is pulled in scope, from Node::activate()
+ */
+ virtual void begin ();
+ virtual void beginAndStart (); // skip start timer (if any)
+ /**
+ * Reset all data, called from end() and init()
+ */
+ virtual void reset ();
+ virtual bool parseParam (const TrieString & name, const QString & value);
+ TimingState state () const { return timingstate; }
+ void propagateStop (bool forced);
+ void propagateStart ();
+ void processEvent (unsigned int event);
+ /**
+ * Duration items, begin/dur/end, length information or connected element
+ */
+ struct DurationItem {
+ DurationItem () : durval (dur_timer), offset (0) {}
+ Duration durval;
+ int offset;
+ ConnectionPtr connection;
+ } durations [(const int) durtime_last];
+ virtual void started ();
+ virtual void stopped ();
+ KDE_NO_EXPORT DurationItem & beginTime () { return durations[begin_time]; }
+ KDE_NO_EXPORT DurationItem & durTime () { return durations[duration_time]; }
+ KDE_NO_EXPORT DurationItem & endTime () { return durations [end_time]; }
+private:
+ void setDurationItem (DurationTime item, const QString & val);
+public:
+ TimingState timingstate;
+protected:
+ NodePtrW element;
+ TimerInfoPtrW start_timer;
+ TimerInfoPtrW duration_timer;
+ int repeat_count;
+};
+
+/**
+ * Some common runtime data for all mediatype classes
+ */
+class KMPLAYER_NO_EXPORT MediaTypeRuntime : public RemoteObject,public Runtime {
+public:
+ ~MediaTypeRuntime ();
+ virtual void reset ();
+ virtual void stopped ();
+ virtual void postpone (bool b);
+ virtual void clipStart ();
+ virtual void clipStop ();
+ PostponePtr postpone_lock;
+ MediaTypeRuntime (NodePtr e);
+protected:
+ ConnectionPtr document_postponed; // pause audio/video accordantly
+};
+
+/**
+ * Data needed for audio/video clips
+ */
+class KMPLAYER_NO_EXPORT AudioVideoData : public MediaTypeRuntime {
+public:
+ AudioVideoData (NodePtr e);
+ virtual bool isAudioVideo ();
+ virtual bool parseParam (const TrieString & name, const QString & value);
+ virtual void started ();
+ virtual void postpone (bool b);
+ virtual void clipStart ();
+ virtual void clipStop ();
+};
+
+class KMPLAYER_NO_EXPORT ImageRuntime : public QObject,public MediaTypeRuntime {
+ Q_OBJECT
+public:
+ ImageRuntime (NodePtr e);
+ ~ImageRuntime ();
+ virtual bool parseParam (const TrieString & name, const QString & value);
+ virtual void postpone (bool b);
+ virtual void clipStart ();
+ virtual void clipStop ();
+ QMovie * img_movie;
+ CachedImage cached_img;
+ int frame_nr;
+protected:
+ virtual void started ();
+ virtual void remoteReady (QByteArray &);
+private slots:
+ void movieUpdated (const QRect &);
+ void movieStatus (int);
+ void movieResize (const QSize &);
+};
+
+/**
+ * Data needed for text
+ */
+class KMPLAYER_NO_EXPORT TextRuntime : public MediaTypeRuntime {
+public:
+ TextRuntime (NodePtr e);
+ ~TextRuntime ();
+ void reset ();
+ virtual bool parseParam (const TrieString & name, const QString & value);
+ int font_size;
+ unsigned int font_color;
+ unsigned int background_color;
+ int bg_opacity;
+ enum { align_left, align_center, align_right } halign;
+ QString text;
+ TextRuntimePrivate * d;
+protected:
+ virtual void started ();
+ virtual void remoteReady (QByteArray &);
+};
+
+/**
+ * Stores runtime data of elements from animate group set/animate/..
+ */
+class KMPLAYER_NO_EXPORT AnimateGroupData : public Runtime {
+public:
+ KDE_NO_CDTOR_EXPORT ~AnimateGroupData () {}
+ virtual bool parseParam (const TrieString & name, const QString & value);
+ virtual void reset ();
+protected:
+ void restoreModification ();
+ AnimateGroupData (NodePtr e);
+ NodePtrW target_element;
+ TrieString changed_attribute;
+ QString change_to;
+ int modification_id;
+protected:
+ virtual void stopped ();
+};
+
+/**
+ * Stores runtime data of set element
+ */
+class KMPLAYER_NO_EXPORT SetData : public AnimateGroupData {
+public:
+ KDE_NO_CDTOR_EXPORT SetData (NodePtr e) : AnimateGroupData (e) {}
+ KDE_NO_CDTOR_EXPORT ~SetData () {}
+protected:
+ virtual void started ();
+};
+
+/**
+ * Stores runtime data of animate element
+ */
+class KMPLAYER_NO_EXPORT AnimateData : public AnimateGroupData {
+public:
+ AnimateData (NodePtr e);
+ KDE_NO_CDTOR_EXPORT ~AnimateData () {}
+ virtual bool parseParam (const TrieString & name, const QString & value);
+ virtual void reset ();
+ virtual void started ();
+ virtual void stopped ();
+ bool timerTick();
+private:
+ void applyStep ();
+ TimerInfoPtrW anim_timer;
+ enum { acc_none, acc_sum } accumulate;
+ enum { add_replace, add_sum } additive;
+ int change_by;
+ enum { calc_discrete, calc_linear, calc_paced, calc_spline } calcMode;
+ QString change_from;
+ QStringList change_values;
+ int steps;
+ float change_delta, change_to_val, change_from_val;
+ QString change_from_unit;
+};
+
+/**
+ * Stores runtime data of animate element
+ */
+class KMPLAYER_NO_EXPORT AnimateMotionData : public AnimateGroupData {
+public:
+ AnimateMotionData (NodePtr e);
+ ~AnimateMotionData ();
+ virtual bool parseParam (const TrieString & name, const QString & value);
+ virtual void reset ();
+ virtual void started ();
+ virtual void stopped ();
+ bool timerTick();
+private:
+ bool checkTarget (Node *n);
+ bool setInterval ();
+ void applyStep ();
+ bool getCoordinates (const QString &coord, SizeType &x, SizeType &y);
+ TimerInfoPtrW anim_timer;
+ enum { acc_none, acc_sum } accumulate;
+ enum { add_replace, add_sum } additive;
+ enum { calc_discrete, calc_linear, calc_paced, calc_spline } calcMode;
+ QString change_from;
+ QString change_by;
+ QStringList values;
+ float *keytimes;
+ int keytime_count;
+ QStringList splines;
+ float control_point[4];
+ unsigned int steps;
+ unsigned int cur_step;
+ unsigned int keytime_steps;
+ unsigned int interval;
+ SizeType begin_x, begin_y;
+ SizeType cur_x, cur_y;
+ SizeType delta_x, delta_y;
+ SizeType end_x, end_y;
+};
+
+class KMPLAYER_NO_EXPORT MouseListeners {
+public:
+ MouseListeners();
+
+ NodeRefListPtr listeners (unsigned int event_id);
+
+ NodeRefListPtr m_ActionListeners; // mouse clicked
+ NodeRefListPtr m_OutOfBoundsListeners; // mouse left
+ NodeRefListPtr m_InBoundsListeners; // mouse entered
+};
+
+/**
+ * Translates string to deci-seconds or 'special' high number
+ */
+bool parseTime (const QString & val, int & dur /*,const QString & dateformat*/);
+
+//-----------------------------------------------------------------------------
+
+namespace SMIL {
+
+const short id_node_smil = 100;
+const short id_node_head = 101;
+const short id_node_layout = 103;
+const short id_node_root_layout = 104;
+const short id_node_region = 105;
+const short id_node_regpoint = 106;
+const short id_node_transition = 107;
+const short id_node_body = 110;
+const short id_node_par = 111;
+const short id_node_seq = 112;
+const short id_node_switch = 113;
+const short id_node_excl = 114;
+const short id_node_img = 120;
+const short id_node_audio_video = 121;
+const short id_node_text = 122;
+const short id_node_ref = 123;
+const short id_node_brush = 124;
+const short id_node_set = 132;
+const short id_node_animate = 133;
+const short id_node_title = 140;
+const short id_node_param = 141;
+const short id_node_meta = 142;
+const short id_node_anchor = 150;
+const short id_node_area = 151;
+const short id_node_first = id_node_smil;
+const short id_node_first_timed_mrl = id_node_body;
+const short id_node_last_timed_mrl = id_node_animate;
+const short id_node_first_mediatype = id_node_img;
+const short id_node_last_mediatype = id_node_brush;
+const short id_node_first_group = id_node_body;
+const short id_node_last_group = id_node_excl;
+const short id_node_last = 200; // reserve 100 ids
+
+/**
+ * '<smil>' tag
+ */
+class Smil : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Smil (NodePtr & d) : Mrl (d, id_node_smil) {}
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "smil"; }
+ PlayType playType () { return play_type_video; }
+ void activate ();
+ void deactivate ();
+ void closed ();
+ void childDone (NodePtr child);
+ bool expose () const;
+ bool handleEvent (EventPtr event);
+ void accept (Visitor *);
+ void jump (const QString & id);
+ static Smil * findSmilNode (Node * node);
+ /**
+ * Hack to mark the currently playing MediaType as finished
+ * FIXME: think of a descent callback way for this
+ */
+ Mrl * linkNode ();
+ NodePtrW current_av_media_type;
+ NodePtrW layout_node;
+};
+
+/**
+ * Represents optional 'head' tag of SMIL document as in
+ * &lt;smil&gt;&lt;head/&gt;&lt;body/&gt;&lt;/smil&gt;
+ */
+class KMPLAYER_NO_EXPORT Head : public Element {
+public:
+ KDE_NO_CDTOR_EXPORT Head (NodePtr & d) : Element (d, id_node_head) {}
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "head"; }
+ void closed ();
+ void childDone (NodePtr child);
+ bool expose () const;
+};
+
+/**
+ * Base class for SMIL::Region, SMIL::RootLayout and SMIL::Layout
+ */
+class KMPLAYER_NO_EXPORT RegionBase : public RemoteObject, public Element {
+public:
+ enum ShowBackground { ShowAlways, ShowWhenActive };
+
+ ~RegionBase ();
+ bool expose () const { return false; }
+ void activate ();
+ void childDone (NodePtr child);
+ void deactivate ();
+ virtual void parseParam (const TrieString & name, const QString & value);
+ /**
+ * repaints region, calls scheduleRepaint(x,y,w,h) on view
+ */
+ void repaint ();
+ void repaint (const SRect & rect);
+ /**
+ * calculate the relative x,y,w,h on the child region elements
+ * given this element's w and h value
+ * and child's left/top/right/width/height/bottom attributes
+ */
+ virtual void updateDimensions ();
+ void boundsUpdate (); // recalculates and repaint old and new bounds
+
+ virtual Surface *surface ();
+ SurfacePtrW region_surface;
+ CachedImage cached_img;
+ CalculatedSizer sizes;
+
+ Single x, y, w, h; // unscaled values
+ int z_order;
+ unsigned int background_color;
+ QString background_image;
+ ShowBackground show_background;
+protected:
+ RegionBase (NodePtr & d, short id);
+ PostponePtr postpone_lock; // pause while loading bg image
+ virtual void remoteReady (QByteArray &); // image downloaded
+};
+
+/**
+ * Defines region layout, should reside below 'head' element
+ */
+class KMPLAYER_NO_EXPORT Layout : public RegionBase {
+public:
+ Layout (NodePtr & d);
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "layout"; }
+ void activate ();
+ void closed ();
+ virtual void accept (Visitor *);
+ /**
+ * recursively calculates dimensions of this and child regions
+ */
+ virtual void updateDimensions ();
+ virtual Surface *surface ();
+
+ NodePtrW rootLayout;
+};
+
+/**
+ * Represents a rectangle on the viewing area
+ */
+class KMPLAYER_NO_EXPORT Region : public RegionBase {
+public:
+ Region (NodePtr & d);
+ KDE_NO_EXPORT const char * nodeName () const { return "region"; }
+ NodePtr childFromTag (const QString & tag);
+ void calculateBounds (Single w, Single h);
+ virtual NodeRefListPtr listeners (unsigned int event_id);
+ virtual void accept (Visitor *);
+ /**
+ * boolean for check if pointerEntered/pointerLeft should be called by View
+ */
+ bool has_mouse;
+ NodeRefListPtr m_AttachedMediaTypes; // active attached mediatypes
+private:
+ MouseListeners mouse_listeners;
+};
+
+/**
+ * Represents the root area for the other regions
+ */
+class KMPLAYER_NO_EXPORT RootLayout : public RegionBase {
+public:
+ KDE_NO_CDTOR_EXPORT RootLayout (NodePtr & d)
+ : RegionBase (d, id_node_root_layout) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "root-layout"; }
+};
+
+/**
+ * Represents a regPoint element for alignment inside regions
+ */
+class KMPLAYER_NO_EXPORT RegPoint : public Element {
+public:
+ KDE_NO_CDTOR_EXPORT RegPoint (NodePtr & d) : Element(d, id_node_regpoint) {}
+ KDE_NO_CDTOR_EXPORT ~RegPoint () {}
+ KDE_NO_EXPORT const char * nodeName () const { return "regPoint"; }
+ KDE_NO_EXPORT bool expose () const { return false; }
+ void parseParam (const TrieString & name, const QString & value);
+ CalculatedSizer sizes;
+};
+
+/**
+ * Represents a transition element for starting media types
+ */
+class KMPLAYER_NO_EXPORT Transition : public Element {
+public:
+ enum TransType {
+ TransTypeNone = 0,
+ BarWipe, IrisWipe, ClockWipe, SnakeWipe, // required, TODO
+ BoxWipe, FourBoxWipe, BarnDoorWipe, DiagonalWipe, BowTieWipe,
+ MiscDiagonalWipe, VeeWipe, BarnVeeWipe, ZigZagWipe, BarnZigZagWipe,
+ TriangleWipe, ArrowHeadWipe, PentagonWipe, HexagonWipe, EllipseWipe,
+ EyeWipe, RoundRectWipe, StarWipe, MiscShapeWipe,
+ PinWheelWipe, SingleSweepWipe, FanWipe, DoubleFanWipe,
+ DoubleSweepWipe, SaloonDoorWipe, WindShieldWipe,
+ SpiralWipe, ParallelSnakesWipe, BoxSnakesWipe, WaterFallWipe,
+ PushWipe, SideWipe, Fade,
+ TransLast
+ };
+ enum TransSubType {
+ SubTransTypeNone = 0,
+ SubLeftToRight, SubTopToBottom, SubTopLeft, SubTopRight,
+ SubBottomRight, SubBottomLeft,
+ SubTopCenter, SubRightCenter, SubBottomCenter, SubLeftCenter,
+ SubCornersIn, SubCornersOut,
+ SubCircle, SubVertical, SubHorizontal,
+ SubFromLeft, SubFromTop, SubFromRight, SubFromBottom,
+ SubCrossfade, SubFadeToColor, SubFadeFromColor,
+ SubRectangle, SubDiamond,
+ SubClockwiseTwelve, SubClockwiseThree, SubClockwiseSix,
+ SubClockwiseNine,
+ // and lots more .. TODO
+ SubTransLast
+ };
+ Transition (NodePtr & d);
+ KDE_NO_CDTOR_EXPORT ~Transition () {}
+ void activate ();
+ KDE_NO_EXPORT void accept (Visitor * v) { v->visit (this); }
+ KDE_NO_EXPORT const char * nodeName () const { return "transition"; }
+ void parseParam (const TrieString & name, const QString & value);
+ KDE_NO_EXPORT bool expose () const { return false; }
+ bool supported ();
+ TransType type;
+ TransSubType sub_type;
+ TransTypeInfo *type_info;
+ enum { dir_forward, dir_reverse } direction;
+ int dur; // deci seconds
+ float start_progress, end_progress;
+ unsigned int fade_color;
+};
+
+/**
+ * Base for all SMIL media elements having begin/dur/end/.. attributes
+ */
+class KMPLAYER_NO_EXPORT TimedMrl : public Mrl {
+public:
+ enum Fill {
+ fill_default, fill_inherit, fill_remove, fill_freeze,
+ fill_hold, fill_transition, fill_auto
+ };
+ ~TimedMrl ();
+ void closed ();
+ void activate ();
+ void begin ();
+ void finish ();
+ void deactivate ();
+ void reset ();
+ bool expose () const { return false; }
+ void childBegan (NodePtr child);
+ void childDone (NodePtr child);
+ virtual bool handleEvent (EventPtr event);
+ virtual NodeRefListPtr listeners (unsigned int event_id);
+ KDE_NO_EXPORT void accept (Visitor * v) { v->visit (this); }
+ void init ();
+ virtual void parseParam (const TrieString &, const QString &);
+ Runtime * runtime ();
+ static Runtime::DurationItem * getDuration (NodePtr n);
+ static bool isTimedMrl (const Node *n);
+ static bool keepContent (Node *n);
+ static Fill getDefaultFill (NodePtr n);
+ unsigned int begin_time;
+ unsigned int finish_time;
+ Fill fill;
+ Fill fill_def;
+ Fill fill_active;
+protected:
+ TimedMrl (NodePtr & d, short id);
+ virtual Runtime * getNewRuntime ();
+
+ NodeRefListPtr m_StartListeners; // Element about to be started
+ NodeRefListPtr m_StartedListeners; // Element is started
+ NodeRefListPtr m_StoppedListeners; // Element stopped
+ Runtime * m_runtime;
+};
+
+KDE_NO_EXPORT inline Runtime * TimedMrl::runtime () {
+ if (!m_runtime)
+ m_runtime = getNewRuntime ();
+ return m_runtime;
+}
+
+KDE_NO_EXPORT inline bool TimedMrl::isTimedMrl (const Node *n) {
+ return n &&
+ n->id >= id_node_first_timed_mrl &&
+ n->id <= id_node_last_timed_mrl;
+}
+
+/**
+ * Abstract base for the group elements (par/seq/excl/..)
+ */
+class KMPLAYER_NO_EXPORT GroupBase : public TimedMrl {
+public:
+ KDE_NO_CDTOR_EXPORT ~GroupBase () {}
+ NodePtr childFromTag (const QString & tag);
+ PlayType playType () { return play_type_none; }
+ void finish ();
+ void deactivate ();
+ void setJumpNode (NodePtr);
+protected:
+ KDE_NO_CDTOR_EXPORT GroupBase (NodePtr & d, short id) : TimedMrl (d, id) {}
+ NodePtrW jump_node;
+};
+
+/**
+ * A Par represents parallel processing of all its children
+ */
+class KMPLAYER_NO_EXPORT Par : public GroupBase {
+public:
+ KDE_NO_CDTOR_EXPORT Par (NodePtr & d) : GroupBase (d, id_node_par) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "par"; }
+ void begin ();
+ void reset ();
+ void childDone (NodePtr child);
+};
+
+/**
+ * A Seq represents sequential processing of all its children
+ */
+class KMPLAYER_NO_EXPORT Seq : public GroupBase {
+public:
+ KDE_NO_CDTOR_EXPORT Seq (NodePtr & d) : GroupBase(d, id_node_seq) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "seq"; }
+ void begin ();
+ void childDone (NodePtr child);
+protected:
+ KDE_NO_CDTOR_EXPORT Seq (NodePtr & d, short id) : GroupBase(d, id) {}
+};
+
+/**
+ * Represents the 'body' tag of SMIL document as in
+ * &lt;smil&gt;&lt;head/&gt;&lt;body/&gt;&lt;/smil&gt;
+ */
+class KMPLAYER_NO_EXPORT Body : public Seq {
+public:
+ KDE_NO_CDTOR_EXPORT Body (NodePtr & d) : Seq (d, id_node_body) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "body"; }
+};
+
+/**
+ * An Excl represents exclusive processing of one of its children
+ */
+class KMPLAYER_NO_EXPORT Excl : public GroupBase {
+public:
+ KDE_NO_CDTOR_EXPORT Excl (NodePtr & d) : GroupBase (d, id_node_excl) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "excl"; }
+ void begin ();
+ void deactivate ();
+ void childDone (NodePtr child);
+ virtual bool handleEvent (EventPtr event);
+private:
+ typedef ListNode <ConnectionPtr> ConnectionStoreItem;
+ List <ConnectionStoreItem> started_event_list;
+};
+
+/*
+ * An automatic selection between child elements based on a condition
+ */
+class KMPLAYER_NO_EXPORT Switch : public GroupBase {
+public:
+ KDE_NO_CDTOR_EXPORT Switch (NodePtr &d) : GroupBase (d, id_node_switch) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "switch"; }
+ // Condition
+ void begin ();
+ void deactivate ();
+ void reset ();
+ void childDone (NodePtr child);
+ NodePtrW chosenOne;
+};
+
+class KMPLAYER_NO_EXPORT LinkingBase : public Element {
+public:
+ KDE_NO_CDTOR_EXPORT ~LinkingBase () {}
+ void deactivate ();
+ KDE_NO_EXPORT bool expose () const { return false; }
+ void parseParam (const TrieString & name, const QString & value);
+ ConnectionPtr mediatype_activated;
+ ConnectionPtr mediatype_attach;
+ QString href;
+ enum { show_new, show_replace } show;
+protected:
+ LinkingBase (NodePtr & d, short id);
+};
+
+class KMPLAYER_NO_EXPORT Anchor : public LinkingBase {
+public:
+ Anchor (NodePtr & d);
+ KDE_NO_CDTOR_EXPORT ~Anchor () {}
+ void activate ();
+ void childDone (NodePtr child);
+ KDE_NO_EXPORT const char * nodeName () const { return "a"; }
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT void accept (Visitor * v) { v->visit (this); }
+};
+
+class KMPLAYER_NO_EXPORT Area : public LinkingBase {
+public:
+ Area (NodePtr & d, const QString & tag);
+ ~Area ();
+ void activate ();
+ KDE_NO_EXPORT const char * nodeName () const { return tag.ascii (); }
+ KDE_NO_EXPORT void accept (Visitor * v) { v->visit (this); }
+ void parseParam (const TrieString & name, const QString & value);
+ NodeRefListPtr listeners (unsigned int event_id);
+ SizeType * coords;
+ int nr_coords;
+ const QString tag;
+ MouseListeners mouse_listeners;
+};
+
+/**
+ * Abstract base for the MediaType classes (video/audio/text/img/..)
+ */
+class KMPLAYER_NO_EXPORT MediaType : public TimedMrl {
+public:
+ MediaType (NodePtr & d, const QString & t, short id);
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return m_type.latin1 (); }
+ void closed ();
+ void activate ();
+ void deactivate ();
+ void begin ();
+ void finish ();
+ void childDone (NodePtr child);
+ virtual SurfacePtr getSurface (NodePtr node);
+ /* (new) sub-region or NULL if not displayed */
+ Surface *surface ();
+ void resetSurface ();
+ SRect calculateBounds ();
+ void boundsUpdate (); // recalculates and repaint old and new bounds
+ virtual void parseParam (const TrieString & name, const QString & value);
+ virtual bool handleEvent (EventPtr event);
+ NodeRefListPtr listeners (unsigned int event_id);
+ bool needsVideoWidget (); // for 'video' and 'ref' nodes
+ SurfacePtrW sub_surface;
+ NodePtrW external_tree; // if src points to playlist, the resolved top node
+ NodePtrW trans_in;
+ NodePtrW trans_out;
+ NodePtrW active_trans;
+ NodePtrW region_node;
+ QString m_type;
+ CalculatedSizer sizes;
+ Fit fit;
+ int opacity;
+ unsigned int bitrate;
+ unsigned int trans_step;
+ unsigned int trans_steps;
+ enum { sens_opaque, sens_transparent, sens_percentage } sensitivity;
+ bool trans_out_active;
+protected:
+ MouseListeners mouse_listeners;
+ NodeRefListPtr m_MediaAttached; // mouse entered
+ ConnectionPtr region_paint; // attached region needs painting
+ ConnectionPtr region_mouse_enter; // attached region has mouse entered
+ ConnectionPtr region_mouse_leave; // attached region has mouse left
+ ConnectionPtr region_mouse_click; // attached region is clicked
+ ConnectionPtr region_attach; // attached to region
+ TimerInfoPtrW trans_timer;
+ TimerInfoPtrW trans_out_timer;
+};
+
+class KMPLAYER_NO_EXPORT AVMediaType : public MediaType {
+public:
+ AVMediaType (NodePtr & d, const QString & t);
+ NodePtr childFromTag (const QString & tag);
+ virtual Runtime * getNewRuntime ();
+ virtual void defer ();
+ virtual void undefer ();
+ virtual void endOfFile ();
+ virtual void accept (Visitor *);
+ virtual bool expose () const;
+};
+
+class KMPLAYER_NO_EXPORT ImageMediaType : public MediaType {
+public:
+ ImageMediaType (NodePtr & d);
+ Runtime * getNewRuntime ();
+ NodePtr childFromTag (const QString & tag);
+ PlayType playType () { return play_type_image; }
+ virtual void accept (Visitor *);
+};
+
+class KMPLAYER_NO_EXPORT TextMediaType : public MediaType {
+public:
+ TextMediaType (NodePtr & d);
+ Runtime * getNewRuntime ();
+ PlayType playType () { return play_type_info; }
+ virtual void accept (Visitor *);
+};
+
+class KMPLAYER_NO_EXPORT RefMediaType : public MediaType {
+public:
+ RefMediaType (NodePtr & d);
+ Runtime * getNewRuntime ();
+ virtual void accept (Visitor *);
+};
+
+class KMPLAYER_NO_EXPORT Brush : public MediaType {
+public:
+ Brush (NodePtr & d);
+ virtual void accept (Visitor *);
+ virtual Runtime * getNewRuntime ();
+};
+
+class KMPLAYER_NO_EXPORT Set : public TimedMrl {
+public:
+ KDE_NO_CDTOR_EXPORT Set (NodePtr & d) : TimedMrl (d, id_node_set) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "set"; }
+ virtual Runtime * getNewRuntime ();
+ PlayType playType () { return play_type_none; }
+};
+
+class KMPLAYER_NO_EXPORT Animate : public TimedMrl {
+public:
+ KDE_NO_CDTOR_EXPORT Animate (NodePtr & d) : TimedMrl (d, id_node_animate) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "animate"; }
+ virtual Runtime * getNewRuntime ();
+ PlayType playType () { return play_type_none; }
+ bool handleEvent (EventPtr event);
+};
+
+class KMPLAYER_NO_EXPORT AnimateMotion : public TimedMrl {
+public:
+ KDE_NO_CDTOR_EXPORT AnimateMotion (NodePtr & d)
+ : TimedMrl (d, id_node_animate) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "animateMotion"; }
+ virtual Runtime *getNewRuntime ();
+ PlayType playType () { return play_type_none; }
+ bool handleEvent (EventPtr event);
+};
+
+// TODO animateColor transitionFilter
+
+class KMPLAYER_NO_EXPORT Param : public Element {
+public:
+ KDE_NO_CDTOR_EXPORT Param (NodePtr & d) : Element (d, id_node_param) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "param"; }
+ void activate ();
+ bool expose () const { return false; }
+};
+
+} // SMIL namespace
+
+} // KMPlayer namespace
+
+#endif //_KMPLAYER_SMIL_H_
diff --git a/src/kmplayer_xspf.cpp b/src/kmplayer_xspf.cpp
new file mode 100644
index 0000000..c7fbce3
--- /dev/null
+++ b/src/kmplayer_xspf.cpp
@@ -0,0 +1,151 @@
+/**
+ * Copyright (C) 2006 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include <config.h>
+#include <kdebug.h>
+#include <kurl.h>
+
+#include "kmplayer_xspf.h"
+
+using namespace KMPlayer;
+
+
+KDE_NO_EXPORT NodePtr XSPF::Playlist::childFromTag (const QString & tag) {
+ const char * name = tag.latin1 ();
+ if (!strcasecmp (name, "tracklist"))
+ return new Tracklist (m_doc);
+ else if (!strcasecmp (name, "creator"))
+ return new DarkNode (m_doc, name, id_node_creator);
+ else if (!strcasecmp (name, "title"))
+ return new DarkNode (m_doc, name, id_node_title);
+ else if (!strcasecmp (name, "annotation"))
+ return new DarkNode (m_doc, name, id_node_annotation);
+ else if (!strcasecmp (name, "info"))
+ return new DarkNode (m_doc, name, id_node_info);
+ else if (!strcasecmp (name, "location"))
+ return new DarkNode (m_doc, name, id_node_location);
+ else if (!strcasecmp (name, "identifier"))
+ return new DarkNode (m_doc, name, id_node_identifier);
+ else if (!strcasecmp (name, "image"))
+ return new DarkNode (m_doc, name, id_node_image);
+ else if (!strcasecmp (name, "date"))
+ return new DarkNode (m_doc, name, id_node_date);
+ else if (!strcasecmp (name, "license"))
+ return new DarkNode (m_doc, name, id_node_license);
+ else if (!strcasecmp (name, "attribution"))
+ return new DarkNode (m_doc, name, id_node_attribution);
+ else if (!strcasecmp (name, "link"))
+ return new DarkNode (m_doc, name, id_node_link);
+ else if (!strcasecmp (name, "meta"))
+ return new DarkNode (m_doc, name, id_node_meta);
+ else if (!strcasecmp (name, "extension"))
+ return new DarkNode (m_doc, name, id_node_extension);
+ return 0L;
+}
+
+KDE_NO_EXPORT void XSPF::Playlist::closed () {
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ()) {
+ if (e->id == id_node_title)
+ pretty_name = e->innerText ().simplifyWhiteSpace ();
+ else if (e->id == id_node_location)
+ src = e->innerText ().stripWhiteSpace ();
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT NodePtr XSPF::Tracklist::childFromTag (const QString & tag) {
+ const char * name = tag.latin1 ();
+ if (!strcasecmp (name, "track"))
+ return new XSPF::Track (m_doc);
+ return 0L;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_EXPORT NodePtr XSPF::Track::childFromTag (const QString & tag) {
+ const char * name = tag.latin1 ();
+ if (!strcasecmp (name, "location"))
+ return new Location (m_doc);
+ else if (!strcasecmp (name, "creator"))
+ return new DarkNode (m_doc, name, id_node_creator);
+ else if (!strcasecmp (name, "title"))
+ return new DarkNode (m_doc, name, id_node_title);
+ else if (!strcasecmp (name, "annotation"))
+ return new DarkNode (m_doc, name, id_node_annotation);
+ else if (!strcasecmp (name, "info"))
+ return new DarkNode (m_doc, name, id_node_info);
+ else if (!strcasecmp (name, "identifier"))
+ return new DarkNode (m_doc, name, id_node_identifier);
+ else if (!strcasecmp (name, "album"))
+ return new DarkNode (m_doc, name, id_node_album);
+ else if (!strcasecmp (name, "image"))
+ return new DarkNode (m_doc, name, id_node_image);
+ else if (!strcasecmp (name, "trackNum"))
+ return new DarkNode (m_doc, name, id_node_tracknum);
+ else if (!strcasecmp (name, "duration"))
+ return new DarkNode (m_doc, name, id_node_duration);
+ else if (!strcasecmp (name, "link"))
+ return new DarkNode (m_doc, name, id_node_link);
+ else if (!strcasecmp (name, "meta"))
+ return new DarkNode (m_doc, name, id_node_meta);
+ else if (!strcasecmp (name, "extension"))
+ return new DarkNode (m_doc, name, id_node_extension);
+ return 0L;
+}
+
+KDE_NO_EXPORT void XSPF::Track::closed () {
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ()) {
+ switch (e->id) {
+ case id_node_title:
+ pretty_name = e->innerText ();
+ break;
+ case id_node_location:
+ location = e;
+ src = e->mrl ()->src;
+ break;
+ }
+ }
+}
+
+KDE_NO_EXPORT void XSPF::Track::activate () {
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ if (e->id == id_node_annotation) {
+ PlayListNotify * n = document ()->notify_listener;
+ if (n)
+ n->setInfoMessage (e->innerText ().stripWhiteSpace ());
+ break;
+ }
+ Mrl::activate ();
+}
+
+KDE_NO_EXPORT Node::PlayType XSPF::Track::playType () {
+ if (location)
+ return location->playType ();
+ return Mrl::playType ();
+}
+
+KDE_NO_EXPORT Mrl * XSPF::Track::linkNode () {
+ if (location)
+ return location->mrl ();
+ return Mrl::linkNode ();
+}
+
+void XSPF::Location::closed () {
+ src = innerText ().stripWhiteSpace ();
+}
diff --git a/src/kmplayer_xspf.h b/src/kmplayer_xspf.h
new file mode 100644
index 0000000..83463e0
--- /dev/null
+++ b/src/kmplayer_xspf.h
@@ -0,0 +1,94 @@
+/* This file is part of the KDE project
+ *
+ * Copyright (C) 2006 Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _KMPLAYER_XSPF_H_
+#define _KMPLAYER_XSPF_H_
+
+#include <qstring.h>
+
+#include "kmplayerplaylist.h"
+
+namespace KMPlayer {
+
+namespace XSPF {
+
+const short id_node_playlist = 500;
+const short id_node_title = 501;
+const short id_node_creator = 502;
+const short id_node_annotation = 503;
+const short id_node_info = 504;
+const short id_node_location = 505;
+const short id_node_identifier = 506;
+const short id_node_image = 507;
+const short id_node_date = 508;
+const short id_node_license = 509;
+const short id_node_attribution = 510;
+const short id_node_meta = 511;
+const short id_node_extension = 512;
+const short id_node_tracklist = 513;
+const short id_node_track = 514;
+const short id_node_album = 515;
+const short id_node_tracknum = 516;
+const short id_node_duration = 517;
+const short id_node_link = 518;
+
+class KMPLAYER_NO_EXPORT Playlist : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Playlist (NodePtr & d) : Mrl (d, id_node_playlist) {}
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "playlist"; }
+ bool expose () const { return !pretty_name.isEmpty (); }
+ void closed ();
+};
+
+class KMPLAYER_NO_EXPORT Tracklist : public Element {
+public:
+ KDE_NO_CDTOR_EXPORT Tracklist (NodePtr & d) : Element (d, id_node_tracklist) {}
+ NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "tracklist"; }
+ bool expose () const { return false; }
+};
+
+class KMPLAYER_NO_EXPORT Track : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Track (NodePtr & d) : Mrl (d, id_node_track) {}
+ void closed ();
+ void activate ();
+ PlayType playType ();
+ Mrl * linkNode ();
+ KDE_NO_EXPORT const char * nodeName () const { return "track"; }
+ NodePtr childFromTag (const QString & tag);
+ NodePtrW location;
+};
+
+class KMPLAYER_NO_EXPORT Location : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT Location (NodePtr &d) : Mrl (d, id_node_location) {}
+ KDE_NO_EXPORT const char * nodeName () const { return "location"; }
+ void closed ();
+ bool expose () const { return false; }
+};
+
+} //namespace XSPF
+
+
+} // namespace KMPlayer
+
+#endif //_KMPLAYER_XSPF_H_
diff --git a/src/kmplayerapp.cpp b/src/kmplayerapp.cpp
new file mode 100644
index 0000000..91e01a8
--- /dev/null
+++ b/src/kmplayerapp.cpp
@@ -0,0 +1,2296 @@
+/***************************************************************************
+ kmplayerapp.cpp - description
+ -------------------
+ begin : Sat Dec 7 16:14:51 CET 2002
+ copyright : (C) 2002 by Koos Vriezen
+ email :
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#undef Always
+
+// include files for QT
+#include <qdatastream.h>
+#include <qregexp.h>
+#include <qiodevice.h>
+#include <qprinter.h>
+#include <qcursor.h>
+#include <qpainter.h>
+#include <qcheckbox.h>
+#include <qpushbutton.h>
+#include <qkeysequence.h>
+#include <qapplication.h>
+#include <qslider.h>
+#include <qlayout.h>
+#include <qwhatsthis.h>
+#include <qtimer.h>
+#include <qfile.h>
+#include <qmetaobject.h>
+
+// include files for KDE
+#include <kdeversion.h>
+#include <kstandarddirs.h>
+#include <kiconloader.h>
+#include <kmessagebox.h>
+#include <kfiledialog.h>
+#include <klineeditdlg.h>
+#include <kmenubar.h>
+#include <kstatusbar.h>
+#include <kurldrag.h>
+#include <klocale.h>
+#include <kconfig.h>
+#include <kstdaction.h>
+#include <kdebug.h>
+#include <dcopclient.h>
+#include <kpopupmenu.h>
+#include <kurlrequester.h>
+#include <klineedit.h>
+#include <kkeydialog.h>
+#include <ksystemtray.h>
+#include <kedittoolbar.h>
+
+// application specific includes
+#include "kmplayer.h"
+#include "kmplayerview.h"
+#include "playlistview.h"
+#include "viewarea.h"
+#include "kmplayercontrolpanel.h"
+#include "kmplayerpartbase.h"
+#include "kmplayerprocess.h"
+#include "kmplayerappsource.h"
+#include "kmplayertvsource.h"
+#include "kmplayerbroadcast.h"
+#include "kmplayervdr.h"
+#include "kmplayerconfig.h"
+
+static const int DVDNav_start = 1;
+static const int DVDNav_previous = 2;
+static const int DVDNav_next = 3;
+static const int DVDNav_root = 4;
+static const int DVDNav_up = 5;
+
+extern const char * strMPlayerGroup;
+
+static const short id_node_recent_document = 31;
+static const short id_node_recent_node = 32;
+static const short id_node_disk_document = 33;
+static const short id_node_disk_node = 34;
+
+
+class KMPLAYER_NO_EXPORT ListsSource : public KMPlayer::URLSource {
+public:
+ KDE_NO_CDTOR_EXPORT ListsSource (KMPlayer::PartBase * p)
+ : KMPlayer::URLSource (p, "lists://") {}
+ void jump (KMPlayer::NodePtr e);
+ void activate ();
+ void setDocument (KMPlayer::NodePtr doc, KMPlayer::NodePtr cur);
+ QString prettyName () { return m_document->mrl ()->pretty_name; }
+};
+
+class KMPLAYER_NO_EXPORT Recents : public FileDocument {
+public:
+ Recents (KMPlayerApp *a);
+ void defer ();
+ void activate ();
+ void childDone (KMPlayer::NodePtr);
+ KMPlayer::NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "playlist"; }
+ KMPlayerApp * app;
+};
+
+class KMPLAYER_NO_EXPORT Recent : public KMPlayer::Mrl {
+public:
+ Recent (KMPlayer::NodePtr & doc, KMPlayerApp *a, const QString &url = QString());
+ void activate ();
+ void closed ();
+ KDE_NO_EXPORT const char * nodeName () const { return "item"; }
+ KMPlayerApp * app;
+};
+
+class KMPLAYER_NO_EXPORT Group : public KMPlayer::Mrl {
+public:
+ Group (KMPlayer::NodePtr &doc, KMPlayerApp *a, const QString &pn=QString());
+ KMPlayer::NodePtr childFromTag (const QString & tag);
+ void defer () {} // TODO lazy loading of largish sub trees
+ void closed ();
+ KDE_NO_EXPORT const char * nodeName () const { return "group"; }
+ KMPlayerApp * app;
+};
+
+class KMPLAYER_NO_EXPORT Playlist : public FileDocument {
+public:
+ Playlist (KMPlayerApp *a, KMPlayer::PlayListNotify *n, bool plmod = false);
+ void childDone (KMPlayer::NodePtr);
+ void defer ();
+ void activate ();
+ KMPlayer::NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "playlist"; }
+ KMPlayerApp * app;
+ bool playmode;
+};
+
+class KMPLAYER_NO_EXPORT PlaylistItemBase : public KMPlayer::Mrl {
+public:
+ PlaylistItemBase (KMPlayer::NodePtr &d, short id, KMPlayerApp *a, bool pm);
+ void activate ();
+ void closed ();
+ KMPlayerApp * app;
+ bool playmode;
+};
+
+class KMPLAYER_NO_EXPORT PlaylistItem : public PlaylistItemBase {
+public:
+ PlaylistItem (KMPlayer::NodePtr & doc, KMPlayerApp *a, bool playmode, const QString &url = QString());
+ void closed ();
+ void begin ();
+ PlayType playType () { return play_type_unknown; }
+ void setNodeName (const QString &);
+ const char * nodeName () const KDE_NO_EXPORT { return "item"; }
+};
+
+class KMPLAYER_NO_EXPORT PlaylistGroup : public KMPlayer::Mrl {
+public:
+ PlaylistGroup (KMPlayer::NodePtr &doc, KMPlayerApp *a, const QString &pn);
+ PlaylistGroup (KMPlayer::NodePtr &doc, KMPlayerApp *a, bool plmode=false);
+ KMPlayer::NodePtr childFromTag (const QString & tag);
+ void closed ();
+ void setNodeName (const QString &);
+ KDE_NO_EXPORT const char * nodeName () const { return "group"; }
+ KMPlayerApp * app;
+ bool playmode;
+};
+
+class KMPLAYER_NO_EXPORT HtmlObject : public PlaylistItemBase {
+public:
+ HtmlObject (KMPlayer::NodePtr & doc, KMPlayerApp *a, bool playmode);
+ void activate ();
+ void closed ();
+ KMPlayer::NodePtr childFromTag (const QString & tag);
+ const char * nodeName () const KDE_NO_EXPORT { return "object"; }
+};
+
+KDE_NO_EXPORT void ListsSource::jump (KMPlayer::NodePtr e) {
+ if (e->document()->firstChild ())
+ Source::jump (e);
+ else
+ e->activate ();
+}
+
+KDE_NO_EXPORT void ListsSource::activate () {
+ playCurrent ();
+}
+
+KDE_NO_EXPORT void ListsSource::setDocument (KMPlayer::NodePtr doc, KMPlayer::NodePtr cur) {
+ if (m_document)
+ m_document->document()->dispose ();
+ m_document = doc;
+ m_current = cur;
+ //kdDebug () << "setDocument: " << m_document->outerXML () << endl;
+}
+
+KDE_NO_CDTOR_EXPORT FileDocument::FileDocument (short i, const QString &s, KMPlayer::PlayListNotify * n)
+ : KMPlayer::Document (s, n) {
+ id = i;
+}
+
+KDE_NO_EXPORT KMPlayer::NodePtr FileDocument::childFromTag(const QString &tag) {
+ if (tag == QString::fromLatin1 (nodeName ()))
+ return this;
+ return 0L;
+}
+
+void FileDocument::readFromFile (const QString & fn) {
+ QFile file (fn);
+ kdDebug () << "readFromFile " << fn << endl;
+ if (file.exists ()) {
+ file.open (IO_ReadOnly);
+ QTextStream inxml (&file);
+ KMPlayer::readXML (this, inxml, QString (), false);
+ normalize ();
+ }
+}
+
+void FileDocument::writeToFile (const QString & fn) {
+ QFile file (fn);
+ kdDebug () << "writeToFile " << fn << endl;
+ file.open (IO_WriteOnly);
+ QCString utf = outerXML ().utf8 ();
+ file.writeBlock (utf, utf.length ());
+}
+
+KDE_NO_CDTOR_EXPORT Recents::Recents (KMPlayerApp *a)
+ : FileDocument (id_node_recent_document, "recents://"),
+ app(a) {
+ pretty_name = i18n ("Most Recent");
+}
+
+KDE_NO_EXPORT void Recents::activate () {
+ if (!resolved)
+ defer ();
+}
+
+KDE_NO_EXPORT void Recents::defer () {
+ if (!resolved) {
+ resolved = true;
+ readFromFile (locateLocal ("data", "kmplayer/recent.xml"));
+ }
+}
+
+KDE_NO_EXPORT KMPlayer::NodePtr Recents::childFromTag (const QString & tag) {
+ // kdDebug () << nodeName () << " childFromTag " << tag << endl;
+ if (tag == QString::fromLatin1 ("item"))
+ return new Recent (m_doc, app);
+ else if (tag == QString::fromLatin1 ("group"))
+ return new Group (m_doc, app);
+ return FileDocument::childFromTag (tag);
+}
+
+KDE_NO_EXPORT void Recents::childDone (KMPlayer::NodePtr) {
+ finish ();
+}
+
+KDE_NO_CDTOR_EXPORT
+Recent::Recent (KMPlayer::NodePtr & doc, KMPlayerApp * a, const QString &url)
+ : KMPlayer::Mrl (doc, id_node_recent_node), app (a) {
+ src = url;
+ setAttribute (KMPlayer::StringPool::attr_url, url);
+}
+
+KDE_NO_EXPORT void Recent::closed () {
+ if (src.isEmpty ())
+ src = getAttribute (KMPlayer::StringPool::attr_url);
+}
+
+KDE_NO_EXPORT void Recent::activate () {
+ app->openDocumentFile (KURL (src));
+}
+
+KDE_NO_CDTOR_EXPORT
+Group::Group (KMPlayer::NodePtr & doc, KMPlayerApp * a, const QString & pn)
+ : KMPlayer::Mrl (doc, KMPlayer::id_node_group_node), app (a) {
+ pretty_name = pn;
+ if (!pn.isEmpty ())
+ setAttribute (KMPlayer::StringPool::attr_title, pn);
+}
+
+KDE_NO_EXPORT KMPlayer::NodePtr Group::childFromTag (const QString & tag) {
+ if (tag == QString::fromLatin1 ("item"))
+ return new Recent (m_doc, app);
+ else if (tag == QString::fromLatin1 ("group"))
+ return new Group (m_doc, app);
+ return 0L;
+}
+
+KDE_NO_EXPORT void Group::closed () {
+ if (pretty_name.isEmpty ())
+ pretty_name = getAttribute (KMPlayer::StringPool::attr_title);
+}
+
+KDE_NO_EXPORT void Playlist::defer () {
+ if (playmode)
+ KMPlayer::Document::defer ();
+ else if (!resolved) {
+ resolved = true;
+ readFromFile (locateLocal ("data", "kmplayer/playlist.xml"));
+ }
+}
+
+KDE_NO_EXPORT void Playlist::activate () {
+ if (playmode)
+ KMPlayer::Document::activate ();
+ else if (!resolved)
+ defer ();
+}
+
+KDE_NO_CDTOR_EXPORT Playlist::Playlist (KMPlayerApp *a, KMPlayer::PlayListNotify *n, bool plmode)
+ : FileDocument (KMPlayer::id_node_playlist_document, "Playlist://", n),
+ app(a),
+ playmode (plmode) {
+ pretty_name = i18n ("Persistent Playlists");
+}
+
+KDE_NO_EXPORT KMPlayer::NodePtr Playlist::childFromTag (const QString & tag) {
+ // kdDebug () << nodeName () << " childFromTag " << tag << endl;
+ const char * name = tag.ascii ();
+ if (!strcmp (name, "item"))
+ return new PlaylistItem (m_doc, app, playmode);
+ else if (!strcmp (name, "group"))
+ return new PlaylistGroup (m_doc, app, playmode);
+ else if (!strcmp (name, "object"))
+ return new HtmlObject (m_doc, app, playmode);
+ return FileDocument::childFromTag (tag);
+}
+
+KDE_NO_EXPORT void Playlist::childDone (KMPlayer::NodePtr c) {
+ if (!playmode)
+ finish ();
+ else
+ FileDocument::childDone (c);
+}
+
+KDE_NO_CDTOR_EXPORT
+PlaylistItemBase::PlaylistItemBase (KMPlayer::NodePtr &d, short i, KMPlayerApp *a, bool pm)
+ : KMPlayer::Mrl (d, i), app (a), playmode (pm) {
+}
+
+KDE_NO_EXPORT void PlaylistItemBase::activate () {
+ if (playmode) {
+ Mrl::activate ();
+ } else {
+ ListsSource * source = static_cast <ListsSource *> (app->player ()->sources () ["listssource"]);
+ KMPlayer::NodePtr pl = new Playlist (app, source, true);
+ QString data;
+ QString pn;
+ if (parentNode ()->id == KMPlayer::id_node_group_node) {
+ data = parentNode ()->innerXML ();
+ pn = parentNode ()->mrl ()->pretty_name;
+ } else {
+ data = outerXML ();
+ pn = pretty_name.isEmpty () ? src : pretty_name;
+ }
+ pl->mrl ()->pretty_name = pn;
+ //kdDebug () << "cloning to " << data << endl;
+ QTextStream inxml (data, IO_ReadOnly);
+ KMPlayer::readXML (pl, inxml, QString (), false);
+ pl->normalize ();
+ KMPlayer::NodePtr cur = pl->firstChild ();
+ pl->mrl ()->resolved = !!cur;
+ if (parentNode ()->id == KMPlayer::id_node_group_node && cur) {
+ KMPlayer::NodePtr sister = parentNode ()->firstChild ();
+ while (sister && cur && sister.ptr () != this) {
+ sister = sister->nextSibling ();
+ cur = cur->nextSibling ();
+ }
+ }
+ bool reset_only = source == app->player ()->source ();
+ if (reset_only)
+ app->player ()->stop ();
+ source->setDocument (pl, cur);
+ if (reset_only) {
+ source->activate ();
+ app->setCaption (pn);
+ } else
+ app->player ()->setSource (source);
+ }
+}
+
+void PlaylistItemBase::closed () {
+ if (pretty_name.isEmpty ())
+ pretty_name = getAttribute (KMPlayer::StringPool::attr_title);
+}
+
+KDE_NO_CDTOR_EXPORT
+PlaylistItem::PlaylistItem (KMPlayer::NodePtr & doc, KMPlayerApp *a, bool pm, const QString &url)
+ : PlaylistItemBase (doc, KMPlayer::id_node_playlist_item, a, pm) {
+ src = url;
+ setAttribute (KMPlayer::StringPool::attr_url, url);
+}
+
+KDE_NO_EXPORT void PlaylistItem::closed () {
+ if (src.isEmpty ())
+ src = getAttribute (KMPlayer::StringPool::attr_url);
+ PlaylistItemBase::closed ();
+}
+
+KDE_NO_EXPORT void PlaylistItem::begin () {
+ if (playmode && firstChild ())
+ firstChild ()->activate ();
+ else
+ Mrl::begin ();
+}
+
+KDE_NO_EXPORT void PlaylistItem::setNodeName (const QString & s) {
+ src = s;
+ setAttribute (KMPlayer::StringPool::attr_url, s);
+}
+
+KDE_NO_CDTOR_EXPORT
+PlaylistGroup::PlaylistGroup (KMPlayer::NodePtr & doc, KMPlayerApp * a, const QString & pn)
+ : KMPlayer::Mrl (doc, KMPlayer::id_node_group_node), app (a), playmode (false) {
+ pretty_name = pn;
+ if (!pn.isEmpty ())
+ setAttribute (KMPlayer::StringPool::attr_title, pn);
+}
+
+KDE_NO_CDTOR_EXPORT
+PlaylistGroup::PlaylistGroup (KMPlayer::NodePtr & doc, KMPlayerApp * a, bool lm)
+ : KMPlayer::Mrl (doc, KMPlayer::id_node_group_node), app (a), playmode (lm) {
+}
+
+KDE_NO_EXPORT KMPlayer::NodePtr PlaylistGroup::childFromTag (const QString & tag) {
+ const char * name = tag.ascii ();
+ if (!strcmp (name, "item"))
+ return new PlaylistItem (m_doc, app, playmode);
+ else if (!strcmp (name, "group"))
+ return new PlaylistGroup (m_doc, app, playmode);
+ else if (!strcmp (name, "object"))
+ return new HtmlObject (m_doc, app, playmode);
+ return 0L;
+}
+
+KDE_NO_EXPORT void PlaylistGroup::closed () {
+ if (pretty_name.isEmpty ())
+ pretty_name = getAttribute (KMPlayer::StringPool::attr_title);
+}
+
+KDE_NO_EXPORT void PlaylistGroup::setNodeName (const QString & t) {
+ pretty_name = t;
+ setAttribute (KMPlayer::StringPool::attr_title, t);
+}
+
+KDE_NO_CDTOR_EXPORT
+HtmlObject::HtmlObject (KMPlayer::NodePtr &doc, KMPlayerApp *a, bool pm)
+ : PlaylistItemBase (doc, KMPlayer::id_node_html_object, a, pm) {}
+
+KDE_NO_EXPORT void HtmlObject::activate () {
+ if (playmode)
+ KMPlayer::Mrl::activate ();
+ else
+ PlaylistItemBase::activate ();
+}
+
+KDE_NO_EXPORT void HtmlObject::closed () {
+ for (Node *n = firstChild ().ptr (); n; n = n->nextSibling ().ptr ()) {
+ if (n->id == KMPlayer::id_node_param) {
+ KMPlayer::Element *e = static_cast <KMPlayer::Element *> (n);
+ QString name = e->getAttribute (KMPlayer::StringPool::attr_name);
+ if (name == "type")
+ mimetype = e->getAttribute (KMPlayer::StringPool::attr_value);
+ else if (name == "movie")
+ src = e->getAttribute (KMPlayer::StringPool::attr_value);
+ } else if (n->id == KMPlayer::id_node_html_embed) {
+ KMPlayer::Element *e = static_cast <KMPlayer::Element *> (n);
+ QString type = e->getAttribute (KMPlayer::StringPool::attr_type);
+ if (!type.isEmpty ())
+ mimetype = type;
+ QString asrc = e->getAttribute (KMPlayer::StringPool::attr_src);
+ if (!asrc.isEmpty ())
+ src = asrc;
+ }
+ }
+ PlaylistItemBase::closed ();
+}
+
+KDE_NO_EXPORT KMPlayer::NodePtr HtmlObject::childFromTag (const QString & tag) {
+ const char *name = tag.ascii ();
+ if (!strcasecmp (name, "param"))
+ return new KMPlayer::DarkNode (m_doc, name, KMPlayer::id_node_param);
+ else if (!strcasecmp (name, "embed"))
+ return new KMPlayer::DarkNode(m_doc, name,KMPlayer::id_node_html_embed);
+ return NULL;
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerApp::KMPlayerApp(QWidget* , const char* name)
+ : KMainWindow(0, name),
+ config (kapp->config ()),
+ m_systray (0L),
+ m_player (new KMPlayer::PartBase (this, 0L, 0L, 0L, config)),
+ m_view (static_cast <KMPlayer::View*> (m_player->view())),
+ m_dvdmenu (new QPopupMenu (this)),
+ m_dvdnavmenu (new QPopupMenu (this)),
+ m_vcdmenu (new QPopupMenu (this)),
+ m_audiocdmenu (new QPopupMenu (this)),
+ m_tvmenu (new QPopupMenu (this)),
+ m_ffserverconfig (new KMPlayerFFServerConfig),
+ m_broadcastconfig (new KMPlayerBroadcastConfig (m_player, m_ffserverconfig)),
+ edit_tree_id (-1),
+ last_time_left (0),
+ m_played_intro (false),
+ m_played_exit (false),
+ m_minimal_mode (false)
+{
+ setCentralWidget (m_view);
+ connect (m_broadcastconfig, SIGNAL (broadcastStarted()), this, SLOT (broadcastStarted()));
+ connect (m_broadcastconfig, SIGNAL (broadcastStopped()), this, SLOT (broadcastStopped()));
+ initStatusBar();
+#ifdef HAVE_DBUS
+ m_player->setServiceName (QString ("org.kde.kmplayer-%1").arg (getpid ()));
+#endif
+ m_player->init (actionCollection ());
+ m_player->players () ["xvideo"] = new XVideo(m_player,m_player->settings());
+ m_player->setProcess ("mplayer");
+ m_player->setRecorder ("mencoder");
+ ListsSource * lstsrc = new ListsSource (m_player);
+ m_player->sources () ["listssource"] = lstsrc;
+ m_player->sources () ["dvdsource"] = new ::KMPlayerDVDSource(this, m_dvdmenu);
+ m_player->sources () ["dvdnavsource"] = new KMPlayerDVDNavSource (this, m_dvdnavmenu);
+ m_player->sources () ["vcdsource"] = new KMPlayerVCDSource(this, m_vcdmenu);
+ m_player->sources () ["audiocdsource"] = new KMPlayerAudioCDSource (this, m_audiocdmenu);
+ m_player->sources () ["pipesource"] = new KMPlayerPipeSource (this);
+ m_player->sources () ["tvsource"] = new KMPlayerTVSource (this, m_tvmenu);
+ m_player->sources () ["vdrsource"] = new KMPlayerVDRSource (this);
+ m_player->setSource (m_player->sources () ["urlsource"]);
+ initActions();
+ initView();
+
+ //setAutoSaveSettings();
+ playlist = new Playlist (this, lstsrc);
+ playlist_id = m_view->playList ()->addTree (playlist, "listssource", "player_playlist", KMPlayer::PlayListView::AllowDrag | KMPlayer::PlayListView::AllowDrops | KMPlayer::PlayListView::TreeEdit | KMPlayer::PlayListView::Moveable | KMPlayer::PlayListView::Deleteable);
+ readOptions();
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerApp::~KMPlayerApp () {
+ delete m_broadcastconfig;
+ if (recents)
+ recents->document ()->dispose ();
+ if (playlist)
+ playlist->document ()->dispose ();
+}
+
+
+KDE_NO_EXPORT void KMPlayerApp::initActions () {
+ KActionCollection * ac = actionCollection ();
+ fileNewWindow = new KAction(i18n("New &Window"), 0, 0, this, SLOT(slotFileNewWindow()), ac, "new_window");
+ fileOpen = KStdAction::open(this, SLOT(slotFileOpen()), ac, "open");
+ fileOpenRecent = KStdAction::openRecent(this, SLOT(slotFileOpenRecent(const KURL&)), ac, "open_recent");
+ KStdAction::saveAs (this, SLOT (slotSaveAs ()), ac, "save_as");
+ new KAction (i18n ("Clear &History"), 0, 0, this, SLOT (slotClearHistory ()), ac, "clear_history");
+ fileClose = KStdAction::close (this, SLOT (slotFileClose ()), ac);
+ fileQuit = KStdAction::quit (this, SLOT (slotFileQuit ()), ac);
+ new KAction (i18n ("&Open DVD"), QString ("dvd_mount"), KShortcut (), this, SLOT(openDVD ()), ac, "opendvd");
+ new KAction (i18n ("&Open VCD"), QString ("cdrom_mount"), KShortcut (), this, SLOT(openVCD ()), ac, "openvcd");
+ new KAction (i18n ("&Open Audio CD"), QString ("cdrom_mount"), KShortcut (), this, SLOT(openAudioCD ()), ac, "openaudiocd");
+ new KAction (i18n ("&Open Pipe..."), QString ("pipe"), KShortcut (), this, SLOT(openPipe ()), ac, "source_pipe");
+ //KGlobal::iconLoader ()->loadIconSet (QString ("tv"), KIcon::Small, 0,true)
+ new KAction (i18n ("&Connect"), QString ("connect_established"), KShortcut (), this, SLOT (openVDR ()), ac, "vdr_connect");
+ editVolumeInc = new KAction (i18n ("Increase Volume"), QString ("player_volume"), KShortcut (), m_player, SLOT (increaseVolume ()), ac, "edit_volume_up");
+ editVolumeDec = new KAction (i18n ("Decrease Volume"), QString ("player_volume"), KShortcut (), m_player, SLOT(decreaseVolume ()), ac, "edit_volume_down");
+ toggleView = new KAction (i18n ("C&onsole"), QString ("konsole"), KShortcut (), m_player->view(), SLOT (toggleVideoConsoleWindow ()), ac, "view_video");
+ //new KAction (i18n ("V&ideo"), QString ("video"), KShortcut (), m_view, SLOT (toggleVideoConsoleWindow ()), ac, "view_video");
+ new KAction (i18n ("Pla&y List"), QString ("player_playlist"), KShortcut (), m_player, SLOT (showPlayListWindow ()), ac, "view_playlist");
+ new KAction (i18n ("Minimal mode"), QString ("empty"), KShortcut (), this, SLOT (slotMinimalMode ()), ac, "view_minimal");
+ new KAction (i18n ("50%"), 0, 0, this, SLOT (zoom50 ()), ac, "view_zoom_50");
+ new KAction (i18n ("100%"), QString ("viewmagfit"), KShortcut (), this, SLOT (zoom100 ()), ac, "view_zoom_100");
+ new KAction (i18n ("150%"), 0, 0, this, SLOT (zoom150 ()), ac, "view_zoom_150");
+ viewEditMode = new KToggleAction (i18n ("&Edit mode"), 0, 0, this, SLOT (editMode ()), ac, "edit_mode");
+ viewSyncEditMode = new KAction (i18n ("Sync &with playlist"), QString ("reload"), KShortcut (), this, SLOT (syncEditMode ()), ac, "sync_edit_mode");
+ viewSyncEditMode->setEnabled (false);
+ new KAction (i18n ("Show Popup Menu"), KShortcut (), m_view->controlPanel (), SLOT (showPopupMenu ()), ac, "view_show_popup_menu");
+ new KAction (i18n ("Show Language Menu"), KShortcut (Qt::Key_L), m_view->controlPanel (), SLOT (showLanguageMenu ()), ac, "view_show_lang_menu");
+ viewKeepRatio = new KToggleAction (i18n ("&Keep Width/Height Ratio"), 0, this, SLOT (keepSizeRatio ()), ac, "view_keep_ratio");
+#if KDE_IS_VERSION(3,1,90)
+ viewFullscreen = KStdAction::fullScreen (this, SLOT(fullScreen ()), ac, 0, "view_fullscreen");
+#else
+ viewFullscreen = new KAction (i18n("&Full Screen"), 0, 0, this, SLOT(fullScreen ()), ac, "view_fullscreen");
+#endif
+ /*KAction *playact =*/ new KAction (i18n ("P&lay"), QString ("player_play"), KShortcut (), m_player, SLOT (play ()), ac, "play");
+ /*KAction *pauseact =*/ new KAction (i18n ("&Pause"), QString ("player_pause"), KShortcut (), m_player, SLOT (pause ()), ac, "pause");
+ /*KAction *stopact =*/ new KAction (i18n ("&Stop"), QString ("player_stop"), KShortcut (), m_player, SLOT (stop ()), ac, "stop");
+ /*KAction *artsctrl =*/ new KAction (i18n ("&Arts Control"), QString ("player_volume"), KShortcut (), this, SLOT (startArtsControl ()), ac, "view_arts_control");
+ viewToolBar = KStdAction::showToolbar(this, SLOT(slotViewToolBar()), ac, "showtoolbar");
+ viewStatusBar =KStdAction::showStatusbar(this,SLOT(slotViewStatusBar()),ac, "showstatusbar");
+ viewMenuBar = KStdAction::showMenubar(this, SLOT(slotViewMenuBar()), ac, "showmenu");
+ KStdAction::preferences(m_player, SLOT(showConfigDialog()), ac,"configure");
+ fileNewWindow->setStatusText(i18n("Opens a new application window"));
+ fileOpen->setStatusText(i18n("Opens an existing file"));
+ fileOpenRecent->setStatusText(i18n("Opens a recently used file"));
+ fileClose->setStatusText(i18n("Closes the actual source"));
+ fileQuit->setStatusText(i18n("Quits the application"));
+ //viewToolBar->setStatusText(i18n("Enables/disables the toolbar"));
+ viewStatusBar->setStatusText(i18n("Enables/disables the statusbar"));
+ viewMenuBar->setStatusText(i18n("Enables/disables the menubar"));
+ KStdAction::keyBindings( this, SLOT(slotConfigureKeys()), ac, "configkeys");
+ KStdAction::configureToolbars (this, SLOT (slotConfigureToolbars ()), ac, "configtoolbars");
+}
+
+KDE_NO_EXPORT void KMPlayerApp::initStatusBar () {
+ KStatusBar *sb = statusBar ();
+ sb->insertItem (i18n ("Ready."), id_status_msg);
+ sb->insertItem (QString ("--:--"), id_status_timer, 0, true);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::initMenu () {
+ createGUI (); // first build the one from the kmplayerui.rc
+ QPopupMenu * bookmarkmenu = m_view->controlPanel()->bookmarkMenu ();
+ m_view->controlPanel()->popupMenu ()->removeItem (KMPlayer::ControlPanel::menu_bookmark);
+ menuBar ()->insertItem (i18n ("&Bookmarks"), bookmarkmenu, -1, 2);
+ m_sourcemenu = menuBar ()->findItem (menuBar ()->idAt (0));
+ m_sourcemenu->setText (i18n ("S&ource"));
+ m_sourcemenu->popup ()->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("dvd_mount"), KIcon::Small, 0, true), i18n ("&DVD"), m_dvdmenu, -1, 5);
+ m_dvdmenu->clear ();
+#ifdef HAVE_XINE
+ m_dvdnavmenu->clear ();
+ m_dvdnavmenu->insertItem (i18n ("&Start"), this, SLOT (dvdNav ()));
+ m_dvdmenu->insertItem (i18n ("&DVD Navigator"), m_dvdnavmenu, -1, 1);
+ m_dvdmenu->insertItem (i18n ("&Open DVD"), this, SLOT(openDVD ()), 0,-1, 2);
+#else
+ m_dvdmenu->insertItem (i18n ("&Open DVD"), this, SLOT(openDVD ()), 0,-1, 1);
+#endif
+ m_sourcemenu->popup ()->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("cdrom_mount"), KIcon::Small, 0, true), i18n ("V&CD"), m_vcdmenu, -1, 6);
+ m_vcdmenu->clear ();
+ m_sourcemenu->popup ()->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("tv"), KIcon::Small, 0, true), i18n ("&TV"), m_tvmenu, -1, 8);
+ m_vcdmenu->insertItem (i18n ("&Open VCD"), this, SLOT(openVCD ()), 0,-1, 1);
+ m_sourcemenu->popup ()->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("cdrom_mount"), KIcon::Small, 0, true), i18n ("&Audio CD"), m_audiocdmenu, -1, 7);
+ m_audiocdmenu->insertItem (i18n ("&Open Audio CD"), this, SLOT(openAudioCD ()), 0,-1, 1);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::initView () {
+ //m_view->docArea ()->readDockConfig (config, QString ("Window Layout"));
+ m_player->connectPanel (m_view->controlPanel ());
+ initMenu ();
+ new KAction (i18n ("Increase Volume"), editVolumeInc->shortcut (), m_player, SLOT (increaseVolume ()), m_view->viewArea ()->actionCollection (), "edit_volume_up");
+ new KAction (i18n ("Decrease Volume"), editVolumeDec->shortcut (), m_player, SLOT(decreaseVolume ()), m_view->viewArea ()->actionCollection (), "edit_volume_down");
+ connect (m_player->settings (), SIGNAL (configChanged ()),
+ this, SLOT (configChanged ()));
+ connect (m_player, SIGNAL (loading (int)),
+ this, SLOT (loadingProgress (int)));
+ connect (m_player, SIGNAL (positioned (int, int)),
+ this, SLOT (positioned (int, int)));
+ connect (m_player, SIGNAL (statusUpdated (const QString &)),
+ this, SLOT (slotStatusMsg (const QString &)));
+ connect (m_view, SIGNAL (windowVideoConsoleToggled (int)),
+ this, SLOT (windowVideoConsoleToggled (int)));
+ connect (m_player, SIGNAL (sourceChanged (KMPlayer::Source *, KMPlayer::Source *)), this, SLOT (slotSourceChanged(KMPlayer::Source *, KMPlayer::Source *)));
+ m_view->controlPanel ()->zoomMenu ()->connectItem (KMPlayer::ControlPanel::menu_zoom50,
+ this, SLOT (zoom50 ()));
+ m_view->controlPanel ()->zoomMenu ()->connectItem (KMPlayer::ControlPanel::menu_zoom100,
+ this, SLOT (zoom100 ()));
+ m_view->controlPanel ()->zoomMenu ()->connectItem (KMPlayer::ControlPanel::menu_zoom150,
+ this, SLOT (zoom150 ()));
+ connect (m_view->controlPanel()->broadcastButton (), SIGNAL (clicked ()),
+ this, SLOT (broadcastClicked ()));
+ m_auto_resize = m_player->settings ()->autoresize;
+ if (m_auto_resize)
+ connect (m_player, SIGNAL (sourceDimensionChanged ()),
+ this, SLOT (zoom100 ()));
+ connect (m_view, SIGNAL (fullScreenChanged ()),
+ this, SLOT (fullScreen ()));
+ connect (m_view->playList (), SIGNAL (selectionChanged (QListViewItem *)),
+ this, SLOT (playListItemSelected (QListViewItem *)));
+ connect (m_view->playList(), SIGNAL (dropped (QDropEvent*, QListViewItem*)),
+ this, SLOT (playListItemDropped (QDropEvent *, QListViewItem *)));
+ connect (m_view->playList(), SIGNAL (moved ()),
+ this, SLOT (playListItemMoved ()));
+ connect (m_view->playList(), SIGNAL (prepareMenu (KMPlayer::PlayListItem *, QPopupMenu *)), this, SLOT (preparePlaylistMenu (KMPlayer::PlayListItem *, QPopupMenu *)));
+ m_dropmenu = new QPopupMenu (m_view->playList ());
+ m_dropmenu->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("player_playlist"), KIcon::Small, 0, true), i18n ("&Add to list"), this, SLOT (menuDropInList ()));
+ m_dropmenu->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("folder_grey"), KIcon::Small, 0, true), i18n ("Add in new &Group"), this, SLOT (menuDropInGroup ()));
+ m_dropmenu->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("editcopy"), KIcon::Small, 0, true), i18n ("&Copy here"), this, SLOT (menuCopyDrop ()));
+ m_dropmenu->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("editdelete"), KIcon::Small, 0, true), i18n ("&Delete"), this, SLOT (menuDeleteNode ()));
+ /*QPopupMenu * viewmenu = new QPopupMenu;
+ viewmenu->insertItem (i18n ("Full Screen"), this, SLOT(fullScreen ()),
+ QKeySequence ("CTRL + Key_F"));
+ menuBar ()->insertItem (i18n ("&View"), viewmenu, -1, 2);*/
+ //toolBar("mainToolBar")->hide();
+ setAcceptDrops (true);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::loadingProgress (int perc) {
+ if (perc < 100)
+ statusBar ()->changeItem (QString ("%1%").arg (perc), id_status_timer);
+ else
+ statusBar ()->changeItem (QString ("--:--"), id_status_timer);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::positioned (int pos, int length) {
+ int left = (length - pos) / 10;
+ if (left != last_time_left) {
+ last_time_left = left;
+ QString text ("--:--");
+ if (left > 0) {
+ int h = left / 3600;
+ int m = (left % 3600) / 60;
+ int s = left % 60;
+ if (h > 0)
+ text.sprintf ("%d:%02d:%02d", h, m, s);
+ else
+ text.sprintf ("%02d:%02d", m, s);
+ }
+ statusBar ()->changeItem (text, id_status_timer);
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::windowVideoConsoleToggled (int wt) {
+ if (wt == int (KMPlayer::View::WT_Video)) {
+ toggleView->setText (i18n ("C&onsole"));
+ toggleView->setIcon (QString ("konsole"));
+ } else {
+ toggleView->setText (i18n ("V&ideo"));
+ toggleView->setIcon (QString ("video"));
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::playerStarted () {
+ KMPlayer::Source * source = m_player->source ();
+ if (!strcmp (source->name (), "urlsource")) {
+ KURL url = source->url ();
+ if (url.url ().startsWith ("lists"))
+ return;
+ if (url.isEmpty () && m_player->process ()->mrl ())
+ url = KURL (m_player->process ()->mrl ()->mrl ()->src);
+ recentFiles ()->addURL (url);
+ recents->defer (); // make sure it's loaded
+ recents->insertBefore (new Recent (recents, this, url.url ()), recents->firstChild ());
+ KMPlayer::NodePtr c = recents->firstChild ()->nextSibling ();
+ int count = 1;
+ KMPlayer::NodePtr more;
+ while (c) {
+ if (c->id == id_node_recent_node &&
+ c->mrl ()->src == url.url ()) {
+ KMPlayer::NodePtr tmp = c->nextSibling ();
+ recents->removeChild (c);
+ c = tmp;
+ } else {
+ if (c->id == KMPlayer::id_node_group_node)
+ more = c;
+ c = c->nextSibling ();
+ count++;
+ }
+ }
+ if (!more && count > 10) {
+ more = new Group (recents, this, i18n ("More..."));
+ recents->appendChild (more);
+ }
+ if (more) {
+ KMPlayer::NodePtr item;
+ if (count > 10) {
+ KMPlayer::NodePtr item = more->previousSibling ();
+ recents->removeChild (item);
+ more->insertBefore (item, more->firstChild ());
+ }
+ if (more->firstChild ())
+ c = more->firstChild ()->nextSibling ();
+ count = 0;
+ while (c) {
+ if (c->id == id_node_recent_node &&
+ c->mrl ()->src == url.url ()) {
+ KMPlayer::NodePtr tmp = c->nextSibling ();
+ more->removeChild (c);
+ c = tmp;
+ } else {
+ c = c->nextSibling ();
+ count++;
+ }
+ }
+ if (count > 50)
+ more->removeChild (more->lastChild ());
+ }
+ m_view->playList ()->updateTree (recents_id, recents, 0, false, false);
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotSourceChanged (KMPlayer::Source *olds, KMPlayer::Source * news) {
+ if (olds) {
+ disconnect (olds, SIGNAL (titleChanged (const QString &)), this,
+ SLOT (setCaption (const QString &)));
+ disconnect (olds, SIGNAL (startPlaying ()),
+ this, SLOT (playerStarted ()));
+ }
+ if (news) {
+ setCaption (news->prettyName (), false);
+ connect (news, SIGNAL (titleChanged (const QString &)),
+ this, SLOT (setCaption (const QString &)));
+ connect (news, SIGNAL (startPlaying ()),
+ this, SLOT (playerStarted ()));
+ viewSyncEditMode->setEnabled (m_view->editMode () ||
+ !strcmp (m_player->source ()->name (), "urlsource"));
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::dvdNav () {
+ slotStatusMsg(i18n("DVD Navigation..."));
+ m_player->setSource (m_player->sources () ["dvdnavsource"]);
+ slotStatusMsg(i18n("Ready"));
+}
+
+KDE_NO_EXPORT void KMPlayerApp::openDVD () {
+ slotStatusMsg(i18n("Opening DVD..."));
+ m_player->setSource (m_player->sources () ["dvdsource"]);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::openVCD () {
+ slotStatusMsg(i18n("Opening VCD..."));
+ m_player->setSource (m_player->sources () ["vcdsource"]);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::openAudioCD () {
+ slotStatusMsg(i18n("Opening Audio CD..."));
+ m_player->setSource (m_player->sources () ["audiocdsource"]);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::openPipe () {
+ slotStatusMsg(i18n("Opening pipe..."));
+ bool ok;
+ QString cmd = KLineEditDlg::getText (i18n("Read From Pipe"),
+ i18n ("Enter a command that will output an audio/video stream\nto the stdout. This will be piped to a player's stdin.\n\nCommand:"), m_player->sources () ["pipesource"]->pipeCmd (), &ok, m_player->view());
+ if (!ok) {
+ slotStatusMsg (i18n ("Ready."));
+ return;
+ }
+ static_cast <KMPlayerPipeSource *> (m_player->sources () ["pipesource"])->setCommand (cmd);
+ m_player->setSource (m_player->sources () ["pipesource"]);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::openVDR () {
+ slotStatusMsg(i18n("Opening VDR..."));
+ if (!strcmp (m_player->source ()->name (), "vdrsource") && m_player->process ()->playing ())
+ static_cast<KMPlayerVDRSource *>(m_player->source())->toggleConnected();
+ else
+ m_player->setSource (m_player->sources () ["vdrsource"]);
+}
+
+#ifdef HAVE_CAIRO
+struct IntroSource : public KMPlayer::Source {
+ KMPlayerApp * m_app;
+ IntroSource (KMPlayer::PartBase *p, KMPlayerApp * a)
+ : KMPlayer::Source (i18n ("Intro"), p, "introsource"), m_app (a) {}
+ KDE_NO_EXPORT bool hasLength () { return false; }
+ KDE_NO_EXPORT bool isSeekable () { return false; }
+ KDE_NO_EXPORT QString prettyName () { return i18n ("Intro"); }
+ void activate ();
+ void deactivate ();
+ void stateElementChanged (KMPlayer::Node * node, KMPlayer::Node::State os, KMPlayer::Node::State ns);
+ bool deactivated;
+ bool finished;
+};
+
+KDE_NO_EXPORT void IntroSource::activate () {
+ if (m_player->settings ()->autoresize)
+ m_app->disconnect(m_player, SIGNAL(sourceDimensionChanged()),m_app,SLOT(zoom100()));
+ m_document = new KMPlayer::Document (QString (""), this);
+ QString introfile = locate ("data", "kmplayer/intro.xml");
+ QFile file (introfile);
+ if (file.exists () && file.open (IO_ReadOnly)) {
+ QTextStream ts (&file);
+ KMPlayer::readXML (m_document, ts, QString (), false);
+ } else {
+ QString smil = QString::fromLatin1 (
+ "<smil><head><layout>"
+ "<root-layout width='320' height='240' background-color='black'/>"
+ "<region id='image1' left='31.25%' top='25%' width='37.5%' height='50%' z-order='1'/>"
+ "<region id='reg1' top='10%' height='80%' z-order='2'>"
+ "<region id='image2' left='128' top='72' width='64' bottom='56'/>"
+ "</region>"
+ "</layout>"
+ "<transition id='fadein-1' dur='0.6' type='fade'/>"
+ "<transition id='iris1' dur='0.3' type='irisWipe'/>"
+ "</head>"
+ "<body>"
+ "<excl>"
+ "<par>"
+ "<img src='%1' region='image1' dur='.6' fit='fill' transOut='iris1'/>"
+ "<img region='image2' src='%2' begin='0.3' dur='0.6' fit='hidden' fill='freeze' transIn='fadein-1'/>"
+ "</par>"
+ "<seq begin='reg1.activateEvent'/>"
+ "</excl>"
+ "</body></smil>"
+ ).arg (locate ("data", "kmplayer/noise.gif")).arg (KGlobal::iconLoader()->iconPath (QString::fromLatin1 ("kmplayer"), -64));
+ QTextStream ts (smil.utf8 (), IO_ReadOnly);
+ KMPlayer::readXML (m_document, ts, QString (), false);
+ }
+ //m_document->normalize ();
+ m_current = m_document; //mrl->self ();
+ if (m_document && m_document->firstChild ()) {
+ KMPlayer::Mrl * mrl = m_document->firstChild ()->mrl ();
+ if (mrl) {
+ Source::setDimensions (m_document->firstChild (), mrl->width, mrl->height);
+ m_player->updateTree ();
+ m_current->activate ();
+ emit startPlaying ();
+ }
+ }
+ deactivated = finished = false;
+}
+
+KDE_NO_EXPORT void IntroSource::stateElementChanged (KMPlayer::Node * node, KMPlayer::Node::State, KMPlayer::Node::State new_state) {
+ if (new_state == KMPlayer::Node::state_deactivated &&
+ m_document == node) {
+ m_document->reset ();
+ finished = true;
+ if (m_player->view ())
+ m_app->restoreFromConfig ();
+ emit stopPlaying ();
+ if (!deactivated) // replace introsource with urlsource
+ m_player->openURL (KURL ());
+ }
+}
+
+KDE_NO_EXPORT void IntroSource::deactivate () {
+ deactivated = true;
+ if (m_player->settings ()->autoresize)
+ m_app->connect(m_player, SIGNAL(sourceDimensionChanged()),m_app,SLOT(zoom100()));
+ if (!finished && m_document) // user opens a source while introducing
+ m_document->reset ();
+}
+#endif
+
+KDE_NO_EXPORT void KMPlayerApp::restoreFromConfig () {
+ if (m_player->view ()) {
+ m_view->docArea ()->hide ();
+ m_view->docArea ()->readDockConfig (m_player->config (), QString ("Window Layout"));
+ m_view->docArea ()->show ();
+ m_view->layout ()->activate ();
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::openDocumentFile (const KURL& url)
+{
+ if (!m_played_intro) {
+ m_played_intro = true;
+ KMPlayer::Source * src = m_player->sources () ["urlsource"];
+ if (url.isEmpty () && src->document () &&
+ src->document ()->hasChildNodes ()) {
+ restoreFromConfig ();
+ m_player->setSource (src);
+ return;
+#ifdef HAVE_CAIRO
+ } else if (!m_player->settings ()->no_intro && url.isEmpty ()) {
+ m_player->setSource (new IntroSource (m_player, this));
+ return;
+#endif
+ } else {
+ m_played_exit = true; // no intro, so no exit as well
+ restoreFromConfig ();
+ }
+ }
+ slotStatusMsg(i18n("Opening file..."));
+ m_player->openURL (url);
+ if (m_broadcastconfig->broadcasting () && url.url() == m_broadcastconfig->serverURL ()) {
+ // speed up replay
+ FFServerSetting & ffs = m_broadcastconfig->ffserversettings;
+ KMPlayer::Source * source = m_player->source ();
+ if (!ffs.width.isEmpty () && !ffs.height.isEmpty ()) {
+ source->setWidth (ffs.width.toInt ());
+ source->setHeight (ffs.height.toInt ());
+ }
+ source->setIdentified ();
+ }
+ slotStatusMsg (i18n ("Ready."));
+}
+
+KDE_NO_EXPORT void KMPlayerApp::addURL (const KURL& url) {
+ KMPlayer::Source * src = m_player->sources () ["urlsource"];
+ KMPlayer::NodePtr d = src->document ();
+ if (d)
+ d->appendChild (new KMPlayer::GenericURL (d, url.url ()));
+}
+
+KDE_NO_EXPORT void KMPlayerApp::saveProperties (KConfig * config) {
+ config->writeEntry ("URL", m_player->source ()->url ().url ());
+ config->writeEntry ("Visible", isVisible ());
+}
+
+KDE_NO_EXPORT void KMPlayerApp::readProperties (KConfig * config) {
+ KURL url (config->readEntry ("URL", QString ()));
+ openDocumentFile (url);
+ if (!config->readBoolEntry ("Visible", true) && m_systray)
+ hide ();
+}
+
+KDE_NO_EXPORT void KMPlayerApp::resizePlayer (int percentage) {
+ KMPlayer::Source * source = m_player->source ();
+ if (!source)
+ return;
+ int w, h;
+ source->dimensions (w, h);
+ if (w == 0 && h == 0) {
+ w = 320;
+ h = 240;
+ } else
+ h = m_view->viewer ()->heightForWidth (w);
+ //kdDebug () << "KMPlayerApp::resizePlayer (" << w << "," << h << ")" << endl;
+ if (w > 0 && h > 0) {
+ if (m_view->controlPanel ()->isVisible ())
+ h += m_view->controlPanel ()->size ().height ();
+ QSize s1 = size ();
+ QSize s2 = m_view->viewArea ()->size ();
+ w += s1.width () - s2.width ();
+ h += s1.height () - s2.height ();
+ w = int (1.0 * w * percentage/100.0);
+ h = int (1.0 * h * percentage/100.0);
+ QSize s = sizeForCentralWidgetSize (QSize (w, h));
+ if (s.width () != width () || s.height () != height ()) {
+ QSize oldsize = m_view->viewArea ()->size ();
+ resize (s);
+ }
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::zoom50 () {
+ resizePlayer (50);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::zoom100 () {
+ resizePlayer (100);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::zoom150 () {
+ resizePlayer (150);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::editMode () {
+ m_view->docArea ()->hide ();
+ bool editmode = !m_view->editMode ();
+ KMPlayer::PlayListItem * pi = m_view->playList ()->currentPlayListItem ();
+ if (!pi || !pi->node)
+ editmode = false;
+ m_view->docArea ()->show ();
+ viewEditMode->setChecked (editmode);
+ KMPlayer::RootPlayListItem * ri = (edit_tree_id > 0 && !editmode)
+ ? m_view->playList ()->rootItem (edit_tree_id)
+ : m_view->playList ()->rootItem (pi);
+ if (editmode) {
+ edit_tree_id = ri->id;
+ m_view->setEditMode (ri, true);
+ m_view->setInfoMessage (pi->node->innerXML ());
+ viewSyncEditMode->setEnabled (true);
+ } else {
+ m_view->setEditMode (ri, false);
+ edit_tree_id = -1;
+ viewSyncEditMode->setEnabled (!strcmp (m_player->source ()->name (), "urlsource"));
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::syncEditMode () {
+ if (edit_tree_id > -1) {
+ KMPlayer::PlayListItem *si = m_view->playList()->selectedPlayListItem();
+ if (si && si->node) {
+ si->node->clearChildren ();
+ QString txt = m_view->infoPanel ()->text ();
+ QTextStream ts (txt, IO_ReadOnly);
+ KMPlayer::readXML (si->node, ts, QString (), false);
+ m_view->playList ()->updateTree (edit_tree_id, si->node->document(), si->node, true, false);
+ }
+ } else
+ m_player->openURL (m_player->source ()->url ());
+}
+
+KDE_NO_EXPORT void KMPlayerApp::showBroadcastConfig () {
+ m_player->settings ()->addPage (m_broadcastconfig);
+ m_player->settings ()->addPage (m_ffserverconfig);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::hideBroadcastConfig () {
+ m_player->settings ()->removePage (m_broadcastconfig);
+ m_player->settings ()->removePage (m_ffserverconfig);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::broadcastClicked () {
+ if (m_broadcastconfig->broadcasting ())
+ m_broadcastconfig->stopServer ();
+ else {
+ m_player->settings ()->show ("BroadcastPage");
+ m_view->controlPanel()->broadcastButton ()->toggle ();
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::broadcastStarted () {
+ if (!m_view->controlPanel()->broadcastButton ()->isOn ())
+ m_view->controlPanel()->broadcastButton ()->toggle ();
+}
+
+KDE_NO_EXPORT void KMPlayerApp::broadcastStopped () {
+ if (m_view->controlPanel()->broadcastButton ()->isOn ())
+ m_view->controlPanel()->broadcastButton ()->toggle ();
+ if (m_player->source () != m_player->sources () ["tvsource"])
+ m_view->controlPanel()->broadcastButton ()->hide ();
+ setCursor (QCursor (Qt::ArrowCursor));
+}
+
+KDE_NO_EXPORT bool KMPlayerApp::broadcasting () const {
+ return m_broadcastconfig->broadcasting ();
+}
+
+KDE_NO_EXPORT void KMPlayerApp::saveOptions()
+{
+ config->setGroup ("General Options");
+ if (m_player->settings ()->remembersize)
+ config->writeEntry ("Geometry", size());
+ config->writeEntry ("Show Toolbar", viewToolBar->isChecked());
+ config->writeEntry ("ToolBarPos", (int) toolBar("mainToolBar")->barPos());
+ config->writeEntry ("Show Statusbar",viewStatusBar->isChecked());
+ config->writeEntry ("Show Menubar",viewMenuBar->isChecked());
+ if (!m_player->sources () ["pipesource"]->pipeCmd ().isEmpty ()) {
+ config->setGroup ("Pipe Command");
+ config->writeEntry ("Command1", m_player->sources () ["pipesource"]->pipeCmd ());
+ }
+ m_view->setInfoMessage (QString ());
+ m_view->docArea ()->writeDockConfig (config, QString ("Window Layout"));
+ Recents * rc = static_cast <Recents *> (recents.ptr ());
+ if (rc && rc->resolved) {
+ fileOpenRecent->saveEntries (config,"Recent Files");
+ rc->writeToFile (locateLocal ("data", "kmplayer/recent.xml"));
+ }
+ Playlist * pl = static_cast <Playlist *> (playlist.ptr ());
+ if (pl && pl->resolved)
+ pl->writeToFile (locateLocal ("data", "kmplayer/playlist.xml"));
+}
+
+
+KDE_NO_EXPORT void KMPlayerApp::readOptions() {
+
+ config->setGroup("General Options");
+
+ // bar position settings
+ KToolBar::BarPosition toolBarPos;
+ toolBarPos=(KToolBar::BarPosition) config->readNumEntry("ToolBarPos", KToolBar::Top);
+ toolBar("mainToolBar")->setBarPos(toolBarPos);
+
+ // bar status settings
+ viewToolBar->setChecked (config->readBoolEntry("Show Toolbar", true));
+ slotViewToolBar();
+
+ bool bViewStatusbar = config->readBoolEntry("Show Statusbar", true);
+ viewStatusBar->setChecked(bViewStatusbar);
+ slotViewStatusBar();
+
+ viewMenuBar->setChecked (config->readBoolEntry("Show Menubar", true));
+ slotViewMenuBar();
+
+ QSize size = config->readSizeEntry ("Geometry");
+ if (!size.isEmpty ())
+ resize (size);
+ else if (m_player->settings ()->remembersize)
+ resize (QSize (640, 480));
+
+ config->setGroup ("Pipe Command");
+ static_cast <KMPlayerPipeSource *> (m_player->sources () ["pipesource"])->setCommand (config->readEntry ("Command1", ""));
+ // initialize the recent file list
+ if (!recents) {
+ fileOpenRecent->loadEntries(config,"Recent Files");
+ recents = new Recents (this);
+ recents_id = m_view->playList ()->addTree (recents, "listssource", "history", KMPlayer::PlayListView::AllowDrag);
+ }
+ configChanged ();
+}
+
+#include <netwm.h>
+#undef Always
+#undef Never
+#undef Status
+#undef Unsorted
+#undef Bool
+
+KDE_NO_EXPORT void KMPlayerApp::minimalMode (bool by_user) {
+ unsigned long props = NET::WMWindowType;
+ NETWinInfo winfo (qt_xdisplay (), winId (), qt_xrootwin (), props);
+ if (m_minimal_mode) {
+ winfo.setWindowType (NET::Normal);
+ readOptions ();
+ if (by_user)
+ disconnect (m_view->controlPanel ()->button (KMPlayer::ControlPanel::button_playlist), SIGNAL (clicked ()), this, SLOT (slotMinimalMode ()));
+ restoreFromConfig ();
+ } else {
+ saveOptions ();
+ menuBar()->hide();
+ toolBar("mainToolBar")->hide();
+ statusBar()->hide();
+ if (by_user)
+ connect (m_view->controlPanel ()->button (KMPlayer::ControlPanel::button_playlist), SIGNAL (clicked ()), this, SLOT (slotMinimalMode ()));
+ if (by_user)
+#if KDE_IS_VERSION(3, 1, 90)
+ winfo.setWindowType (NET::Utility);
+#else
+ winfo.setWindowType (NET::Menu);
+#endif
+ }
+ m_view->viewArea ()->minimalMode ();
+ if (by_user) {
+ QRect rect = m_view->viewArea ()->topWindowRect ();
+ hide ();
+ QTimer::singleShot (0, this, SLOT (zoom100 ()));
+ show ();
+ move (rect.x (), rect.y ());
+ }
+ m_minimal_mode = !m_minimal_mode;
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotMinimalMode () {
+ minimalMode (true);
+}
+
+#ifdef HAVE_CAIRO
+struct ExitSource : public KMPlayer::Source {
+ KDE_NO_CDTOR_EXPORT ExitSource (KMPlayer::PartBase *p)
+ : KMPlayer::Source (i18n ("Exit"), p, "exitsource") {}
+ KDE_NO_EXPORT QString prettyName () { return i18n ("Exit"); }
+ KDE_NO_EXPORT bool hasLength () { return false; }
+ KDE_NO_EXPORT bool isSeekable () { return false; }
+ void activate ();
+ KDE_NO_EXPORT void deactivate () {}
+ void stateElementChanged (KMPlayer::Node * node, KMPlayer::Node::State os, KMPlayer::Node::State ns);
+};
+
+KDE_NO_EXPORT void ExitSource::activate () {
+ m_document = new KMPlayer::Document (QString (""), this);
+ QString exitfile = locate ("data", "kmplayer/exit.xml");
+ QFile file (exitfile);
+ if (file.exists () && file.open (IO_ReadOnly)) {
+ QTextStream ts (&file);
+ KMPlayer::readXML (m_document, ts, QString (), false);
+ } else {
+ QString smil = QString::fromLatin1 ("<smil><head><layout>"
+ "<root-layout width='320' height='240' background-color='black'/>"
+ "<region id='reg1' top='10%' height='80%' z-order='2'>"
+ "<region id='image' left='128' top='72' width='64' bottom='56'/>"
+ "</region></layout>"
+ "<transition id='pw' dur='0.3' type='pushWipe' subtype='fromBottom'/>"
+ "</head><body>"
+ "<par>"
+ //"<animate target='reg1' attribute='background-color' calcMode='discrete' values='#FFFFFF;#E4E4E4;#CCCCCC;#B4B4B4;#9E9E9E;#8A8A8A;#777777;#656565;#555555;#464646;#393939;#2D2D2D;#222222;#191919;#111111;#0B0B0B;#060606;#020202;#000000;#000000' dur='0.6'/>"
+ "<img src='%2' id='img1' region='image' dur='0.4' fit='hidden' transOut='pw'/>"
+ "</par>"
+ "</body></smil>").arg (KGlobal::iconLoader()->iconPath (QString::fromLatin1 ("kmplayer"), -64));
+ QTextStream ts (smil.utf8 (), IO_ReadOnly);
+ KMPlayer::readXML (m_document, ts, QString (), false);
+ }
+ //m_document->normalize ();
+ m_current = m_document;
+ if (m_document && m_document->firstChild ()) {
+ KMPlayer::Mrl * mrl = m_document->firstChild ()->mrl ();
+ if (mrl) {
+ setDimensions (m_document->firstChild (), mrl->width, mrl->height);
+ m_player->updateTree ();
+ m_current->activate ();
+ emit startPlaying ();
+ return;
+ }
+ }
+ qApp->quit ();
+}
+
+KDE_NO_EXPORT void ExitSource::stateElementChanged (KMPlayer::Node * node, KMPlayer::Node::State, KMPlayer::Node::State new_state) {
+ if (new_state == KMPlayer::Node::state_deactivated &&
+ m_document == node &&
+ m_player->view ())
+ m_player->view ()->topLevelWidget ()->close ();
+}
+#endif
+
+KDE_NO_EXPORT bool KMPlayerApp::queryClose () {
+ // KMPlayerVDRSource has to wait for pending commands like mute and quit
+ m_player->stop ();
+ static_cast <KMPlayerVDRSource *> (m_player->sources () ["vdrsource"])->waitForConnectionClose ();
+ // is arts control still running
+ if (!m_dcopName.isEmpty ()) {
+ QCString replytype;
+ QByteArray data, replydata;
+ kapp->dcopClient ()->call (m_dcopName, "MainApplication-Interface", "quit()", data, replytype, replydata);
+ }
+ if (m_played_exit || m_player->settings ()->no_intro || kapp->sessionSaving() )
+ return true;
+ if (m_auto_resize)
+ disconnect(m_player, SIGNAL(sourceDimensionChanged()),this,SLOT(zoom100()));
+ m_played_exit = true;
+ if (!m_minimal_mode)
+ minimalMode (false);
+#ifdef HAVE_CAIRO
+ m_player->setSource (new ExitSource (m_player));
+ return false;
+#else
+ return true;
+#endif
+}
+
+KDE_NO_EXPORT bool KMPlayerApp::queryExit()
+{
+ if (!m_minimal_mode)
+ saveOptions();
+ disconnect (m_player->settings (), SIGNAL (configChanged ()),
+ this, SLOT (configChanged ()));
+ m_player->settings ()->writeConfig ();
+ return true;
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotFileNewWindow()
+{
+ slotStatusMsg(i18n("Opening a new application window..."));
+
+ KMPlayerApp *new_window= new KMPlayerApp();
+ new_window->show();
+
+ slotStatusMsg(i18n("Ready."));
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotFileOpen () {
+ KURL::List urls = KFileDialog::getOpenURLs (QString (), i18n ("*|All Files"), this, i18n ("Open File"));
+ if (urls.size () == 1) {
+ openDocumentFile (urls [0]);
+ } else if (urls.size () > 1) {
+ m_player->openURL (KURL ());
+ for (unsigned int i = 0; i < urls.size (); i++)
+ addURL (urls [i]);
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotFileOpenRecent(const KURL& url)
+{
+ slotStatusMsg(i18n("Opening file..."));
+
+ openDocumentFile (url);
+
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotSaveAs () {
+ QString url = KFileDialog::getSaveFileName (QString (), QString (), this, i18n ("Save File"));
+ if (!url.isEmpty ()) {
+ QFile file (url);
+ if (!file.open (IO_WriteOnly)) {
+ KMessageBox::error (this, i18n ("Error opening file %1.\n%2.").arg (url).arg (file.errorString ()), i18n("Error"));
+ return;
+ }
+ if (m_player->source ()) {
+ KMPlayer::NodePtr doc = m_player->source ()->document ();
+ if (doc) {
+ QTextStream ts (&file);
+ ts.setEncoding (QTextStream::UnicodeUTF8);
+ ts << QString ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+ if (doc->childNodes ()->length () == 1)
+ ts << doc->innerXML ();
+ else
+ ts << doc->outerXML ();
+ }
+ }
+ file.close ();
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotClearHistory () {
+ //fileOpenRecent->clearURLList ();
+ int mi = fileOpenRecent->maxItems ();
+ fileOpenRecent->setMaxItems (0);
+ fileOpenRecent->setMaxItems (mi);
+ m_player->settings ()->urllist.clear ();
+ m_player->settings ()->sub_urllist.clear ();
+ if (recents) { // small window this check fails and thus ClearHistory fails
+ recents->defer (); // make sure it's loaded
+ recents->clear ();
+ m_view->playList ()->updateTree (recents_id, recents, 0, false, false);
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotFileClose()
+{
+ slotStatusMsg(i18n("Closing file..."));
+
+ m_player->stop ();
+
+ slotStatusMsg(i18n("Ready."));
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotFileQuit()
+{
+ slotStatusMsg(i18n("Exiting..."));
+
+ // whoever implemented this should fix it too, work around ..
+ if (memberList->count () > 1)
+ deleteLater ();
+ else
+ qApp->quit ();
+ // close the first window, the list makes the next one the first again.
+ // This ensures that queryClose() is called on each window to ask for closing
+ /*KMainWindow* w;
+ if(memberList)
+ {
+ for(w=memberList->first(); w!=0; w=memberList->first())
+ {
+ // only close the window if the closeEvent is accepted. If the user presses Cancel on the saveModified() dialog,
+ // the window and the application stay open.
+ if(!w->close())
+ break;
+ }
+ }*/
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotPreferences () {
+ m_player->showConfigDialog ();
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotConfigureKeys () {
+ KKeyDialog::configure( actionCollection(), this );
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotConfigureToolbars () {
+ KEditToolbar dlg (actionCollection ());
+ if (dlg.exec ())
+ initMenu (); // also add custom popups //createGUI ();
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotViewToolBar() {
+ m_showToolbar = viewToolBar->isChecked();
+ if(m_showToolbar)
+ toolBar("mainToolBar")->show();
+ else
+ toolBar("mainToolBar")->hide();
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotViewStatusBar() {
+ m_showStatusbar = viewStatusBar->isChecked();
+ if(m_showStatusbar)
+ statusBar()->show();
+ else
+ statusBar()->hide();
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotViewMenuBar() {
+ m_showMenubar = viewMenuBar->isChecked();
+ if (m_showMenubar) {
+ menuBar()->show();
+ slotStatusMsg(i18n("Ready"));
+ } else {
+ menuBar()->hide();
+ slotStatusMsg (i18n ("Show Menubar with %1").arg(viewMenuBar->shortcutText()));
+ if (!m_showStatusbar) {
+ statusBar()->show();
+ QTimer::singleShot (3000, statusBar(), SLOT (hide ()));
+ }
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::slotStatusMsg (const QString &text) {
+ KStatusBar * sb = statusBar ();
+ sb->clear ();
+ sb->changeItem (text, id_status_msg);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::fullScreen () {
+ if (sender ()->metaObject ()->inherits ("KAction"))
+ m_view->fullScreen();
+#if KDE_IS_VERSION(3,1,90)
+ viewFullscreen->setChecked (m_view->isFullScreen ());
+#endif
+ if (m_view->isFullScreen())
+ hide ();
+ else {
+ show ();
+ setGeometry (m_view->viewArea ()->topWindowRect ());
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::playListItemSelected (QListViewItem * item) {
+ KMPlayer::PlayListItem * vi = static_cast <KMPlayer::PlayListItem *> (item);
+ if (edit_tree_id > -1) {
+ if (vi->playListView ()->rootItem (item)->id != edit_tree_id)
+ editMode ();
+ m_view->setInfoMessage (edit_tree_id > -1 ? vi->node->innerXML () : QString ());
+ }
+ viewEditMode->setEnabled (vi->playListView ()->rootItem (item)->flags & KMPlayer::PlayListView::TreeEdit);
+}
+
+KDE_NO_EXPORT
+void KMPlayerApp::playListItemDropped (QDropEvent * de, QListViewItem * after) {
+ if (!after) { // could still be a descendent
+ after = m_view->playList()->itemAt (m_view->playList()->contentsToViewport (de->pos ()));
+ if (after) {
+ QListViewItem * p = after->itemAbove ();
+ if (p && p->nextSibling () != after)
+ after = after->parent ();
+ }
+ }
+ if (!after)
+ return;
+ KMPlayer::RootPlayListItem *ritem = m_view->playList()->rootItem(after);
+ if (ritem->id == 0)
+ return;
+ manip_node = 0L;
+ m_drop_list.clear ();
+ m_drop_after = after;
+ KMPlayer::NodePtr after_node = static_cast<KMPlayer::PlayListItem*> (after)->node;
+ if (after_node->id == KMPlayer::id_node_playlist_document ||
+ after_node->id == KMPlayer::id_node_group_node)
+ after_node->defer (); // make sure it has loaded
+ if (de->source () == m_view->playList() &&
+ m_view->playList()->lastDragTreeId () == playlist_id)
+ manip_node = m_view->playList()->lastDragNode ();
+ if (!manip_node && ritem->id == playlist_id) {
+ if (KURLDrag::canDecode (de)) {
+ KURLDrag::decode (de, m_drop_list);
+ } else if (QTextDrag::canDecode (de)) {
+ QString text;
+ QTextDrag::decode (de, text);
+ m_drop_list.push_back (KURL (text));
+ }
+ }
+ m_dropmenu->changeItem (m_dropmenu->idAt (0),
+ !!manip_node ? i18n ("Move here") : i18n ("&Add to list"));
+ m_dropmenu->setItemVisible (m_dropmenu->idAt (3), !!manip_node);
+ m_dropmenu->setItemVisible (m_dropmenu->idAt (2), (manip_node && manip_node->isPlayable ()));
+ if (manip_node || m_drop_list.size () > 0)
+ m_dropmenu->exec (m_view->playList ()->mapToGlobal (m_view->playList ()->contentsToViewport (de->pos ())));
+}
+
+KDE_NO_EXPORT void KMPlayerApp::menuDropInList () {
+ KMPlayer::NodePtr n = static_cast<KMPlayer::PlayListItem*>(m_drop_after)->node;
+ KMPlayer::NodePtr pi;
+ for (int i = m_drop_list.size (); n && (i > 0 || manip_node); i--) {
+ if (manip_node && manip_node->parentNode ()) {
+ pi = manip_node;
+ manip_node = 0L;
+ pi->parentNode ()->removeChild (pi);
+ } else
+ pi = new PlaylistItem(playlist, this,false, m_drop_list[i-1].url());
+ if (n == playlist || m_drop_after->isOpen ())
+ n->insertBefore (pi, n->firstChild ());
+ else
+ n->parentNode ()->insertBefore (pi, n->nextSibling ());
+ }
+ m_view->playList()->updateTree (playlist_id, playlist, pi, true, false);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::menuDropInGroup () {
+ KMPlayer::NodePtr n = static_cast<KMPlayer::PlayListItem*>(m_drop_after)->node;
+ if (!n)
+ return;
+ KMPlayer::NodePtr g = new PlaylistGroup (playlist, this, i18n("New group"));
+ if (n == playlist || m_drop_after->isOpen ())
+ n->insertBefore (g, n->firstChild ());
+ else
+ n->parentNode ()->insertBefore (g, n->nextSibling ());
+ KMPlayer::NodePtr pi;
+ for (int i = 0; i < m_drop_list.size () || manip_node; ++i) {
+ if (manip_node && manip_node->parentNode ()) {
+ pi = manip_node;
+ manip_node = 0L;
+ pi->parentNode ()->removeChild (pi);
+ } else
+ pi = new PlaylistItem (playlist,this, false, m_drop_list[i].url ());
+ g->appendChild (pi);
+ }
+ m_view->playList()->updateTree (playlist_id, playlist, pi, true, false);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::menuCopyDrop () {
+ KMPlayer::NodePtr n = static_cast<KMPlayer::PlayListItem*>(m_drop_after)->node;
+ if (n && manip_node) {
+ KMPlayer::NodePtr pi = new PlaylistItem (playlist, this, false, manip_node->mrl ()->src);
+ if (n == playlist || m_drop_after->isOpen ())
+ n->insertBefore (pi, n->firstChild ());
+ else
+ n->parentNode ()->insertBefore (pi, n->nextSibling ());
+ m_view->playList()->updateTree (playlist_id, playlist, pi, true, false);
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::menuDeleteNode () {
+ KMPlayer::NodePtr n;
+ if (manip_node && manip_node->parentNode ()) {
+ n = manip_node->previousSibling() ? manip_node->previousSibling() : manip_node->parentNode ();
+ manip_node->parentNode ()->removeChild (manip_node);
+ }
+ m_view->playList()->updateTree (manip_tree_id, 0L, n, true, false);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::menuMoveUpNode () {
+ KMPlayer::NodePtr n = manip_node;
+ if (n && n->parentNode () && n->previousSibling ()) {
+ KMPlayer::NodePtr prev = n->previousSibling ();
+ n->parentNode ()->removeChild (n);
+ prev->parentNode ()->insertBefore (n, prev);
+ }
+ m_view->playList()->updateTree (manip_tree_id, 0L, n, true, false);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::menuMoveDownNode () {
+ KMPlayer::NodePtr n = manip_node;
+ if (n && n->parentNode () && n->nextSibling ()) {
+ KMPlayer::NodePtr next = n->nextSibling ();
+ n->parentNode ()->removeChild (n);
+ next->parentNode ()->insertBefore (n, next->nextSibling ());
+ }
+ m_view->playList()->updateTree (manip_tree_id, 0L, n, true, false);
+}
+
+KDE_NO_EXPORT void KMPlayerApp::playListItemMoved () {
+ KMPlayer::PlayListItem * si = m_view->playList ()->selectedPlayListItem ();
+ KMPlayer::RootPlayListItem * ri = m_view->playList ()->rootItem (si);
+ kdDebug() << "playListItemMoved " << (ri->id == playlist_id) << !! si->node << endl;
+ if (ri->id == playlist_id && si->node) {
+ KMPlayer::NodePtr p = si->node->parentNode ();
+ if (p) {
+ p->removeChild (si->node);
+ m_view->playList()->updateTree(playlist_id,playlist,0L,false,false);
+ }
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::preparePlaylistMenu (KMPlayer::PlayListItem * item, QPopupMenu * pm) {
+ KMPlayer::RootPlayListItem * ri = m_view->playList ()->rootItem (item);
+ if (item->node &&
+ ri->flags & (KMPlayer::PlayListView::Moveable | KMPlayer::PlayListView::Deleteable)) {
+ manip_tree_id = ri->id;
+ pm->insertSeparator ();
+ manip_node = item->node;
+ if (ri->flags & KMPlayer::PlayListView::Deleteable)
+ pm->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("editdelete"), KIcon::Small, 0, true), i18n ("&Delete item"), this, SLOT (menuDeleteNode ()));
+ if (ri->flags & KMPlayer::PlayListView::Moveable) {
+ if (manip_node->previousSibling ())
+ pm->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("up"), KIcon::Small, 0, true), i18n ("&Move up"), this, SLOT (menuMoveUpNode ()));
+ if (manip_node->nextSibling ())
+ pm->insertItem (KGlobal::iconLoader()->loadIconSet (QString ("down"), KIcon::Small, 0, true), i18n ("Move &down"), this, SLOT (menuMoveDownNode ()));
+ }
+ }
+}
+
+
+KDE_NO_EXPORT void KMPlayerApp::startArtsControl () {
+ QCString fApp, fObj;
+ QByteArray data, replydata;
+ QCStringList apps = kapp->dcopClient ()->registeredApplications();
+ QCStringList::ConstIterator end( apps.end() );
+ for( QCStringList::ConstIterator it = apps.begin(); it != end; ++it)
+ if (!strncmp ((*it).data (), "artscontrol", 11)) {
+ kapp->dcopClient ()->findObject
+ (*it, "artscontrol-mainwindow#1", "raise()", data, fApp, fObj);
+ return;
+ }
+ QStringList args;
+ QCString replytype;
+ QDataStream stream (data, IO_WriteOnly);
+ stream << QString ("aRts Control Tool") << args;
+ if (kapp->dcopClient ()->call ("klauncher", "klauncher", "start_service_by_name(QString,QStringList)", data, replytype, replydata)) {
+ int result;
+ QDataStream replystream (replydata, IO_ReadOnly);
+ replystream >> result >> m_dcopName;
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerApp::configChanged () {
+ viewKeepRatio->setChecked (m_player->settings ()->sizeratio);
+ if (m_player->settings ()->docksystray && !m_systray) {
+ m_systray = new KSystemTray (this);
+ m_systray->setPixmap (KGlobal::iconLoader ()->loadIcon (QString ("kmplayer"), KIcon::NoGroup, 22));
+ m_systray->show ();
+ } else if (!m_player->settings ()->docksystray && m_systray) {
+ delete m_systray;
+ m_systray = 0L;
+ }
+ if (m_player->settings ()->autoresize && !m_auto_resize)
+ connect(m_player,SIGNAL(sourceDimensionChanged()),this,SLOT(zoom100()));
+ else if (!m_player->settings ()->autoresize && m_auto_resize)
+ disconnect(m_player, SIGNAL(sourceDimensionChanged()),this,SLOT(zoom100()));
+ m_auto_resize = m_player->settings ()->autoresize;
+ static_cast <KMPlayerTVSource *> (m_player->sources () ["tvsource"])->buildMenu ();
+}
+
+KDE_NO_EXPORT void KMPlayerApp::keepSizeRatio () {
+ m_view->setKeepSizeRatio (!m_view->keepSizeRatio ());
+ m_player->settings ()->sizeratio = m_view->keepSizeRatio ();
+ viewKeepRatio->setChecked (m_view->keepSizeRatio ());
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerMenuSource::KMPlayerMenuSource (const QString & n, KMPlayerApp * a, QPopupMenu * m, const char * src)
+ : KMPlayer::Source (n, a->player (), src), m_menu (m), m_app (a) {
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerMenuSource::~KMPlayerMenuSource () {
+}
+
+KDE_NO_EXPORT void KMPlayerMenuSource::menuItemClicked (QPopupMenu * menu, int id) {
+ int unsetmenuid = -1;
+ for (unsigned i = 0; i < menu->count(); i++) {
+ int menuid = menu->idAt (i);
+ if (menu->isItemChecked (menuid)) {
+ menu->setItemChecked (menuid, false);
+ unsetmenuid = menuid;
+ break;
+ }
+ }
+ if (unsetmenuid != id)
+ menu->setItemChecked (id, true);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerPrefSourcePageDVD::KMPlayerPrefSourcePageDVD (QWidget * parent)
+ : QFrame(parent) {
+ QVBoxLayout *layout = new QVBoxLayout (this, 5, 2);
+ autoPlayDVD = new QCheckBox (i18n ("Auto play after opening DVD"), this, 0);
+ QWhatsThis::add(autoPlayDVD, i18n ("Start playing DVD right after opening DVD"));
+ QLabel *dvdDevicePathLabel = new QLabel (i18n("DVD device:"), this, 0);
+ dvddevice = new KURLRequester ("/dev/dvd", this, 0);
+ QWhatsThis::add(dvddevice, i18n ("Path to your DVD device, you must have read rights to this device"));
+ layout->addWidget (autoPlayDVD);
+ layout->addItem (new QSpacerItem (0, 10, QSizePolicy::Minimum, QSizePolicy::Minimum));
+ layout->addWidget (dvdDevicePathLabel);
+ layout->addWidget (dvddevice);
+ layout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+}
+
+//-----------------------------------------------------------------------------
+
+class KMPLAYER_NO_EXPORT Disks : public KMPlayer::Document {
+public:
+ Disks (KMPlayerApp * a);
+ void childDone (KMPlayer::NodePtr);
+ KMPlayerApp * app;
+};
+
+class KMPLAYER_NO_EXPORT Disk : public KMPlayer::Mrl {
+public:
+ Disk (KMPlayer::NodePtr & doc, KMPlayerApp *a, const QString &url, const QString &pn);
+ void activate ();
+ KMPlayerApp * app;
+};
+
+KDE_NO_CDTOR_EXPORT Disks::Disks (KMPlayerApp * a)
+ : KMPlayer::Document ("disks://", 0L), app (a) {
+ id = id_node_disk_document;
+ pretty_name = i18n ("Optical Disks");
+}
+
+KDE_NO_EXPORT void Disks::childDone (KMPlayer::NodePtr) {
+ finish ();
+}
+
+KDE_NO_CDTOR_EXPORT Disk::Disk (KMPlayer::NodePtr & doc, KMPlayerApp * a, const QString &url, const QString &pn)
+ : KMPlayer::Mrl (doc, id_node_disk_node), app (a) {
+ src = url;
+ pretty_name = pn;
+}
+
+KDE_NO_EXPORT void Disk::activate () {
+ const char * sn;
+ if (src.startsWith ("cdda"))
+ sn = "audiocdsource";
+ else if (src.startsWith ("vcd"))
+ sn = "vcdsource";
+ else
+ sn = "dvdsource";
+ app->player ()->setSource (app->player ()->sources () [sn]);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerDVDSource::KMPlayerDVDSource (KMPlayerApp * a, QPopupMenu * m)
+ : KMPlayerMenuSource (i18n ("DVD"), a, m, "dvdsource"), m_configpage (0L) {
+ m_menu->insertTearOffHandle ();
+ m_dvdtitlemenu = new QPopupMenu (m_app);
+ m_dvdsubtitlemenu = new QPopupMenu (m_app);
+ m_dvdchaptermenu = new QPopupMenu (m_app);
+ m_dvdlanguagemenu = new QPopupMenu (m_app);
+ m_dvdtitlemenu->setCheckable (true);
+ m_dvdsubtitlemenu->setCheckable (true);
+ m_dvdchaptermenu->setCheckable (true);
+ m_dvdlanguagemenu->setCheckable (true);
+ setURL (KURL ("dvd://"));
+ m_player->settings ()->addPage (this);
+ disks = new Disks (a);
+ disks->appendChild (new Disk (disks, a, "cdda://", i18n ("CDROM - Audio Compact Disk")));
+ disks->appendChild (new Disk (disks, a, "vcd://", i18n ("VCD - Video Compact Disk")));
+ disks->appendChild (new Disk (disks, a, "dvd://", i18n ("DVD - Digital Video Disk")));
+ m_app->view()->playList()->addTree (disks, "listssource", "cdrom_mount", 0);
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerDVDSource::~KMPlayerDVDSource () {
+ disks->document ()->dispose ();
+}
+
+KDE_NO_EXPORT bool KMPlayerDVDSource::processOutput (const QString & str) {
+ if (KMPlayer::Source::processOutput (str))
+ return true;
+ if (m_identified)
+ return false;
+ //kdDebug () << "scanning " << cstr << endl;
+ QRegExp * patterns = static_cast <KMPlayer::MPlayer *> (m_player->players () ["mplayer"])->configPage ()->m_patterns;
+ QRegExp & langRegExp = patterns[KMPlayer::MPlayerPreferencesPage::pat_dvdlang];
+ QRegExp & subtitleRegExp = patterns[KMPlayer::MPlayerPreferencesPage::pat_dvdsub];
+ QRegExp & titleRegExp = patterns[KMPlayer::MPlayerPreferencesPage::pat_dvdtitle];
+ QRegExp & chapterRegExp = patterns[KMPlayer::MPlayerPreferencesPage::pat_dvdchapter];
+ bool post090 = m_player->settings ()->mplayerpost090;
+ if (!post090 && subtitleRegExp.search (str) > -1) {
+ bool ok;
+ int sub_id = subtitleRegExp.cap (1).toInt (&ok);
+ QString sub_title = ok ? subtitleRegExp.cap (2) : subtitleRegExp.cap(1);
+ if (!ok)
+ sub_id = subtitleRegExp.cap (2).toInt (&ok);
+ m_dvdsubtitlemenu->insertItem (sub_title, sub_id);
+ kdDebug () << "subtitle sid:" << sub_id << " lang:" << sub_title <<endl;
+ } else if (!post090 && langRegExp.search (str) > -1) {
+ bool ok;
+ int lang_id = langRegExp.cap (1).toInt (&ok);
+ QString lang_title = ok ? langRegExp.cap (2) : langRegExp.cap (1);
+ if (!ok)
+ lang_id = langRegExp.cap (2).toInt (&ok);
+ m_dvdlanguagemenu->insertItem (lang_title, lang_id);
+ kdDebug () << "lang aid:" << lang_id << " lang:" << lang_title << endl;
+ } else if (titleRegExp.search (str) > -1) {
+ kdDebug () << "title " << titleRegExp.cap (1) << endl;
+ unsigned ts = titleRegExp.cap (1).toInt ();
+ if ( ts > 100) ts = 100;
+ for (unsigned t = 1; t <= ts; t++)
+ m_dvdtitlemenu->insertItem (QString::number (t), t);
+ } else if (chapterRegExp.search (str) > -1) {
+ kdDebug () << "chapter " << chapterRegExp.cap (1) << endl;
+ unsigned chs = chapterRegExp.cap (1).toInt ();
+ if ( chs > 100) chs = 100;
+ for (unsigned c = 1; c <= chs; c++)
+ m_dvdchaptermenu->insertItem (QString::number (c), c);
+ } else
+ return false;
+ return true;
+}
+
+KDE_NO_EXPORT void KMPlayerDVDSource::activate () {
+ m_start_play = m_auto_play;
+ m_current_title = -1;
+ setURL (KURL ("dvd://"));
+ buildArguments ();
+ m_menu->insertItem (i18n ("&Titles"), m_dvdtitlemenu);
+ m_menu->insertItem (i18n ("&Chapters"), m_dvdchaptermenu);
+ if (!m_player->settings ()->mplayerpost090) {
+ m_menu->insertItem (i18n ("Audio &Language"), m_dvdlanguagemenu);
+ m_menu->insertItem (i18n ("&SubTitles"), m_dvdsubtitlemenu);
+ connect (m_dvdsubtitlemenu, SIGNAL (activated (int)),
+ this, SLOT (subtitleMenuClicked (int)));
+ connect (m_dvdlanguagemenu, SIGNAL (activated (int)),
+ this, SLOT (languageMenuClicked (int)));
+ }
+ connect (m_dvdtitlemenu, SIGNAL (activated (int)),
+ this, SLOT (titleMenuClicked (int)));
+ connect (m_dvdchaptermenu, SIGNAL (activated (int)),
+ this, SLOT (chapterMenuClicked (int)));
+ if (m_start_play)
+ QTimer::singleShot (0, m_player, SLOT (play ()));
+}
+
+KDE_NO_EXPORT void KMPlayerDVDSource::setIdentified (bool b) {
+ KMPlayer::Source::setIdentified (b);
+ m_start_play = true;
+ if (m_current_title < 0 || m_current_title >= int (m_dvdtitlemenu->count()))
+ m_current_title = 0;
+ if (m_dvdtitlemenu->count ())
+ m_dvdtitlemenu->setItemChecked (m_current_title, true);
+ else
+ m_current_title = -1; // hmmm
+ if (m_dvdchaptermenu->count ()) m_dvdchaptermenu->setItemChecked (0, true);
+ // TODO remember lang/subtitles settings
+ if (m_dvdlanguagemenu->count())
+ m_dvdlanguagemenu->setItemChecked (m_dvdlanguagemenu->idAt (0), true);
+ buildArguments ();
+ m_app->slotStatusMsg (i18n ("Ready."));
+}
+
+KDE_NO_EXPORT void KMPlayerDVDSource::deactivate () {
+ if (m_player->view ()) {
+ m_dvdtitlemenu->clear ();
+ m_dvdsubtitlemenu->clear ();
+ m_dvdchaptermenu->clear ();
+ m_dvdlanguagemenu->clear ();
+ m_menu->removeItemAt (m_menu->count () - 1);
+ m_menu->removeItemAt (m_menu->count () - 1);
+ if (!m_player->settings ()->mplayerpost090) {
+ m_menu->removeItemAt (m_menu->count () - 1);
+ m_menu->removeItemAt (m_menu->count () - 1);
+ disconnect (m_dvdsubtitlemenu, SIGNAL (activated (int)),
+ this, SLOT (subtitleMenuClicked (int)));
+ disconnect (m_dvdlanguagemenu, SIGNAL (activated (int)),
+ this, SLOT (languageMenuClicked (int)));
+ }
+ disconnect (m_dvdtitlemenu, SIGNAL (activated (int)),
+ this, SLOT (titleMenuClicked (int)));
+ disconnect (m_dvdchaptermenu, SIGNAL (activated (int)),
+ this, SLOT (chapterMenuClicked (int)));
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerDVDSource::buildArguments () {
+ QString url ("dvd://");
+ if (m_document) {
+ if (m_current_title > 0)
+ url += QString::number (m_current_title);
+ m_document->mrl ()->src = url;
+ } else
+ setURL (KURL (url));
+ m_options = QString (m_identified ? "" : "-v ");
+ if (m_identified) {
+ for (unsigned i = 0; i < m_dvdsubtitlemenu->count (); i++)
+ if (m_dvdsubtitlemenu->isItemChecked (m_dvdsubtitlemenu->idAt (i)))
+ m_options += "-sid " + QString::number (m_dvdsubtitlemenu->idAt(i));
+ for (unsigned i = 0; i < m_dvdchaptermenu->count (); i++)
+ if (m_dvdchaptermenu->isItemChecked (i))
+ m_options += QString (" -chapter %1").arg (i);
+ for (unsigned i = 0; i < m_dvdlanguagemenu->count (); i++)
+ if (m_dvdlanguagemenu->isItemChecked (m_dvdlanguagemenu->idAt (i)))
+ m_options += " -aid " + QString::number(m_dvdlanguagemenu->idAt(i));
+ if (m_player->settings ()->dvddevice.length () > 0)
+ m_options += QString(" -dvd-device ") + m_player->settings()->dvddevice;
+ }
+ m_recordcmd = m_options + QString (" -vf scale -zoom");
+}
+
+KDE_NO_EXPORT QString KMPlayerDVDSource::filterOptions () {
+ KMPlayer::Settings * settings = m_player->settings ();
+ if (!settings->disableppauto)
+ return KMPlayer::Source::filterOptions ();
+ return QString ("");
+}
+
+KDE_NO_EXPORT void KMPlayerDVDSource::titleMenuClicked (int id) {
+ if (m_current_title != id) {
+ m_player->stop ();
+ m_current_title = id;
+ m_identified = false;
+ buildArguments ();
+ m_dvdtitlemenu->clear ();
+ m_dvdsubtitlemenu->clear ();
+ m_dvdchaptermenu->clear ();
+ m_dvdlanguagemenu->clear ();
+ if (m_start_play)
+ QTimer::singleShot (0, m_player, SLOT (play ()));
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerDVDSource::play () {
+ buildArguments ();
+ if (m_start_play) {
+ m_player->stop ();
+ QTimer::singleShot (0, m_player, SLOT (play ()));
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerDVDSource::subtitleMenuClicked (int id) {
+ menuItemClicked (m_dvdsubtitlemenu, id);
+ play ();
+}
+
+KDE_NO_EXPORT void KMPlayerDVDSource::languageMenuClicked (int id) {
+ menuItemClicked (m_dvdlanguagemenu, id);
+ play ();
+}
+
+KDE_NO_EXPORT void KMPlayerDVDSource::chapterMenuClicked (int id) {
+ menuItemClicked (m_dvdchaptermenu, id);
+ play ();
+}
+
+KDE_NO_EXPORT QString KMPlayerDVDSource::prettyName () {
+ return i18n ("DVD");
+}
+
+static const char * strPlayDVD = "Immediately Play DVD";
+
+KDE_NO_EXPORT void KMPlayerDVDSource::write (KConfig * config) {
+ config->setGroup (strMPlayerGroup);
+ config->writeEntry (strPlayDVD, m_auto_play);
+}
+
+KDE_NO_EXPORT void KMPlayerDVDSource::read (KConfig * config) {
+ config->setGroup (strMPlayerGroup);
+ m_auto_play = config->readBoolEntry (strPlayDVD, true);
+}
+
+KDE_NO_EXPORT void KMPlayerDVDSource::sync (bool fromUI) {
+ if (fromUI) {
+ m_auto_play = m_configpage->autoPlayDVD->isChecked ();
+ m_player->settings ()->dvddevice = m_configpage->dvddevice->lineEdit()->text ();
+ } else {
+ m_configpage->autoPlayDVD->setChecked (m_auto_play);
+ m_configpage->dvddevice->lineEdit()->setText (m_player->settings ()->dvddevice);
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerDVDSource::prefLocation (QString & item, QString & icon, QString & tab) {
+ item = i18n ("Source");
+ icon = QString ("source");
+ tab = i18n ("DVD");
+}
+
+KDE_NO_EXPORT QFrame * KMPlayerDVDSource::prefPage (QWidget * parent) {
+ m_configpage = new KMPlayerPrefSourcePageDVD (parent);
+ return m_configpage;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerDVDNavSource::KMPlayerDVDNavSource (KMPlayerApp * app, QPopupMenu * m)
+ : KMPlayerMenuSource (i18n ("DVDNav"), app, m, "dvdnavsource") {
+ m_menu->insertTearOffHandle (-1, 0);
+ setURL (KURL ("dvd://"));
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerDVDNavSource::~KMPlayerDVDNavSource () {}
+
+KDE_NO_EXPORT void KMPlayerDVDNavSource::activate () {
+ setURL (KURL ("dvd://"));
+ play ();
+}
+
+KDE_NO_EXPORT void KMPlayerDVDNavSource::deactivate () {
+}
+
+KDE_NO_EXPORT void KMPlayerDVDNavSource::play () {
+ if (!m_menu->findItem (DVDNav_previous)) {
+ m_menu->insertItem (i18n ("&Previous"), this, SLOT (navMenuClicked (int)), 0, DVDNav_previous);
+ m_menu->insertItem (i18n ("&Next"), this, SLOT (navMenuClicked (int)), 0, DVDNav_next);
+ m_menu->insertItem (i18n ("&Root"), this, SLOT (navMenuClicked (int)), 0, DVDNav_root);
+ m_menu->insertItem (i18n ("&Up"), this, SLOT (navMenuClicked (int)), 0, DVDNav_up);
+ }
+ QTimer::singleShot (0, m_player, SLOT (play ()));
+ connect (this, SIGNAL (stopPlaying ()), this, SLOT(finished ()));
+}
+
+KDE_NO_EXPORT void KMPlayerDVDNavSource::finished () {
+ disconnect (this, SIGNAL (stopPlaying ()), this, SLOT(finished ()));
+ m_menu->removeItem (DVDNav_previous);
+ m_menu->removeItem (DVDNav_next);
+ m_menu->removeItem (DVDNav_root);
+ m_menu->removeItem (DVDNav_up);
+}
+
+KDE_NO_EXPORT void KMPlayerDVDNavSource::navMenuClicked (int id) {
+ switch (id) {
+ case DVDNav_start:
+ break;
+ case DVDNav_previous:
+ m_app->view ()->viewer ()->sendKeyEvent ('p');
+ break;
+ case DVDNav_next:
+ m_app->view ()->viewer ()->sendKeyEvent ('n');
+ break;
+ case DVDNav_root:
+ m_app->view ()->viewer ()->sendKeyEvent ('r');
+ break;
+ case DVDNav_up:
+ m_app->view ()->viewer ()->sendKeyEvent ('u');
+ break;
+ }
+}
+
+KDE_NO_EXPORT QString KMPlayerDVDNavSource::prettyName () {
+ return i18n ("DVD");
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerPrefSourcePageVCD::KMPlayerPrefSourcePageVCD (QWidget * parent)
+ : QFrame (parent) {
+ QVBoxLayout *layout = new QVBoxLayout (this, 5, 2);
+ autoPlayVCD = new QCheckBox (i18n ("Auto play after opening a VCD"), this, 0);
+ QWhatsThis::add(autoPlayVCD, i18n ("Start playing VCD right after opening VCD"));
+ QLabel *vcdDevicePathLabel = new QLabel (i18n ("VCD (CDROM) device:"), this, 0);
+ vcddevice= new KURLRequester ("/dev/cdrom", this, 0);
+ QWhatsThis::add(vcddevice, i18n ("Path to your CDROM/DVD device, you must have read rights to this device"));
+ layout->addWidget (autoPlayVCD);
+ layout->addItem (new QSpacerItem (0, 10, QSizePolicy::Minimum, QSizePolicy::Minimum));
+ layout->addWidget (vcdDevicePathLabel);
+ layout->addWidget (vcddevice);
+ layout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerVCDSource::KMPlayerVCDSource (KMPlayerApp * a, QPopupMenu * m)
+ : KMPlayerMenuSource (i18n ("VCD"), a, m, "vcdsource"), m_configpage (0L) {
+ m_player->settings ()->addPage (this);
+ setURL (KURL ("vcd://"));
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerVCDSource::~KMPlayerVCDSource () {
+}
+
+KDE_NO_EXPORT bool KMPlayerVCDSource::processOutput (const QString & str) {
+ if (KMPlayer::Source::processOutput (str))
+ return true;
+ if (m_identified)
+ return false;
+ //kdDebug () << "scanning " << cstr << endl;
+ QRegExp * patterns = static_cast<KMPlayer::MPlayer *> (m_player->players () ["mplayer"])->configPage ()->m_patterns;
+ QRegExp & trackRegExp = patterns [KMPlayer::MPlayerPreferencesPage::pat_vcdtrack];
+ if (trackRegExp.search (str) > -1) {
+ m_document->state = KMPlayer::Element::state_deferred;
+ m_document->appendChild (new KMPlayer::GenericMrl (m_document, QString ("vcd://") + trackRegExp.cap (1), i18n ("Track ") + trackRegExp.cap (1)));
+ kdDebug () << "track " << trackRegExp.cap (1) << endl;
+ return true;
+ }
+ return false;
+}
+
+KDE_NO_EXPORT void KMPlayerVCDSource::activate () {
+ m_player->stop ();
+ init ();
+ m_start_play = m_auto_play;
+ setURL (KURL ("vcd://"));
+ buildArguments ();
+ if (m_start_play)
+ QTimer::singleShot (0, m_player, SLOT (play ()));
+}
+
+KDE_NO_EXPORT void KMPlayerVCDSource::deactivate () {
+}
+
+KDE_NO_EXPORT void KMPlayerVCDSource::setIdentified (bool b) {
+ KMPlayer::Source::setIdentified (b);
+ if (!m_current || !m_document->hasChildNodes ())
+ m_current = m_document;
+ m_player->updateTree ();
+ buildArguments ();
+ if (m_current->state == KMPlayer::Element::state_deferred)
+ m_current->undefer ();
+ m_app->slotStatusMsg (i18n ("Ready."));
+}
+
+KDE_NO_EXPORT void KMPlayerVCDSource::buildArguments () {
+ QString url ("vcd://");
+ if (m_current && m_current != m_document)
+ url += m_current->mrl ()->src;
+ m_options.truncate (0);
+ if (m_player->settings ()->vcddevice.length () > 0)
+ m_options+=QString(" -cdrom-device ") + m_player->settings()->vcddevice;
+ m_recordcmd = m_options;
+}
+
+KDE_NO_EXPORT QString KMPlayerVCDSource::prettyName () {
+ return i18n ("VCD");
+}
+
+static const char * strPlayVCD = "Immediately Play VCD";
+
+KDE_NO_EXPORT void KMPlayerVCDSource::write (KConfig * config) {
+ config->setGroup (strMPlayerGroup);
+ config->writeEntry (strPlayVCD, m_auto_play);
+}
+
+KDE_NO_EXPORT void KMPlayerVCDSource::read (KConfig * config) {
+ config->setGroup (strMPlayerGroup);
+ m_auto_play = config->readBoolEntry (strPlayVCD, true);
+}
+
+KDE_NO_EXPORT void KMPlayerVCDSource::sync (bool fromUI) {
+ if (fromUI) {
+ m_auto_play = m_configpage->autoPlayVCD->isChecked ();
+ m_player->settings ()->vcddevice = m_configpage->vcddevice->lineEdit()->text ();
+ } else {
+ m_configpage->autoPlayVCD->setChecked (m_auto_play);
+ m_configpage->vcddevice->lineEdit()->setText (m_player->settings ()->vcddevice);
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerVCDSource::prefLocation (QString & item, QString & icon, QString & tab) {
+ item = i18n ("Source");
+ icon = QString ("source");
+ tab = i18n ("VCD");
+}
+
+KDE_NO_EXPORT QFrame * KMPlayerVCDSource::prefPage (QWidget * parent) {
+ m_configpage = new KMPlayerPrefSourcePageVCD (parent);
+ return m_configpage;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerAudioCDSource::KMPlayerAudioCDSource (KMPlayerApp * a, QPopupMenu * m)
+ : KMPlayerMenuSource (i18n ("Audio CD"), a, m, "audiocdsource") {
+ setURL (KURL ("cdda://"));
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerAudioCDSource::~KMPlayerAudioCDSource () {
+}
+
+KDE_NO_EXPORT bool KMPlayerAudioCDSource::processOutput (const QString & str) {
+ if (KMPlayer::Source::processOutput (str))
+ return true;
+ if (m_identified)
+ return false;
+ //kdDebug () << "scanning " << str << endl;
+ QRegExp * patterns = static_cast<KMPlayer::MPlayer *> (m_player->players () ["mplayer"])->configPage ()->m_patterns;
+ QRegExp & trackRegExp = patterns [KMPlayer::MPlayerPreferencesPage::pat_cdromtracks];
+ if (trackRegExp.search (str) > -1) {
+ //if (m_document->state != KMPlayer::Element::state_deferred)
+ // m_document->defer ();
+ int nt = trackRegExp.cap (1).toInt ();
+ kdDebug () << "tracks " << trackRegExp.cap (1) << endl;
+ for (int i = 0; i < nt; i++)
+ m_document->appendChild (new KMPlayer::GenericMrl (m_document, QString ("cdda://%1").arg (i+1), i18n ("Track %1").arg (i+1)));
+ return true;
+ }
+ return false;
+}
+
+KDE_NO_EXPORT void KMPlayerAudioCDSource::activate () {
+ m_player->stop ();
+ init ();
+ //m_start_play = m_auto_play;
+ setURL (KURL ("cdda://"));
+ buildArguments ();
+ //if (m_start_play)
+ QTimer::singleShot (0, m_player, SLOT (play ()));
+}
+
+KDE_NO_EXPORT void KMPlayerAudioCDSource::deactivate () {
+}
+
+KDE_NO_EXPORT void KMPlayerAudioCDSource::setIdentified (bool b) {
+ KMPlayer::Source::setIdentified (b);
+ if (!m_current || !m_document->hasChildNodes ())
+ m_current = m_document;
+ buildArguments ();
+ if (m_current == m_document && m_document->hasChildNodes ()) {
+ m_back_request = m_document->firstChild ();
+ m_player->process ()->stop ();
+ }
+ m_player->updateTree ();
+ //if (m_current->state == KMPlayer::Element::state_deferred)
+ // m_current->undefer ();
+ m_app->slotStatusMsg (i18n ("Ready."));
+}
+
+KDE_NO_EXPORT void KMPlayerAudioCDSource::buildArguments () {
+ QString url ("cdda://");
+ if (m_current && m_current != m_document)
+ url += m_current->mrl ()->src;
+ m_options = "-cdda speed=3";
+ if (m_player->settings ()->vcddevice.length () > 0)
+ m_options+=QString(" -cdrom-device ") + m_player->settings()->vcddevice;
+ m_recordcmd = m_options;
+}
+
+KDE_NO_EXPORT QString KMPlayerAudioCDSource::prettyName () {
+ return i18n ("Audio CD");
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerPipeSource::KMPlayerPipeSource (KMPlayerApp * a)
+ : KMPlayer::Source (i18n ("Pipe"), a->player (), "pipesource"), m_app (a) {
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerPipeSource::~KMPlayerPipeSource () {
+}
+
+KDE_NO_EXPORT bool KMPlayerPipeSource::hasLength () {
+ return false;
+}
+
+KDE_NO_EXPORT bool KMPlayerPipeSource::isSeekable () {
+ return false;
+}
+
+KDE_NO_EXPORT void KMPlayerPipeSource::activate () {
+ // dangerous !! if (!m_url.protocol ().compare ("kmplayer"))
+ // m_pipecmd = KURL::decode_string (m_url.path ()).mid (1);
+ setURL (KURL ("stdin://"));
+ KMPlayer::GenericMrl * gen = new KMPlayer::GenericMrl (m_document, QString ("stdin://"), m_pipecmd);
+ gen->bookmarkable = false;
+ m_document->appendChild (gen);
+ m_recordcmd = m_options = QString ("-"); // or m_url?
+ m_identified = true;
+ reset ();
+ QTimer::singleShot (0, m_player, SLOT (play ()));
+ m_app->slotStatusMsg (i18n ("Ready."));
+}
+
+KDE_NO_EXPORT void KMPlayerPipeSource::deactivate () {
+}
+
+KDE_NO_EXPORT QString KMPlayerPipeSource::prettyName () {
+ return i18n ("Pipe - %1").arg (m_pipecmd);
+}
+
+KDE_NO_EXPORT void KMPlayerPipeSource::setCommand (const QString & cmd) {
+ m_pipecmd = cmd;
+ if (m_document)
+ m_document->mrl ()->pretty_name = cmd;
+}
+
+#include "kmplayer.moc"
+#include "kmplayerappsource.moc"
diff --git a/src/kmplayerappsource.h b/src/kmplayerappsource.h
new file mode 100644
index 0000000..86378f3
--- /dev/null
+++ b/src/kmplayerappsource.h
@@ -0,0 +1,205 @@
+/***************************************************************************
+ kmplayersource.h - description
+ -------------------
+ begin : Sat Mar 24 16:14:51 CET 2003
+ copyright : (C) 2003 by Koos Vriezen
+ email :
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef KMPLAYERAPPSOURCE_H
+#define KMPLAYERAPPSOURCE_H
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qframe.h>
+
+#include <kurl.h>
+
+#include "kmplayersource.h"
+#include "kmplayerconfig.h"
+
+
+class KMPlayerApp;
+class KURLRequester;
+class QPopupMenu;
+class QMenuItem;
+class QCheckBox;
+class QLineEdit;
+class TVInput;
+class TVChannel;
+
+/*
+ * Base class for sources having a sub menu in the application
+ */
+class KMPLAYER_NO_EXPORT KMPlayerMenuSource : public KMPlayer::Source {
+ Q_OBJECT
+public:
+ KMPlayerMenuSource (const QString & n, KMPlayerApp * app, QPopupMenu * m, const char * src);
+ virtual ~KMPlayerMenuSource ();
+protected:
+ void menuItemClicked (QPopupMenu * menu, int id);
+ QPopupMenu * m_menu;
+ KMPlayerApp * m_app;
+};
+
+/*
+ * Preference page for DVD
+ */
+class KMPLAYER_NO_EXPORT KMPlayerPrefSourcePageDVD : public QFrame {
+ Q_OBJECT
+public:
+ KMPlayerPrefSourcePageDVD (QWidget * parent);
+ ~KMPlayerPrefSourcePageDVD () {}
+
+ QCheckBox * autoPlayDVD;
+ KURLRequester * dvddevice;
+};
+
+/*
+ * Source from DVD
+ */
+class KMPLAYER_NO_EXPORT KMPlayerDVDSource : public KMPlayerMenuSource, public KMPlayer::PreferencesPage {
+ Q_OBJECT
+public:
+ KMPlayerDVDSource (KMPlayerApp * app, QPopupMenu * m);
+ virtual ~KMPlayerDVDSource ();
+ virtual bool processOutput (const QString & line);
+ virtual QString filterOptions ();
+ virtual void setIdentified (bool b = true);
+ virtual QString prettyName ();
+ virtual void write (KConfig *);
+ virtual void read (KConfig *);
+ virtual void sync (bool);
+ virtual void prefLocation (QString & item, QString & icon, QString & tab);
+ virtual QFrame * prefPage (QWidget * parent);
+public slots:
+ virtual void activate ();
+ virtual void deactivate ();
+
+ void titleMenuClicked (int id);
+ void subtitleMenuClicked (int id);
+ void languageMenuClicked (int id);
+ void chapterMenuClicked (int id);
+private:
+ void buildArguments ();
+ void play ();
+ QPopupMenu * m_dvdtitlemenu;
+ QPopupMenu * m_dvdchaptermenu;
+ QPopupMenu * m_dvdlanguagemenu;
+ QPopupMenu * m_dvdsubtitlemenu;
+ KMPlayer::NodePtr disks;
+ KMPlayerPrefSourcePageDVD * m_configpage;
+ int m_current_title;
+ bool m_start_play;
+};
+
+
+/*
+ * Source from DVDNav
+ */
+class KMPLAYER_NO_EXPORT KMPlayerDVDNavSource : public KMPlayerMenuSource {
+ Q_OBJECT
+public:
+ KMPlayerDVDNavSource (KMPlayerApp * app, QPopupMenu * m);
+ virtual ~KMPlayerDVDNavSource ();
+ virtual QString prettyName ();
+public slots:
+ virtual void activate ();
+ virtual void deactivate ();
+ virtual void play ();
+
+ void finished ();
+ void navMenuClicked (int id);
+};
+
+
+/*
+ * Preference page for VCD
+ */
+class KMPLAYER_NO_EXPORT KMPlayerPrefSourcePageVCD : public QFrame {
+ Q_OBJECT
+public:
+ KMPlayerPrefSourcePageVCD (QWidget * parent);
+ ~KMPlayerPrefSourcePageVCD () {}
+ KURLRequester * vcddevice;
+ QCheckBox *autoPlayVCD;
+};
+
+
+/*
+ * Source from VCD
+ */
+class KMPLAYER_NO_EXPORT KMPlayerVCDSource : public KMPlayerMenuSource, public KMPlayer::PreferencesPage {
+ Q_OBJECT
+public:
+ KMPlayerVCDSource (KMPlayerApp * app, QPopupMenu * m);
+ virtual ~KMPlayerVCDSource ();
+ virtual bool processOutput (const QString & line);
+ virtual void setIdentified (bool b = true);
+ virtual QString prettyName ();
+ virtual void write (KConfig *);
+ virtual void read (KConfig *);
+ virtual void sync (bool);
+ virtual void prefLocation (QString & item, QString & icon, QString & tab);
+ virtual QFrame * prefPage (QWidget * parent);
+public slots:
+ virtual void activate ();
+ virtual void deactivate ();
+private:
+ void buildArguments ();
+ KMPlayerPrefSourcePageVCD * m_configpage;
+ bool m_start_play;
+};
+
+
+/*
+ * Source from AudoCD
+ */
+class KMPLAYER_NO_EXPORT KMPlayerAudioCDSource : public KMPlayerMenuSource {
+ Q_OBJECT
+public:
+ KMPlayerAudioCDSource (KMPlayerApp * app, QPopupMenu * m);
+ virtual ~KMPlayerAudioCDSource ();
+ virtual bool processOutput (const QString & line);
+ virtual void setIdentified (bool b = true);
+ virtual QString prettyName ();
+public slots:
+ virtual void activate ();
+ virtual void deactivate ();
+private:
+ void buildArguments ();
+};
+
+
+/*
+ * Source from stdin (for the backends, not kmplayer)
+ */
+class KMPLAYER_NO_EXPORT KMPlayerPipeSource : public KMPlayer::Source {
+ Q_OBJECT
+public:
+ KMPlayerPipeSource (KMPlayerApp * app);
+ virtual ~KMPlayerPipeSource ();
+ virtual bool hasLength ();
+ virtual bool isSeekable ();
+ void setCommand (const QString & cmd);
+ virtual QString prettyName ();
+public slots:
+ virtual void activate ();
+ virtual void deactivate ();
+private:
+ KMPlayerApp * m_app;
+};
+
+#endif // KMPLAYERAPPSOURCE_H
diff --git a/src/kmplayerbroadcast.cpp b/src/kmplayerbroadcast.cpp
new file mode 100644
index 0000000..34045e2
--- /dev/null
+++ b/src/kmplayerbroadcast.cpp
@@ -0,0 +1,670 @@
+/* this file is part of the kmplayer application
+ copyright (c) 2003 koos vriezen <koos.vriezen@xs4all.nl>
+
+ this program is free software; you can redistribute it and/or
+ modify it under the terms of the gnu general public
+ license as published by the free software foundation; either
+ version 2 of the license, or (at your option) any later version.
+
+ this program is distributed in the hope that it will be useful,
+ but without any warranty; without even the implied warranty of
+ merchantability or fitness for a particular purpose. see the gnu
+ general public license for more details.
+
+ you should have received a copy of the gnu general public license
+ along with this program; see the file copying. if not, write to
+ the free software foundation, inc., 59 temple place - suite 330,
+ boston, ma 02110-1301, usa.
+*/
+#include <algorithm>
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qtable.h>
+#include <qstringlist.h>
+#include <qcombobox.h>
+#include <qlistbox.h>
+#include <qlineedit.h>
+#include <qwhatsthis.h>
+#include <qtabwidget.h>
+#include <qcursor.h>
+#include <qdir.h>
+#include <qfile.h>
+#include <qtimer.h>
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kled.h>
+#include <kconfig.h>
+#include <kprocess.h>
+#include <kprocctrl.h>
+#include <kmessagebox.h>
+
+#include "kmplayerbroadcast.h"
+#include "kmplayerprocess.h"
+#include "kmplayerview.h"
+#include "kmplayerpartbase.h"
+
+static const char * strBroadcast = "Broadcast";
+static const char * strBindAddress = "Bind Address";
+static const char * strFFServerPort = "FFServer Port";
+static const char * strMaxClients = "Maximum Connections";
+static const char * strMaxBandwidth = "Maximum Bandwidth";
+static const char * strFeedFile = "Feed File";
+static const char * strFeedFileSize = "Feed File Size";
+//static const char * strFFServerSetting = "FFServer Setting";
+static const char * strFFServerCustomSetting = "Custom Setting";
+static const char * strFFServerProfiles = "Profiles";
+
+
+KDE_NO_CDTOR_EXPORT FFServerSetting::FFServerSetting (int i, const QString & n, const QString & f, const QString & ac, int abr, int asr, const QString & vc, int vbr, int q, int fr, int gs, int w, int h)
+ : index (i), name (n), format (f), audiocodec (ac),
+ audiobitrate (abr > 0 ? QString::number (abr) : QString ()),
+ audiosamplerate (asr > 0 ? QString::number (asr) : QString ()),
+ videocodec (vc),
+ videobitrate (vbr > 0 ? QString::number (vbr) : QString ()),
+ quality (q > 0 ? QString::number (q) : QString ()),
+ framerate (fr > 0 ? QString::number (fr) : QString ()),
+ gopsize (gs > 0 ? QString::number (gs) : QString ()),
+ width (w > 0 ? QString::number (w) : QString ()),
+ height (h > 0 ? QString::number (h) : QString ()) {}
+
+KDE_NO_EXPORT FFServerSetting & FFServerSetting::operator = (const FFServerSetting & fs) {
+ format = fs.format;
+ audiocodec = fs.audiocodec;
+ audiobitrate = fs.audiobitrate;
+ audiosamplerate = fs.audiosamplerate;
+ videocodec = fs.videocodec;
+ videobitrate = fs.videobitrate;
+ quality = fs.quality;
+ framerate = fs.framerate;
+ gopsize = fs.gopsize;
+ width = fs.width;
+ height = fs.height;
+ return *this;
+}
+
+KDE_NO_EXPORT FFServerSetting & FFServerSetting::operator = (const QStringList & sl) {
+ if (sl.count () < 11) {
+ return *this;
+ }
+ QStringList::const_iterator it = sl.begin ();
+ format = *it++;
+ audiocodec = *it++;
+ audiobitrate = *it++;
+ audiosamplerate = *it++;
+ videocodec = *it++;
+ videobitrate = *it++;
+ quality = *it++;
+ framerate = *it++;
+ gopsize = *it++;
+ width = *it++;
+ height = *it++;
+ acl.clear ();
+ QStringList::const_iterator end( sl.end() );
+ for (; it != end; ++it)
+ acl.push_back (*it);
+ return *this;
+}
+
+KDE_NO_EXPORT QString & FFServerSetting::ffconfig (QString & buf) {
+ QString nl ("\n");
+ buf = QString ("Format ") + format + nl;
+ if (!audiocodec.isEmpty ())
+ buf += QString ("AudioCodec ") + audiocodec + nl;
+ if (!audiobitrate.isEmpty ())
+ buf += QString ("AudioBitRate ") + audiobitrate + nl;
+ if (!audiosamplerate.isEmpty () > 0)
+ buf += QString ("AudioSampleRate ") + audiosamplerate + nl;
+ if (!videocodec.isEmpty ())
+ buf += QString ("VideoCodec ") + videocodec + nl;
+ if (!videobitrate.isEmpty ())
+ buf += QString ("VideoBitRate ") + videobitrate + nl;
+ if (!quality.isEmpty ())
+ buf += QString ("VideoQMin ") + quality + nl;
+ if (!framerate.isEmpty ())
+ buf += QString ("VideoFrameRate ") + framerate + nl;
+ if (!gopsize.isEmpty ())
+ buf += QString ("VideoGopSize ") + gopsize + nl;
+ if (!width.isEmpty () && !height.isEmpty ())
+ buf += QString ("VideoSize ") + width + QString ("x") + height + nl;
+ return buf;
+}
+
+KDE_NO_EXPORT const QStringList FFServerSetting::list () {
+ QStringList sl;
+ sl.push_back (format);
+ sl.push_back (audiocodec);
+ sl.push_back (audiobitrate);
+ sl.push_back (audiosamplerate);
+ sl.push_back (videocodec);
+ sl.push_back (videobitrate);
+ sl.push_back (quality);
+ sl.push_back (framerate);
+ sl.push_back (gopsize);
+ sl.push_back (width);
+ sl.push_back (height);
+ QStringList::const_iterator it = acl.begin ();
+ QStringList::const_iterator end( acl.end () );
+ for (; it != end; ++it)
+ sl.push_back (*it);
+ return sl;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerPrefBroadcastPage::KMPlayerPrefBroadcastPage (QWidget *parent) : QFrame (parent) {
+ QVBoxLayout *layout = new QVBoxLayout (this, 5);
+ QGridLayout *gridlayout = new QGridLayout (layout, 6, 2, 2);
+ QLabel *label = new QLabel (i18n ("Bind address:"), this);
+ bindaddress = new QLineEdit ("", this);
+ QWhatsThis::add (bindaddress, i18n ("If you have multiple network devices, you can limit access"));
+ gridlayout->addWidget (label, 0, 0);
+ gridlayout->addWidget (bindaddress, 0, 1);
+ label = new QLabel (i18n ("Listen port:"), this);
+ port = new QLineEdit ("", this);
+ gridlayout->addWidget (label, 1, 0);
+ gridlayout->addWidget (port, 1, 1);
+ label = new QLabel (i18n ("Maximum connections:"), this);
+ maxclients = new QLineEdit ("", this);
+ gridlayout->addWidget (label, 2, 0);
+ gridlayout->addWidget (maxclients, 2, 1);
+ label = new QLabel (i18n ("Maximum bandwidth (kbit):"), this);
+ maxbandwidth = new QLineEdit ("", this);
+ gridlayout->addWidget (label, 3, 0);
+ gridlayout->addWidget (maxbandwidth, 3, 1);
+ label = new QLabel (i18n ("Temporary feed file:"), this);
+ feedfile = new QLineEdit ("", this);
+ gridlayout->addWidget (label, 4, 0);
+ gridlayout->addWidget (feedfile, 4, 1);
+ label = new QLabel (i18n ("Feed file size (kB):"), this);
+ feedfilesize = new QLineEdit ("", this);
+ gridlayout->addWidget (label, 5, 0);
+ gridlayout->addWidget (feedfilesize, 5, 1);
+ layout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+}
+
+//-----------------------------------------------------------------------------
+
+#undef ADDPROPERTY
+#define ADDPROPERTY(label,qedit,gridlayout,row,parent) \
+ qedit = new QLineEdit ("", parent); \
+ gridlayout->addWidget (new QLabel (qedit, label, parent), row, 0); \
+ gridlayout->addWidget (qedit, row, 1);
+
+KDE_NO_CDTOR_EXPORT KMPlayerPrefBroadcastFormatPage::KMPlayerPrefBroadcastFormatPage (QWidget *parent, FFServerSettingList & ffs) : QFrame (parent, "BroadcastPage"), profiles (ffs)
+{
+ QHBoxLayout *layout = new QHBoxLayout (this, 5);
+ QGridLayout *formatlayout = new QGridLayout (11, 2, 2);
+ formatlayout->setAlignment (Qt::AlignTop);
+ QVBoxLayout *leftlayout = new QVBoxLayout (15);
+ QHBoxLayout *ledlayout = new QHBoxLayout (5);
+ format = new QComboBox (this);
+ QLabel * label = new QLabel (format, i18n ("Format:"), this);
+ format->clear ();
+ format->insertItem (QString ("asf"));
+ format->insertItem (QString ("avi"));
+ format->insertItem (QString ("mpjpeg"));
+ format->insertItem (QString ("mpeg"));
+ format->insertItem (QString ("rm"));
+ format->insertItem (QString ("swf"));
+ QWhatsThis::add (format, i18n ("Only avi, mpeg and rm work for mplayer playback"));
+ formatlayout->addWidget (label, 0, 0);
+ formatlayout->addWidget (format, 0, 1);
+ ADDPROPERTY (i18n ("Audio codec:"), audiocodec, formatlayout, 1, this);
+ ADDPROPERTY (i18n ("Audio bit rate (kbit):"), audiobitrate, formatlayout, 2, this);
+ ADDPROPERTY (i18n ("Audio sample rate (Hz):"), audiosamplerate, formatlayout, 3, this);
+ ADDPROPERTY (i18n ("Video codec:"), videocodec, formatlayout, 4, this);
+ ADDPROPERTY (i18n ("Video bit rate (kbit):"), videobitrate, formatlayout, 5, this);
+ ADDPROPERTY (i18n ("Quality (1-31):"), quality, formatlayout, 6, this);
+ ADDPROPERTY (i18n ("Frame rate (Hz):"), framerate, formatlayout, 7, this);
+ ADDPROPERTY (i18n ("Gop size:"), gopsize, formatlayout, 8, this);
+ ADDPROPERTY (i18n ("Width (pixels):"), moviewidth, formatlayout, 9, this);
+ ADDPROPERTY (i18n ("Height (pixels):"), movieheight, formatlayout, 10, this);
+ label = new QLabel (i18n ("Allow access from:"), this);
+ accesslist = new QTable (40, 1, this);
+ accesslist->verticalHeader ()->hide ();
+ accesslist->setLeftMargin (0);
+ accesslist->setColumnWidth (0, 250);
+ QWhatsThis::add (accesslist, i18n ("'Single IP' or 'start-IP end-IP' for IP ranges"));
+ QHeader *header = accesslist->horizontalHeader ();
+ header->setLabel (0, i18n ("Host/IP or IP Range"));
+ QFrame *profileframe = new QFrame (this);
+ QGridLayout *profileslayout = new QGridLayout (profileframe, 5, 2, 2);
+ profile = new QLineEdit ("", profileframe);
+ connect (profile, SIGNAL(textChanged (const QString &)),
+ this, SLOT (slotTextChanged (const QString &)));
+ profilelist = new QListBox (profileframe);
+ for (int i = 0; i < (int) profiles.size (); i++)
+ profilelist->insertItem (profiles[i]->name, i);
+ connect (profilelist, SIGNAL (selected (int)),
+ this, SLOT (slotIndexChanged (int)));
+ connect (profilelist, SIGNAL (highlighted (int)),
+ this, SLOT (slotItemHighlighted (int)));
+ load = new QPushButton (i18n ("Load"), profileframe);
+ save = new QPushButton (i18n ("Save"), profileframe);
+ del = new QPushButton (i18n ("Delete"), profileframe);
+ load->setEnabled (false);
+ save->setEnabled (false);
+ del->setEnabled (false);
+ connect (load, SIGNAL (clicked ()), this, SLOT (slotLoad ()));
+ connect (save, SIGNAL (clicked ()), this, SLOT (slotSave ()));
+ connect (del, SIGNAL (clicked ()), this, SLOT (slotDelete ()));
+ profileslayout->addWidget (profile, 0, 0);
+#if (QT_VERSION < 0x030200)
+ profileslayout->addRowSpacing (4, 60);
+#else
+ profileslayout->setRowSpacing (4, 60);
+#endif
+ profileslayout->addMultiCellWidget (profilelist, 1, 4, 0, 0);
+ profileslayout->addWidget (load, 1, 1);
+ profileslayout->addWidget (save, 2, 1);
+ profileslayout->addWidget (del, 3, 1);
+ leftlayout->addWidget (profileframe);
+ startbutton = new QPushButton (i18n ("Start"), this);
+ serverled = new KLed (Qt::green, KLed::Off, KLed::Raised, KLed::Circular, this);
+ feedled = new KLed (Qt::green, KLed::Off, KLed::Raised, KLed::Circular, this);
+ ledlayout->addWidget (startbutton);
+ ledlayout->addItem (new QSpacerItem (0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
+ ledlayout->addWidget (serverled);
+ ledlayout->addWidget (feedled);
+ leftlayout->addLayout (ledlayout);
+ QFrame * line = new QFrame (this);
+ line->setFrameShape (QFrame::HLine);
+ leftlayout->addWidget (line);
+ leftlayout->addWidget (label);
+ leftlayout->addWidget (accesslist);
+ leftlayout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+ layout->addLayout (leftlayout);
+ line = new QFrame (this);
+ line->setFrameShape (QFrame::VLine);
+ layout->addWidget (line);
+ layout->addLayout (formatlayout);
+ layout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+}
+
+#undef ADDPROPERTY
+
+KDE_NO_EXPORT void KMPlayerPrefBroadcastFormatPage::setSettings (const FFServerSetting & fs) {
+ if (!fs.format.isEmpty ())
+ format->setCurrentText (fs.format);
+ audiocodec->setText (fs.audiocodec);
+ audiobitrate->setText (fs.audiobitrate);
+ audiosamplerate->setText (fs.audiosamplerate);
+ videocodec->setText (fs.videocodec);
+ videobitrate->setText (fs.videobitrate);
+ quality->setText (fs.quality);
+ framerate->setText (fs.framerate);
+ gopsize->setText (fs.gopsize);
+ moviewidth->setText (fs.width);
+ movieheight->setText (fs.height);
+ accesslist->setNumRows (0);
+ accesslist->setNumRows (50);
+ QStringList::const_iterator it = fs.acl.begin ();
+ QStringList::const_iterator end( fs.acl.end () );
+ for (int i = 0; it != end; ++i, ++it)
+ accesslist->setItem (i, 0, new QTableItem (accesslist, QTableItem::Always, *it));
+}
+
+KDE_NO_EXPORT void KMPlayerPrefBroadcastFormatPage::getSettings (FFServerSetting & fs) {
+ fs.format = format->currentText ();
+ fs.audiocodec = audiocodec->text ();
+ fs.audiobitrate = audiobitrate->text ();
+ fs.audiosamplerate = audiosamplerate->text ();
+ fs.videocodec = videocodec->text ();
+ fs.videobitrate = videobitrate->text ();
+ fs.quality = quality->text ();
+ fs.framerate = framerate->text ();
+ fs.gopsize = gopsize->text ();
+ fs.width = moviewidth->text ();
+ fs.height = movieheight->text ();
+ fs.acl.clear ();
+ for (int i = 0; i < accesslist->numRows (); ++i) {
+ if (accesslist->item (i, 0) && !accesslist->item (i, 0)->text ().isEmpty ())
+ fs.acl.push_back (accesslist->item (i, 0)->text ());
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerPrefBroadcastFormatPage::slotIndexChanged (int index) {
+ slotItemHighlighted (index);
+ if (index >= 0 && index < (int) profiles.size ())
+ setSettings (*profiles[index]);
+}
+
+KDE_NO_EXPORT void KMPlayerPrefBroadcastFormatPage::slotTextChanged (const QString & txt) {
+ save->setEnabled (txt.length ());
+}
+
+KDE_NO_EXPORT void KMPlayerPrefBroadcastFormatPage::slotItemHighlighted (int index) {
+ if (index < 0 || index >= (int) profiles.size ()) {
+ load->setEnabled (false);
+ del->setEnabled (false);
+ } else {
+ profile->setText (profiles[profilelist->currentItem ()]->name);
+ load->setEnabled (true);
+ del->setEnabled (true);
+ slotTextChanged (profilelist->currentText ());
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerPrefBroadcastFormatPage::slotSave () {
+ for (int i = 0; i < (int) profiles.size (); ++i)
+ if (profiles[i]->name == profile->text ()) {
+ getSettings (*profiles[i]);
+ return;
+ }
+ FFServerSetting * fs = new FFServerSetting;
+ fs->name = profile->text ();
+ getSettings (*fs);
+ profiles.push_back (fs);
+ profilelist->insertItem (fs->name);
+}
+
+KDE_NO_EXPORT void KMPlayerPrefBroadcastFormatPage::slotLoad () {
+ setSettings (*profiles[profilelist->currentItem ()]);
+}
+
+KDE_NO_EXPORT void KMPlayerPrefBroadcastFormatPage::slotDelete () {
+ FFServerSettingList::iterator it = profiles.begin();
+ for (int i = 0; i < profilelist->currentItem (); i++)
+ ++it;
+ delete *it;
+ profiles.erase (it);
+ profilelist->removeItem (profilelist->currentItem ());
+ load->setEnabled (false);
+ del->setEnabled (false);
+}
+
+//-----------------------------------------------------------------------------
+
+static bool stopProcess (KProcess * process, const char * cmd = 0L) {
+ if (!process || !process->isRunning ()) return true;
+ do {
+ if (cmd)
+ process->writeStdin (cmd, strlen (cmd));
+ KProcessController::theKProcessController->waitForProcessExit (1);
+ if (!process->isRunning ())
+ break;
+ process->kill (SIGINT);
+ KProcessController::theKProcessController->waitForProcessExit (3);
+ if (!process->isRunning ())
+ break;
+ process->kill (SIGTERM);
+ KProcessController::theKProcessController->waitForProcessExit (1);
+ if (!process->isRunning ())
+ break;
+ process->kill (SIGKILL);
+ KProcessController::theKProcessController->waitForProcessExit (1);
+ if (process->isRunning ()) {
+ return false; // give up
+ }
+ } while (false);
+ return true;
+}
+
+
+KDE_NO_CDTOR_EXPORT KMPlayerBroadcastConfig::KMPlayerBroadcastConfig (KMPlayer::PartBase * player, KMPlayerFFServerConfig * fsc)
+ : m_player (player),
+ m_ffserverconfig (fsc),
+ m_ffmpeg_process (0L),
+ m_ffserver_process (0L),
+ m_endserver (true) {
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerBroadcastConfig::~KMPlayerBroadcastConfig () {
+ stopServer ();
+}
+
+KDE_NO_EXPORT void KMPlayerBroadcastConfig::write (KConfig * config) {
+ config->setGroup (strBroadcast);
+ config->writeEntry (strFFServerCustomSetting, ffserversettings.list (), ';');
+ QStringList sl;
+ for (int i = 0; i < (int) ffserversettingprofiles.size (); i++) {
+ sl.push_back (ffserversettingprofiles[i]->name);
+ config->writeEntry (QString ("Profile_") + ffserversettingprofiles[i]->name, ffserversettingprofiles[i]->list(), ';');
+ }
+ config->writeEntry (strFFServerProfiles, sl, ';');
+}
+
+KDE_NO_EXPORT void KMPlayerBroadcastConfig::read (KConfig * config) {
+ std::for_each (ffserversettingprofiles.begin (), ffserversettingprofiles.end (), KMPlayer::Deleter<FFServerSetting>());
+ ffserversettingprofiles.clear ();
+ config->setGroup (strBroadcast);
+ ffserversettings = config->readListEntry (strFFServerCustomSetting, ';');
+ QStringList profiles = config->readListEntry (strFFServerProfiles, ';');
+ QStringList::iterator pr_it = profiles.begin ();
+ QStringList::iterator pr_end( profiles.end () );
+ for (; pr_it != pr_end; ++pr_it) {
+ QStringList sl = config->readListEntry (QString ("Profile_") + *pr_it, ';');
+ if (sl.size () > 10) {
+ FFServerSetting * ffs = new FFServerSetting (sl);
+ ffs->name = *pr_it;
+ ffserversettingprofiles.push_back (ffs);
+ }
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerBroadcastConfig::sync (bool fromUI) {
+ if (fromUI) {
+ m_configpage->getSettings(ffserversettings);
+ } else {
+ m_configpage->setSettings (ffserversettings);
+ m_configpage->profile->setText (QString ());
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerBroadcastConfig::prefLocation (QString & item, QString & icon, QString & tab) {
+ item = i18n ("Broadcasting");
+ icon = QString ("share");
+ tab = i18n ("Profiles");
+}
+
+QFrame * KMPlayerBroadcastConfig::prefPage (QWidget * parent) {
+ if (!m_configpage) {
+ m_configpage = new KMPlayerPrefBroadcastFormatPage (parent, ffserversettingprofiles);
+ connect (m_configpage->startbutton, SIGNAL (clicked ()), this, SLOT (startServer ()));
+ connect (m_player, SIGNAL (sourceChanged (KMPlayer::Source *, KMPlayer::Source *)), this, SLOT (sourceChanged (KMPlayer::Source *,KMPlayer::Source *)));
+ m_configpage->startbutton->setEnabled
+ (!m_player->source ()->videoDevice ().isEmpty ());
+ }
+ return m_configpage;
+}
+
+KDE_NO_EXPORT bool KMPlayerBroadcastConfig::broadcasting () const {
+ return m_ffserver_process && m_ffserver_process->isRunning ();
+}
+#include <kglobal.h>
+#include <kstandarddirs.h>
+
+static const char ffserverconf[] =
+"Port %d\nBindAddress %s\nMaxClients %d\nMaxBandwidth %d\n"
+"CustomLog -\nNoDaemon\n"
+"<Feed kmplayer.ffm>\nFile %s\nFileMaxSize %dK\nACL allow 127.0.0.1\n</Feed>\n"
+"<Stream video.%s>\nFeed kmplayer.ffm\n%s\n%s%s\n</Stream>\n"
+"<Stream stat.html>\nFormat status\nACL allow localhost\n</Stream>\n";
+
+KDE_NO_EXPORT void KMPlayerBroadcastConfig::startServer () {
+ if (broadcasting ()) {
+ stopServer ();
+ return;
+ }
+ m_configpage->setCursor (QCursor (Qt::WaitCursor));
+ m_ffserver_process = new KProcess;
+ m_ffserver_process->setUseShell (true);
+ connect (m_ffserver_process, SIGNAL (processExited (KProcess *)),
+ this, SLOT (processStopped (KProcess *)));
+ QString conffile = locateLocal ("data", "kmplayer/ffserver.conf");
+ const char * noaudio = m_player->source ()->audioDevice ().isEmpty () ? "NoAudio" : "";
+ FFServerSetting ffs;
+ m_configpage->getSettings (ffs);
+ QString acl;
+ QStringList::iterator it = ffs.acl.begin ();
+ QStringList::iterator end( ffs.acl.end () );
+ for (; it != end; ++it)
+ acl += QString ("ACL allow ") + *it + QString ("\n");
+ unlink (m_ffserverconfig->feedfile.ascii ());
+ QFile qfile (conffile);
+ qfile.open (IO_WriteOnly);
+ QString configdata;
+ QString buf;
+ configdata.sprintf (ffserverconf, m_ffserverconfig->ffserverport, m_ffserverconfig->bindaddress.ascii (), m_ffserverconfig->maxclients, m_ffserverconfig->maxbandwidth, m_ffserverconfig->feedfile.ascii (), m_ffserverconfig->feedfilesize, ffs.format.ascii (), acl.ascii (), ffs.ffconfig (buf).ascii (), noaudio);
+ qfile.writeBlock (configdata.ascii (), configdata.length ());
+ qfile.close ();
+ kdDebug () << configdata << endl;
+ kdDebug () << "ffserver -f " << conffile << endl;
+ *m_ffserver_process << "ffserver -f " << conffile;
+ m_ffserver_out.truncate (0);
+ connect (m_ffserver_process,
+ SIGNAL (receivedStderr (KProcess *, char *, int)),
+ this, SLOT (processOutput (KProcess *, char *, int)));
+ m_ffserver_process->start (KProcess::NotifyOnExit, KProcess::Stderr);
+ if (m_ffserver_process->isRunning ()) {
+ m_configpage->startbutton->setText (i18n ("Stop"));
+ m_configpage->serverled->setState (KLed::On);
+ emit broadcastStarted ();
+ }
+ QTimer::singleShot (500, this, SLOT (startFeed ()));
+}
+
+KDE_NO_EXPORT void KMPlayerBroadcastConfig::stopServer () {
+ m_endserver = true;
+ if (m_ffmpeg_process)
+ m_ffmpeg_process->stop ();
+ if (!stopProcess (m_ffserver_process))
+ KMessageBox::error (m_configpage, i18n ("Failed to end ffserver process."), i18n ("Error"));
+}
+
+KDE_NO_EXPORT void KMPlayerBroadcastConfig::processOutput (KProcess * p, char * s, int) {
+ if (p == m_ffserver_process)
+ m_ffserver_out += QString (s);
+}
+
+KDE_NO_EXPORT void KMPlayerBroadcastConfig::startFeed () {
+ if (!m_configpage) {
+ stopServer ();
+ return;
+ }
+ FFServerSetting ffs;
+ m_configpage->getSettings (ffs);
+ QString ffurl;
+ if (!m_ffserver_process || !m_ffserver_process->isRunning ()) {
+ KMessageBox::error (m_configpage, i18n ("Failed to start ffserver.\n") + m_ffserver_out, i18n ("Error"));
+ goto bail_out;
+ }
+ disconnect (m_ffserver_process, SIGNAL (receivedStderr (KProcess *, char *, int)),
+ this, SLOT (processOutput (KProcess *, char *, int)));
+ if (m_ffmpeg_process)
+ m_ffmpeg_process->stop ();
+ delete m_ffmpeg_process;
+ m_ffmpeg_process = new KMPlayer::FFMpeg (m_player, m_player->settings ());
+ connect (m_ffmpeg_process, SIGNAL (stateChange (KMPlayer::Process::State, KMPlayer::Process::State)), this, SLOT (stateChange (KMPlayer::Process::State, KMPlayer::Process::State)));
+ ffurl.sprintf ("http://localhost:%d/kmplayer.ffm", m_ffserverconfig->ffserverport);
+ m_ffmpeg_process->setURL (KURL(ffurl));
+ if (!m_ffmpeg_process->play (m_player->source (), KMPlayer::NodePtr())) {
+ KMessageBox::error (m_configpage, i18n ("Failed to start ffmpeg."), i18n ("Error"));
+ stopProcess (m_ffserver_process);
+ goto bail_out;
+ }
+ if (m_ffmpeg_process->playing ()) {
+ m_ffserver_url.sprintf ("http://localhost:%d/video.%s", m_ffserverconfig->ffserverport, ffs.format.ascii ());
+ m_endserver = false;
+ m_configpage->feedled->setState (KLed::On);
+ m_player->openURL (KURL (m_ffserver_url));
+ } else
+ stopServer ();
+bail_out:
+ m_configpage->setCursor (QCursor (Qt::ArrowCursor));
+}
+
+KDE_NO_EXPORT void KMPlayerBroadcastConfig::stateChange (KMPlayer::Process::State old, KMPlayer::Process::State state) {
+ if (state < KMPlayer::Process::Buffering && old >KMPlayer::Process::Ready) {
+ if (m_configpage)
+ m_configpage->feedled->setState (KLed::Off);
+ m_ffmpeg_process->deleteLater ();
+ m_ffmpeg_process = 0L;
+ kdDebug () << "ffmpeg process stopped " << m_endserver << endl;
+ if (m_endserver && !stopProcess (m_ffserver_process)) {
+ disconnect (m_ffserver_process,
+ SIGNAL (receivedStderr (KProcess *, char *, int)),
+ this, SLOT (processOutput (KProcess *, char *, int)));
+ KMessageBox::error (m_configpage, i18n ("Failed to end ffserver process."), i18n ("Error"));
+ processStopped (0L);
+ }
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerBroadcastConfig::processStopped (KProcess *) {
+ kdDebug () << "ffserver process stopped" << endl;
+ if (m_configpage) {
+ m_configpage->serverled->setState (KLed::Off);
+ m_configpage->startbutton->setText (i18n ("Start"));
+ m_configpage->startbutton->setEnabled
+ (!m_player->source ()->videoDevice ().isEmpty ());
+ }
+ m_ffserver_process->deleteLater ();
+ m_ffserver_process = 0L;
+ emit broadcastStopped ();
+}
+
+KDE_NO_EXPORT void KMPlayerBroadcastConfig::sourceChanged (KMPlayer::Source *, KMPlayer::Source * source) {
+ if (m_configpage)
+ m_configpage->startbutton->setEnabled (broadcasting () || (source && !source->videoDevice ().isEmpty ()));
+}
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerFFServerConfig::KMPlayerFFServerConfig () {
+}
+
+KDE_NO_EXPORT void KMPlayerFFServerConfig::write (KConfig * config) {
+ config->setGroup (strBroadcast);
+ config->writeEntry (strBindAddress, bindaddress);
+ config->writeEntry (strFFServerPort, ffserverport);
+ config->writeEntry (strMaxClients, maxclients);
+ config->writeEntry (strMaxBandwidth, maxbandwidth);
+ config->writePathEntry (strFeedFile, feedfile);
+ config->writeEntry (strFeedFileSize, feedfilesize);
+}
+
+KDE_NO_EXPORT void KMPlayerFFServerConfig::read (KConfig * config) {
+ config->setGroup (strBroadcast);
+ bindaddress = config->readEntry (strBindAddress, "0.0.0.0");
+ ffserverport = config->readNumEntry (strFFServerPort, 8090);
+ maxclients = config->readNumEntry (strMaxClients, 10);
+ maxbandwidth = config->readNumEntry (strMaxBandwidth, 1000);
+ feedfile = config->readPathEntry (strFeedFile, "/tmp/kmplayer.ffm");
+ feedfilesize = config->readNumEntry (strFeedFileSize, 512);
+}
+
+KDE_NO_EXPORT void KMPlayerFFServerConfig::sync (bool fromUI) {
+ if (fromUI) {
+ bindaddress = m_configpage->bindaddress->text ();
+ ffserverport = m_configpage->port->text ().toInt ();
+ maxclients = m_configpage->maxclients->text ().toInt ();
+ maxbandwidth = m_configpage->maxbandwidth->text ().toInt();
+ feedfile = m_configpage->feedfile->text ();
+ feedfilesize = m_configpage->feedfilesize->text ().toInt();
+ } else {
+ m_configpage->bindaddress->setText (bindaddress);
+ m_configpage->port->setText (QString::number (ffserverport));
+ m_configpage->maxclients->setText (QString::number (maxclients));
+ m_configpage->maxbandwidth->setText (QString::number (maxbandwidth));
+ m_configpage->feedfile->setText (feedfile);
+ m_configpage->feedfilesize->setText (QString::number (feedfilesize));
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerFFServerConfig::prefLocation (QString & item, QString & icon, QString & tab) {
+ item = i18n ("Broadcasting");
+ icon = QString ("share");
+ tab = i18n ("FFServer");
+}
+
+KDE_NO_EXPORT QFrame *KMPlayerFFServerConfig::prefPage (QWidget * parent) {
+ if (!m_configpage)
+ m_configpage = new KMPlayerPrefBroadcastPage (parent);
+ return m_configpage;
+}
+
+
+#include "kmplayerbroadcast.moc"
diff --git a/src/kmplayerbroadcast.h b/src/kmplayerbroadcast.h
new file mode 100644
index 0000000..2b763db
--- /dev/null
+++ b/src/kmplayerbroadcast.h
@@ -0,0 +1,194 @@
+/* this file is part of the kmplayer application
+ copyright (c) 2003 koos vriezen <koos.vriezen@xs4all.nl>
+
+ this program is free software; you can redistribute it and/or
+ modify it under the terms of the gnu general public
+ license as published by the free software foundation; either
+ version 2 of the license, or (at your option) any later version.
+
+ this program is distributed in the hope that it will be useful,
+ but without any warranty; without even the implied warranty of
+ merchantability or fitness for a particular purpose. see the gnu
+ general public license for more details.
+
+ you should have received a copy of the gnu general public license
+ along with this program; see the file copying. if not, write to
+ the free software foundation, inc., 59 temple place - suite 330,
+ boston, ma 02110-1301, usa.
+*/
+
+#ifndef _KMPLAYER_BROADCAST_SOURCE_H_
+#define _KMPLAYER_BROADCAST_SOURCE_H_
+
+#include <list>
+#include <vector>
+
+#include <qframe.h>
+#include <qguardedptr.h>
+
+#include "kmplayerappsource.h"
+#include "kmplayerprocess.h"
+#include "kmplayerconfig.h"
+
+class KMPlayerPrefBroadcastPage; // broadcast
+class KMPlayerPrefBroadcastFormatPage; // broadcast format
+class QListBox;
+class QComboBox;
+class QLineEdit;
+class QTable;
+class QPushButton;
+class KLed;
+
+namespace KMPlayer {
+ class FFMpeg;
+}
+
+class KMPLAYER_NO_EXPORT FFServerSetting {
+public:
+ KDE_NO_CDTOR_EXPORT FFServerSetting () {}
+ FFServerSetting (int i, const QString & n, const QString & f, const QString & ac, int abr, int asr, const QString & vc, int vbr, int q, int fr, int gs, int w, int h);
+ KDE_NO_CDTOR_EXPORT FFServerSetting (const QStringList & sl) { *this = sl; }
+ KDE_NO_CDTOR_EXPORT ~FFServerSetting () {}
+ int index;
+ QString name;
+ QString format;
+ QString audiocodec;
+ QString audiobitrate;
+ QString audiosamplerate;
+ QString videocodec;
+ QString videobitrate;
+ QString quality;
+ QString framerate;
+ QString gopsize;
+ QString width;
+ QString height;
+ QStringList acl;
+ FFServerSetting & operator = (const QStringList &);
+ FFServerSetting & operator = (const FFServerSetting & fs);
+ const QStringList list ();
+ QString & ffconfig (QString & buf);
+};
+
+typedef std::vector <FFServerSetting *> FFServerSettingList;
+
+
+class KMPLAYER_NO_EXPORT KMPlayerPrefBroadcastPage : public QFrame {
+ Q_OBJECT
+public:
+ KMPlayerPrefBroadcastPage (QWidget * parent);
+ KDE_NO_CDTOR_EXPORT ~KMPlayerPrefBroadcastPage () {}
+
+ QLineEdit * bindaddress;
+ QLineEdit * port;
+ QLineEdit * maxclients;
+ QLineEdit * maxbandwidth;
+ QLineEdit * feedfile;
+ QLineEdit * feedfilesize;
+};
+
+class KMPLAYER_NO_EXPORT KMPlayerPrefBroadcastFormatPage : public QFrame {
+ Q_OBJECT
+public:
+ KMPlayerPrefBroadcastFormatPage (QWidget * parent, FFServerSettingList &);
+ KDE_NO_CDTOR_EXPORT ~KMPlayerPrefBroadcastFormatPage () {}
+
+ QListBox * profilelist;
+ QComboBox * format;
+ QLineEdit * audiocodec;
+ QLineEdit * audiobitrate;
+ QLineEdit * audiosamplerate;
+ QLineEdit * videocodec;
+ QLineEdit * videobitrate;
+ QLineEdit * quality;
+ QLineEdit * framerate;
+ QLineEdit * gopsize;
+ QLineEdit * moviewidth;
+ QLineEdit * movieheight;
+ QLineEdit * profile;
+ QPushButton * startbutton;
+ KLed * serverled;
+ KLed * feedled;
+ void setSettings (const FFServerSetting &);
+ void getSettings (FFServerSetting &);
+private slots:
+ void slotIndexChanged (int index);
+ void slotItemHighlighted (int index);
+ void slotTextChanged (const QString &);
+ void slotLoad ();
+ void slotSave ();
+ void slotDelete ();
+private:
+ QTable * accesslist;
+ QPushButton * load;
+ QPushButton * save;
+ QPushButton * del;
+ FFServerSettingList & profiles;
+};
+
+
+/*
+ * Preference page for ffmpeg commandline arguments
+ */
+class KMPLAYER_NO_EXPORT KMPlayerFFServerConfig : public KMPlayer::PreferencesPage {
+public:
+ KMPlayerFFServerConfig ();
+ KDE_NO_CDTOR_EXPORT ~KMPlayerFFServerConfig () {}
+ virtual void write (KConfig *);
+ virtual void read (KConfig *);
+ virtual void sync (bool fromUI);
+ virtual void prefLocation (QString & item, QString & icon, QString & tab);
+ virtual QFrame * prefPage (QWidget * parent);
+ int ffserverport;
+ int maxclients;
+ int maxbandwidth;
+ QString feedfile;
+ int feedfilesize;
+ QString bindaddress;
+private:
+ QGuardedPtr <KMPlayerPrefBroadcastPage> m_configpage;
+};
+
+/*
+ * Preference page for ffserver
+ */
+class KMPLAYER_NO_EXPORT KMPlayerBroadcastConfig : public QObject, public KMPlayer::PreferencesPage {
+ Q_OBJECT
+public:
+ KMPlayerBroadcastConfig (KMPlayer::PartBase * player, KMPlayerFFServerConfig * fsc);
+ KDE_NO_CDTOR_EXPORT ~KMPlayerBroadcastConfig ();
+
+ virtual void write (KConfig *);
+ virtual void read (KConfig *);
+ virtual void sync (bool fromUI);
+ virtual void prefLocation (QString & item, QString & icon, QString & tab);
+ virtual QFrame * prefPage (QWidget * parent);
+
+ bool broadcasting () const;
+ void stopServer ();
+ KDE_NO_EXPORT const QString & serverURL () const { return m_ffserver_url; }
+
+ FFServerSetting ffserversettings;
+ FFServerSettingList ffserversettingprofiles;
+signals:
+ void broadcastStarted ();
+ void broadcastStopped ();
+private slots:
+ void processOutput (KProcess *, char *, int);
+ void processStopped (KProcess * process);
+ void startServer ();
+ void startFeed ();
+ void stateChange (KMPlayer::Process::State, KMPlayer::Process::State);
+ void sourceChanged (KMPlayer::Source *, KMPlayer::Source *);
+private:
+ KMPlayer::PartBase * m_player;
+ KMPlayerFFServerConfig * m_ffserverconfig;
+ QGuardedPtr <KMPlayerPrefBroadcastFormatPage> m_configpage;
+ KMPlayer::FFMpeg * m_ffmpeg_process;
+ KProcess * m_ffserver_process;
+ bool m_endserver;
+ QString m_ffserver_out;
+ QString m_ffserver_url;
+};
+
+
+#endif //_KMPLAYER_BROADCAST_SOURCE_H_
diff --git a/src/kmplayerconfig.cpp b/src/kmplayerconfig.cpp
new file mode 100644
index 0000000..bbc13b1
--- /dev/null
+++ b/src/kmplayerconfig.cpp
@@ -0,0 +1,749 @@
+/**
+ * Copyright (C) 2002-2003 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include <algorithm>
+#include <functional>
+#include <config.h>
+#include <qcheckbox.h>
+#include <qtextedit.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qtabwidget.h>
+#include <qslider.h>
+#include <qspinbox.h>
+#include <qlabel.h>
+#include <qbuttongroup.h>
+#include <qfileinfo.h>
+
+#include <kurlrequester.h>
+#include <klineedit.h>
+#include <kstatusbar.h>
+
+#include <kconfig.h>
+#include <kapplication.h>
+#include <kurl.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include <kcombobox.h>
+#include <kmessagebox.h>
+#include <kglobalsettings.h>
+
+#include "kmplayersource.h"
+#include "kmplayerconfig.h"
+#include "kmplayerpartbase.h"
+#include "kmplayerprocess.h"
+#include "playlistview.h"
+#include "viewarea.h"
+#include "pref.h"
+
+using namespace KMPlayer;
+
+static OutputDriver _ads[] = {
+ { "alsa,oss,sdl,arts", i18n ("Auto") },
+ { "oss", i18n ("Open Sound System") },
+ { "sdl", i18n ("Simple DirectMedia Layer") },
+ { "alsa", i18n ("Advanced Linux Sound Architecture") },
+ { "arts", i18n ("Analog Real-Time Synthesizer") },
+ { "jack", i18n ("JACK Audio Connection Kit") },
+ { "openal", i18n ("OpenAL") },
+ { "esd", i18n ("Enlightened Sound Daemon") },
+ { "alsa5", i18n ("Advanced Linux Sound Architecture v0.5") },
+ { "alsa9", i18n ("Advanced Linux Sound Architecture v0.9") },
+ { "", i18n ("Use back-end defaults") },
+ { 0, QString () }
+};
+
+static OutputDriver _vds [] = {
+ { "xv,sdl,x11", i18n ("Auto") },
+ { "x11", i18n ("X11Shm") },
+ { "xvidix", i18n ("XVidix") },
+ { "xvmc,xv", i18n ("XvMC") },
+ { "sdl", i18n ("SDL") },
+ { "gl", i18n ("OpenGL") },
+ { "gl2", i18n ("OpenGL MT") },
+ { "xv", i18n ("XVideo") },
+ { 0, QString () }
+};
+
+static const int ADRIVER_ARTS_INDEX = 4;
+
+
+KDE_NO_CDTOR_EXPORT Settings::Settings (PartBase * player, KConfig * config)
+ : pagelist (0L), configdialog (0L), m_config (config), m_player (player) {
+ audiodrivers = _ads;
+ videodrivers = _vds;
+ colors [ColorSetting::playlist_background].title = i18n ("Playlist background");
+ colors [ColorSetting::playlist_background].option = "PlaylistBackground";
+ colors [ColorSetting::playlist_background].color = KGlobalSettings::baseColor ();
+ colors [ColorSetting::playlist_foreground].title = i18n ("Playlist foreground");
+ colors [ColorSetting::playlist_foreground].option = "PlaylistForeground";
+ colors [ColorSetting::playlist_foreground].color = KGlobalSettings::textColor();
+ colors [ColorSetting::console_background].title =i18n("Console background");
+ colors [ColorSetting::playlist_active].title = i18n("Playlist active item");
+ colors [ColorSetting::playlist_active].option = "PlaylistActive";
+ colors [ColorSetting::playlist_active].color = KGlobalSettings::linkColor();
+ colors [ColorSetting::console_background].option = "ConsoleBackground";
+ colors [ColorSetting::console_background].color = QColor (0, 0, 0);
+ colors [ColorSetting::console_foreground].title = i18n ("Console foreground");
+ colors [ColorSetting::console_foreground].option = "ConsoleForeground";
+ colors [ColorSetting::console_foreground].color = QColor (0xB2, 0xB2, 0xB2);
+ colors [ColorSetting::video_background].title = i18n ("Video background");
+ colors [ColorSetting::video_background].option = "VideoBackground";
+ colors [ColorSetting::video_background].color = QColor (0, 0, 0);
+ colors [ColorSetting::area_background].title = i18n ("Viewing area background");
+ colors [ColorSetting::area_background].option = "ViewingAreaBackground";
+ colors [ColorSetting::area_background].color = QColor (0, 0, 0);
+ colors [ColorSetting::infowindow_background].title = i18n ("Info window background");
+ colors [ColorSetting::infowindow_background].option ="InfoWindowBackground";
+ colors [ColorSetting::infowindow_background].color = KGlobalSettings::baseColor ();
+ colors [ColorSetting::infowindow_foreground].title = i18n ("Info window foreground");
+ colors [ColorSetting::infowindow_foreground].option ="InfoWindowForeground";
+ colors [ColorSetting::infowindow_foreground].color = KGlobalSettings::textColor();
+ fonts [FontSetting::playlist].title = i18n ("Playlist");
+ fonts [FontSetting::playlist].option = "PlaylistFont";
+ fonts [FontSetting::playlist].font = KGlobalSettings::generalFont();
+ fonts [FontSetting::playlist].font.setItalic (true);
+ fonts [FontSetting::infowindow].title = i18n ("Info window");
+ fonts [FontSetting::infowindow].option = "InfoWindowFont";
+ fonts [FontSetting::infowindow].font = KGlobalSettings::generalFont();
+}
+
+KDE_NO_CDTOR_EXPORT Settings::~Settings () {
+ // configdialog should be destroyed when the view is destroyed
+ //delete configdialog;
+}
+
+KDE_EXPORT const char * strMPlayerGroup = "MPlayer";
+const char * strGeneralGroup = "General Options";
+static const char * strKeepSizeRatio = "Keep Size Ratio";
+static const char * strRememberSize = "Remember Size";
+static const char * strAutoResize = "Auto Resize";
+static const char * strDockSysTray = "Dock in System Tray";
+static const char * strNoIntro = "No Intro";
+static const char * strVolume = "Volume";
+static const char * strContrast = "Contrast";
+static const char * strBrightness = "Brightness";
+static const char * strHue = "Hue";
+static const char * strSaturation = "Saturation";
+static const char * strURLList = "URL List";
+static const char * strSubURLList = "URL Sub Title List";
+static const char * strPrefBitRate = "Prefered Bitrate";
+static const char * strMaxBitRate = "Maximum Bitrate";
+//static const char * strUseArts = "Use aRts";
+static const char * strVoDriver = "Video Driver";
+static const char * strAoDriver = "Audio Driver";
+static const char * strLoop = "Loop";
+static const char * strFrameDrop = "Frame Drop";
+static const char * strAdjustVolume = "Auto Adjust Volume";
+static const char * strAdjustColors = "Auto Adjust Colors";
+static const char * strAddConfigButton = "Add Configure Button";
+static const char * strAddPlaylistButton = "Add Playlist Button";
+static const char * strAddRecordButton = "Add Record Button";
+static const char * strAddBroadcastButton = "Add Broadcast Button";
+static const char * strPostMPlayer090 = "Post MPlayer 0.90";
+//static const char * strAutoHideSlider = "Auto Hide Slider";
+static const char * strSeekTime = "Forward/Backward Seek Time";
+static const char * strDVDDevice = "DVD Device";
+//static const char * strShowDVD = "Show DVD Menu";
+//static const char * strShowVCD = "Show VCD Menu";
+static const char * strVCDDevice = "VCD Device";
+const char * strUrlBackend = "URL Backend";
+static const char * strAllowHref = "Allow HREF";
+// postproc thingies
+static const char * strPPGroup = "Post processing options";
+static const char * strPostProcessing = "Post processing";
+static const char * strDisablePPauto = "Automaticly disable post processing";
+static const char * strPP_Default = "Default preset";
+static const char * strPP_Fast = "Fast preset";
+static const char * strPP_Custom = "Custom preset";
+
+static const char * strCustom_Hz = "Horizontal deblocking";
+static const char * strCustom_Hz_Aq = "Horizontal deblocking auto quality";
+static const char * strCustom_Hz_Ch = "Horizontal deblocking chrominance";
+
+static const char * strCustom_Vt = "Vertical deblocking";
+static const char * strCustom_Vt_Aq = "Vertical deblocking auto quality";
+static const char * strCustom_Vt_Ch = "Vertical deblocking chrominance";
+
+static const char * strCustom_Dr = "Dering filter";
+static const char * strCustom_Dr_Aq = "Dering auto quality";
+static const char * strCustom_Dr_Ch = "Dering chrominance";
+
+static const char * strCustom_Al = "Autolevel";
+static const char * strCustom_Al_F = "Autolevel full range";
+
+static const char * strCustom_Tn = "Temporal Noise Reducer";
+static const char * strCustom_Tn_S = "Temporal Noise Reducer strength";
+
+static const char * strPP_Lin_Blend_Int = "Linear Blend Deinterlacer";
+static const char * strPP_Lin_Int = "Linear Interpolating Deinterlacer";
+static const char * strPP_Cub_Int = "Cubic Interpolating Deinterlacer";
+static const char * strPP_Med_Int = "Median Interpolating Deinterlacer";
+static const char * strPP_FFmpeg_Int = "FFmpeg Interpolating Deinterlacer";
+// end of postproc
+// recording
+static const char * strRecordingGroup = "Recording";
+static const char * strRecorder = "Recorder";
+static const char * strMencoderArgs = "Mencoder Arguments";
+static const char * strFFMpegArgs = "FFMpeg Arguments";
+static const char * strRecordingFile = "Last Recording Ouput File";
+static const char * strAutoPlayAfterRecording = "Auto Play After Recording";
+static const char * strAutoPlayAfterTime = "Auto Play After Recording Time";
+static const char * strRecordingCopy = "Recording Is Copy";
+
+KDE_NO_EXPORT void Settings::applyColorSetting (bool only_changed_ones) {
+ View *view = static_cast <View *> (m_player->view ());
+ if (!view) return;
+ for (int i = 0; i < int (ColorSetting::last_target); i++)
+ if (!only_changed_ones || colors[i].color != colors[i].newcolor) {
+ colors[i].color = colors[i].newcolor;
+ switch (ColorSetting::Target (i)) {
+ case ColorSetting::playlist_background:
+ view->playList()->setPaletteBackgroundColor(colors[i].color);
+ break;
+ case ColorSetting::playlist_foreground:
+ view->playList()->setPaletteForegroundColor(colors[i].color);
+ break;
+ case ColorSetting::playlist_active:
+ view->playList()->setActiveForegroundColor (colors[i].color);
+ break;
+ case ColorSetting::console_background:
+ view->console()->setPaper (QBrush (colors[i].color));
+ break;
+ case ColorSetting::console_foreground:
+ view->console()->setColor(colors[i].color);
+ break;
+ case ColorSetting::video_background:
+ view->viewer ()->setBackgroundColor (colors[i].color);
+ break;
+ case ColorSetting::area_background:
+ view->viewArea()->setPaletteBackgroundColor(colors[i].color);
+ break;
+ case ColorSetting::infowindow_background:
+ view->infoPanel ()->setPaper (QBrush (colors[i].color));
+ break;
+ case ColorSetting::infowindow_foreground:
+ view->infoPanel()->setPaletteForegroundColor(colors[i].color);
+ view->infoPanel ()->setColor (colors[i].color);
+ break;
+ default:
+ ;
+ }
+ }
+ for (int i = 0; i < int (FontSetting::last_target); i++)
+ if (!only_changed_ones || fonts[i].font != fonts[i].newfont) {
+ fonts[i].font = fonts[i].newfont;
+ switch (FontSetting::Target (i)) {
+ case FontSetting::playlist:
+ view->playList ()->setFont (fonts[i].font);
+ break;
+ case FontSetting::infowindow:
+ view->infoPanel ()->setFont (fonts[i].font);
+ break;
+ default:
+ ;
+ }
+ }
+}
+
+View * Settings::defaultView () {
+ return static_cast <View *> (m_player->view ());
+}
+
+KDE_NO_EXPORT void Settings::readConfig () {
+ m_config->setGroup (strGeneralGroup);
+ no_intro = m_config->readBoolEntry (strNoIntro, false);
+ urllist = m_config->readListEntry (strURLList, ';');
+ sub_urllist = m_config->readListEntry (strSubURLList, ';');
+ prefbitrate = m_config->readNumEntry (strPrefBitRate, 512);
+ maxbitrate = m_config->readNumEntry (strMaxBitRate, 1024);
+ volume = m_config->readNumEntry (strVolume, 20);
+ contrast = m_config->readNumEntry (strContrast, 0);
+ brightness = m_config->readNumEntry (strBrightness, 0);
+ hue = m_config->readNumEntry (strHue, 0);
+ saturation = m_config->readNumEntry (strSaturation, 0);
+ const QMap <QString, Source*>::const_iterator e = m_player->sources ().end ();
+ QMap <QString, Source *>::const_iterator i = m_player->sources().begin ();
+ for (; i != e; ++i)
+ backends[i.data()->name ()] = m_config->readEntry (i.data()->name ());
+ for (int i = 0; i < int (ColorSetting::last_target); i++)
+ colors[i].newcolor = colors[i].color = m_config->readColorEntry (colors[i].option, &colors[i].color);
+ for (int i = 0; i < int (FontSetting::last_target); i++)
+ fonts[i].newfont = fonts[i].font = m_config->readFontEntry (fonts[i].option, &fonts[i].font);
+
+ m_config->setGroup (strMPlayerGroup);
+ sizeratio = m_config->readBoolEntry (strKeepSizeRatio, true);
+ remembersize = m_config->readBoolEntry (strRememberSize, true);
+ autoresize = m_config->readBoolEntry (strAutoResize, true);
+ docksystray = m_config->readBoolEntry (strDockSysTray, true);
+ loop = m_config->readBoolEntry (strLoop, false);
+ framedrop = m_config->readBoolEntry (strFrameDrop, true);
+ autoadjustvolume = m_config->readBoolEntry (strAdjustVolume, true);
+ autoadjustcolors = m_config->readBoolEntry (strAdjustColors, true);
+ mplayerpost090 = m_config->readBoolEntry (strPostMPlayer090, true);
+ showcnfbutton = m_config->readBoolEntry (strAddConfigButton, true);
+ showrecordbutton = m_config->readBoolEntry (strAddRecordButton, true);
+ showbroadcastbutton = m_config->readBoolEntry (strAddBroadcastButton, true);
+ showplaylistbutton = m_config->readBoolEntry (strAddPlaylistButton, true);
+ seektime = m_config->readNumEntry (strSeekTime, 10);
+ dvddevice = m_config->readEntry (strDVDDevice, "/dev/dvd");
+ vcddevice = m_config->readEntry (strVCDDevice, "/dev/cdrom");
+ videodriver = m_config->readNumEntry (strVoDriver, 0);
+ audiodriver = m_config->readNumEntry (strAoDriver, 0);
+ allowhref = m_config->readBoolEntry(strAllowHref, false);
+
+ // recording
+ m_config->setGroup (strRecordingGroup);
+ mencoderarguments = m_config->readEntry (strMencoderArgs, "-oac mp3lame -ovc lavc");
+ ffmpegarguments = m_config->readEntry (strFFMpegArgs, "-f avi -acodec mp3 -vcodec mpeg4");
+ recordfile = m_config->readPathEntry(strRecordingFile, QDir::homeDirPath () + "/record.avi");
+ recorder = Recorder (m_config->readNumEntry (strRecorder, int (MEncoder)));
+ replayoption = ReplayOption (m_config->readNumEntry (strAutoPlayAfterRecording, ReplayFinished));
+ replaytime = m_config->readNumEntry (strAutoPlayAfterTime, 60);
+ recordcopy = m_config->readBoolEntry(strRecordingCopy, true);
+
+ // postproc
+ m_config->setGroup (strPPGroup);
+ postprocessing = m_config->readBoolEntry (strPostProcessing, false);
+ disableppauto = m_config->readBoolEntry (strDisablePPauto, true);
+
+ pp_default = m_config->readBoolEntry (strPP_Default, true);
+ pp_fast = m_config->readBoolEntry (strPP_Fast, false);
+ pp_custom = m_config->readBoolEntry (strPP_Custom, false);
+ // default these to default preset
+ pp_custom_hz = m_config->readBoolEntry (strCustom_Hz, true);
+ pp_custom_hz_aq = m_config->readBoolEntry (strCustom_Hz_Aq, true);
+ pp_custom_hz_ch = m_config->readBoolEntry (strCustom_Hz_Ch, false);
+
+ pp_custom_vt = m_config->readBoolEntry (strCustom_Vt, true);
+ pp_custom_vt_aq = m_config->readBoolEntry (strCustom_Vt_Aq, true);
+ pp_custom_vt_ch = m_config->readBoolEntry (strCustom_Vt_Ch, false);
+
+ pp_custom_dr = m_config->readBoolEntry (strCustom_Dr, true);
+ pp_custom_dr_aq = m_config->readBoolEntry (strCustom_Dr_Aq, true);
+ pp_custom_dr_ch = m_config->readBoolEntry (strCustom_Dr_Ch, false);
+
+ pp_custom_al = m_config->readBoolEntry (strCustom_Al, true);
+ pp_custom_al_f = m_config->readBoolEntry (strCustom_Al_F, false);
+
+ pp_custom_tn = m_config->readBoolEntry (strCustom_Tn, true);
+ pp_custom_tn_s = m_config->readNumEntry (strCustom_Tn_S, 0);
+
+ pp_lin_blend_int = m_config->readBoolEntry (strPP_Lin_Blend_Int, false);
+ pp_lin_int = m_config->readBoolEntry (strPP_Lin_Int, false);
+ pp_cub_int = m_config->readBoolEntry (strPP_Cub_Int, false);
+ pp_med_int = m_config->readBoolEntry (strPP_Med_Int, false);
+ pp_ffmpeg_int = m_config->readBoolEntry (strPP_FFmpeg_Int, false);
+
+ for (PreferencesPage * p = pagelist; p; p = p->next)
+ p->read (m_config);
+ emit configChanged ();
+}
+
+KDE_NO_EXPORT bool Settings::createDialog () {
+ if (configdialog) return false;
+ configdialog = new Preferences (m_player, this);
+ int id = 0;
+ const PartBase::ProcessMap::const_iterator e = m_player->players ().end ();
+ for (PartBase::ProcessMap::const_iterator i = m_player->players ().begin(); i != e; ++i) {
+ Process * p = i.data ();
+ if (p->supports ("urlsource"))
+ configdialog->m_SourcePageURL->backend->insertItem (p->menuName ().remove (QChar ('&')), id++);
+ }
+ connect (configdialog, SIGNAL (okClicked ()),
+ this, SLOT (okPressed ()));
+ connect (configdialog, SIGNAL (applyClicked ()),
+ this, SLOT (okPressed ()));
+ if (KApplication::kApplication())
+ connect (configdialog, SIGNAL (helpClicked ()),
+ this, SLOT (getHelp ()));
+ return true;
+}
+
+void Settings::addPage (PreferencesPage * page) {
+ for (PreferencesPage * p = pagelist; p; p = p->next)
+ if (p == page)
+ return;
+ page->read (m_config);
+ if (configdialog) {
+ configdialog->addPrefPage (page);
+ page->sync (false);
+ }
+ page->next = pagelist;
+ pagelist = page;
+}
+
+void Settings::removePage (PreferencesPage * page) {
+ if (configdialog)
+ configdialog->removePrefPage (page);
+ PreferencesPage * prev = 0L;
+ for (PreferencesPage * p = pagelist; p; prev = p, p = p->next)
+ if (p == page) {
+ if (prev)
+ prev->next = p->next;
+ else
+ pagelist = p->next;
+ break;
+ }
+}
+
+void Settings::show (const char * pagename) {
+ bool created = createDialog ();
+ configdialog->m_GeneralPageGeneral->keepSizeRatio->setChecked (sizeratio);
+ configdialog->m_GeneralPageGeneral->autoResize->setChecked (autoresize);
+ configdialog->m_GeneralPageGeneral->sizesChoice->setButton (remembersize ? 0 : 1);
+ configdialog->m_GeneralPageGeneral->dockSysTray->setChecked (docksystray);
+ configdialog->m_GeneralPageGeneral->loop->setChecked (loop);
+ configdialog->m_GeneralPageGeneral->framedrop->setChecked (framedrop);
+ configdialog->m_GeneralPageGeneral->adjustvolume->setChecked (autoadjustvolume);
+ configdialog->m_GeneralPageGeneral->adjustcolors->setChecked (autoadjustcolors);
+ //configdialog->m_GeneralPageGeneral->autoHideSlider->setChecked (autohideslider);
+ configdialog->m_GeneralPageGeneral->showConfigButton->setChecked (showcnfbutton);
+ configdialog->m_GeneralPageGeneral->showPlaylistButton->setChecked (showplaylistbutton);
+ configdialog->m_GeneralPageGeneral->showRecordButton->setChecked (showrecordbutton);
+ configdialog->m_GeneralPageGeneral->showBroadcastButton->setChecked (showbroadcastbutton);
+ configdialog->m_GeneralPageGeneral->seekTime->setValue(seektime);
+ for (int i = 0; i < int (ColorSetting::last_target); i++)
+ colors[i].newcolor = colors[i].color;
+ for (int i = 0; i < int (FontSetting::last_target); i++)
+ fonts[i].newfont = fonts[i].font;
+ configdialog->m_SourcePageURL->urllist->clear ();
+ configdialog->m_SourcePageURL->urllist->insertStringList (urllist);
+ configdialog->m_SourcePageURL->urllist->setCurrentText (m_player->source ()->url ().prettyURL ());
+ configdialog->m_SourcePageURL->sub_urllist->clear ();
+ configdialog->m_SourcePageURL->sub_urllist->insertStringList (sub_urllist);
+ configdialog->m_SourcePageURL->sub_urllist->setCurrentText (m_player->source ()->subUrl ().prettyURL ());
+ configdialog->m_SourcePageURL->changed = false;
+ configdialog->m_SourcePageURL->prefBitRate->setText (QString::number (prefbitrate));
+ configdialog->m_SourcePageURL->maxBitRate->setText (QString::number (maxbitrate));
+
+ configdialog->m_GeneralPageOutput->videoDriver->setCurrentItem (videodriver);
+ configdialog->m_GeneralPageOutput->audioDriver->setCurrentItem (audiodriver);
+ configdialog->m_SourcePageURL->backend->setCurrentItem (configdialog->m_SourcePageURL->backend->findItem (backends["urlsource"]));
+ int id = 0;
+ const PartBase::ProcessMap::const_iterator e = m_player->players ().end ();
+ for (PartBase::ProcessMap::const_iterator i = m_player->players ().begin(); i != e; ++i) {
+ Process * p = i.data ();
+ if (p->supports ("urlsource")) {
+ if (backends["urlsource"] == QString (p->name()))
+ configdialog->m_SourcePageURL->backend->setCurrentItem (id);
+ id++;
+ }
+ }
+ configdialog->m_SourcePageURL->allowhref->setChecked (allowhref);
+
+ // postproc
+ configdialog->m_OPPagePostproc->postProcessing->setChecked (postprocessing);
+ configdialog->m_OPPagePostproc->disablePPauto->setChecked (disableppauto);
+ configdialog->m_OPPagePostproc->PostprocessingOptions->setEnabled (postprocessing);
+
+ configdialog->m_OPPagePostproc->defaultPreset->setChecked (pp_default);
+ configdialog->m_OPPagePostproc->fastPreset->setChecked (pp_fast);
+ configdialog->m_OPPagePostproc->customPreset->setChecked (pp_custom);
+
+ configdialog->m_OPPagePostproc->HzDeblockFilter->setChecked (pp_custom_hz);
+ configdialog->m_OPPagePostproc->HzDeblockAQuality->setChecked (pp_custom_hz_aq);
+ configdialog->m_OPPagePostproc->HzDeblockCFiltering->setChecked (pp_custom_hz_ch);
+
+ configdialog->m_OPPagePostproc->VtDeblockFilter->setChecked (pp_custom_vt);
+ configdialog->m_OPPagePostproc->VtDeblockAQuality->setChecked (pp_custom_vt_aq);
+ configdialog->m_OPPagePostproc->VtDeblockCFiltering->setChecked (pp_custom_vt_ch);
+
+ configdialog->m_OPPagePostproc->DeringFilter->setChecked (pp_custom_dr);
+ configdialog->m_OPPagePostproc->DeringAQuality->setChecked (pp_custom_dr_aq);
+ configdialog->m_OPPagePostproc->DeringCFiltering->setChecked (pp_custom_dr_ch);
+
+ configdialog->m_OPPagePostproc->AutolevelsFilter->setChecked (pp_custom_al);
+ configdialog->m_OPPagePostproc->AutolevelsFullrange->setChecked (pp_custom_al_f);
+ configdialog->m_OPPagePostproc->TmpNoiseFilter->setChecked (pp_custom_tn);
+ //configdialog->m_OPPagePostproc->TmpNoiseSlider->setValue (pp_custom_tn_s);
+
+ configdialog->m_OPPagePostproc->LinBlendDeinterlacer->setChecked (pp_lin_blend_int);
+ configdialog->m_OPPagePostproc->LinIntDeinterlacer->setChecked (pp_lin_int);
+ configdialog->m_OPPagePostproc->CubicIntDeinterlacer->setChecked (pp_cub_int);
+ configdialog->m_OPPagePostproc->MedianDeinterlacer->setChecked (pp_med_int);
+ configdialog->m_OPPagePostproc->FfmpegDeinterlacer->setChecked (pp_ffmpeg_int);
+ // recording
+ configdialog->m_RecordPage->url->lineEdit()->setText (recordfile);
+ configdialog->m_RecordPage->replay->setButton (int (replayoption));
+ configdialog->m_RecordPage->recorder->setButton (int (recorder));
+ configdialog->m_RecordPage->replayClicked (int (replayoption));
+ configdialog->m_RecordPage->recorderClicked (int (recorder));
+ configdialog->m_RecordPage->replaytime->setText (QString::number (replaytime));
+ configdialog->m_MEncoderPage->arguments->setText (mencoderarguments);
+ configdialog->m_MEncoderPage->format->setButton (recordcopy ? 0 : 1);
+ configdialog->m_MEncoderPage->formatClicked (recordcopy ? 0 : 1);
+ configdialog->m_FFMpegPage->arguments->setText (ffmpegarguments);
+
+ //dynamic stuff
+ for (PreferencesPage * p = pagelist; p; p = p->next)
+ p->sync (false);
+ //\dynamic stuff
+ if (pagename)
+ configDialog ()->setPage (pagename);
+ if (created)
+ configdialog->resize (configdialog->minimumSize ());
+ configdialog->show ();
+}
+
+void Settings::writeConfig () {
+ m_config->setGroup (strGeneralGroup);
+ m_config->writeEntry (strURLList, urllist, ';');
+ m_config->writeEntry (strSubURLList, sub_urllist, ';');
+ m_config->writeEntry (strPrefBitRate, prefbitrate);
+ m_config->writeEntry (strMaxBitRate, maxbitrate);
+ m_config->writeEntry (strVolume, volume);
+ m_config->writeEntry (strContrast, contrast);
+ m_config->writeEntry (strBrightness, brightness);
+ m_config->writeEntry (strHue, hue);
+ m_config->writeEntry (strSaturation, saturation);
+ const QMap<QString,QString>::iterator b_end = backends.end ();
+ for (QMap<QString,QString>::iterator i = backends.begin(); i != b_end; ++i)
+ m_config->writeEntry (i.key (), i.data ());
+ for (int i = 0; i < int (ColorSetting::last_target); i++)
+ m_config->writeEntry (colors[i].option, colors[i].color);
+ for (int i = 0; i < int (FontSetting::last_target); i++)
+ m_config->writeEntry (fonts[i].option, fonts[i].font);
+ m_config->setGroup (strMPlayerGroup);
+ m_config->writeEntry (strKeepSizeRatio, sizeratio);
+ m_config->writeEntry (strAutoResize, autoresize);
+ m_config->writeEntry (strRememberSize, remembersize);
+ m_config->writeEntry (strDockSysTray, docksystray);
+ m_config->writeEntry (strLoop, loop);
+ m_config->writeEntry (strFrameDrop, framedrop);
+ m_config->writeEntry (strAdjustVolume, autoadjustvolume);
+ m_config->writeEntry (strAdjustColors, autoadjustcolors);
+ m_config->writeEntry (strSeekTime, seektime);
+ m_config->writeEntry (strVoDriver, videodriver);
+ m_config->writeEntry (strAoDriver, audiodriver);
+ m_config->writeEntry (strAllowHref, allowhref);
+ m_config->writeEntry (strAddConfigButton, showcnfbutton);
+ m_config->writeEntry (strAddPlaylistButton, showplaylistbutton);
+ m_config->writeEntry (strAddRecordButton, showrecordbutton);
+ m_config->writeEntry (strAddBroadcastButton, showbroadcastbutton);
+
+ m_config->writeEntry (strDVDDevice, dvddevice);
+ m_config->writeEntry (strVCDDevice, vcddevice);
+
+ //postprocessing stuff
+ m_config->setGroup (strPPGroup);
+ m_config->writeEntry (strPostProcessing, postprocessing);
+ m_config->writeEntry (strDisablePPauto, disableppauto);
+ m_config->writeEntry (strPP_Default, pp_default);
+ m_config->writeEntry (strPP_Fast, pp_fast);
+ m_config->writeEntry (strPP_Custom, pp_custom);
+
+ m_config->writeEntry (strCustom_Hz, pp_custom_hz);
+ m_config->writeEntry (strCustom_Hz_Aq, pp_custom_hz_aq);
+ m_config->writeEntry (strCustom_Hz_Ch, pp_custom_hz_ch);
+
+ m_config->writeEntry (strCustom_Vt, pp_custom_vt);
+ m_config->writeEntry (strCustom_Vt_Aq, pp_custom_vt_aq);
+ m_config->writeEntry (strCustom_Vt_Ch, pp_custom_vt_ch);
+
+ m_config->writeEntry (strCustom_Dr, pp_custom_dr);
+ m_config->writeEntry (strCustom_Dr_Aq, pp_custom_vt_aq);
+ m_config->writeEntry (strCustom_Dr_Ch, pp_custom_vt_ch);
+
+ m_config->writeEntry (strCustom_Al, pp_custom_al);
+ m_config->writeEntry (strCustom_Al_F, pp_custom_al_f);
+
+ m_config->writeEntry (strCustom_Tn, pp_custom_tn);
+ m_config->writeEntry (strCustom_Tn_S, pp_custom_tn_s);
+
+ m_config->writeEntry (strPP_Lin_Blend_Int, pp_lin_blend_int);
+ m_config->writeEntry (strPP_Lin_Int, pp_lin_int);
+ m_config->writeEntry (strPP_Cub_Int, pp_cub_int);
+ m_config->writeEntry (strPP_Med_Int, pp_med_int);
+ m_config->writeEntry (strPP_FFmpeg_Int, pp_ffmpeg_int);
+
+ // recording
+ m_config->setGroup (strRecordingGroup);
+ m_config->writePathEntry (strRecordingFile, recordfile);
+ m_config->writeEntry (strAutoPlayAfterRecording, int (replayoption));
+ m_config->writeEntry (strAutoPlayAfterTime, replaytime);
+ m_config->writeEntry (strRecorder, int (recorder));
+ m_config->writeEntry (strRecordingCopy, recordcopy);
+ m_config->writeEntry (strMencoderArgs, mencoderarguments);
+ m_config->writeEntry (strFFMpegArgs, ffmpegarguments);
+
+ //dynamic stuff
+ for (PreferencesPage * p = pagelist; p; p = p->next)
+ p->write (m_config);
+ //\dynamic stuff
+ m_config->sync ();
+}
+
+void Settings::okPressed () {
+ bool urlchanged = configdialog->m_SourcePageURL->changed;
+ bool playerchanged = false;
+ if (urlchanged) {
+ if (configdialog->m_SourcePageURL->url->url ().isEmpty ())
+ urlchanged = false;
+ else {
+ if (KURL::fromPathOrURL (configdialog->m_SourcePageURL->url->url ()).isLocalFile () ||
+ KURL::isRelativeURL (configdialog->m_SourcePageURL->url->url ())) {
+ QFileInfo fi (configdialog->m_SourcePageURL->url->url ());
+ int hpos = configdialog->m_SourcePageURL->url->url ().findRev ('#');
+ QString xine_directives ("");
+ while (!fi.exists () && hpos > -1) {
+ xine_directives = configdialog->m_SourcePageURL->url->url ().mid (hpos);
+ fi.setFile (configdialog->m_SourcePageURL->url->url ().left (hpos));
+ hpos = configdialog->m_SourcePageURL->url->url ().findRev ('#', hpos-1);
+ }
+ if (!fi.exists ()) {
+ urlchanged = false;
+ KMessageBox::error (m_player->view (), i18n ("File %1 does not exist.").arg (configdialog->m_SourcePageURL->url->url ()), i18n ("Error"));
+ } else
+ configdialog->m_SourcePageURL->url->setURL (fi.absFilePath () + xine_directives);
+ }
+ if (urlchanged &&
+ !configdialog->m_SourcePageURL->sub_url->url ().isEmpty () &&
+ (KURL::fromPathOrURL (configdialog->m_SourcePageURL->sub_url->url ()).isLocalFile () ||
+ KURL::isRelativeURL (configdialog->m_SourcePageURL->sub_url->url ()))) {
+ QFileInfo sfi (configdialog->m_SourcePageURL->sub_url->url ());
+ if (!sfi.exists ()) {
+ KMessageBox::error (m_player->view (), i18n ("Sub title file %1 does not exist.").arg (configdialog->m_SourcePageURL->sub_url->url ()), i18n ("Error"));
+ configdialog->m_SourcePageURL->sub_url->setURL (QString ());
+ } else
+ configdialog->m_SourcePageURL->sub_url->setURL (sfi.absFilePath ());
+ }
+ }
+ }
+ if (urlchanged) {
+ KURL url = KURL::fromPathOrURL (configdialog->m_SourcePageURL->url->url ());
+ m_player->setURL (url);
+ if (urllist.find (url.prettyURL ()) == urllist.end ())
+ configdialog->m_SourcePageURL->urllist->insertItem (url.prettyURL (), 0);
+ KURL sub_url = KURL::fromPathOrURL (configdialog->m_SourcePageURL->sub_url->url ());
+ if (sub_urllist.find (sub_url.prettyURL ()) == sub_urllist.end ())
+ configdialog->m_SourcePageURL->sub_urllist->insertItem (sub_url.prettyURL (), 0);
+ }
+ urllist.clear ();
+ for (int i = 0; i < configdialog->m_SourcePageURL->urllist->count () && i < 20; ++i)
+ // damnit why don't maxCount and setDuplicatesEnabled(false) work :(
+ // and why can I put a qstringlist in it, but cannot get it out of it again..
+ if (!configdialog->m_SourcePageURL->urllist->text (i).isEmpty ())
+ urllist.push_back (configdialog->m_SourcePageURL->urllist->text (i));
+ sub_urllist.clear ();
+ for (int i = 0; i < configdialog->m_SourcePageURL->sub_urllist->count () && i < 20; ++i)
+ if (!configdialog->m_SourcePageURL->sub_urllist->text (i).isEmpty ())
+ sub_urllist.push_back (configdialog->m_SourcePageURL->sub_urllist->text (i));
+ prefbitrate = configdialog->m_SourcePageURL->prefBitRate->text ().toInt ();
+ maxbitrate = configdialog->m_SourcePageURL->maxBitRate->text ().toInt ();
+ sizeratio = configdialog->m_GeneralPageGeneral->keepSizeRatio->isChecked ();
+ autoresize = configdialog->m_GeneralPageGeneral->autoResize->isChecked ();
+ remembersize=!configdialog->m_GeneralPageGeneral->sizesChoice->selectedId();
+ docksystray = configdialog->m_GeneralPageGeneral->dockSysTray->isChecked ();
+ loop = configdialog->m_GeneralPageGeneral->loop->isChecked ();
+ framedrop = configdialog->m_GeneralPageGeneral->framedrop->isChecked ();
+ autoadjustvolume = configdialog->m_GeneralPageGeneral->adjustvolume->isChecked ();
+ autoadjustcolors = configdialog->m_GeneralPageGeneral->adjustcolors->isChecked ();
+ showcnfbutton = configdialog->m_GeneralPageGeneral->showConfigButton->isChecked ();
+ showplaylistbutton = configdialog->m_GeneralPageGeneral->showPlaylistButton->isChecked ();
+ showrecordbutton = configdialog->m_GeneralPageGeneral->showRecordButton->isChecked ();
+ showbroadcastbutton = configdialog->m_GeneralPageGeneral->showBroadcastButton->isChecked ();
+ seektime = configdialog->m_GeneralPageGeneral->seekTime->value();
+
+ videodriver = configdialog->m_GeneralPageOutput->videoDriver->currentItem();
+ audiodriver = configdialog->m_GeneralPageOutput->audioDriver->currentItem();
+ if (!strcmp (m_player->source()->name (), "urlsource")) {
+ int backend = configdialog->m_SourcePageURL->backend->currentItem ();
+ const PartBase::ProcessMap::const_iterator e = m_player->players ().end();
+ for (PartBase::ProcessMap::const_iterator i = m_player->players ().begin(); backend >=0 && i != e; ++i) {
+ Process * proc = i.data ();
+ if (proc->supports ("urlsource") && backend-- == 0) {
+ backends["urlsource"] = proc->name ();
+ if (proc != m_player->process ()) {
+ m_player->setProcess (proc->name ());
+ playerchanged = true;
+ }
+ }
+ }
+ }
+ allowhref = configdialog->m_SourcePageURL->allowhref->isChecked ();
+ //postproc
+ postprocessing = configdialog->m_OPPagePostproc->postProcessing->isChecked();
+ disableppauto = configdialog->m_OPPagePostproc->disablePPauto->isChecked();
+ pp_default = configdialog->m_OPPagePostproc->defaultPreset->isChecked();
+ pp_fast = configdialog->m_OPPagePostproc->fastPreset->isChecked();
+ pp_custom = configdialog->m_OPPagePostproc->customPreset->isChecked();
+
+ pp_custom_hz = configdialog->m_OPPagePostproc->HzDeblockFilter->isChecked();
+ pp_custom_hz_aq = configdialog->m_OPPagePostproc->HzDeblockAQuality->isChecked();
+ pp_custom_hz_ch = configdialog->m_OPPagePostproc->HzDeblockCFiltering->isChecked();
+
+ pp_custom_vt = configdialog->m_OPPagePostproc->VtDeblockFilter->isChecked();
+ pp_custom_vt_aq = configdialog->m_OPPagePostproc->VtDeblockAQuality->isChecked();
+ pp_custom_vt_ch = configdialog->m_OPPagePostproc->VtDeblockCFiltering->isChecked();
+
+ pp_custom_dr = configdialog->m_OPPagePostproc->DeringFilter->isChecked();
+ pp_custom_dr_aq = configdialog->m_OPPagePostproc->DeringAQuality->isChecked();
+ pp_custom_dr_ch = configdialog->m_OPPagePostproc->DeringCFiltering->isChecked();
+
+ pp_custom_al = configdialog->m_OPPagePostproc->AutolevelsFilter->isChecked();
+ pp_custom_al_f = configdialog->m_OPPagePostproc->AutolevelsFullrange->isChecked();
+
+ pp_custom_tn = configdialog->m_OPPagePostproc->TmpNoiseFilter->isChecked();
+ pp_custom_tn_s = 0; // gotta fix this later
+ //pp_custom_tn_s = configdialog->m_OPPagePostproc->TmpNoiseSlider->value();
+
+ pp_lin_blend_int = configdialog->m_OPPagePostproc->LinBlendDeinterlacer->isChecked();
+ pp_lin_int = configdialog->m_OPPagePostproc->LinIntDeinterlacer->isChecked();
+ pp_cub_int = configdialog->m_OPPagePostproc->CubicIntDeinterlacer->isChecked();
+ pp_med_int = configdialog->m_OPPagePostproc->MedianDeinterlacer->isChecked();
+ pp_ffmpeg_int = configdialog->m_OPPagePostproc->FfmpegDeinterlacer->isChecked();
+ // recording
+#if (QT_VERSION < 0x030200)
+ recorder = Recorder (configdialog->m_RecordPage->recorder->id (configdialog->m_RecordPage->recorder->selected ()));
+#else
+ recorder = Recorder (configdialog->m_RecordPage->recorder->selectedId ());
+#endif
+ replaytime = configdialog->m_RecordPage->replaytime->text ().toInt ();
+ configdialog->m_RecordPage->replaytime->setText (QString::number (replaytime));
+ recordfile = configdialog->m_RecordPage->url->lineEdit()->text ();
+ mencoderarguments = configdialog->m_MEncoderPage->arguments->text ();
+ ffmpegarguments = configdialog->m_FFMpegPage->arguments->text ();
+#if (QT_VERSION < 0x030200)
+ recordcopy = !configdialog->m_MEncoderPage->format->id (configdialog->m_MEncoderPage->format->selected ());
+#else
+ recordcopy = !configdialog->m_MEncoderPage->format->selectedId ();
+#endif
+
+ //dynamic stuff
+ for (PreferencesPage * p = pagelist; p; p = p->next)
+ p->sync (true);
+ //\dynamic stuff
+
+ writeConfig ();
+ emit configChanged ();
+
+ if (urlchanged || playerchanged) {
+ m_player->sources () ["urlsource"]->setSubURL
+ (KURL(configdialog->m_SourcePageURL->sub_url->url()));
+ m_player->openURL (KURL::fromPathOrURL (configdialog->m_SourcePageURL->url->url ()));
+ m_player->source ()->setSubURL (KURL::fromPathOrURL (configdialog->m_SourcePageURL->sub_url->url ()));
+ }
+}
+
+KDE_NO_EXPORT void Settings::getHelp () {
+ KApplication::kApplication()->invokeBrowser ("man:/mplayer");
+}
+
+#include "kmplayerconfig.moc"
+
diff --git a/src/kmplayerconfig.h b/src/kmplayerconfig.h
new file mode 100644
index 0000000..784c1c6
--- /dev/null
+++ b/src/kmplayerconfig.h
@@ -0,0 +1,204 @@
+/**
+ * Copyright (C) 2002-2003 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#ifndef _KMPLAYERCONFIG_H_
+#define _KMPLAYERCONFIG_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qobject.h>
+#include <qstringlist.h>
+#include <qmap.h>
+
+#include <kurl.h>
+
+class KConfig;
+
+namespace KMPlayer {
+
+class PartBase;
+class Preferences;
+class View;
+
+class OutputDriver {
+public:
+ const char * driver;
+ const QString description;
+};
+
+class ColorSetting {
+public:
+ QString title;
+ QString option;
+ QColor color;
+ QColor newcolor;
+ enum Target {
+ playlist_background = 0, playlist_foreground, playlist_active,
+ console_background, console_foreground,
+ video_background, area_background,
+ infowindow_background, infowindow_foreground,
+ last_target
+ } target;
+};
+
+class FontSetting {
+public:
+ QString title;
+ QString option; // for ini file
+ QFont font;
+ QFont newfont;
+ enum Target {
+ playlist, infowindow, last_target
+ } target;
+};
+
+template <class T>
+struct Deleter {
+ void operator ()(T * t) {
+ delete t;
+ }
+};
+
+/*
+ * Base class for all dynamic preferance pages
+ */
+class KMPLAYER_EXPORT PreferencesPage {
+public:
+ virtual ~PreferencesPage () {}
+ virtual void write (KConfig *) = 0;
+ virtual void read (KConfig *) = 0;
+ virtual void sync (bool fromUI) = 0;
+ virtual void prefLocation (QString & item, QString & icon, QString & tab) = 0;
+ virtual QFrame * prefPage (QWidget * parent) = 0;
+ PreferencesPage * next;
+};
+
+/*
+ * Class for storing all actual settings and reading/writing them
+ */
+class KMPLAYER_EXPORT Settings : public QObject {
+ Q_OBJECT
+public:
+ Settings (PartBase *, KConfig * part);
+ ~Settings ();
+ bool createDialog () KDE_NO_EXPORT;
+ void show (const char * pagename = 0L);
+ void addPage (PreferencesPage *);
+ void removePage (PreferencesPage *);
+ void applyColorSetting (bool only_changed_ones);
+ Preferences *configDialog() const { return configdialog; }
+ View * defaultView ();
+ KConfig * kconfig () { return m_config; }
+
+ QStringList urllist;
+ QStringList sub_urllist;
+ int volume;
+ int contrast;
+ int brightness;
+ int hue;
+ int saturation;
+ int prefbitrate;
+ int maxbitrate;
+ bool usearts : 1;
+ bool no_intro : 1;
+ bool sizeratio : 1;
+ bool remembersize : 1;
+ bool autoresize : 1;
+ bool docksystray : 1;
+ bool loop : 1;
+ bool framedrop : 1;
+ bool autoadjustvolume : 1;
+ bool autoadjustcolors : 1;
+ bool showcnfbutton : 1;
+ bool showplaylistbutton : 1;
+ bool showrecordbutton : 1;
+ bool showbroadcastbutton : 1;
+ bool autohideslider : 1;
+ bool mplayerpost090 : 1;
+ bool allowhref : 1;
+// postproc thingies
+ bool postprocessing : 1;
+ bool disableppauto : 1;
+ bool pp_default : 1; // -vf pp=de
+ bool pp_fast : 1; // -vf pp=fa
+ bool pp_custom : 1; // coming up
+
+ bool pp_custom_hz : 1; // horizontal deblocking
+ bool pp_custom_hz_aq : 1; // - autoquality
+ bool pp_custom_hz_ch : 1; // - chrominance
+
+ bool pp_custom_vt : 1; // vertical deblocking
+ bool pp_custom_vt_aq : 1; // - autoquality
+ bool pp_custom_vt_ch : 1; // - chrominance
+
+ bool pp_custom_dr : 1; // dering filter
+ bool pp_custom_dr_aq : 1; // - autoquality
+ bool pp_custom_dr_ch : 1; // - chrominance
+
+ bool pp_custom_al : 1; // pp=al
+ bool pp_custom_al_f : 1;// - fullrange
+
+ bool pp_custom_tn : 1; // pp=tn
+ int pp_custom_tn_s : 1; // - noise reducer strength (1 <= x <= 3)
+
+ bool pp_lin_blend_int : 1; // linear blend deinterlacer
+ bool pp_lin_int : 1; // - interpolating -
+ bool pp_cub_int : 1; // cubic - -
+ bool pp_med_int : 1; // median interlacer
+ bool pp_ffmpeg_int : 1; // ffmpeg interlacer
+// end of postproc
+ // recording
+ bool recordcopy : 1;
+ enum Recorder { MEncoder = 0, FFMpeg, MPlayerDumpstream };
+ Recorder recorder;
+ enum ReplayOption { ReplayNo = 0, ReplayFinished, ReplayAfter };
+ ReplayOption replayoption;
+ int replaytime;
+ QString mencoderarguments;
+ QString ffmpegarguments;
+ QString recordfile;
+ int seektime;
+ int videodriver;
+ int audiodriver;
+ OutputDriver * audiodrivers;
+ OutputDriver * videodrivers;
+ ColorSetting colors [ColorSetting::last_target];
+ FontSetting fonts [FontSetting::last_target];
+ QString dvddevice;
+ QString vcddevice;
+ QMap <QString, QString> backends;
+ PreferencesPage * pagelist;
+signals:
+ void configChanged ();
+public slots:
+ void readConfig () KDE_NO_EXPORT;
+ void writeConfig ();
+private slots:
+ void okPressed ();
+ void getHelp ();
+private:
+ Preferences * configdialog;
+ KConfig * m_config;
+ PartBase * m_player;
+};
+
+} // namespace
+
+#endif //_KMPLAYERCONFIG_H_
diff --git a/src/kmplayercontrolpanel.cpp b/src/kmplayercontrolpanel.cpp
new file mode 100644
index 0000000..ce5d617
--- /dev/null
+++ b/src/kmplayercontrolpanel.cpp
@@ -0,0 +1,703 @@
+/**
+ * Copyright (C) 2005 by Koos Vriezen <koos ! vriezen ? gmail ! com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include <qlayout.h>
+#include <qpixmap.h>
+#include <qslider.h>
+#include <qlabel.h>
+#include <qtooltip.h>
+#include <qpainter.h>
+#include <qstringlist.h>
+
+#include <kiconloader.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include "kmplayerview.h"
+#include "kmplayercontrolpanel.h"
+#include "kmplayersource.h"
+
+static const int button_height_with_slider = 15;
+static const int button_height_only_buttons = 11;
+extern const char * normal_window_xpm[];
+extern const char * playlist_xpm[];
+#include "kmplayerview.h"
+#include "kmplayercontrolpanel.h"
+
+using namespace KMPlayer;
+
+static char xpm_fg_color [32] = ". c #000000";
+
+static const char * stop_xpm[] = {
+ "5 7 2 1",
+ " c None",
+ xpm_fg_color,
+ " ",
+ ".....",
+ ".....",
+ ".....",
+ ".....",
+ ".....",
+ " "};
+
+static const char * play_xpm[] = {
+ "5 9 2 1",
+ " c None",
+ xpm_fg_color,
+ ". ",
+ ".. ",
+ "... ",
+ ".... ",
+ ".....",
+ ".... ",
+ "... ",
+ ".. ",
+ ". "};
+
+static const char * pause_xpm[] = {
+ "7 9 2 1",
+ " c None",
+ xpm_fg_color,
+ " ",
+ ".. ..",
+ ".. ..",
+ ".. ..",
+ ".. ..",
+ ".. ..",
+ ".. ..",
+ ".. ..",
+ " "};
+
+static const char * forward_xpm[] = {
+ "11 9 2 1",
+ " c None",
+ xpm_fg_color,
+ ". . ",
+ ".. .. ",
+ "... ... ",
+ ".... .... ",
+ "..... .....",
+ ".... .... ",
+ "... ... ",
+ ".. .. ",
+ ". . "};
+
+static const char * back_xpm[] = {
+ "11 9 2 1",
+ " c None",
+ xpm_fg_color,
+ " . .",
+ " .. ..",
+ " ... ...",
+ " .... ....",
+ "..... .....",
+ " .... ....",
+ " ... ...",
+ " .. ..",
+ " . ."};
+
+static const char * config_xpm[] = {
+ "11 8 2 1",
+ " c None",
+ xpm_fg_color,
+ " ",
+ " ",
+ "...........",
+ " ......... ",
+ " ....... ",
+ " ..... ",
+ " ... ",
+ " . "};
+
+const char * playlist_xpm[] = {
+ "8 9 2 1",
+ " c None",
+ xpm_fg_color,
+ " ",
+ " ",
+ "........",
+ "........",
+ " ",
+ " ",
+ "........",
+ "........",
+ " "};
+
+const char * normal_window_xpm[] = {
+ "7 9 2 1",
+ " c None",
+ xpm_fg_color,
+ " ",
+ ".......",
+ ".......",
+ ". .",
+ ". .",
+ ". .",
+ ". .",
+ ".......",
+ " "};
+
+static const char * record_xpm[] = {
+ "7 7 3 1",
+ " c None",
+ xpm_fg_color,
+ "+ c #FF0000",
+ " ",
+ ".......",
+ ".+++++.",
+ ".+++++.",
+ ".+++++.",
+ ".......",
+ " "};
+
+static const char * broadcast_xpm[] = {
+"21 9 2 1",
+" c None",
+xpm_fg_color,
+" ",
+" .. .. .. .. ",
+".. .. ... .. ..",
+".. .. ..... .. ..",
+".. .. ..... .. ..",
+".. .. ..... .. ..",
+".. .. ... .. ..",
+" .. .. .. .. ",
+" "};
+
+static const char * language_xpm [] = {
+ "12 9 2 1",
+ " c None",
+ xpm_fg_color,
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ ".... ......",
+ ".... ......",
+ ".... ......",
+ " "};
+
+static const char * red_xpm[] = {
+ "7 9 3 1",
+ " c None",
+ xpm_fg_color,
+ "+ c #FF0000",
+ " ",
+ ".......",
+ ".+++++.",
+ ".+++++.",
+ ".+++++.",
+ ".+++++.",
+ ".+++++.",
+ ".......",
+ " "};
+
+static const char * green_xpm[] = {
+ "7 9 3 1",
+ " c None",
+ xpm_fg_color,
+ "+ c #00FF00",
+ " ",
+ ".......",
+ ".+++++.",
+ ".+++++.",
+ ".+++++.",
+ ".+++++.",
+ ".+++++.",
+ ".......",
+ " "};
+
+static const char * yellow_xpm[] = {
+ "7 9 3 1",
+ " c None",
+ xpm_fg_color,
+ "+ c #FFFF00",
+ " ",
+ ".......",
+ ".+++++.",
+ ".+++++.",
+ ".+++++.",
+ ".+++++.",
+ ".+++++.",
+ ".......",
+ " "};
+
+static const char * blue_xpm[] = {
+ "7 9 3 1",
+ " c None",
+ xpm_fg_color,
+ "+ c #0080FF00",
+ " ",
+ ".......",
+ ".+++++.",
+ ".+++++.",
+ ".+++++.",
+ ".+++++.",
+ ".+++++.",
+ ".......",
+ " "};
+
+//-----------------------------------------------------------------------------
+
+static QPushButton * ctrlButton (QWidget * w, QBoxLayout * l, const char ** p, int key = 0) {
+ QPushButton * b = new QPushButton (QIconSet (QPixmap(p)), QString (), w);
+ b->setFocusPolicy (QWidget::NoFocus);
+ b->setFlat (true);
+ if (key)
+ b->setAccel (QKeySequence (key));
+ l->addWidget (b);
+ return b;
+}
+
+KDE_NO_CDTOR_EXPORT
+KMPlayerMenuButton::KMPlayerMenuButton (QWidget * parent, QBoxLayout * l, const char ** p, int key)
+ : QPushButton (QIconSet (QPixmap(p)), QString (), parent, "kde_kmplayer_control_button") {
+ setFocusPolicy (QWidget::NoFocus);
+ setFlat (true);
+ if (key)
+ setAccel (QKeySequence (key));
+ l->addWidget (this);
+}
+
+KDE_NO_EXPORT void KMPlayerMenuButton::enterEvent (QEvent *) {
+ emit mouseEntered ();
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerPopupMenu::KMPlayerPopupMenu (QWidget * parent)
+ : KPopupMenu (parent, "kde_kmplayer_popupmenu") {}
+
+KDE_NO_EXPORT void KMPlayerPopupMenu::leaveEvent (QEvent *) {
+ emit mouseLeft ();
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT VolumeBar::VolumeBar (QWidget * parent, View * view)
+ : QWidget (parent), m_view (view), m_value (100) {
+ setSizePolicy( QSizePolicy (QSizePolicy::Minimum, QSizePolicy::Fixed));
+ setMinimumSize (QSize (51, button_height_only_buttons + 2));
+ QToolTip::add (this, i18n ("Volume is %1").arg (m_value));
+}
+
+KDE_NO_CDTOR_EXPORT VolumeBar::~VolumeBar () {
+}
+
+void VolumeBar::setValue (int v) {
+ m_value = v;
+ if (m_value < 0) m_value = 0;
+ if (m_value > 100) m_value = 100;
+ QToolTip::remove (this);
+ QToolTip::add (this, i18n ("Volume is %1").arg (m_value));
+ repaint (true);
+ emit volumeChanged (m_value);
+}
+
+void VolumeBar::wheelEvent (QWheelEvent * e) {
+ setValue (m_value + (e->delta () > 0 ? 2 : -2));
+ e->accept ();
+}
+
+void VolumeBar::paintEvent (QPaintEvent * e) {
+ QWidget::paintEvent (e);
+ QPainter p;
+ p.begin (this);
+ QColor color = paletteForegroundColor ();
+ p.setPen (color);
+ int w = width () - 6;
+ int vx = m_value * w / 100;
+ p.fillRect (3, 3, vx, 7, color);
+ p.drawRect (vx + 3, 3, w - vx, 7);
+ p.end ();
+ //kdDebug () << "w=" << w << " vx=" << vx << endl;
+}
+
+void VolumeBar::mousePressEvent (QMouseEvent * e) {
+ setValue (100 * (e->x () - 3) / (width () - 6));
+ e->accept ();
+}
+
+void VolumeBar::mouseMoveEvent (QMouseEvent * e) {
+ setValue (100 * (e->x () - 3) / (width () - 6));
+ e->accept ();
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT ControlPanel::ControlPanel(QWidget * parent, View * view)
+ : QWidget (parent),
+ m_progress_mode (progress_playing),
+ m_progress_length (0),
+ m_popup_timer (0),
+ m_popdown_timer (0),
+ m_view (view),
+ m_auto_controls (true),
+ m_popup_clicked (false) {
+ m_buttonbox = new QHBoxLayout (this, 5, 4);
+ QColor c = paletteForegroundColor ();
+ strncpy (xpm_fg_color, QString().sprintf(". c #%02x%02x%02x", c.red(), c.green(),c.blue()).ascii(), 31);
+ xpm_fg_color[31] = 0;
+ m_buttons[button_config] = new KMPlayerMenuButton (this, m_buttonbox, config_xpm);
+ m_buttons[button_playlist] = ctrlButton (this, m_buttonbox, playlist_xpm);
+ m_buttons[button_back] = ctrlButton (this, m_buttonbox, back_xpm);
+ m_buttons[button_play] = ctrlButton(this, m_buttonbox, play_xpm, Qt::Key_R);
+ m_buttons[button_forward] = ctrlButton (this, m_buttonbox, forward_xpm);
+ m_buttons[button_stop] = ctrlButton(this, m_buttonbox, stop_xpm, Qt::Key_S);
+ m_buttons[button_pause]=ctrlButton(this, m_buttonbox, pause_xpm, Qt::Key_P);
+ m_buttons[button_record] = ctrlButton (this, m_buttonbox, record_xpm);
+ m_buttons[button_broadcast] = ctrlButton (this, m_buttonbox, broadcast_xpm);
+ m_buttons[button_language] = new KMPlayerMenuButton (this, m_buttonbox, language_xpm);
+ m_buttons[button_red] = ctrlButton (this, m_buttonbox, red_xpm);
+ m_buttons[button_green] = ctrlButton (this, m_buttonbox, green_xpm);
+ m_buttons[button_yellow] = ctrlButton (this, m_buttonbox, yellow_xpm);
+ m_buttons[button_blue] = ctrlButton (this, m_buttonbox, blue_xpm);
+ m_buttons[button_play]->setToggleButton (true);
+ m_buttons[button_stop]->setToggleButton (true);
+ m_buttons[button_record]->setToggleButton (true);
+ m_buttons[button_broadcast]->setToggleButton (true);
+ m_posSlider = new QSlider (0, 100, 1, 0, Qt::Horizontal, this);
+ m_posSlider->setEnabled (false);
+ m_buttonbox->addWidget (m_posSlider);
+ setupPositionSlider (true);
+ m_volume = new VolumeBar (this, m_view);
+ m_buttonbox->addWidget (m_volume);
+ m_popupMenu = new KMPlayerPopupMenu (this);
+ m_playerMenu = new KMPlayerPopupMenu (this);
+ m_popupMenu->insertItem (i18n ("&Play with"), m_playerMenu, menu_player);
+ m_bookmarkMenu = new KMPlayerPopupMenu (this);
+ m_popupMenu->insertItem (i18n("&Bookmarks"), m_bookmarkMenu, menu_bookmark);
+ m_popupMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("konsole"), KIcon::Small, 0, true), i18n ("Con&sole"), menu_video);
+ m_popupMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("player_playlist"), KIcon::Small, 0, true), i18n ("Play&list"), menu_playlist);
+ m_zoomMenu = new KMPlayerPopupMenu (this);
+ m_zoomMenu->insertItem (i18n ("50%"), menu_zoom50);
+ m_zoomMenu->insertItem (i18n ("100%"), menu_zoom100);
+ m_zoomMenu->insertItem (i18n ("150%"), menu_zoom150);
+ m_popupMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("viewmag"), KIcon::Small, 0, false), i18n ("&Zoom"), m_zoomMenu, menu_zoom);
+ m_popupMenu->insertItem (KGlobal::iconLoader()->loadIconSet (QString ("window_fullscreen"), KIcon::Small, 0, true), i18n ("&Full Screen"), menu_fullscreen);
+ m_popupMenu->setAccel (QKeySequence (Qt::Key_F), menu_fullscreen);
+ m_popupMenu->insertSeparator ();
+ m_colorMenu = new KMPlayerPopupMenu (this);
+ m_languageMenu = new KMPlayerPopupMenu (this);
+ m_audioMenu = new KMPlayerPopupMenu (this);
+ m_subtitleMenu = new KMPlayerPopupMenu (this);
+ m_languageMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("mime-sound"), KIcon::Small, 0, true), i18n ("&Audio languages"), m_audioMenu);
+ m_languageMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("view_text"), KIcon::Small, 0, true), i18n ("&Subtitles"), m_subtitleMenu);
+ QLabel * label = new QLabel (i18n ("Contrast:"), m_colorMenu);
+ m_colorMenu->insertItem (label);
+ m_contrastSlider = new QSlider (-100, 100, 10, 0, Qt::Horizontal, m_colorMenu);
+ m_colorMenu->insertItem (m_contrastSlider);
+ label = new QLabel (i18n ("Brightness:"), m_colorMenu);
+ m_colorMenu->insertItem (label);
+ m_brightnessSlider = new QSlider (-100, 100, 10, 0, Qt::Horizontal, m_colorMenu);
+ m_colorMenu->insertItem (m_brightnessSlider);
+ label = new QLabel (i18n ("Hue:"), m_colorMenu);
+ m_colorMenu->insertItem (label);
+ m_hueSlider = new QSlider (-100, 100, 10, 0, Qt::Horizontal, m_colorMenu);
+ m_colorMenu->insertItem (m_hueSlider);
+ label = new QLabel (i18n ("Saturation:"), m_colorMenu);
+ m_colorMenu->insertItem (label);
+ m_saturationSlider = new QSlider (-100, 100, 10, 0, Qt::Horizontal, m_colorMenu);
+ m_colorMenu->insertItem (m_saturationSlider);
+ m_popupMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("colorize"), KIcon::Small, 0, true), i18n ("Co&lors"), m_colorMenu);
+ m_popupMenu->insertSeparator ();
+ m_popupMenu->insertItem (KGlobal::iconLoader ()->loadIconSet (QString ("configure"), KIcon::Small, 0, true), i18n ("&Configure KMPlayer..."), menu_config);
+ setAutoControls (true);
+ connect (m_buttons [button_config], SIGNAL (clicked ()),
+ this, SLOT (buttonClicked ()));
+ connect (m_buttons [button_language], SIGNAL (clicked ()),
+ this, SLOT (buttonClicked ()));
+ connect (m_buttons [button_config], SIGNAL (mouseEntered ()),
+ this, SLOT (buttonMouseEntered ()));
+ connect (m_buttons [button_language], SIGNAL (mouseEntered ()),
+ this, SLOT (buttonMouseEntered ()));
+ connect (m_popupMenu, SIGNAL (mouseLeft ()), this, SLOT (menuMouseLeft ()));
+ connect (m_playerMenu, SIGNAL (mouseLeft ()), this, SLOT(menuMouseLeft ()));
+ connect (m_zoomMenu, SIGNAL (mouseLeft ()), this, SLOT (menuMouseLeft ()));
+ connect (m_colorMenu, SIGNAL (mouseLeft ()), this, SLOT (menuMouseLeft ()));
+ connect (m_languageMenu, SIGNAL(mouseLeft ()), this, SLOT(menuMouseLeft()));
+ connect (m_subtitleMenu, SIGNAL(mouseLeft ()), this, SLOT(menuMouseLeft()));
+ connect (m_audioMenu, SIGNAL (mouseLeft ()), this, SLOT (menuMouseLeft ()));
+}
+
+KDE_NO_EXPORT void ControlPanel::setPalette (const QPalette & pal) {
+ QWidget::setPalette (pal);
+ QColor c = paletteForegroundColor ();
+ strncpy (xpm_fg_color, QString().sprintf(". c #%02x%02x%02x", c.red(), c.green(),c.blue()).ascii(), 31);
+ xpm_fg_color[31] = 0;
+ m_buttons[button_config]->setIconSet (QIconSet (QPixmap (config_xpm)));
+ m_buttons[button_playlist]->setIconSet (QIconSet (QPixmap (playlist_xpm)));
+ m_buttons[button_back]->setIconSet (QIconSet (QPixmap (back_xpm)));
+ m_buttons[button_play]->setIconSet (QIconSet (QPixmap (play_xpm)));
+ m_buttons[button_forward]->setIconSet (QIconSet (QPixmap (forward_xpm)));
+ m_buttons[button_stop]->setIconSet (QIconSet (QPixmap (stop_xpm)));
+ m_buttons[button_pause]->setIconSet (QIconSet (QPixmap (pause_xpm)));
+ m_buttons[button_record]->setIconSet (QIconSet (QPixmap (record_xpm)));
+ m_buttons[button_broadcast]->setIconSet (QIconSet (QPixmap (broadcast_xpm)));
+ m_buttons[button_language]->setIconSet (QIconSet (QPixmap (language_xpm)));
+ m_buttons[button_red]->setIconSet (QIconSet (QPixmap (red_xpm)));
+ m_buttons[button_green]->setIconSet (QIconSet (QPixmap (green_xpm)));
+ m_buttons[button_yellow]->setIconSet (QIconSet (QPixmap (yellow_xpm)));
+ m_buttons[button_blue]->setIconSet (QIconSet (QPixmap (blue_xpm)));
+}
+
+KDE_NO_EXPORT void ControlPanel::timerEvent (QTimerEvent * e) {
+ if (e->timerId () == m_popup_timer) {
+ m_popup_timer = 0;
+ if (m_button_monitored == button_config) {
+ if (m_buttons [button_config]->hasMouse() &&
+ !m_popupMenu->isVisible ())
+ showPopupMenu ();
+ } else if (m_buttons [button_language]->hasMouse() &&
+ !m_languageMenu->isVisible ()) {
+ showLanguageMenu ();
+ }
+ } else if (e->timerId () == m_popdown_timer) {
+ m_popdown_timer = 0;
+ if (m_popupMenu->isVisible () &&
+ !m_popupMenu->hasMouse () &&
+ !m_playerMenu->hasMouse () &&
+ !m_zoomMenu->hasMouse () &&
+ !m_colorMenu->hasMouse () &&
+ !m_bookmarkMenu->hasMouse ()) {
+ if (!(m_bookmarkMenu->isVisible () &&
+ static_cast <QWidget *> (m_bookmarkMenu) != QWidget::keyboardGrabber ())) {
+ // not if user entered the bookmark sub menu or if I forgot one
+ m_popupMenu->hide ();
+ if (m_buttons [button_config]->isOn ())
+ m_buttons [button_config]->toggle ();
+ }
+ } else if (m_languageMenu->isVisible () &&
+ !m_languageMenu->hasMouse () &&
+ !m_audioMenu->hasMouse () &&
+ !m_subtitleMenu->hasMouse ()) {
+ m_languageMenu->hide ();
+ if (m_buttons [button_language]->isOn ())
+ m_buttons [button_language]->toggle ();
+ }
+ }
+ killTimer (e->timerId ());
+}
+
+void ControlPanel::setAutoControls (bool b) {
+ m_auto_controls = b;
+ if (m_auto_controls) {
+ for (int i = 0; i < (int) button_broadcast; i++)
+ m_buttons [i]->show ();
+ for (int i = button_broadcast; i < (int) button_last; i++)
+ m_buttons [i]->hide ();
+ showPositionSlider (false);
+ m_volume->show ();
+ if (m_buttons [button_broadcast]->isOn ()) // still broadcasting
+ m_buttons [button_broadcast]->show ();
+ } else { // hide everything
+ for (int i = 0; i < (int) button_last; i++)
+ m_buttons [i]->hide ();
+ m_posSlider->hide ();
+ m_volume->hide ();
+ }
+ m_view->updateLayout ();
+}
+
+KDE_NO_EXPORT void ControlPanel::showPopupMenu () {
+ m_view->updateVolume ();
+ m_popupMenu->exec (m_buttons [button_config]->mapToGlobal (QPoint (0, maximumSize ().height ())));
+}
+
+KDE_NO_EXPORT void ControlPanel::showLanguageMenu () {
+ m_languageMenu->exec (m_buttons [button_language]->mapToGlobal (QPoint (0, maximumSize ().height ())));
+}
+
+void ControlPanel::showPositionSlider (bool show) {
+ if (!m_auto_controls || show == m_posSlider->isShown ())
+ return;
+ setupPositionSlider (show);
+ if (isVisible ())
+ m_view->updateLayout ();
+}
+
+KDE_NO_EXPORT void ControlPanel::setupPositionSlider (bool show) {
+ int h = show ? button_height_with_slider : button_height_only_buttons;
+ m_posSlider->setEnabled (false);
+ m_posSlider->setValue (0);
+ if (show) {
+ m_posSlider->show ();
+ m_buttonbox->setMargin (4);
+ m_buttonbox->setSpacing (4);
+ setEraseColor (m_view->topLevelWidget ()->paletteBackgroundColor ());
+ } else {
+ m_posSlider->hide ();
+ m_buttonbox->setMargin (1);
+ m_buttonbox->setSpacing (1);
+ setEraseColor (QColor (0, 0, 0));
+ }
+ for (int i = 0; i < (int) button_last; i++) {
+ m_buttons[i]->setMinimumSize (15, h-1);
+ m_buttons[i]->setMaximumSize (750, h);
+ }
+ setMaximumSize (2500, h + (show ? 8 : 2 ));
+}
+
+KDE_NO_EXPORT int ControlPanel::preferedHeight () {
+ return m_posSlider->isVisible () ?
+ button_height_with_slider + 8 : button_height_only_buttons + 2;
+}
+
+void ControlPanel::enableSeekButtons (bool enable) {
+ if (!m_auto_controls) return;
+ if (enable) {
+ m_buttons[button_back]->show ();
+ m_buttons[button_forward]->show ();
+ } else {
+ m_buttons[button_back]->hide ();
+ m_buttons[button_forward]->hide ();
+ }
+}
+
+void ControlPanel::enableRecordButtons (bool enable) {
+ if (!m_auto_controls) return;
+ if (enable)
+ m_buttons[button_record]->show ();
+ else
+ m_buttons[button_record]->hide ();
+}
+
+void ControlPanel::setPlaying (bool play) {
+ if (play != m_buttons[button_play]->isOn ())
+ m_buttons[button_play]->toggle ();
+ m_posSlider->setEnabled (false);
+ m_posSlider->setValue (0);
+ if (!play) {
+ showPositionSlider (false);
+ enableSeekButtons (true);
+ }
+}
+
+KDE_NO_EXPORT void ControlPanel::setRecording (bool record) {
+ if (record != m_buttons[button_record]->isOn ())
+ m_buttons[button_record]->toggle ();
+}
+
+KDE_NO_EXPORT void ControlPanel::setPlayingProgress (int pos, int len) {
+ m_posSlider->setEnabled (false);
+ m_progress_length = len;
+ showPositionSlider (len > 0);
+ if (m_progress_mode != progress_playing) {
+ m_posSlider->setMaxValue (m_progress_length);
+ m_progress_mode = progress_playing;
+ }
+ if (pos < len && len > 0 && len != m_posSlider->maxValue ())
+ m_posSlider->setMaxValue (m_progress_length);
+ else if (m_progress_length <= 0 && pos > 7 * m_posSlider->maxValue ()/8)
+ m_posSlider->setMaxValue (m_posSlider->maxValue() * 2);
+ else if (m_posSlider->maxValue() < pos)
+ m_posSlider->setMaxValue (int (1.4 * m_posSlider->maxValue()));
+ m_posSlider->setValue (pos);
+ m_posSlider->setEnabled (true);
+}
+
+KDE_NO_EXPORT void ControlPanel::setLoadingProgress (int pos) {
+ if (pos > 0 && pos < 100 && !m_posSlider->isVisible ())
+ showPositionSlider (true);
+ m_posSlider->setEnabled (false);
+ if (m_progress_mode != progress_loading) {
+ m_posSlider->setMaxValue (100);
+ m_progress_mode = progress_loading;
+ }
+ m_posSlider->setValue (pos);
+}
+
+KDE_NO_EXPORT void ControlPanel::buttonClicked () {
+ if (m_popup_timer) {
+ killTimer (m_popup_timer);
+ m_popup_timer = 0;
+ }
+ m_popup_clicked = true;
+ if (sender () == m_buttons [button_language])
+ showLanguageMenu ();
+ else
+ showPopupMenu ();
+}
+
+KDE_NO_EXPORT void ControlPanel::buttonMouseEntered () {
+ if (!m_popup_timer) {
+ if (sender () == m_buttons [button_config]) {
+ if (!m_popupMenu->isVisible ()) {
+ m_button_monitored = button_config;
+ m_popup_clicked = false;
+ m_popup_timer = startTimer (400);
+ }
+ } else if (!m_languageMenu->isVisible ()) {
+ m_button_monitored = button_language;
+ m_popup_clicked = false;
+ m_popup_timer = startTimer (400);
+ }
+ }
+}
+
+KDE_NO_EXPORT void ControlPanel::menuMouseLeft () {
+ if (!m_popdown_timer && !m_popup_clicked)
+ m_popdown_timer = startTimer (400);
+}
+
+KDE_NO_EXPORT void ControlPanel::setLanguages (const QStringList & alang, const QStringList & slang) {
+ int sz = (int) alang.size ();
+ bool showbutton = (sz > 0);
+ m_audioMenu->clear ();
+ for (int i = 0; i < sz; i++)
+ m_audioMenu->insertItem (alang [i], i);
+ sz = (int) slang.size ();
+ showbutton |= (sz > 0);
+ m_subtitleMenu->clear ();
+ for (int i = 0; i < sz; i++)
+ m_subtitleMenu->insertItem (slang [i], i);
+ if (showbutton)
+ m_buttons [button_language]->show ();
+ else
+ m_buttons [button_language]->hide ();
+}
+
+KDE_NO_EXPORT void ControlPanel::selectSubtitle (int id) {
+ if (m_subtitleMenu->isItemChecked (id))
+ return;
+ int size = m_subtitleMenu->count ();
+ for (int i = 0; i < size; i++)
+ if (m_subtitleMenu->isItemChecked (i)) {
+ m_subtitleMenu->setItemChecked (i, false);
+ break;
+ }
+ m_subtitleMenu->setItemChecked (id, true);
+}
+
+KDE_NO_EXPORT void ControlPanel::selectAudioLanguage (int id) {
+ kdDebug () << "ControlPanel::selectAudioLanguage " << id << endl;
+ if (m_audioMenu->isItemChecked (id))
+ return;
+ int sz = m_audioMenu->count ();
+ for (int i = 0; i < sz; i++)
+ if (m_audioMenu->isItemChecked (i)) {
+ m_audioMenu->setItemChecked (i, false);
+ break;
+ }
+ m_audioMenu->setItemChecked (id, true);
+}
+
+//-----------------------------------------------------------------------------
+
+#include "kmplayercontrolpanel.moc"
diff --git a/src/kmplayercontrolpanel.h b/src/kmplayercontrolpanel.h
new file mode 100644
index 0000000..69f93e7
--- /dev/null
+++ b/src/kmplayercontrolpanel.h
@@ -0,0 +1,181 @@
+/**
+ * Copyright (C) 2005 by Koos Vriezen <koos ! vriezen ? gmail ! com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#ifndef KMPLAYER_CONTROLPANEL_H
+#define KMPLAYER_CONTROLPANEL_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qwidget.h>
+#include <qpushbutton.h>
+
+#include <kpopupmenu.h>
+
+class QSlider;
+//class QPushButton;
+class QBoxLayout;
+class QStringList;
+class KPopupMenu;
+
+namespace KMPlayer {
+
+class View;
+
+/*
+ * A button from the controlpanel
+ */
+class KMPLAYER_NO_EXPORT KMPlayerMenuButton : public QPushButton {
+ Q_OBJECT
+public:
+ KMPlayerMenuButton (QWidget *, QBoxLayout *, const char **, int = 0);
+ KDE_NO_CDTOR_EXPORT ~KMPlayerMenuButton () {}
+signals:
+ void mouseEntered ();
+protected:
+ void enterEvent (QEvent *);
+};
+
+/*
+ * The pop down menu from the controlpanel
+ */
+class KMPLAYER_EXPORT KMPlayerPopupMenu : public KPopupMenu {
+ Q_OBJECT
+public:
+ KMPlayerPopupMenu (QWidget *);
+ KDE_NO_CDTOR_EXPORT ~KMPlayerPopupMenu () {}
+signals:
+ void mouseLeft ();
+protected:
+ void leaveEvent (QEvent *);
+};
+
+/*
+ * The volume bar from the controlpanel
+ */
+class KMPLAYER_EXPORT VolumeBar : public QWidget {
+ Q_OBJECT
+public:
+ VolumeBar (QWidget * parent, View * view);
+ ~VolumeBar ();
+ KDE_NO_EXPORT int value () const { return m_value; }
+ void setValue (int v);
+signals:
+ void volumeChanged (int); // 0 - 100
+protected:
+ void wheelEvent (QWheelEvent * e);
+ void paintEvent (QPaintEvent *);
+ void mousePressEvent (QMouseEvent * e);
+ void mouseMoveEvent (QMouseEvent * e);
+private:
+ View * m_view;
+ int m_value;
+};
+
+/*
+ * The controlpanel GUI
+ */
+class KMPLAYER_EXPORT ControlPanel : public QWidget {
+ Q_OBJECT
+public:
+ enum MenuID {
+ menu_config = 0, menu_player, menu_fullscreen, menu_volume,
+ menu_bookmark, menu_zoom, menu_zoom50, menu_zoom100, menu_zoom150,
+ menu_view, menu_video, menu_playlist
+ };
+ enum Button {
+ button_config = 0, button_playlist,
+ button_back, button_play, button_forward,
+ button_stop, button_pause, button_record,
+ button_broadcast, button_language,
+ button_red, button_green, button_yellow, button_blue,
+ button_last
+ };
+ ControlPanel (QWidget * parent, View * view);
+ KDE_NO_CDTOR_EXPORT ~ControlPanel () {}
+ void showPositionSlider (bool show);
+ void enableSeekButtons (bool enable);
+ void enableRecordButtons (bool enable);
+ void setPlaying (bool play);
+ void setRecording (bool record);
+ void setAutoControls (bool b);
+ void setPalette (const QPalette &);
+ int preferedHeight ();
+ KDE_NO_EXPORT bool autoControls () const { return m_auto_controls; }
+ KDE_NO_EXPORT QSlider * positionSlider () const { return m_posSlider; }
+ KDE_NO_EXPORT QSlider * contrastSlider () const { return m_contrastSlider; }
+ KDE_NO_EXPORT QSlider * brightnessSlider () const { return m_brightnessSlider; }
+ KDE_NO_EXPORT QSlider * hueSlider () const { return m_hueSlider; }
+ KDE_NO_EXPORT QSlider * saturationSlider () const { return m_saturationSlider; }
+ QPushButton * button (Button b) const { return m_buttons [(int) b]; }
+ KDE_NO_EXPORT QPushButton * broadcastButton () const { return m_buttons[button_broadcast]; }
+ KDE_NO_EXPORT VolumeBar * volumeBar () const { return m_volume; }
+ KDE_NO_EXPORT KMPlayerPopupMenu * popupMenu () const { return m_popupMenu; }
+ KDE_NO_EXPORT KPopupMenu * bookmarkMenu () const { return m_bookmarkMenu; }
+ KDE_NO_EXPORT QPopupMenu * zoomMenu () const { return m_zoomMenu; }
+ KDE_NO_EXPORT QPopupMenu * playerMenu () const { return m_playerMenu; }
+ KDE_NO_EXPORT QPopupMenu * colorMenu () const { return m_colorMenu; }
+ KDE_NO_EXPORT QPopupMenu * audioMenu () const { return m_audioMenu; }
+ KDE_NO_EXPORT QPopupMenu * subtitleMenu () const { return m_subtitleMenu; }
+ KDE_NO_EXPORT View * view () const { return m_view; }
+public slots:
+ void setLanguages (const QStringList & al, const QStringList & sl);
+ void selectSubtitle (int id);
+ void selectAudioLanguage (int id);
+ void showPopupMenu ();
+ void showLanguageMenu ();
+ void setPlayingProgress (int position, int length);
+ void setLoadingProgress (int pos);
+protected:
+ void timerEvent (QTimerEvent * e);
+ void setupPositionSlider (bool show);
+private slots:
+ void buttonMouseEntered ();
+ void buttonClicked ();
+ void menuMouseLeft ();
+private:
+ enum { progress_loading, progress_playing } m_progress_mode;
+ int m_progress_length;
+ int m_popup_timer;
+ int m_popdown_timer;
+ int m_button_monitored;
+ View * m_view;
+ QBoxLayout * m_buttonbox;
+ QSlider * m_posSlider;
+ QSlider * m_contrastSlider;
+ QSlider * m_brightnessSlider;
+ QSlider * m_hueSlider;
+ QSlider * m_saturationSlider;
+ QPushButton * m_buttons [button_last];
+ VolumeBar * m_volume;
+ KMPlayerPopupMenu * m_popupMenu;
+ KMPlayerPopupMenu * m_bookmarkMenu;
+ KMPlayerPopupMenu * m_zoomMenu;
+ KMPlayerPopupMenu * m_playerMenu;
+ KMPlayerPopupMenu * m_colorMenu;
+ KMPlayerPopupMenu * m_languageMenu;
+ KMPlayerPopupMenu * m_audioMenu;
+ KMPlayerPopupMenu * m_subtitleMenu;
+ bool m_auto_controls; // depending on source caps
+ bool m_popup_clicked;
+};
+
+}
+
+#endif // KMPLAYER_CONTROLPANEL_H
diff --git a/src/kmplayerpartbase.cpp b/src/kmplayerpartbase.cpp
new file mode 100644
index 0000000..10a9f87
--- /dev/null
+++ b/src/kmplayerpartbase.cpp
@@ -0,0 +1,2047 @@
+/**
+ * Copyright (C) 2002-2003 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#ifdef KDE_USE_FINAL
+#undef Always
+#endif
+
+#include <config.h>
+
+#include <math.h>
+
+#include <qapplication.h>
+#include <qcstring.h>
+#include <qcursor.h>
+#include <qtimer.h>
+#include <qpair.h>
+#include <qpushbutton.h>
+#include <qpopupmenu.h>
+#include <qslider.h>
+#include <qfile.h>
+#include <qregexp.h>
+#include <qtextstream.h>
+
+#include <kmessagebox.h>
+#include <kaboutdata.h>
+#include <kdebug.h>
+#include <kbookmarkmenu.h>
+#include <kbookmarkmanager.h>
+#include <kconfig.h>
+#include <ksimpleconfig.h>
+#include <kaction.h>
+#include <kprocess.h>
+#include <kstandarddirs.h>
+#include <kmimetype.h>
+#include <kprotocolinfo.h>
+#include <kapplication.h>
+#include <kstaticdeleter.h>
+#include <kio/job.h>
+#include <kio/jobclasses.h>
+
+#include "kmplayerpartbase.h"
+#include "kmplayerview.h"
+#include "playlistview.h"
+#include "viewarea.h"
+#include "kmplayercontrolpanel.h"
+#include "kmplayerconfig.h"
+#include "kmplayerprocess.h"
+#include "kmplayer_smil.h"
+
+namespace KMPlayer {
+
+class KMPLAYER_NO_EXPORT BookmarkOwner : public KBookmarkOwner {
+public:
+ BookmarkOwner (PartBase *);
+ KDE_NO_CDTOR_EXPORT virtual ~BookmarkOwner () {}
+ void openBookmarkURL(const QString& _url);
+ QString currentTitle() const;
+ QString currentURL() const;
+private:
+ PartBase * m_player;
+};
+
+class KMPLAYER_NO_EXPORT BookmarkManager : public KBookmarkManager {
+public:
+ BookmarkManager (const QString &);
+};
+
+} // namespace
+
+using namespace KMPlayer;
+
+KDE_NO_CDTOR_EXPORT BookmarkOwner::BookmarkOwner (PartBase * player)
+ : m_player (player) {}
+
+KDE_NO_EXPORT void BookmarkOwner::openBookmarkURL (const QString & url) {
+ m_player->openURL (KURL (url));
+}
+
+KDE_NO_EXPORT QString BookmarkOwner::currentTitle () const {
+ return m_player->source ()->prettyName ();
+}
+
+KDE_NO_EXPORT QString BookmarkOwner::currentURL () const {
+ return m_player->source ()->url ().url ();
+}
+
+inline BookmarkManager::BookmarkManager(const QString & bmfile)
+ : KBookmarkManager (bmfile, false) {
+}
+
+//-----------------------------------------------------------------------------
+
+PartBase::PartBase (QWidget * wparent, const char *wname,
+ QObject * parent, const char *name, KConfig * config)
+ : KMediaPlayer::Player (wparent, wname ? wname : "kde_kmplayer_view", parent, name ? name : "kde_kmplayer_part"),
+ m_config (config),
+ m_view (new View (wparent, wname ? wname : "kde_kmplayer_view")),
+ m_settings (new Settings (this, config)),
+ m_recorder (0L),
+ m_source (0L),
+ m_bookmark_menu (0L),
+ m_record_timer (0),
+ m_update_tree_timer (0),
+ m_noresize (false),
+ m_auto_controls (true),
+ m_bPosSliderPressed (false),
+ m_in_update_tree (false)
+{
+ MPlayer *mplayer = new MPlayer (this, m_settings);
+ m_players ["mplayer"] = mplayer;
+ m_process = mplayer;
+ Xine * xine = new Xine (this, m_settings);
+ m_players ["xine"] = xine;
+ m_players ["gstreamer"] = new GStreamer (this, m_settings);
+ m_recorders ["mencoder"] = new MEncoder (this, m_settings);
+ m_recorders ["mplayerdumpstream"] = new MPlayerDumpstream(this, m_settings);
+ m_recorders ["ffmpeg"] = new FFMpeg (this, m_settings);
+ m_recorders ["xine"] = xine;
+ m_sources ["urlsource"] = new URLSource (this);
+
+ QString bmfile = locate ("data", "kmplayer/bookmarks.xml");
+ QString localbmfile = locateLocal ("data", "kmplayer/bookmarks.xml");
+ if (localbmfile != bmfile) {
+ kdDebug () << "cp " << bmfile << " " << localbmfile << endl;
+ KProcess p;
+ p << "/bin/cp" << QFile::encodeName (bmfile) << QFile::encodeName (localbmfile);
+ p.start (KProcess::Block);
+ }
+ m_bookmark_manager = new BookmarkManager (localbmfile);
+ m_bookmark_owner = new BookmarkOwner (this);
+}
+
+void PartBase::showConfigDialog () {
+ m_settings->show ("URLPage");
+}
+
+KDE_NO_EXPORT void PartBase::showPlayListWindow () {
+ // note, this is also the slot of application's view_playlist action, but
+ // anyhow, actions don't work for the fullscreen out-of-the-box, so ...
+ if (m_view->viewArea ()->isFullScreen ())
+ fullScreen ();
+ else if (m_view->viewArea ()->isMinimalMode ())
+ ; //done by app: m_view->viewArea ()->minimalMode ();
+ else
+ m_view->toggleShowPlaylist ();
+}
+
+KDE_NO_EXPORT void PartBase::addBookMark (const QString & t, const QString & url) {
+ KBookmarkGroup b = m_bookmark_manager->root ();
+ b.addBookmark (m_bookmark_manager, t, KURL (url));
+ m_bookmark_manager->emitChanged (b);
+}
+
+void PartBase::init (KActionCollection * action_collection) {
+ KParts::Part::setWidget (m_view);
+ m_view->init (action_collection);
+#ifdef HAVE_NSPR
+ m_players ["npp"] = new NpPlayer (this, m_settings, m_service);
+#endif
+ connect(m_settings, SIGNAL(configChanged()), this, SLOT(settingsChanged()));
+ m_settings->readConfig ();
+ m_settings->applyColorSetting (false);
+ m_bookmark_menu = new KBookmarkMenu (m_bookmark_manager, m_bookmark_owner, m_view->controlPanel ()->bookmarkMenu (), action_collection, true, true);
+ connect (m_view, SIGNAL (urlDropped (const KURL::List &)), this, SLOT (openURL (const KURL::List &)));
+ connectPlaylist (m_view->playList ());
+ connectInfoPanel (m_view->infoPanel ());
+ new KAction (i18n ("Edit playlist &item"), 0, 0, m_view->playList (), SLOT (editCurrent ()), action_collection, "edit_playlist_item");
+}
+
+void PartBase::connectPanel (ControlPanel * panel) {
+ panel->contrastSlider ()->setValue (m_settings->contrast);
+ panel->brightnessSlider ()->setValue (m_settings->brightness);
+ panel->hueSlider ()->setValue (m_settings->hue);
+ panel->saturationSlider ()->setValue (m_settings->saturation);
+ panel->volumeBar ()->setValue (m_settings->volume);
+ connect (panel->button (ControlPanel::button_playlist), SIGNAL (clicked ()), this, SLOT (showPlayListWindow ()));
+ connect (panel->button (ControlPanel::button_back), SIGNAL (clicked ()), this, SLOT (back ()));
+ connect (panel->button (ControlPanel::button_play), SIGNAL (clicked ()), this, SLOT (play ()));
+ connect (panel->button (ControlPanel::button_forward), SIGNAL (clicked ()), this, SLOT (forward ()));
+ connect (panel->button (ControlPanel::button_pause), SIGNAL (clicked ()), this, SLOT (pause ()));
+ connect (panel->button (ControlPanel::button_stop), SIGNAL (clicked ()), this, SLOT (stop ()));
+ connect (panel->button (ControlPanel::button_record), SIGNAL (clicked()), this, SLOT (record()));
+ connect (panel->volumeBar (), SIGNAL (volumeChanged (int)), this, SLOT (volumeChanged (int)));
+ connect (panel->positionSlider (), SIGNAL (valueChanged (int)), this, SLOT (positionValueChanged (int)));
+ connect (panel->positionSlider (), SIGNAL (sliderPressed()), this, SLOT (posSliderPressed()));
+ connect (panel->positionSlider (), SIGNAL (sliderReleased()), this, SLOT (posSliderReleased()));
+ connect (this, SIGNAL (positioned (int, int)), panel, SLOT (setPlayingProgress (int, int)));
+ connect (this, SIGNAL (loading(int)), panel, SLOT(setLoadingProgress(int)));
+ connect (panel->contrastSlider (), SIGNAL (valueChanged(int)), this, SLOT (contrastValueChanged(int)));
+ connect (panel->brightnessSlider (), SIGNAL (valueChanged(int)), this, SLOT (brightnessValueChanged(int)));
+ connect (panel->hueSlider (), SIGNAL (valueChanged(int)), this, SLOT (hueValueChanged(int)));
+ connect (panel->saturationSlider (), SIGNAL (valueChanged(int)), this, SLOT (saturationValueChanged(int)));
+ connect (this, SIGNAL (languagesUpdated(const QStringList &, const QStringList &)), panel, SLOT (setLanguages (const QStringList &, const QStringList &)));
+ connect (panel->audioMenu (), SIGNAL (activated (int)), this, SLOT (audioSelected (int)));
+ connect (panel->subtitleMenu (), SIGNAL (activated (int)), this, SLOT (subtitleSelected (int)));
+ connect (this, SIGNAL (audioIsSelected (int)), panel, SLOT (selectAudioLanguage (int)));
+ connect (this, SIGNAL (subtitleIsSelected (int)), panel, SLOT (selectSubtitle (int)));
+ panel->popupMenu()->connectItem (ControlPanel::menu_fullscreen, this, SLOT (fullScreen ()));
+ panel->popupMenu ()->connectItem (ControlPanel::menu_config,
+ this, SLOT (showConfigDialog ()));
+ panel->popupMenu ()->connectItem (ControlPanel::menu_video,
+ m_view, SLOT(toggleVideoConsoleWindow()));
+ panel->popupMenu ()->connectItem (ControlPanel::menu_playlist,
+ m_view, SLOT (toggleShowPlaylist ()));
+ connect (this, SIGNAL (statusUpdated (const QString &)),
+ panel->view (), SLOT (setStatusMessage (const QString &)));
+ //connect (panel (), SIGNAL (clicked ()), m_settings, SLOT (show ()));
+}
+
+void PartBase::connectPlaylist (PlayListView * playlist) {
+ connect (playlist, SIGNAL (addBookMark (const QString &, const QString &)),
+ this, SLOT (addBookMark (const QString &, const QString &)));
+ connect (playlist, SIGNAL (executed (QListViewItem *)),
+ this, SLOT (playListItemExecuted (QListViewItem *)));
+ connect (playlist, SIGNAL (clicked (QListViewItem *)),
+ this, SLOT (playListItemClicked (QListViewItem *)));
+ connect (this, SIGNAL (treeChanged (int, NodePtr, NodePtr, bool, bool)),
+ playlist, SLOT (updateTree (int, NodePtr, NodePtr, bool, bool)));
+ connect (this, SIGNAL (treeUpdated ()),
+ playlist, SLOT (triggerUpdate ()));
+}
+
+void PartBase::connectInfoPanel (InfoWindow * infopanel) {
+ connect (this, SIGNAL (infoUpdated (const QString &)),
+ infopanel->view (), SLOT (setInfoMessage (const QString &)));
+}
+
+PartBase::~PartBase () {
+ kdDebug() << "PartBase::~PartBase" << endl;
+ m_view = (View*) 0;
+ stop ();
+ if (m_source)
+ m_source->deactivate ();
+ delete m_settings;
+ delete m_bookmark_menu;
+ delete m_bookmark_manager;
+ delete m_bookmark_owner;
+}
+
+void PartBase::settingsChanged () {
+ if (!m_view)
+ return;
+ if (m_settings->showcnfbutton)
+ m_view->controlPanel()->button (ControlPanel::button_config)->show();
+ else
+ m_view->controlPanel()->button (ControlPanel::button_config)->hide();
+ m_view->controlPanel()->enableRecordButtons (m_settings->showrecordbutton);
+ if (m_settings->showplaylistbutton)
+ m_view->controlPanel()->button (ControlPanel::button_playlist)->show();
+ else
+ m_view->controlPanel()->button (ControlPanel::button_playlist)->hide();
+ if (!m_settings->showbroadcastbutton)
+ m_view->controlPanel ()->broadcastButton ()->hide ();
+ keepMovieAspect (m_settings->sizeratio);
+ m_settings->applyColorSetting (true);
+}
+
+KMediaPlayer::View* PartBase::view () {
+ return m_view;
+}
+
+extern const char * strGeneralGroup;
+
+bool PartBase::setProcess (Mrl *mrl) {
+ // determine backend, start with temp_backends
+ QString p = temp_backends [m_source->name()];
+ bool remember_backend = p.isEmpty ();
+ bool changed = false;
+ if (p.isEmpty ()) {
+ // next try to find mimetype match from kmplayerrc
+ if (!mrl->mimetype.isEmpty ()) {
+ m_config->setGroup (mrl->mimetype);
+ p = m_config->readEntry ("player", "" );
+ remember_backend = !(!p.isEmpty () &&
+ m_players.contains (p) &&
+ m_players [p]->supports (m_source->name ()));
+ }
+ }
+ if (p.isEmpty ())
+ // try source match from kmplayerrc
+ p = m_settings->backends [m_source->name()];
+ if (p.isEmpty ()) {
+ // try source match from kmplayerrc by re-reading
+ m_config->setGroup (strGeneralGroup);
+ p = m_config->readEntry (m_source->name (), "");
+ }
+ if (p.isEmpty () ||
+ !m_players.contains (p) ||
+ !m_players [p]->supports (m_source->name ())) {
+ // finally find first supported player
+ p.truncate (0);
+ if (!m_process || !m_process->supports (m_source->name ())) {
+ ProcessMap::const_iterator i, e = m_players.end();
+ for (i = m_players.begin(); i != e; ++i)
+ if (i.data ()->supports (m_source->name ())) {
+ p = QString (i.data ()->name ());
+ break;
+ }
+ } else
+ p = QString (m_process->name ());
+ }
+ if (!p.isEmpty ()) {
+ if (!m_process || p != m_process->name ()) {
+ setProcess (p.ascii ());
+ updatePlayerMenu (m_view->controlPanel ());
+ changed = true;
+ }
+ if (remember_backend)
+ m_settings->backends [m_source->name()] = m_process->name ();
+ else
+ temp_backends.remove (m_source->name());
+ }
+ return changed;
+}
+
+void PartBase::setProcess (const char * name) {
+ Process * process = name ? m_players [name] : 0L;
+ if (m_process == process)
+ return;
+ if (!m_source)
+ m_source = m_sources ["urlsource"];
+ Process * old_process = m_process;
+ m_process = process;
+ if (old_process && old_process->state () > Process::NotRunning)
+ old_process->quit ();
+ if (!m_process)
+ return;
+ m_process->setSource (m_source);
+ if (m_process->playing ()) {
+ m_view->controlPanel ()->setPlaying (true);
+ m_view->controlPanel ()->showPositionSlider (!!m_source->length ());
+ m_view->controlPanel ()->enableSeekButtons (m_source->isSeekable ());
+ }
+ emit processChanged (name);
+}
+
+void PartBase::setRecorder (const char * name) {
+ Process * recorder = name ? m_recorders [name] : 0L;
+ if (m_recorder == recorder)
+ return;
+ if (m_recorder)
+ m_recorder->quit ();
+ m_recorder = recorder;
+}
+
+KDE_NO_EXPORT void PartBase::slotPlayerMenu (int id) {
+ bool playing = m_process->playing ();
+ const char * srcname = m_source->name ();
+ QPopupMenu * menu = m_view->controlPanel ()->playerMenu ();
+ ProcessMap::const_iterator pi = m_players.begin(), e = m_players.end();
+ unsigned i = 0;
+ for (; pi != e && i < menu->count(); ++pi) {
+ Process * proc = pi.data ();
+ if (!proc->supports (srcname))
+ continue;
+ int menuid = menu->idAt (i);
+ menu->setItemChecked (menuid, menuid == id);
+ if (menuid == id) {
+ if (proc->name () != QString ("npp"))
+ m_settings->backends [srcname] = proc->name ();
+ temp_backends [srcname] = proc->name ();
+ if (playing && strcmp (m_process->name (), proc->name ()))
+ m_process->quit ();
+ setProcess (proc->name ());
+ }
+ ++i;
+ }
+ if (playing)
+ setSource (m_source); // re-activate
+}
+
+void PartBase::updatePlayerMenu (ControlPanel * panel) {
+ if (!m_view || !m_process)
+ return;
+ QPopupMenu * menu = panel->playerMenu ();
+ menu->clear ();
+ if (!m_source)
+ return;
+ const ProcessMap::const_iterator e = m_players.end();
+ int id = 0; // if multiple parts, id's should be the same for all menu's
+ for (ProcessMap::const_iterator i = m_players.begin(); i != e; ++i) {
+ Process * p = i.data ();
+ if (p->supports (m_source->name ())) {
+ menu->insertItem (p->menuName (), this, SLOT (slotPlayerMenu (int)), 0, id++);
+ if (i.data() == m_process)
+ menu->setItemChecked (id-1, true);
+ }
+ }
+}
+
+void PartBase::connectSource (Source * old_source, Source * source) {
+ if (old_source) {
+ disconnect (old_source, SIGNAL(endOfPlayItems ()), this, SLOT(stop ()));
+ disconnect (old_source, SIGNAL (dimensionsChanged ()),
+ this, SLOT (sourceHasChangedAspects ()));
+ disconnect (old_source, SIGNAL (startPlaying ()),
+ this, SLOT (playingStarted ()));
+ disconnect (old_source, SIGNAL (stopPlaying ()),
+ this, SLOT (playingStopped ()));
+ }
+ if (source) {
+ connect (source, SIGNAL (endOfPlayItems ()), this, SLOT (stop ()));
+ connect (source, SIGNAL (dimensionsChanged ()),
+ this, SLOT (sourceHasChangedAspects ()));
+ connect (source, SIGNAL (startPlaying()), this, SLOT(playingStarted()));
+ connect (source, SIGNAL (stopPlaying ()), this, SLOT(playingStopped()));
+ }
+}
+
+void PartBase::setSource (Source * _source) {
+ Source * old_source = m_source;
+ if (m_source) {
+ m_source->deactivate ();
+ stop ();
+ if (m_view) {
+ m_view->reset ();
+ emit infoUpdated (QString ());
+ }
+ disconnect (m_source, SIGNAL (startRecording ()),
+ this, SLOT (recordingStarted ()));
+ disconnect (this, SIGNAL (audioIsSelected (int)),
+ m_source, SLOT (setAudioLang (int)));
+ disconnect (this, SIGNAL (subtitleIsSelected (int)),
+ m_source, SLOT (setSubtitle (int)));
+ }
+ if (m_view) {
+ if (m_auto_controls)
+ m_view->controlPanel ()->setAutoControls (m_auto_controls);
+ m_view->controlPanel ()->enableRecordButtons (m_settings->showrecordbutton);
+ if (!m_settings->showcnfbutton)
+ m_view->controlPanel()->button(ControlPanel::button_config)->hide();
+ if (!m_settings->showplaylistbutton)
+ m_view->controlPanel()->button(ControlPanel::button_playlist)->hide();
+ }
+ m_source = _source;
+ connectSource (old_source, m_source);
+ m_process->setSource (m_source);
+ connect (m_source, SIGNAL(startRecording()), this,SLOT(recordingStarted()));
+ connect (this, SIGNAL (audioIsSelected (int)),
+ m_source, SLOT (setAudioLang (int)));
+ connect (this, SIGNAL (subtitleIsSelected (int)),
+ m_source, SLOT (setSubtitle (int)));
+ m_source->init ();
+ m_source->setIdentified (false);
+ if (m_view && m_view->viewer ()) {
+ updatePlayerMenu (m_view->controlPanel ());
+ m_view->viewer ()->setAspect (0.0);
+ }
+ if (m_source) QTimer::singleShot (0, m_source, SLOT (activate ()));
+ updateTree (true, true);
+ emit sourceChanged (old_source, m_source);
+}
+
+KDE_NO_EXPORT void PartBase::changeURL (const QString & url) {
+ emit urlChanged (url);
+}
+
+bool PartBase::isSeekable (void) const {
+ return m_source ? m_source->isSeekable () : false;
+}
+
+bool PartBase::hasLength () const {
+ return m_source ? m_source->hasLength () : false;
+}
+
+unsigned long PartBase::length () const {
+ return m_source ? m_source->length () : 0;
+}
+
+bool PartBase::openURL (const KURL & url) {
+ kdDebug () << "PartBase::openURL " << url.url() << url.isValid () << endl;
+ if (!m_view) return false;
+ stop ();
+ Source * src = (url.isEmpty () ? m_sources ["urlsource"] : (!url.protocol ().compare ("kmplayer") && m_sources.contains (url.host ()) ? m_sources [url.host ()] : m_sources ["urlsource"]));
+ src->setSubURL (KURL ());
+ src->setURL (url);
+ setSource (src);
+ return true;
+}
+
+bool PartBase::openURL (const KURL::List & urls) {
+ if (urls.size () == 1) {
+ openURL (urls[0]);
+ } else {
+ openURL (KURL ());
+ NodePtr d = m_source->document ();
+ if (d)
+ for (unsigned int i = 0; i < urls.size (); i++)
+ d->appendChild (new GenericURL (d, KURL::decode_string (urls [i].url ())));
+ }
+ return true;
+}
+
+bool PartBase::closeURL () {
+ stop ();
+ if (m_view) {
+ m_view->viewer ()->setAspect (0.0);
+ m_view->reset ();
+ }
+ return true;
+}
+
+bool PartBase::openFile () {
+ return false;
+}
+
+void PartBase::keepMovieAspect (bool b) {
+ if (m_view) {
+ m_view->setKeepSizeRatio (b);
+ if (m_source)
+ m_view->viewer ()->setAspect (b ? m_source->aspect () : 0.0);
+ }
+}
+
+void PartBase::recordingStarted () {
+ if (m_settings->replayoption == Settings::ReplayAfter)
+ m_record_timer = startTimer (1000 * m_settings->replaytime);
+}
+
+void PartBase::recordingStopped () {
+ killTimer (m_record_timer);
+ m_record_timer = 0;
+ Recorder * rec = dynamic_cast <Recorder*> (m_recorder);
+ if (rec) {
+ if (m_settings->replayoption == Settings::ReplayFinished ||
+ (m_settings->replayoption == Settings::ReplayAfter && !playing ()))
+ openURL (rec->recordURL ());
+ rec->setURL (KURL ());
+ }
+ setRecorder ("mencoder"); //FIXME see PartBase::record() checking playing()
+}
+
+void PartBase::timerEvent (QTimerEvent * e) {
+ if (e->timerId () == m_record_timer) {
+ kdDebug () << "record timer event" << (m_recorder->playing () && !playing ()) << endl;
+ m_record_timer = 0;
+ if (m_recorder->playing () && !playing ()) {
+ Recorder * rec = dynamic_cast <Recorder*> (m_recorder);
+ if (rec) {
+ openURL (rec->recordURL ());
+ rec->setURL (KURL ());
+ }
+ }
+ } else if (e->timerId () == m_update_tree_timer) {
+ m_update_tree_timer = 0;
+ updateTree (m_update_tree_full, true);
+ }
+ killTimer (e->timerId ());
+}
+
+void PartBase::playingStarted () {
+ //m_view->viewer ()->setAspect (m_source->aspect ());
+ if (m_view) {
+ m_view->controlPanel ()->setPlaying (true);
+ m_view->controlPanel ()->showPositionSlider (!!m_source->length ());
+ m_view->controlPanel ()->enableSeekButtons (m_source->isSeekable ());
+ if (m_settings->autoadjustvolume && m_process)
+ m_process->volume(m_view->controlPanel()->volumeBar()->value(),true);
+ }
+ emit loading (100);
+}
+
+void PartBase::playingStopped () {
+ kdDebug () << "playingStopped " << this << endl;
+ if (m_view) {
+ m_view->controlPanel ()->setPlaying (false);
+ m_view->reset ();
+ }
+ m_bPosSliderPressed = false;
+}
+
+KDE_NO_EXPORT void PartBase::setPosition (int position, int length) {
+ if (m_view && !m_bPosSliderPressed)
+ emit positioned (position, length);
+}
+
+void PartBase::setLoaded (int percentage) {
+ emit loading (percentage);
+}
+
+unsigned long PartBase::position () const {
+ return m_source ? 100 * m_source->position () : 0;
+}
+
+void PartBase::pause () {
+ NodePtr doc = m_source ? m_source->document () : 0L;
+ if (doc) {
+ if (doc->state == Node::state_deferred)
+ doc->undefer ();
+ else
+ doc->defer ();
+ }
+}
+
+void PartBase::back () {
+ m_source->backward ();
+}
+
+void PartBase::forward () {
+ m_source->forward ();
+}
+
+KDE_NO_EXPORT void PartBase::playListItemClicked (QListViewItem * item) {
+ if (!item)
+ return;
+ PlayListItem * vi = static_cast <PlayListItem *> (item);
+ RootPlayListItem * ri = vi->playListView ()->rootItem (item);
+ if (ri == item && vi->node) {
+ QString src = ri->source;
+ //kdDebug() << "playListItemClicked " << src << " " << vi->node->nodeName() << endl;
+ Source * source = src.isEmpty() ? m_source : m_sources[src.ascii()];
+ if (vi->node->isPlayable ()) {
+ source->jump (vi->node); //may become !isPlayable by lazy loading
+ if (!vi->node->isPlayable ())
+ emit treeChanged (ri->id, vi->node, 0, false, true);
+ } else if (vi->firstChild ())
+ vi->listView ()->setOpen (vi, !vi->isOpen ());
+ } else if (!vi->node && !vi->m_attr)
+ updateTree (); // items already deleted
+}
+
+KDE_NO_EXPORT void PartBase::playListItemExecuted (QListViewItem * item) {
+ if (m_in_update_tree) return;
+ if (m_view->editMode ()) return;
+ PlayListItem * vi = static_cast <PlayListItem *> (item);
+ RootPlayListItem * ri = vi->playListView ()->rootItem (item);
+ if (ri == item)
+ return; // both null or handled by playListItemClicked
+ if (vi->node) {
+ QString src = ri->source;
+ //kdDebug() << "playListItemExecuted " << src << " " << vi->node->nodeName() << endl;
+ Source * source = src.isEmpty() ? m_source : m_sources[src.ascii()];
+ if (vi->node->isPlayable ()) {
+ source->jump (vi->node); //may become !isPlayable by lazy loading
+ if (!vi->node->isPlayable ())
+ emit treeChanged (ri->id, vi->node, 0, false, true);
+ } else if (vi->firstChild ())
+ vi->listView ()->setOpen (vi, !vi->isOpen ());
+ } else if (vi->m_attr) {
+ if (vi->m_attr->name () == StringPool::attr_src ||
+ vi->m_attr->name () == StringPool::attr_href ||
+ vi->m_attr->name () == StringPool::attr_url ||
+ vi->m_attr->name () == StringPool::attr_value ||
+ vi->m_attr->name () == "data") {
+ QString src (vi->m_attr->value ());
+ if (!src.isEmpty ()) {
+ PlayListItem * pi = static_cast <PlayListItem*>(item->parent());
+ if (pi) {
+ for (NodePtr e = pi->node; e; e = e->parentNode ()) {
+ Mrl * mrl = e->mrl ();
+ if (mrl)
+ src = KURL (mrl->absolutePath (), src).url ();
+ }
+ KURL url (src);
+ if (url.isValid ())
+ openURL (url);
+ }
+ }
+ }
+ } else
+ emit treeChanged (ri->id, ri->node, 0L, false, false);
+ if (m_view)
+ m_view->viewArea ()->setFocus ();
+}
+
+void PartBase::updateTree (bool full, bool force) {
+ if (force) {
+ m_in_update_tree = true;
+ if (m_update_tree_full) {
+ if (m_source)
+ emit treeChanged (0, m_source->root (), m_source->current (), true, false);
+ } else
+ emit treeUpdated ();
+ m_in_update_tree = false;
+ if (m_update_tree_timer) {
+ killTimer (m_update_tree_timer);
+ m_update_tree_timer = 0;
+ }
+ } else if (!m_update_tree_timer) {
+ m_update_tree_timer = startTimer (100);
+ m_update_tree_full = full;
+ } else
+ m_update_tree_full |= full;
+}
+
+void PartBase::updateInfo (const QString & msg) {
+ emit infoUpdated (msg);
+}
+
+void PartBase::updateStatus (const QString & msg) {
+ emit statusUpdated (msg);
+}
+
+void PartBase::setLanguages (const QStringList & al, const QStringList & sl) {
+ emit languagesUpdated (al, sl);
+}
+
+KDE_NO_EXPORT void PartBase::audioSelected (int id) {
+ emit audioIsSelected (id);
+}
+
+KDE_NO_EXPORT void PartBase::subtitleSelected (int id) {
+ emit subtitleIsSelected (id);
+}
+
+void PartBase::record () {
+ if (m_view) m_view->setCursor (QCursor (Qt::WaitCursor));
+ if (m_recorder->playing ()) {
+ m_recorder->stop ();
+ } else {
+ m_settings->show ("RecordPage");
+ m_view->controlPanel ()->setRecording (false);
+ }
+ if (m_view) m_view->setCursor (QCursor (Qt::ArrowCursor));
+}
+
+void PartBase::play () {
+ if (!m_process || !m_view) return;
+ QPushButton * pb = ::qt_cast <QPushButton *> (sender ());
+ if (pb && !pb->isOn ()) {
+ stop ();
+ return;
+ }
+ if (m_update_tree_timer) {
+ killTimer (m_update_tree_timer);
+ m_update_tree_timer = 0;
+ }
+ if (m_process->state () == Process::NotRunning) {
+ PlayListItem * lvi = m_view->playList ()->currentPlayListItem ();
+ if (lvi) { // make sure it's in the first tree
+ QListViewItem * pitem = lvi;
+ while (pitem->parent())
+ pitem = pitem->parent();
+ if (pitem != m_view->playList ()->firstChild ())
+ lvi = 0L;
+ }
+ if (!lvi)
+ lvi = static_cast<PlayListItem*>(m_view->playList()->firstChild());
+ if (lvi)
+ for (NodePtr n = lvi->node; n; n = n->parentNode ()) {
+ if (n->isPlayable ()) {
+ m_source->setCurrent (n);
+ break;
+ }
+ }
+ m_process->ready (m_view->viewer ());
+ } else if (m_process->state () == Process::Ready) {
+ m_source->playCurrent ();
+ } else
+ m_process->play (m_source, m_source->current ());
+}
+
+bool PartBase::playing () const {
+ return m_process && m_process->state () > Process::Ready;
+}
+
+void PartBase::stop () {
+ QPushButton * b = m_view ? m_view->controlPanel ()->button (ControlPanel::button_stop) : 0L;
+ if (b) {
+ if (!b->isOn ())
+ b->toggle ();
+ m_view->setCursor (QCursor (Qt::WaitCursor));
+ }
+ if (m_process)
+ m_process->quit ();
+ if (m_source)
+ m_source->reset ();
+ if (m_view) {
+ m_view->setCursor (QCursor (Qt::ArrowCursor));
+ if (b->isOn ())
+ b->toggle ();
+ m_view->controlPanel ()->setPlaying (false);
+ setLoaded (100);
+ }
+}
+
+void PartBase::seek (unsigned long msec) {
+ if (m_process)
+ m_process->seek (msec/100, true);
+}
+
+void PartBase::adjustVolume (int incdec) {
+ m_process->volume (incdec, false);
+}
+
+void PartBase::increaseVolume () {
+ if (m_view)
+ m_view->controlPanel ()->volumeBar ()->setValue (m_view->controlPanel ()->volumeBar ()->value () + 2);
+}
+
+void PartBase::decreaseVolume () {
+ if (m_view)
+ m_view->controlPanel ()->volumeBar ()->setValue (m_view->controlPanel ()->volumeBar ()->value () - 2);
+}
+
+KDE_NO_EXPORT void PartBase::posSliderPressed () {
+ m_bPosSliderPressed=true;
+}
+
+KDE_NO_EXPORT void PartBase::posSliderReleased () {
+ m_bPosSliderPressed=false;
+#if (QT_VERSION < 0x030200)
+ const QSlider * posSlider = dynamic_cast <const QSlider *> (sender ());
+#else
+ const QSlider * posSlider = ::qt_cast<const QSlider *> (sender ());
+#endif
+ if (posSlider)
+ m_process->seek (posSlider->value(), true);
+}
+
+KDE_NO_EXPORT void PartBase::volumeChanged (int val) {
+ if (m_process) {
+ m_settings->volume = val;
+ m_process->volume (val, true);
+ }
+}
+
+KDE_NO_EXPORT void PartBase::contrastValueChanged (int val) {
+ m_settings->contrast = val;
+ m_process->contrast (val, true);
+}
+
+KDE_NO_EXPORT void PartBase::brightnessValueChanged (int val) {
+ m_settings->brightness = val;
+ m_process->brightness (val, true);
+}
+
+KDE_NO_EXPORT void PartBase::hueValueChanged (int val) {
+ m_settings->hue = val;
+ m_process->hue (val, true);
+}
+
+KDE_NO_EXPORT void PartBase::saturationValueChanged (int val) {
+ m_settings->saturation = val;
+ m_process->saturation (val, true);
+}
+
+KDE_NO_EXPORT void PartBase::sourceHasChangedAspects () {
+ if (m_view && m_source) {
+ //kdDebug () << "sourceHasChangedAspects " << m_source->aspect () << endl;
+ m_view->viewer ()->setAspect (m_source->aspect ());
+ m_view->updateLayout ();
+ }
+ emit sourceDimensionChanged ();
+}
+
+KDE_NO_EXPORT void PartBase::positionValueChanged (int pos) {
+ QSlider * slider = ::qt_cast <QSlider *> (sender ());
+ if (slider && slider->isEnabled ())
+ m_process->seek (pos, true);
+}
+
+KDE_NO_EXPORT void PartBase::fullScreen () {
+ if (m_view)
+ m_view->fullScreen ();
+}
+
+KDE_NO_EXPORT void PartBase::toggleFullScreen () {
+ m_view->fullScreen ();
+}
+
+KDE_NO_EXPORT bool PartBase::isPlaying () {
+ return playing ();
+}
+
+KAboutData* PartBase::createAboutData () {
+ KMessageBox::error(0L, "createAboutData", "KMPlayer");
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+
+Source::Source (const QString & name, PartBase * player, const char * n)
+ : QObject (player, n),
+ m_name (name), m_player (player), m_identified (false), m_auto_play (true),
+ m_frequency (0), m_xvport (0), m_xvencoding (-1), m_doc_timer (0) {
+ init ();
+}
+
+Source::~Source () {
+ if (m_document)
+ m_document->document ()->dispose ();
+ m_document = 0L;
+ Q_ASSERT (m_current.ptr () == 0L);
+}
+
+void Source::init () {
+ //setDimensions (320, 240);
+ m_width = 0;
+ m_height = 0;
+ m_aspect = 0.0;
+ m_length = 0;
+ m_position = 0;
+ setLength (m_document, 0);
+ m_recordcmd.truncate (0);
+}
+
+KDE_NO_EXPORT void Source::setLanguages (const QStringList & alang, const QStringList & slang) {
+ m_player->setLanguages (alang, slang);
+}
+
+void Source::setDimensions (NodePtr node, int w, int h) {
+ Mrl * mrl = node ? node->mrl () : 0L;
+ if (mrl && mrl->view_mode == Mrl::WindowMode) {
+ mrl->width = w;
+ mrl->height = h;
+ float a = h > 0 ? 1.0 * w / h : 0.0;
+ mrl->aspect = a;
+ if (m_player->view ()) {
+ static_cast <View *> (m_player->view())->viewer()->setAspect(a);
+ static_cast <View *> (m_player->view ())->updateLayout ();
+ }
+ } else if (m_aspect < 0.001 || m_width != w || m_height != h) {
+ bool ev = (w > 0 && h > 0) ||
+ (h == 0 && m_height > 0) ||
+ (w == 0 && m_width > 0);
+ m_width = w;
+ m_height = h;
+ if (m_aspect < 0.001)
+ setAspect (node, h > 0 ? 1.0 * w / h : 0.0);
+ //kdDebug () << "setDimensions " << w << "x" << h << " a:" << m_aspect << endl;
+ if (ev)
+ emit dimensionsChanged ();
+ }
+}
+
+void Source::setAspect (NodePtr node, float a) {
+ //kdDebug () << "setAspect " << a << endl;
+ Mrl * mrl = node ? node->mrl () : 0L;
+ bool changed = false;
+ if (mrl) {
+ if (mrl->view_mode == Mrl::WindowMode)
+ changed |= (fabs (mrl->aspect - a) > 0.001);
+ mrl->aspect = a;
+ }
+ if (!mrl || mrl->view_mode == Mrl::SingleMode) {
+ changed |= (fabs (m_aspect - a) > 0.001);
+ m_aspect = a;
+ }
+ if (changed)
+ emit dimensionsChanged ();
+}
+
+void Source::setLength (NodePtr, int len) {
+ m_length = len;
+ m_player->setPosition (m_position, m_length);
+}
+
+KDE_NO_EXPORT void Source::setPosition (int pos) {
+ m_position = pos;
+ m_player->setPosition (pos, m_length);
+}
+
+KDE_NO_EXPORT void Source::setLoading (int percentage) {
+ m_player->setLoaded (percentage);
+}
+
+/*
+static void printTree (NodePtr root, QString off=QString()) {
+ if (!root) {
+ kdDebug() << off << "[null]" << endl;
+ return;
+ }
+ kdDebug() << off << root->nodeName() << " " << (Element*)root << (root->isPlayable() ? root->mrl ()->src : QString ("-")) << endl;
+ off += QString (" ");
+ for (NodePtr e = root->firstChild(); e; e = e->nextSibling())
+ printTree(e, off);
+}*/
+
+void Source::setURL (const KURL & url) {
+ m_url = url;
+ m_back_request = 0L;
+ if (m_document && !m_document->hasChildNodes () &&
+ (m_document->mrl()->src.isEmpty () ||
+ m_document->mrl()->src == url.url ()))
+ // special case, mime is set first by plugin FIXME v
+ m_document->mrl()->src = url.url ();
+ else {
+ if (m_document)
+ m_document->document ()->dispose ();
+ m_document = new Document (url.url (), this);
+ }
+ if (m_player->process () && m_player->source () == this)
+ m_player->updateTree ();
+ //kdDebug() << name() << " setURL " << url << endl;
+ m_current = m_document;
+}
+
+void Source::setTitle (const QString & title) {
+ emit titleChanged (title);
+}
+
+KDE_NO_EXPORT void Source::setAudioLang (int id) {
+ View * v = static_cast <View *> (m_player->view());
+ if (v && m_player->process ())
+ m_player->process ()->setAudioLang (id, v->controlPanel ()->audioMenu ()->text (id));
+}
+
+KDE_NO_EXPORT void Source::setSubtitle (int id) {
+ View * v = static_cast <View *> (m_player->view());
+ if (v && m_player->process ())
+ m_player->process ()->setSubtitle (id, v->controlPanel ()->subtitleMenu ()->text (id));
+}
+
+void Source::reset () {
+ if (m_document) {
+ //kdDebug() << "Source::first" << endl;
+ m_current = NodePtr ();
+ m_document->reset ();
+ m_player->updateTree ();
+ }
+ init ();
+}
+
+QString Source::currentMrl () {
+ Mrl * mrl = m_current ? m_current->mrl () : 0L;
+ kdDebug() << "Source::currentMrl " << (m_current ? m_current->nodeName():"") << " src:" << (mrl ? mrl->absolutePath () : QString ()) << endl;
+ return mrl ? mrl->absolutePath () : QString ();
+}
+
+void Source::playCurrent () {
+ QString url = currentMrl ();
+ m_player->changeURL (url);
+ m_width = m_height = 0;
+ m_aspect = 0.0;
+ if (m_player->view ())
+ static_cast <View *> (m_player->view ())->playingStop ();//show controls
+ if (m_document && !m_document->active ()) {
+ if (!m_current)
+ m_document->activate ();
+ else { // ugly code duplicate w/ back_request
+ for (NodePtr p = m_current->parentNode(); p; p = p->parentNode())
+ p->state = Element::state_activated;
+ m_current->activate ();
+ }
+ } else if (!m_current) {
+ emit endOfPlayItems ();
+ } else if (m_current->state == Element::state_deferred) {
+ // m_current->undefer ();
+ } else if (m_player->process ()->state () == Process::NotRunning) {
+ m_player->process ()->ready (static_cast <View *> (m_player->view ())->viewer ());
+ } else if (m_player->process ()) {
+ Mrl * mrl = m_back_request ? m_back_request->mrl () : m_current->mrl ();
+ if (mrl->view_mode == Mrl::SingleMode) {
+ // don't reset the dimensions if we have any
+ m_width = mrl->width;
+ m_height = mrl->height;
+ m_aspect = mrl->aspect;
+ }
+ m_back_request = 0L;
+ m_player->process ()->play (this, mrl->linkNode ());
+ }
+ //kdDebug () << "Source::playCurrent " << (m_current ? m_current->nodeName():" doc act:") << (m_document && !m_document->active ()) << " cur:" << (!m_current) << " cur act:" << (m_current && !m_current->active ()) << endl;
+ m_player->updateTree ();
+ emit dimensionsChanged ();
+}
+
+static NodePtr findDepthFirst (NodePtr elm) {
+ if (!elm)
+ return NodePtr ();
+ NodePtr tmp = elm;
+ for ( ; tmp; tmp = tmp->nextSibling ()) {
+ if (tmp->isPlayable ())
+ return tmp;
+ NodePtr tmp2 = findDepthFirst (tmp->firstChild ());
+ if (tmp2)
+ return tmp2;
+ }
+ return NodePtr ();
+}
+
+bool Source::requestPlayURL (NodePtr mrl) {
+ //kdDebug() << "Source::requestPlayURL " << mrl->mrl ()->src << endl;
+ if (m_player->process ()->state () > Process::Ready) {
+ if (m_player->process ()->mrl () == mrl->mrl ()->linkNode ())
+ return true;
+ m_back_request = mrl; // still playing, schedule it
+ m_player->process ()->stop ();
+ } else {
+ if (mrl->mrl ()->view_mode == Mrl::SingleMode)
+ m_current = mrl;
+ else
+ m_back_request = mrl;
+ m_player->updateTree ();
+ QTimer::singleShot (0, this, SLOT (playCurrent ()));
+ }
+ m_player->setProcess (mrl->mrl ());
+ return true;
+}
+
+bool Source::resolveURL (NodePtr) {
+ return true;
+}
+
+void Source::setTimeout (int ms) {
+ //kdDebug () << "Source::setTimeout " << ms << endl;
+ if (m_doc_timer)
+ killTimer (m_doc_timer);
+ m_doc_timer = ms > -1 ? startTimer (ms) : 0;
+}
+
+void Source::timerEvent (QTimerEvent * e) {
+ if (e->timerId () == m_doc_timer && m_document && m_document->active ())
+ m_document->document ()->timer (); // will call setTimeout()
+ else
+ killTimer (e->timerId ());
+}
+
+bool Source::setCurrent (NodePtr mrl) {
+ m_current = mrl;
+ return true;
+}
+
+void Source::stateElementChanged (Node * elm, Node::State os, Node::State ns) {
+ //kdDebug() << "Source::stateElementChanged " << elm->nodeName () << " state:" << (int) elm->state << " cur isPlayable:" << (m_current && m_current->isPlayable ()) << " elm==linkNode:" << (m_current && elm == m_current->mrl ()->linkNode ()) << " p state:" << m_player->process ()->state () << endl;
+ if (ns == Node::state_deactivated && elm == m_document && !m_back_request) {
+ emit endOfPlayItems (); // played all items
+ } else if ((ns == Node::state_deactivated || ns == Node::state_finished) &&
+ m_player->process ()->mrl() &&
+ elm == m_player->process ()->mrl ()->mrl ()->linkNode ()) {
+ if (m_player->process ()->state () > Process::Ready)
+ //a SMIL movies stopped by SMIL events rather than movie just ending
+ m_player->process ()->stop ();
+ if (m_player->view ()) // move away the video widget
+ QTimer::singleShot (0, m_player->view (), SLOT (updateLayout ()));
+ } else if ((ns == Node::state_deferred ||
+ (os == Node::state_deferred && ns > Node::state_deferred)) &&
+ elm == m_document) {
+ m_player->process ()->pause ();
+ } else if (ns == Node::state_activated &&
+ elm->isPlayable () &&
+ elm->mrl ()->view_mode == Mrl::SingleMode) {
+ Node *p = elm->parentNode();
+ if (!p || !p->mrl () || p->mrl ()->view_mode == Mrl::SingleMode)
+ // make sure we don't set current to nested document
+ m_current = elm;
+ }
+ if (elm->expose ()) {
+ if (ns == Node::state_activated || ns == Node::state_deactivated)
+ m_player->updateTree ();
+ else if (ns == Node::state_began || os == Node::state_began)
+ m_player->updateTree (false);
+ }
+}
+
+SurfacePtr Source::getSurface (NodePtr n) {
+ if (m_player->view ())
+ return static_cast <View*>(m_player->view())->viewArea()->getSurface(n);
+ return 0L;
+}
+
+void Source::setInfoMessage (const QString & msg) {
+ m_player->updateInfo (msg);
+}
+
+void Source::bitRates (int & preferred, int & maximal) {
+ preferred = 1024 * m_player->settings ()->prefbitrate;
+ maximal= 1024 * m_player->settings ()->maxbitrate;
+}
+
+void Source::insertURL (NodePtr node, const QString & mrl, const QString & title) {
+ if (!node || !node->mrl ()) // this should always be false
+ return;
+ QString cur_url = node->mrl ()->absolutePath ();
+ KURL url (cur_url, mrl);
+ kdDebug() << "Source::insertURL " << KURL (cur_url) << " " << url << endl;
+ if (!url.isValid ())
+ kdError () << "try to append non-valid url" << endl;
+ else if (KURL (cur_url) == url)
+ kdError () << "try to append url to itself" << endl;
+ else {
+ int depth = 0; // cache this?
+ for (NodePtr e = node; e->parentNode (); e = e->parentNode ())
+ ++depth;
+ if (depth < 40) {
+ node->appendChild (new GenericURL (m_document, KURL::decode_string (url.url ()), title.isEmpty() ? KURL::decode_string (mrl) : title));
+ m_player->updateTree ();
+ } else
+ kdError () << "insertURL exceeds depth limit" << endl;
+ }
+}
+
+void Source::play () {
+ m_player->updateTree ();
+ QTimer::singleShot (0, m_player, SLOT (play ()));
+ //printTree (m_document);
+}
+
+void Source::backward () {
+ if (m_document->hasChildNodes ()) {
+ m_back_request = m_current;
+ if (!m_back_request || m_back_request == m_document) {
+ m_back_request = m_document->lastChild ();
+ while (m_back_request->lastChild () && !m_back_request->isPlayable ())
+ m_back_request = m_back_request->lastChild ();
+ if (m_back_request->isPlayable ())
+ return;
+ }
+ while (m_back_request && m_back_request != m_document) {
+ if (m_back_request->previousSibling ()) {
+ m_back_request = m_back_request->previousSibling ();
+ NodePtr e = findDepthFirst (m_back_request); // lastDepth..
+ if (e) {
+ m_back_request = e;
+ if (m_player->playing ())
+ m_player->process ()->stop ();
+ else if (m_current) {
+ m_document->reset ();
+ m_current = e;
+ QTimer::singleShot (0, this, SLOT (playCurrent ()));
+ }
+ return;
+ }
+ } else
+ m_back_request = m_back_request->parentNode ();
+ }
+ m_back_request = 0L;
+ } else
+ m_player->process ()->seek (-1 * m_player->settings ()->seektime * 10, false);
+}
+
+void Source::forward () {
+ if (m_document->hasChildNodes ()) {
+ if (m_player->playing ())
+ m_player->process ()->stop ();
+ else if (m_current)
+ m_current->finish ();
+ } else
+ m_player->process ()->seek (m_player->settings()->seektime * 10, false);
+}
+
+void Source::jump (NodePtr e) {
+ if (e->isPlayable ()) {
+ if (m_player->playing ()) {
+ m_back_request = e;
+ m_player->process ()->stop ();
+ } else {
+ if (m_current)
+ m_document->reset ();
+ m_current = e;
+ QTimer::singleShot (0, this, SLOT (playCurrent ()));
+ }
+ } else
+ m_player->updateTree ();
+}
+
+NodePtr Source::document () {
+ if (!m_document)
+ m_document = new Document (QString (), this);
+ return m_document;
+}
+
+NodePtr Source::root () {
+ return document ();
+}
+
+bool Source::processOutput (const QString &) {
+ return false;
+}
+
+QString Source::filterOptions () {
+ Settings* m_settings = m_player->settings ();
+ QString PPargs ("");
+ if (m_settings->postprocessing)
+ {
+ if (m_settings->pp_default)
+ PPargs = "-vf pp=de";
+ else if (m_settings->pp_fast)
+ PPargs = "-vf pp=fa";
+ else if (m_settings->pp_custom) {
+ PPargs = "-vf pp=";
+ if (m_settings->pp_custom_hz) {
+ PPargs += "hb";
+ if (m_settings->pp_custom_hz_aq && \
+ m_settings->pp_custom_hz_ch)
+ PPargs += ":ac";
+ else if (m_settings->pp_custom_hz_aq)
+ PPargs += ":a";
+ else if (m_settings->pp_custom_hz_ch)
+ PPargs += ":c";
+ PPargs += '/';
+ }
+ if (m_settings->pp_custom_vt) {
+ PPargs += "vb";
+ if (m_settings->pp_custom_vt_aq && \
+ m_settings->pp_custom_vt_ch)
+ PPargs += ":ac";
+ else if (m_settings->pp_custom_vt_aq)
+ PPargs += ":a";
+ else if (m_settings->pp_custom_vt_ch)
+ PPargs += ":c";
+ PPargs += '/';
+ }
+ if (m_settings->pp_custom_dr) {
+ PPargs += "dr";
+ if (m_settings->pp_custom_dr_aq && \
+ m_settings->pp_custom_dr_ch)
+ PPargs += ":ac";
+ else if (m_settings->pp_custom_dr_aq)
+ PPargs += ":a";
+ else if (m_settings->pp_custom_dr_ch)
+ PPargs += ":c";
+ PPargs += '/';
+ }
+ if (m_settings->pp_custom_al) {
+ PPargs += "al";
+ if (m_settings->pp_custom_al_f)
+ PPargs += ":f";
+ PPargs += '/';
+ }
+ if (m_settings->pp_custom_tn) {
+ PPargs += "tn";
+ /*if (1 <= m_settings->pp_custom_tn_s <= 3){
+ PPargs += ":";
+ PPargs += m_settings->pp_custom_tn_s;
+ }*/ //disabled 'cos this is wrong
+ PPargs += '/';
+ }
+ if (m_settings->pp_lin_blend_int) {
+ PPargs += "lb";
+ PPargs += '/';
+ }
+ if (m_settings->pp_lin_int) {
+ PPargs += "li";
+ PPargs += '/';
+ }
+ if (m_settings->pp_cub_int) {
+ PPargs += "ci";
+ PPargs += '/';
+ }
+ if (m_settings->pp_med_int) {
+ PPargs += "md";
+ PPargs += '/';
+ }
+ if (m_settings->pp_ffmpeg_int) {
+ PPargs += "fd";
+ PPargs += '/';
+ }
+ }
+ if (PPargs.endsWith("/"))
+ PPargs.truncate(PPargs.length()-1);
+ }
+ return PPargs;
+}
+
+bool Source::hasLength () {
+ return true;
+}
+
+bool Source::isSeekable () {
+ return true;
+}
+
+void Source::setIdentified (bool b) {
+ //kdDebug () << "Source::setIdentified " << m_identified << b <<endl;
+ m_identified = b;
+}
+
+static const QString statemap [] = {
+ i18n ("Not Running"), i18n ("Ready"), i18n ("Buffering"), i18n ("Playing")
+};
+
+void Source::stateChange(Process *p, Process::State olds, Process::State news) {
+ if (!p || !p->viewer ()) return;
+ Recorder *rec = dynamic_cast <Recorder *> (p);
+ if (rec && !rec->recordURL ().isEmpty ()) {
+ kdDebug () << "recordState " << statemap[olds] << " -> " << statemap[news] << endl;
+ m_player->updateStatus (i18n ("Recorder %1 %2").arg (p->name ()).arg (statemap[news]));
+ p->viewer ()->view ()->controlPanel ()->setRecording (news > Process::Ready);
+ if (news == Process::Ready) {
+ if (olds > Process::Ready) {
+ p->quit ();
+ } else {
+ NodePtr n = current ();
+ if (!n)
+ n = document ();
+ p->play (this, n);
+ }
+ } else if (news > Process::Ready) {
+ emit startRecording ();
+ } else if (news == Process::NotRunning)
+ emit stopRecording ();
+ } else {
+ p->viewer()->view()->controlPanel()->setPlaying(news > Process::Ready);
+ kdDebug () << "processState " << statemap[olds] << " -> " << statemap[news] << endl;
+ m_player->updateStatus (i18n ("Player %1 %2").arg (p->name ()).arg (statemap[news]));
+ if (!p->mrl () && news > Process::Ready) {
+ p->stop (); // reschedule for Ready state
+ } else if (news == Process::Playing) {
+ if (p->mrl ()->state == Element::state_deferred)
+ p->mrl ()->undefer ();
+ p->viewer ()->view ()->playingStart ();
+ emit startPlaying ();
+ } else if (news == Process::NotRunning) {
+ if (hasLength () && position () > length ())
+ setLength (m_document, position ());
+ setPosition (0);
+ if (p == m_player->process ())
+ emit stopPlaying ();
+ // else changed process
+ } else if (news == Process::Ready) {
+ if (olds > Process::Ready) {
+ NodePtr node = p->mrl (); // p->mrl is weak, needs check
+ Mrl * mrl = node ? node->mrl () : 0L;
+ if (m_back_request && m_back_request->isPlayable ()) {
+ if (m_back_request->mrl ()->view_mode == Mrl::SingleMode)
+ // jump in pl
+ m_current = m_back_request;
+ else if (mrl)
+ // overlapping SMIL audio/video
+ mrl->endOfFile ();
+ if (m_current->id >= SMIL::id_node_first &&
+ m_current->id < SMIL::id_node_last) {
+ playCurrent (); // just play back_request
+ } else {
+ // sanitize pl having all parents of current activated
+ m_document->reset (); // deactivate everything
+ for (NodePtr p = m_current->parentNode(); p; p = p->parentNode())
+ p->state = Element::state_activated;
+ m_current->activate (); // calls requestPlayUrl
+ }
+ m_back_request = 0L;
+ } else if(mrl)
+ {
+ mrl->endOfFile (); // set node to finished
+ }
+ if (m_player->view() &&
+ (!mrl || mrl->view_mode != Mrl::WindowMode))
+ static_cast<View*>(m_player->view())->viewArea()->repaint();
+ } else
+ QTimer::singleShot (0, this, SLOT (playCurrent ()));
+ } else if (news == Process::Buffering) {
+ if (p->mrl ()->mrl ()->view_mode != Mrl::SingleMode)
+ p->mrl ()->defer (); // paused the SMIL
+ }
+ }
+}
+
+QString Source::plugin (const QString &mime) const {
+ m_player->config ()->setGroup (mime);
+ return m_player->config ()->readEntry ("plugin", "" );
+}
+
+QString Source::prettyName () {
+ return i18n ("Unknown");
+}
+
+//-----------------------------------------------------------------------------
+
+URLSource::URLSource (PartBase * player, const KURL & url)
+ : Source (i18n ("URL"), player, "urlsource"), activated (false) {
+ setURL (url);
+ //kdDebug () << "URLSource::URLSource" << endl;
+}
+
+URLSource::~URLSource () {
+ //kdDebug () << "URLSource::~URLSource" << endl;
+}
+
+void URLSource::init () {
+ Source::init ();
+}
+
+void URLSource::dimensions (int & w, int & h) {
+ if (!m_player->mayResize () && m_player->view ()) {
+ w = static_cast <View *> (m_player->view ())->viewer ()->width ();
+ h = static_cast <View *> (m_player->view ())->viewer ()->height ();
+ } else
+ Source::dimensions (w, h);
+
+}
+
+bool URLSource::hasLength () {
+ return !!length ();
+}
+
+KDE_NO_EXPORT void URLSource::activate () {
+ if (activated)
+ return;
+ activated = true;
+ if (url ().isEmpty () && (!m_document || !m_document->hasChildNodes ())) {
+ m_player->updateTree ();
+ return;
+ }
+ if (m_auto_play)
+ play ();
+}
+
+KDE_NO_EXPORT void URLSource::stopResolving () {
+ if (m_resolve_info) {
+ for (SharedPtr <ResolveInfo> ri = m_resolve_info; ri; ri = ri->next)
+ ri->job->kill ();
+ m_resolve_info = 0L;
+ m_player->updateStatus (i18n ("Disconnected"));
+ m_player->setLoaded (100);
+ }
+}
+
+void URLSource::reset () {
+ stopResolving ();
+ Source::reset ();
+}
+
+void URLSource::forward () {
+ stopResolving ();
+ Source::forward ();
+}
+
+void URLSource::backward () {
+ stopResolving ();
+ Source::backward ();
+}
+
+void URLSource::jump (NodePtr e) {
+ stopResolving ();
+ Source::jump (e);
+}
+
+void URLSource::deactivate () {
+ activated = false;
+ reset ();
+ getSurface (0L);
+}
+
+QString URLSource::prettyName () {
+ if (m_url.isEmpty ())
+ return i18n ("URL");
+ if (m_url.url ().length () > 50) {
+ QString newurl = m_url.protocol () + QString ("://");
+ if (m_url.hasHost ())
+ newurl += m_url.host ();
+ if (m_url.port ())
+ newurl += QString (":%1").arg (m_url.port ());
+ QString file = m_url.fileName ();
+ int len = newurl.length () + file.length ();
+ KURL path = KURL (m_url.directory ());
+ bool modified = false;
+ while (path.url ().length () + len > 50 && path != path.upURL ()) {
+ path = path.upURL ();
+ modified = true;
+ }
+ QString dir = path.directory ();
+ if (!dir.endsWith (QString ("/")))
+ dir += '/';
+ if (modified)
+ dir += QString (".../");
+ newurl += dir + file;
+ return i18n ("URL - %1").arg (newurl);
+ }
+ return i18n ("URL - %1").arg (m_url.prettyURL ());
+}
+
+static bool isPlayListMime (const QString & mime) {
+ QString m (mime);
+ int plugin_pos = m.find ("-plugin");
+ if (plugin_pos > 0)
+ m.truncate (plugin_pos);
+ const char * mimestr = m.ascii ();
+ return mimestr && (!strcmp (mimestr, "audio/mpegurl") ||
+ !strcmp (mimestr, "audio/x-mpegurl") ||
+ !strncmp (mimestr, "video/x-ms", 10) ||
+ !strncmp (mimestr, "audio/x-ms", 10) ||
+ //!strcmp (mimestr, "video/x-ms-wmp") ||
+ //!strcmp (mimestr, "video/x-ms-asf") ||
+ //!strcmp (mimestr, "video/x-ms-wmv") ||
+ //!strcmp (mimestr, "video/x-ms-wvx") ||
+ //!strcmp (mimestr, "video/x-msvideo") ||
+ !strcmp (mimestr, "audio/x-scpls") ||
+ !strcmp (mimestr, "audio/x-pn-realaudio") ||
+ !strcmp (mimestr, "audio/vnd.rn-realaudio") ||
+ !strcmp (mimestr, "audio/m3u") ||
+ !strcmp (mimestr, "audio/x-m3u") ||
+ !strncmp (mimestr, "text/", 5) ||
+ (!strncmp (mimestr, "application/", 12) &&
+ strstr (mimestr + 12,"+xml")) ||
+ !strncasecmp (mimestr, "application/smil", 16) ||
+ !strncasecmp (mimestr, "application/xml", 15) ||
+ //!strcmp (mimestr, "application/rss+xml") ||
+ //!strcmp (mimestr, "application/atom+xml") ||
+ !strcmp (mimestr, "application/x-mplayer2"));
+}
+
+KDE_NO_EXPORT void URLSource::read (NodePtr root, QTextStream & textstream) {
+ QString line;
+ do {
+ line = textstream.readLine ();
+ } while (!line.isNull () && line.stripWhiteSpace ().isEmpty ());
+ if (!line.isNull ()) {
+ NodePtr cur_elm = root;
+ if (cur_elm->isPlayable ())
+ cur_elm = cur_elm->mrl ()->linkNode ();
+ if (cur_elm->mrl ()->mimetype == QString ("audio/x-scpls")) {
+ bool groupfound = false;
+ int nr = -1;
+ struct Entry {
+ QString url, title;
+ } * entries = 0L;
+ do {
+ line = line.stripWhiteSpace ();
+ if (!line.isEmpty ()) {
+ if (line.startsWith (QString ("[")) && line.endsWith (QString ("]"))) {
+ if (!groupfound && line.mid (1, line.length () - 2).stripWhiteSpace () == QString ("playlist"))
+ groupfound = true;
+ else
+ break;
+ kdDebug () << "Group found: " << line << endl;
+ } else if (groupfound) {
+ int eq_pos = line.find (QChar ('='));
+ if (eq_pos > 0) {
+ if (line.lower ().startsWith (QString ("numberofentries"))) {
+ nr = line.mid (eq_pos + 1).stripWhiteSpace ().toInt ();
+ kdDebug () << "numberofentries : " << nr << endl;
+ if (nr > 0 && nr < 1024)
+ entries = new Entry[nr];
+ else
+ nr = 0;
+ } else if (nr > 0) {
+ QString ll = line.lower ();
+ if (ll.startsWith (QString ("file"))) {
+ int i = line.mid (4, eq_pos-4).toInt ();
+ if (i > 0 && i <= nr)
+ entries[i-1].url = line.mid (eq_pos + 1).stripWhiteSpace ();
+ } else if (ll.startsWith (QString ("title"))) {
+ int i = line.mid (5, eq_pos-5).toInt ();
+ if (i > 0 && i <= nr)
+ entries[i-1].title = line.mid (eq_pos + 1).stripWhiteSpace ();
+ }
+ }
+ }
+ }
+ }
+ line = textstream.readLine ();
+ } while (!line.isNull ());
+ for (int i = 0; i < nr; i++)
+ if (!entries[i].url.isEmpty ())
+ cur_elm->appendChild (new GenericURL (m_document, KURL::decode_string (entries[i].url), entries[i].title));
+ delete [] entries;
+ } else if (line.stripWhiteSpace ().startsWith (QChar ('<'))) {
+ readXML (cur_elm, textstream, line);
+ //cur_elm->normalize ();
+ if (m_document && m_document->firstChild ()) {
+ // SMIL documents have set its size of root-layout
+ Mrl * mrl = m_document->firstChild ()->mrl ();
+ if (mrl)
+ Source::setDimensions (m_document->firstChild (), mrl->width, mrl->height);
+ }
+ } else if (line.lower () != QString ("[reference]")) do {
+ QString mrl = line.stripWhiteSpace ();
+ if (line == QString ("--stop--"))
+ break;
+ if (mrl.lower ().startsWith (QString ("asf ")))
+ mrl = mrl.mid (4).stripWhiteSpace ();
+ if (!mrl.isEmpty () && !mrl.startsWith (QChar ('#')))
+ cur_elm->appendChild (new GenericURL (m_document, mrl));
+ line = textstream.readLine ();
+ } while (!line.isNull ()); /* TODO && m_document.size () < 1024 / * support 1k entries * /);*/
+ }
+}
+
+KDE_NO_EXPORT void URLSource::kioData (KIO::Job * job, const QByteArray & d) {
+ SharedPtr <ResolveInfo> rinfo = m_resolve_info;
+ while (rinfo && rinfo->job != job)
+ rinfo = rinfo->next;
+ if (!rinfo) {
+ kdWarning () << "Spurious kioData" << endl;
+ return;
+ }
+ int size = rinfo->data.size ();
+ int newsize = size + d.size ();
+ if (!size) { // first data
+ int accuraty = 0;
+ KMimeType::Ptr mime = KMimeType::findByContent (d, &accuraty);
+ if (!mime ||
+ !mime->name ().startsWith (QString ("text/")) ||
+ (newsize > 4 && !strncmp (d.data (), "RIFF", 4))) {
+ newsize = 0;
+ kdDebug () << "URLSource::kioData: " << mime->name () << accuraty << endl;
+ }
+ }
+ //kdDebug () << "URLSource::kioData: " << newsize << endl;
+ if (newsize <= 0 || newsize > 200000) {
+ rinfo->data.resize (0);
+ rinfo->job->kill (false);
+ m_player->setLoaded (100);
+ } else {
+ rinfo->data.resize (newsize);
+ memcpy (rinfo->data.data () + size, d.data (), newsize - size);
+ m_player->setLoaded (++rinfo->progress);
+ }
+}
+
+KDE_NO_EXPORT void URLSource::kioMimetype (KIO::Job * job, const QString & mimestr) {
+ SharedPtr <ResolveInfo> rinfo = m_resolve_info;
+ while (rinfo && rinfo->job != job)
+ rinfo = rinfo->next;
+ if (!rinfo) {
+ kdWarning () << "Spurious kioData" << endl;
+ return;
+ }
+ if (rinfo->resolving_mrl)
+ rinfo->resolving_mrl->mrl ()->mimetype = mimestr;
+ if (!rinfo->resolving_mrl || !isPlayListMime (mimestr))
+ job->kill (false);
+}
+
+KDE_NO_EXPORT void URLSource::kioResult (KIO::Job * job) {
+ SharedPtr <ResolveInfo> previnfo, rinfo = m_resolve_info;
+ while (rinfo && rinfo->job != job) {
+ previnfo = rinfo;
+ rinfo = rinfo->next;
+ }
+ if (!rinfo) {
+ kdWarning () << "Spurious kioData" << endl;
+ return;
+ }
+ m_player->updateStatus ("");
+ m_player->setLoaded (100);
+ if (previnfo)
+ previnfo->next = rinfo->next;
+ else
+ m_resolve_info = rinfo->next;
+ QTextStream textstream (rinfo->data, IO_ReadOnly);
+ if (rinfo->resolving_mrl) {
+ if (isPlayListMime (rinfo->resolving_mrl->mrl ()->mimetype))
+ read (rinfo->resolving_mrl, textstream);
+ rinfo->resolving_mrl->mrl ()->resolved = true;
+ rinfo->resolving_mrl->undefer ();
+ }
+ static_cast <View *> (m_player->view())->controlPanel()->setPlaying (false);
+}
+
+void URLSource::playCurrent () {
+ Mrl *mrl = m_back_request
+ ? m_back_request->mrl ()
+ : m_current ? m_current->mrl () : NULL;
+ if (mrl && mrl->active () && (!mrl->isPlayable () || !mrl->resolved))
+ // an async playCurrent() call (eg. backend is up & running), ignore
+ return;
+ Source::playCurrent ();
+}
+
+void URLSource::play () {
+ Source::play ();
+}
+
+bool URLSource::requestPlayURL (NodePtr mrl) {
+ if (m_document.ptr () != mrl->mrl ()->linkNode ()) {
+ KURL base = m_document->mrl ()->src;
+ KURL dest = mrl->mrl ()->linkNode ()->absolutePath ();
+ // check if some remote playlist tries to open something local, but
+ // do ignore unknown protocols because there are so many and we only
+ // want to cache local ones.
+ if (
+#if 0
+ !KProtocolInfo::protocolClass (dest.protocol ()).isEmpty () &&
+#else
+ dest.isLocalFile () &&
+#endif
+ !kapp->authorizeURLAction ("redirect", base, dest)) {
+ kdWarning () << "requestPlayURL from document " << base << " to play " << dest << " is not allowed" << endl;
+ return false;
+ }
+ }
+ return Source::requestPlayURL (mrl);
+}
+
+void URLSource::setURL (const KURL & url) {
+ Source::setURL (url);
+ Mrl *mrl = document ()->mrl ();
+ if (!url.isEmpty () && url.isLocalFile () && mrl->mimetype.isEmpty ()) {
+ KMimeType::Ptr mimeptr = KMimeType::findByURL (url);
+ if (mimeptr)
+ mrl->mimetype = mimeptr->name ();
+ }
+}
+
+bool URLSource::resolveURL (NodePtr m) {
+ Mrl * mrl = m->mrl ();
+ if (!mrl || mrl->src.isEmpty ())
+ return true;
+ int depth = 0;
+ for (NodePtr e = m->parentNode (); e; e = e->parentNode ())
+ ++depth;
+ if (depth > 40)
+ return true;
+ KURL url (mrl->absolutePath ());
+ QString mimestr = mrl->mimetype;
+ if (mimestr == "application/x-shockwave-flash" ||
+ mimestr == "application/futuresplash")
+ return true; // FIXME
+ bool maybe_playlist = isPlayListMime (mimestr);
+ kdDebug () << "resolveURL " << mrl->absolutePath () << " " << mimestr << endl;
+ if (url.isLocalFile ()) {
+ QFile file (url.path ());
+ if (!file.exists ()) {
+ kdWarning () << "resolveURL " << url.path() << " not found" << endl;
+ return true;
+ }
+ if (mimestr.isEmpty ()) {
+ KMimeType::Ptr mimeptr = KMimeType::findByURL (url);
+ if (mimeptr) {
+ mrl->mimetype = mimeptr->name ();
+ maybe_playlist = isPlayListMime (mrl->mimetype); // get new mime
+ }
+ }
+ if (maybe_playlist && file.size () < 2000000 && file.open (IO_ReadOnly)) {
+ char databuf [512];
+ int nr_bytes = file.readBlock (databuf, 512);
+ if (nr_bytes > 3) {
+ int accuraty = 0;
+ KMimeType::Ptr mime = KMimeType::findByContent (QCString (databuf, nr_bytes), &accuraty);
+ if ((mime && !mime->name().startsWith (QString("text/"))) ||
+ !strncmp (databuf, "RIFF", 4)) {
+ return true;
+ }
+ kdDebug () << "mime: " << (mime ? mime->name (): QString("null")) << endl;
+ }
+ file.reset ();
+ QTextStream textstream (&file);
+ read (m, textstream);
+ }
+ } else if ((maybe_playlist &&
+ url.protocol ().compare (QString ("mms")) &&
+ url.protocol ().compare (QString ("rtsp")) &&
+ url.protocol ().compare (QString ("rtp"))) ||
+ (mimestr.isEmpty () &&
+ (url.protocol ().startsWith (QString ("http")) ||
+ url.protocol () == QString::fromLatin1 ("media") ||
+ url.protocol () == QString::fromLatin1 ("remote")))) {
+ KIO::Job * job = KIO::get (url, false, false);
+ job->addMetaData ("PropagateHttpHeader", "true");
+ job->addMetaData ("errorPage", "false");
+ m_resolve_info = new ResolveInfo (m, job, m_resolve_info);
+ connect (m_resolve_info->job, SIGNAL(data(KIO::Job*,const QByteArray&)),
+ this, SLOT (kioData (KIO::Job *, const QByteArray &)));
+ //connect( m_job, SIGNAL(connected(KIO::Job*)),
+ // this, SLOT(slotConnected(KIO::Job*)));
+ connect(m_resolve_info->job, SIGNAL(mimetype(KIO::Job*,const QString&)),
+ this, SLOT (kioMimetype (KIO::Job *, const QString &)));
+ connect (m_resolve_info->job, SIGNAL (result (KIO::Job *)),
+ this, SLOT (kioResult (KIO::Job *)));
+ static_cast <View *> (m_player->view ())->controlPanel ()->setPlaying (true);
+ m_player->updateStatus (i18n ("Connecting"));
+ m_player->setLoaded (0);
+ return false; // wait for result ..
+ }
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+
+namespace KMPlayer {
+ static KStaticDeleter <DataCache> dataCacheDeleter;
+ static DataCache * memory_cache;
+}
+
+void DataCache::add (const QString & url, const QByteArray & data) {
+ QByteArray bytes;
+ bytes.duplicate (data);
+ cache_map.insert (url, bytes);
+ preserve_map.erase (url);
+ emit preserveRemoved (url);
+}
+
+bool DataCache::get (const QString & url, QByteArray & data) {
+ DataMap::const_iterator it = cache_map.find (url);
+ if (it != cache_map.end ()) {
+ data.duplicate (it.data ());
+ return true;
+ }
+ return false;
+}
+
+bool DataCache::preserve (const QString & url) {
+ PreserveMap::const_iterator it = preserve_map.find (url);
+ if (it == preserve_map.end ()) {
+ preserve_map.insert (url, true);
+ return true;
+ }
+ return false;
+}
+
+bool DataCache::isPreserved (const QString & url) {
+ return preserve_map.find (url) != preserve_map.end ();
+}
+
+bool DataCache::unpreserve (const QString & url) {
+ const PreserveMap::iterator it = preserve_map.find (url);
+ if (it == preserve_map.end ())
+ return false;
+ preserve_map.erase (it);
+ emit preserveRemoved (url);
+ return true;
+}
+
+RemoteObjectPrivate::RemoteObjectPrivate (RemoteObject * r)
+ : job (0L), remote_object (r), preserve_wait (false) {
+ if (!memory_cache)
+ dataCacheDeleter.setObject (memory_cache, new DataCache);
+}
+
+RemoteObjectPrivate::~RemoteObjectPrivate () {
+ clear ();
+}
+
+KDE_NO_EXPORT bool RemoteObjectPrivate::download (const QString & str) {
+ url = str;
+ KURL kurl (str);
+ if (kurl.isLocalFile ()) {
+ QFile file (kurl.path ());
+ if (file.exists () && file.open (IO_ReadOnly)) {
+ data = file.readAll ();
+ file.close ();
+ }
+ remote_object->remoteReady (data);
+ return true;
+ }
+ if (memory_cache->get (str, data)) {
+ //kdDebug () << "download found in cache " << str << endl;
+ remote_object->remoteReady (data);
+ return true;
+ }
+ if (memory_cache->preserve (str)) {
+ //kdDebug () << "downloading " << str << endl;
+ job = KIO::get (kurl, false, false);
+ connect (job, SIGNAL (data (KIO::Job *, const QByteArray &)),
+ this, SLOT (slotData (KIO::Job *, const QByteArray &)));
+ connect (job, SIGNAL (result (KIO::Job *)),
+ this, SLOT (slotResult (KIO::Job *)));
+ connect (job, SIGNAL (mimetype (KIO::Job *, const QString &)),
+ this, SLOT (slotMimetype (KIO::Job *, const QString &)));
+ } else {
+ //kdDebug () << "download preserved " << str << endl;
+ connect (memory_cache, SIGNAL (preserveRemoved (const QString &)),
+ this, SLOT (cachePreserveRemoved (const QString &)));
+ preserve_wait = true;
+ }
+ return false;
+}
+
+KDE_NO_EXPORT void RemoteObjectPrivate::clear () {
+ if (job) {
+ job->kill (); // quiet, no result signal
+ job = 0L;
+ memory_cache->unpreserve (url);
+ } else if (preserve_wait) {
+ disconnect (memory_cache, SIGNAL (preserveRemoved (const QString &)),
+ this, SLOT (cachePreserveRemoved (const QString &)));
+ preserve_wait = false;
+ }
+}
+
+KDE_NO_EXPORT void RemoteObjectPrivate::slotResult (KIO::Job * kjob) {
+ if (!kjob->error ())
+ memory_cache->add (url, data);
+ else
+ data.resize (0);
+ job = 0L; // signal KIO::Job::result deletes itself
+ remote_object->remoteReady (data);
+}
+
+KDE_NO_EXPORT
+void RemoteObjectPrivate::cachePreserveRemoved (const QString & str) {
+ if (str == url && !memory_cache->isPreserved (str)) {
+ preserve_wait = false;
+ disconnect (memory_cache, SIGNAL (preserveRemoved (const QString &)),
+ this, SLOT (cachePreserveRemoved (const QString &)));
+ download (str);
+ }
+}
+
+KDE_NO_EXPORT
+void RemoteObjectPrivate::slotData (KIO::Job*, const QByteArray& qb) {
+ if (qb.size ()) {
+ int old_size = data.size ();
+ data.resize (old_size + qb.size ());
+ memcpy (data.data () + old_size, qb.data (), qb.size ());
+ }
+}
+
+KDE_NO_EXPORT
+void RemoteObjectPrivate::slotMimetype (KIO::Job *, const QString & m) {
+ mime = m;
+}
+
+KDE_NO_CDTOR_EXPORT RemoteObject::RemoteObject ()
+ : d (new RemoteObjectPrivate (this)) {}
+
+KDE_NO_CDTOR_EXPORT RemoteObject::~RemoteObject () {
+ delete d;
+}
+
+/**
+ * abort previous wget job
+ */
+KDE_NO_EXPORT void RemoteObject::killWGet () {
+ d->clear (); // assume data is invalid
+}
+
+/**
+ * Gets contents from url and puts it in m_data
+ */
+KDE_NO_EXPORT bool RemoteObject::wget (const QString & url) {
+ clear ();
+ return d->download (url);
+}
+
+KDE_NO_EXPORT QString RemoteObject::mimetype () {
+ if (d->data.size () > 0 && d->mime.isEmpty ()) {
+ int accuraty;
+ KMimeType::Ptr mime = KMimeType::findByContent (d->data, &accuraty);
+ if (mime)
+ d->mime = mime->name ();
+ }
+ return d->mime;
+}
+
+KDE_NO_EXPORT void RemoteObject::clear () {
+ killWGet ();
+ d->url.truncate (0);
+ d->mime.truncate (0);
+ d->data.resize (0);
+}
+
+KDE_NO_EXPORT bool RemoteObject::downloading () const {
+ return !!d->job;
+}
+
+//-----------------------------------------------------------------------------
+
+#include "kmplayerpartbase.moc"
+#include "kmplayersource.moc"
diff --git a/src/kmplayerpartbase.h b/src/kmplayerpartbase.h
new file mode 100644
index 0000000..206f71e
--- /dev/null
+++ b/src/kmplayerpartbase.h
@@ -0,0 +1,298 @@
+/**
+ * Copyright (C) 2002-2003 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#ifndef KMPLAYERPARTBASE_H
+#define KMPLAYERPARTBASE_H
+
+#include <config.h>
+
+#include "kmplayer_def.h"
+
+#include <qobject.h>
+#include <qguardedptr.h>
+#include <qstringlist.h>
+#include <qmap.h>
+
+#include <dcopobject.h>
+#include <kmediaplayer/player.h>
+#include <kurl.h>
+
+#include "kmplayerview.h"
+#include "kmplayersource.h"
+
+
+class KAboutData;
+class KInstance;
+class KActionCollection;
+class KBookmarkMenu;
+class KConfig;
+class QIODevice;
+class QTextStream;
+class QListViewItem;
+
+namespace KIO {
+ class Job;
+}
+
+namespace KMPlayer {
+
+class PartBase;
+class Process;
+class MPlayer;
+class BookmarkOwner;
+class BookmarkManager;
+class MEncoder;
+class MPlayerDumpstream;
+class FFMpeg;
+class Xine;
+class Settings;
+
+/*
+ * Source from URLs
+ */
+class KMPLAYER_EXPORT URLSource : public Source {
+ Q_OBJECT
+public:
+ URLSource (PartBase * player, const KURL & url = KURL ());
+ virtual ~URLSource ();
+
+ virtual void dimensions (int & w, int & h);
+ virtual bool hasLength ();
+ virtual QString prettyName ();
+ virtual void reset ();
+ virtual void setURL (const KURL & url);
+public slots:
+ virtual void init ();
+ virtual void activate ();
+ virtual void deactivate ();
+ virtual void playCurrent ();
+ virtual void forward ();
+ virtual void backward ();
+ virtual void jump (NodePtr e);
+ void play ();
+private slots:
+ void kioData (KIO::Job *, const QByteArray &);
+ void kioMimetype (KIO::Job *, const QString &);
+ void kioResult (KIO::Job *);
+protected:
+ virtual bool requestPlayURL (NodePtr mrl);
+ virtual bool resolveURL (NodePtr mrl);
+private:
+ void read (NodePtr mrl, QTextStream &);
+ void stopResolving ();
+ struct ResolveInfo {
+ ResolveInfo (NodePtr mrl, KIO::Job * j, SharedPtr <ResolveInfo> & n)
+ : resolving_mrl (mrl), job (j), progress (0), next (n) {}
+ NodePtrW resolving_mrl;
+ KIO::Job * job;
+ QByteArray data;
+ int progress;
+ SharedPtr <ResolveInfo> next;
+ };
+ SharedPtr <ResolveInfo> m_resolve_info;
+ bool activated; // 'solve' an singleShot race w/ cmdline url's
+};
+
+/*
+ * KDE's KMediaPlayer::Player implementation and base for KMPlayerPart
+ */
+class KMPLAYER_EXPORT PartBase : public KMediaPlayer::Player {
+ Q_OBJECT
+ K_DCOP
+public:
+ typedef QMap <QString, Process *> ProcessMap;
+ PartBase (QWidget * parent, const char * wname,QObject * objectParent, const char * name, KConfig *);
+ ~PartBase ();
+ void init (KActionCollection * = 0L);
+ virtual KMediaPlayer::View* view ();
+ static KAboutData* createAboutData ();
+
+ Settings * settings () const { return m_settings; }
+ void keepMovieAspect (bool);
+ KURL url () const { return m_sources ["urlsource"]->url (); }
+ void setURL (const KURL & url) { m_sources ["urlsource"]->setURL (url); }
+
+ /* Changes the backend process */
+ void setProcess (const char *);
+ bool setProcess (Mrl *mrl);
+ void setRecorder (const char *);
+
+ /* Changes the source,
+ * calls init() and reschedules an activate() on the source
+ * */
+ void setSource (Source * source);
+ void connectPanel (ControlPanel * panel);
+ void connectPlaylist (PlayListView * playlist);
+ void connectInfoPanel (InfoWindow * infopanel);
+ void connectSource (Source * old_source, Source * source);
+ Process * process () const { return m_process; }
+ Process * recorder () const { return m_recorder; }
+ Source * source () const { return m_source; }
+ QMap <QString, Process *> & players () { return m_players; }
+ QMap <QString, Process *> & recorders () { return m_recorders; }
+ QMap <QString, Source *> & sources () { return m_sources; }
+ KConfig * config () const { return m_config; }
+ bool mayResize () const { return !m_noresize; }
+ void updatePlayerMenu (ControlPanel *);
+ void updateInfo (const QString & msg);
+ void updateStatus (const QString & msg);
+#ifdef HAVE_DBUS
+ void setServiceName (const QString & srv) { m_service = srv; }
+ QString serviceName () const { return m_service; }
+#endif
+
+ // these are called from Process
+ void changeURL (const QString & url);
+ void updateTree (bool full=true, bool force=false);
+ void setLanguages (const QStringList & alang, const QStringList & slang);
+public slots:
+ virtual bool openURL (const KURL & url);
+ virtual bool openURL (const KURL::List & urls);
+ virtual bool closeURL ();
+ virtual void pause (void);
+ virtual void play (void);
+ virtual void stop (void);
+ void record ();
+ virtual void seek (unsigned long msec);
+ void adjustVolume (int incdec);
+ bool playing () const;
+ void showConfigDialog ();
+ void showPlayListWindow ();
+ void slotPlayerMenu (int);
+ void back ();
+ void forward ();
+ void addBookMark (const QString & title, const QString & url);
+ void volumeChanged (int);
+ void increaseVolume ();
+ void decreaseVolume ();
+ void setPosition (int position, int length);
+ virtual void setLoaded (int percentage);
+public:
+ virtual bool isSeekable (void) const;
+ virtual unsigned long position (void) const;
+ virtual bool hasLength (void) const;
+ virtual unsigned long length (void) const;
+k_dcop:
+ void toggleFullScreen ();
+ bool isPlaying ();
+signals:
+ void sourceChanged (KMPlayer::Source * old, KMPlayer::Source * nw);
+ void sourceDimensionChanged ();
+ void loading (int percentage);
+ void urlAdded (const QString & url);
+ void urlChanged (const QString & url);
+ void processChanged (const char *);
+ void treeChanged (int id, NodePtr root, NodePtr, bool select, bool open);
+ void treeUpdated ();
+ void infoUpdated (const QString & msg);
+ void statusUpdated (const QString & msg);
+ void languagesUpdated(const QStringList & alang, const QStringList & slang);
+ void audioIsSelected (int id);
+ void subtitleIsSelected (int id);
+ void positioned (int pos, int length);
+protected:
+ bool openFile();
+ virtual void timerEvent (QTimerEvent *);
+protected slots:
+ void posSliderPressed ();
+ void posSliderReleased ();
+ void positionValueChanged (int val);
+ void contrastValueChanged (int val);
+ void brightnessValueChanged (int val);
+ void hueValueChanged (int val);
+ void saturationValueChanged (int val);
+ void sourceHasChangedAspects ();
+ void fullScreen ();
+ void playListItemClicked (QListViewItem *);
+ void playListItemExecuted (QListViewItem *);
+ virtual void playingStarted ();
+ virtual void playingStopped ();
+ void recordingStarted ();
+ void recordingStopped ();
+ void settingsChanged ();
+ void audioSelected (int);
+ void subtitleSelected (int);
+protected:
+ KConfig * m_config;
+ QGuardedPtr <View> m_view;
+ QMap <QString, QString> temp_backends;
+ Settings * m_settings;
+ Process * m_process;
+ Process * m_recorder;
+ Source * m_source;
+ ProcessMap m_players;
+ ProcessMap m_recorders;
+ QMap <QString, Source *> m_sources;
+ BookmarkManager * m_bookmark_manager;
+ BookmarkOwner * m_bookmark_owner;
+ KBookmarkMenu * m_bookmark_menu;
+#ifdef HAVE_DBUS
+ QString m_service;
+#endif
+ int m_record_timer;
+ int m_update_tree_timer;
+ bool m_noresize : 1;
+ bool m_auto_controls : 1;
+ bool m_use_slave : 1;
+ bool m_bPosSliderPressed : 1;
+ bool m_in_update_tree : 1;
+ bool m_update_tree_full : 1;
+};
+
+class KMPLAYER_NO_EXPORT DataCache : public QObject {
+ Q_OBJECT
+ typedef QMap <QString, QByteArray> DataMap;
+ typedef QMap <QString, bool> PreserveMap;
+ DataMap cache_map;
+ PreserveMap preserve_map;
+public:
+ DataCache () {}
+ ~DataCache () {}
+ void add (const QString &, const QByteArray &);
+ bool get (const QString &, QByteArray &);
+ bool preserve (const QString &);
+ bool unpreserve (const QString &);
+ bool isPreserved (const QString &);
+signals:
+ void preserveRemoved (const QString &); // ready or canceled
+};
+
+class KMPLAYER_NO_EXPORT RemoteObjectPrivate : public QObject {
+ Q_OBJECT
+public:
+ RemoteObjectPrivate (RemoteObject * r);
+ ~RemoteObjectPrivate ();
+ bool download (const QString &);
+ void clear ();
+ KIO::Job * job;
+ QString url;
+ QByteArray data;
+ QString mime;
+private slots:
+ void slotResult (KIO::Job*);
+ void slotData (KIO::Job*, const QByteArray& qb);
+ void slotMimetype (KIO::Job * job, const QString & mimestr);
+ void cachePreserveRemoved (const QString &);
+private:
+ RemoteObject * remote_object;
+ bool preserve_wait;
+};
+
+} // namespace
+
+#endif
diff --git a/src/kmplayerpartui.rc b/src/kmplayerpartui.rc
new file mode 100644
index 0000000..271365f
--- /dev/null
+++ b/src/kmplayerpartui.rc
@@ -0,0 +1,19 @@
+<!DOCTYPE kpartgui>
+<kpartgui name="kmplayer" version="8">
+<MenuBar>
+ <Menu name="view"><text>&amp;View</text>
+ <Action name="play"/>
+ <Action name="pause"/>
+ <Action name="stop"/>
+ <Action name="edit_playlist_item"/>
+ </Menu>
+</MenuBar>
+<ActionProperties>
+ <Action shortcut="F2" name="edit_playlist_item"/>
+</ActionProperties>
+<Toolbar name="mainToolBar"><text></text>
+ <Action name="play"/>
+ <Action name="pause"/>
+ <Action name="stop"/>
+</Toolbar>
+</kpartgui>
diff --git a/src/kmplayerplaylist.cpp b/src/kmplayerplaylist.cpp
new file mode 100644
index 0000000..e2db4f3
--- /dev/null
+++ b/src/kmplayerplaylist.cpp
@@ -0,0 +1,1842 @@
+/**
+ * Copyright (C) 2004 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include <config.h>
+#include <time.h>
+
+#include <qtextstream.h>
+#include <kdebug.h>
+#include <kurl.h>
+#ifdef HAVE_EXPAT
+#include <expat.h>
+#endif
+#ifdef HAVE_CAIRO
+# include <cairo.h>
+#endif
+#include "kmplayerplaylist.h"
+#include "kmplayer_asx.h"
+#include "kmplayer_atom.h"
+#include "kmplayer_rp.h"
+#include "kmplayer_rss.h"
+#include "kmplayer_smil.h"
+#include "kmplayer_xspf.h"
+
+#ifdef SHAREDPTR_DEBUG
+int shared_data_count;
+#endif
+
+using namespace KMPlayer;
+
+//-----------------------------------------------------------------------------
+
+namespace KMPlayer {
+ Node * fromXMLDocumentTag (NodePtr & d, const QString & tag) {
+ const char * const name = tag.latin1 ();
+ if (!strcmp (name, "smil"))
+ return new SMIL::Smil (d);
+ else if (!strcasecmp (name, "asx"))
+ return new ASX::Asx (d);
+ else if (!strcasecmp (name, "imfl"))
+ return new RP::Imfl (d);
+ else if (!strcasecmp (name, "rss"))
+ return new RSS::Rss (d);
+ else if (!strcasecmp (name, "feed"))
+ return new ATOM::Feed (d);
+ else if (!strcasecmp (name, "playlist"))
+ return new XSPF::Playlist (d);
+ else if (!strcasecmp (name, "url"))
+ return new GenericURL (d, QString ());
+ else if (!strcasecmp (name, "mrl") ||
+ !strcasecmp (name, "document"))
+ return new GenericMrl (d);
+ return 0L;
+ }
+
+//-----------------------------------------------------------------------------
+
+ struct XMLStringlet {
+ const QString str;
+ XMLStringlet (const QString & s) : str (s) {}
+ };
+} // namespace
+
+QTextStream & operator << (QTextStream & out, const XMLStringlet & txt) {
+ int len = int (txt.str.length ());
+ for (int i = 0; i < len; ++i) {
+ if (txt.str [i] == QChar ('<')) {
+ out << "&lt;";
+ } else if (txt.str [i] == QChar ('>')) {
+ out << "&gt;";
+ } else if (txt.str [i] == QChar ('"')) {
+ out << "&quot;";
+ } else if (txt.str [i] == QChar ('&')) {
+ out << "&amp;";
+ } else
+ out << txt.str [i];
+ }
+ return out;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT
+Connection::Connection (NodeRefListPtr ls, NodePtr node, NodePtr inv)
+ : connectee (inv), listeners (ls) {
+ if (listeners) {
+ NodeRefItemPtr nci = new NodeRefItem (node);
+ listeners->append (nci);
+ listen_item = nci;
+ }
+}
+
+KDE_NO_EXPORT void Connection::disconnect () {
+ if (listen_item && listeners)
+ listeners->remove (listen_item);
+ listen_item = 0L;
+ listeners = 0L;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT
+TimerInfo::TimerInfo (NodePtr n, unsigned id, struct timeval & tv, int ms)
+ : node (n), event_id (id), timeout (tv), milli_sec (ms) {}
+
+//-----------------------------------------------------------------------------
+
+Matrix::Matrix () : a (1.0), b (0.0), c (0.0), d (1.0), tx (0), ty (0) {}
+
+Matrix::Matrix (const Matrix & m)
+ : a (m.a), b (m.b), c (m.c), d (m.d), tx (m.tx), ty (m.ty) {}
+
+Matrix::Matrix (Single xoff, Single yoff, float xscale, float yscale)
+ : a (xscale), b (0.0), c (0.0), d (yscale), tx (xoff), ty (yoff) {}
+
+void Matrix::getXY (Single & x, Single & y) const {
+ x = Single (x * a) + tx;
+ y = Single (y * d) + ty;
+}
+
+void Matrix::getXYWH (Single & x, Single & y, Single & w, Single & h) const {
+ getXY (x, y);
+ w *= a;
+ h *= d;
+}
+
+void Matrix::invXYWH (Single & x, Single & y, Single & w, Single & h) const {
+ if (a > 0.00001 && d > 0.00001) {
+ w /= a;
+ h /= d;
+ x = Single ((x - tx) / a);
+ y = Single ((y - ty) / d);
+ } else {
+ kdWarning () << "Not invering " << a << ", " << d << " scale" << endl;
+ }
+}
+
+void Matrix::transform (const Matrix & matrix) {
+ // TODO: rotate
+ a *= matrix.a;
+ d *= matrix.d;
+ tx = Single (tx * matrix.a) + matrix.tx;
+ ty = Single (ty * matrix.d) + matrix.ty;
+}
+
+void Matrix::scale (float sx, float sy) {
+ a *= sx;
+ d *= sy;
+ tx *= sx;
+ ty *= sy;
+}
+
+void Matrix::translate (Single x, Single y) {
+ tx += x;
+ ty += y;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT Node::Node (NodePtr & d, short _id)
+ : m_doc (d), state (state_init), id (_id),
+ auxiliary_node (false), editable (true) {}
+
+Node::~Node () {
+ clear ();
+}
+
+Document * Node::document () {
+ return convertNode <Document> (m_doc);
+}
+
+Mrl * Node::mrl () {
+ return 0L;
+}
+
+const char * Node::nodeName () const {
+ return "node";
+}
+
+void Node::setState (State nstate) {
+ if (state != nstate) {
+ State old = state;
+ state = nstate;
+ if (document ()->notify_listener)
+ document()->notify_listener->stateElementChanged (this, old, state);
+ }
+}
+
+bool Node::expose () const {
+ return true;
+}
+
+void Node::activate () {
+ //kdDebug () << nodeName () << " Node::activate" << endl;
+ setState (state_activated);
+ if (firstChild ())
+ firstChild ()->activate (); // activate only the first
+ else
+ finish (); // a quicky :-)
+}
+
+void Node::begin () {
+ if (active ()) {
+ setState (state_began);
+ } else
+ kdError () << nodeName() << " begin call on not active element" << endl;
+}
+
+void Node::defer () {
+ if (active ()) {
+ setState (state_deferred);
+ } else
+ kdError () << "Node::defer () call on not activated element" << endl;
+}
+
+void Node::undefer () {
+ if (state == state_deferred) {
+ setState (state_activated);
+ activate ();
+ } else
+ kdWarning () <<"Node::undefer () call on not deferred element"<< endl;
+}
+
+void Node::finish () {
+ if (active ()) {
+ setState (state_finished);
+ if (m_parent)
+ m_parent->childDone (this);
+ else
+ deactivate (); // document deactivates itself on finish
+ } else
+ kdWarning () <<"Node::finish () call on not active element"<< endl;
+}
+
+void Node::deactivate () {
+ //kdDebug () << nodeName () << " Node::deactivate" << endl;
+ bool need_finish (unfinished ());
+ setState (state_deactivated);
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ()) {
+ if (e->state > state_init && e->state < state_deactivated)
+ e->deactivate ();
+ else
+ break; // remaining not yet activated
+ }
+ if (need_finish && m_parent)
+ m_parent->childDone (this);
+}
+
+void Node::reset () {
+ //kdDebug () << nodeName () << " Node::reset" << endl;
+ if (active ())
+ deactivate ();
+ setState (state_init);
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ()) {
+ if (e->state != state_init)
+ e->reset ();
+ // else
+ // break; // rest not activated yet
+ }
+}
+
+void Node::childBegan (NodePtr /*child*/) {
+}
+
+void Node::childDone (NodePtr child) {
+ //kdDebug () << nodeName () << " Node::childDone" << endl;
+ if (unfinished ()) {
+ if (child->state == state_finished)
+ child->deactivate ();
+ if (child->nextSibling ())
+ child->nextSibling ()->activate ();
+ else
+ finish (); // we're done
+ }
+}
+
+void Node::clear () {
+ clearChildren ();
+}
+
+void Node::clearChildren () {
+ if (m_doc)
+ document()->m_tree_version++;
+ while (m_first_child != m_last_child) {
+ // avoid stack abuse with 10k children derefing each other
+ m_last_child->m_parent = 0L;
+ m_last_child = m_last_child->m_prev;
+ m_last_child->m_next = 0L;
+ }
+ if (m_first_child)
+ m_first_child->m_parent = 0L;
+ m_first_child = m_last_child = 0L;
+}
+
+void Node::appendChild (NodePtr c) {
+ document()->m_tree_version++;
+ ASSERT (!c->parentNode ());
+ TreeNode<Node>::appendChild (c);
+}
+
+void Node::insertBefore (NodePtr c, NodePtr b) {
+ if (!b) {
+ appendChild (c);
+ } else {
+ ASSERT (!c->parentNode ());
+ document()->m_tree_version++;
+ if (b->m_prev) {
+ b->m_prev->m_next = c;
+ c->m_prev = b->m_prev;
+ } else {
+ c->m_prev = 0L;
+ m_first_child = c;
+ }
+ b->m_prev = c;
+ c->m_next = b;
+ c->m_parent = this;
+ }
+}
+
+void Node::removeChild (NodePtr c) {
+ document()->m_tree_version++;
+ TreeNode <Node>::removeChild (c);
+}
+
+KDE_NO_EXPORT void Node::replaceChild (NodePtr _new, NodePtr old) {
+ document()->m_tree_version++;
+ if (old->m_prev) {
+ old->m_prev->m_next = _new;
+ _new->m_prev = old->m_prev;
+ old->m_prev = 0L;
+ } else {
+ _new->m_prev = 0L;
+ m_first_child = _new;
+ }
+ if (old->m_next) {
+ old->m_next->m_prev = _new;
+ _new->m_next = old->m_next;
+ old->m_next = 0L;
+ } else {
+ _new->m_next = 0L;
+ m_last_child = _new;
+ }
+ _new->m_parent = this;
+ old->m_parent = 0L;
+}
+
+NodePtr Node::childFromTag (const QString &) {
+ return NodePtr ();
+}
+
+KDE_NO_EXPORT void Node::characterData (const QString & s) {
+ document()->m_tree_version++;
+ if (!m_last_child || m_last_child->id != id_node_text)
+ appendChild (new TextNode (m_doc, s));
+ else
+ convertNode <TextNode> (m_last_child)->appendText (s);
+}
+
+void Node::normalize () {
+ NodePtr e = firstChild ();
+ while (e) {
+ NodePtr tmp = e->nextSibling ();
+ if (!e->isElementNode () && e->id == id_node_text) {
+ QString val = e->nodeValue ().simplifyWhiteSpace ();
+ if (val.isEmpty ())
+ removeChild (e);
+ else
+ convertNode <TextNode> (e)->setText (val);
+ } else
+ e->normalize ();
+ e = tmp;
+ }
+}
+
+static void getInnerText (const NodePtr p, QTextOStream & out) {
+ for (NodePtr e = p->firstChild (); e; e = e->nextSibling ()) {
+ if (e->id == id_node_text || e->id == id_node_cdata)
+ out << e->nodeValue ();
+ else
+ getInnerText (e, out);
+ }
+}
+
+QString Node::innerText () const {
+ QString buf;
+ QTextOStream out (&buf);
+ getInnerText (m_self, out);
+ return buf;
+}
+
+static void getOuterXML (const NodePtr p, QTextOStream & out, int depth) {
+ if (!p->isElementNode ()) { // #text or #cdata
+ if (p->id == id_node_cdata)
+ out << "<![CDATA[" << p->nodeValue () << "]]>" << QChar ('\n');
+ else
+ out << XMLStringlet (p->nodeValue ()) << QChar ('\n');
+ } else {
+ Element * e = convertNode <Element> (p);
+ QString indent (QString ().fill (QChar (' '), depth));
+ out << indent << QChar ('<') << XMLStringlet (e->nodeName ());
+ for (AttributePtr a = e->attributes()->first(); a; a = a->nextSibling())
+ out << " " << XMLStringlet (a->name ().toString ()) <<
+ "=\"" << XMLStringlet (a->value ()) << "\"";
+ if (e->hasChildNodes ()) {
+ out << QChar ('>') << QChar ('\n');
+ for (NodePtr c = e->firstChild (); c; c = c->nextSibling ())
+ getOuterXML (c, out, depth + 1);
+ out << indent << QString("</") << XMLStringlet (e->nodeName()) <<
+ QChar ('>') << QChar ('\n');
+ } else
+ out << QString ("/>") << QChar ('\n');
+ }
+}
+
+QString Node::innerXML () const {
+ QString buf;
+ QTextOStream out (&buf);
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ getOuterXML (e, out, 0);
+ return buf;
+}
+
+QString Node::outerXML () const {
+ QString buf;
+ QTextOStream out (&buf);
+ getOuterXML (m_self, out, 0);
+ return buf;
+}
+
+Node::PlayType Node::playType () {
+ return play_type_none;
+}
+
+void Node::opened () {}
+
+void Node::closed () {}
+
+NodeRefListPtr Node::listeners (unsigned int /*event_id*/) {
+ return NodeRefListPtr ();
+}
+
+bool Node::handleEvent (EventPtr /*event*/) { return false; }
+
+KDE_NO_EXPORT void Node::propagateEvent (EventPtr event) {
+ NodeRefListPtr nl = listeners (event->id ());
+ if (nl)
+ for (NodeRefItemPtr c = nl->first(); c; c = c->nextSibling ())
+ if (c->data)
+ c->data->handleEvent (event);
+}
+
+void Node::accept (Visitor * v) {
+ v->visit (this);
+}
+
+KDE_NO_EXPORT
+ConnectionPtr Node::connectTo (NodePtr node, unsigned int evt_id) {
+ NodeRefListPtr nl = listeners (evt_id);
+ if (nl)
+ return ConnectionPtr (new Connection (nl, node, this));
+ return ConnectionPtr ();
+}
+
+QString Node::nodeValue () const {
+ return QString ();
+}
+
+SurfacePtr Node::getSurface (NodePtr) {
+ return 0L;
+}
+
+//-----------------------------------------------------------------------------
+
+RefNode::RefNode (NodePtr & d, NodePtr ref)
+ : Node (d) {
+ setRefNode (ref);
+}
+
+void RefNode::setRefNode (const NodePtr ref) {
+ ref_node = ref;
+ if (ref_node)
+ tag_name = QString ("&%1").arg (ref_node->nodeName ());
+}
+
+//-----------------------------------------------------------------------------
+
+namespace KMPlayer {
+ struct KMPLAYER_NO_EXPORT ParamValue {
+ QString val;
+ QStringList * modifications;
+ ParamValue (const QString & v) : val (v), modifications (0L) {}
+ ~ParamValue () { delete modifications; }
+ QString value ();
+ void setValue (const QString & v) { val = v; }
+ };
+ typedef QMap <TrieString, ParamValue *> ParamMap;
+ class KMPLAYER_NO_EXPORT ElementPrivate {
+ public:
+ ~ElementPrivate ();
+ ParamMap params;
+ void clear ();
+ };
+}
+
+KDE_NO_EXPORT QString ParamValue::value () {
+ return modifications && modifications->size ()
+ ? modifications->back () : val;
+}
+
+KDE_NO_CDTOR_EXPORT ElementPrivate::~ElementPrivate () {
+ clear ();
+}
+
+KDE_NO_EXPORT void ElementPrivate::clear () {
+ const ParamMap::iterator e = params.end ();
+ for (ParamMap::iterator i = params.begin (); i != e; ++i)
+ delete i.data ();
+ params.clear ();
+}
+
+Element::Element (NodePtr & d, short id)
+ : Node (d, id), m_attributes (new AttributeList), d (new ElementPrivate) {}
+
+Element::~Element () {
+ delete d;
+}
+
+void Element::setParam (const TrieString &param, const QString &val, int *mid) {
+ ParamValue * pv = d->params [param];
+ if (!pv) {
+ pv = new ParamValue (mid ? QString() : val);
+ d->params.insert (param, pv);
+ }
+ if (mid) {
+ if (!pv->modifications)
+ pv->modifications = new QStringList;
+ if (*mid >= 0 && *mid < int (pv->modifications->size ())) {
+ (*pv->modifications) [*mid] = val;
+ } else {
+ *mid = pv->modifications->size ();
+ pv->modifications->push_back (val);
+ }
+ } else
+ pv->setValue (val);
+ parseParam (param, val);
+}
+
+QString Element::param (const TrieString & name) {
+ ParamValue * pv = d->params [name];
+ if (pv)
+ return pv->value ();
+ return QString ();
+}
+
+void Element::resetParam (const TrieString & param, int mid) {
+ ParamValue * pv = d->params [param];
+ if (pv && pv->modifications) {
+ if (int (pv->modifications->size ()) > mid && mid > -1) {
+ (*pv->modifications) [mid] = QString ();
+ while (pv->modifications->size () > 0 &&
+ pv->modifications->back ().isNull ())
+ pv->modifications->pop_back ();
+ }
+ QString val = pv->value ();
+ if (pv->modifications->size () == 0) {
+ delete pv->modifications;
+ pv->modifications = 0L;
+ val = pv->value ();
+ if (val.isNull ()) {
+ delete pv;
+ d->params.remove (param);
+ }
+ }
+ parseParam (param, val);
+ } else
+ kdError () << "resetting " << param.toString() << " that doesn't exists" << endl;
+}
+
+void Element::setAttribute (const TrieString & name, const QString & value) {
+ for (AttributePtr a = m_attributes->first (); a; a = a->nextSibling ())
+ if (name == a->name ()) {
+ a->setValue (value);
+ return;
+ }
+ m_attributes->append (new Attribute (name, value));
+}
+
+QString Element::getAttribute (const TrieString & name) {
+ for (AttributePtr a = m_attributes->first (); a; a = a->nextSibling ())
+ if (name == a->name ())
+ return a->value ();
+ return QString ();
+}
+
+void Element::init () {
+ d->clear();
+ for (AttributePtr a = attributes ()->first (); a; a = a->nextSibling ())
+ setParam (a->name (), a->value ());
+}
+
+void Element::reset () {
+ d->clear();
+ Node::reset ();
+}
+
+void Element::clear () {
+ m_attributes = new AttributeList; // remove attributes
+ d->clear();
+ Node::clear ();
+}
+
+void Element::setAttributes (AttributeListPtr attrs) {
+ m_attributes = attrs;
+}
+
+//-----------------------------------------------------------------------------
+
+Attribute::Attribute (const TrieString & n, const QString & v)
+ : m_name (n), m_value (v) {}
+
+void Attribute::setName (const TrieString & n) {
+ m_name = n;
+}
+
+void Attribute::setValue (const QString & v) {
+ m_value = v;
+}
+
+//-----------------------------------------------------------------------------
+
+static bool hasMrlChildren (const NodePtr & e) {
+ for (NodePtr c = e->firstChild (); c; c = c->nextSibling ())
+ if (c->isPlayable () || hasMrlChildren (c))
+ return true;
+ return false;
+}
+
+Mrl::Mrl (NodePtr & d, short id)
+ : Element (d, id), cached_ismrl_version (~0),
+ aspect (0), repeat (0),
+ view_mode (SingleMode),
+ resolved (false), bookmarkable (true) {}
+
+Mrl::~Mrl () {}
+
+Node::PlayType Mrl::playType () {
+ if (cached_ismrl_version != document()->m_tree_version) {
+ bool ismrl = !hasMrlChildren (this);
+ cached_play_type = ismrl ? play_type_unknown : play_type_none;
+ cached_ismrl_version = document()->m_tree_version;
+ }
+ return cached_play_type;
+}
+
+QString Mrl::absolutePath () {
+ QString path = src;
+ if (!path.isEmpty()) {
+ for (NodePtr e = parentNode (); e; e = e->parentNode ()) {
+ Mrl * mrl = e->mrl ();
+ if (mrl && !mrl->src.isEmpty () && mrl->src != src) {
+ path = KURL (mrl->absolutePath (), src).url ();
+ break;
+ }
+ }
+ }
+ return path;
+}
+
+NodePtr Mrl::childFromTag (const QString & tag) {
+ Node * elm = fromXMLDocumentTag (m_doc, tag);
+ if (elm)
+ return elm;
+ return NodePtr ();
+}
+
+Mrl * Mrl::linkNode () {
+ return this;
+}
+
+Mrl * Mrl::mrl () {
+ return this;
+}
+
+void Mrl::endOfFile () {
+ if (state == state_deferred &&
+ !isPlayable () && firstChild ()) { // if backend added child links
+ state = state_activated;
+ firstChild ()->activate ();
+ } else
+ finish ();
+}
+
+void Mrl::activate () {
+ resolved |= linkNode ()->resolved;
+ if (!resolved && document ()->notify_listener)
+ resolved = document ()->notify_listener->resolveURL (this);
+ if (!resolved) {
+ setState (state_deferred);
+ return;
+ } else
+ linkNode ()->resolved = true;
+ if (!isPlayable ()) {
+ Element::activate ();
+ return;
+ }
+ setState (state_activated);
+ begin ();
+}
+
+void Mrl::begin () {
+ kdDebug () << nodeName () << " Mrl::activate" << endl;
+ if (document ()->notify_listener) {
+ if (linkNode () != this) {
+ linkNode ()->activate ();
+ if (linkNode ()->unfinished ())
+ setState (state_began);
+ } else if (!src.isEmpty ()) {
+ if (document ()->notify_listener->requestPlayURL (this))
+ setState (state_began);
+ } else
+ deactivate (); // nothing to activate
+ }
+}
+
+SurfacePtr Mrl::getSurface (NodePtr node) {
+ for (NodePtr p = parentNode (); p; p = p->parentNode ())
+ if (p->mrl ())
+ return p->getSurface (node);
+ return 0L;
+}
+
+bool Mrl::handleEvent (EventPtr) {
+ return false;
+}
+
+void Mrl::parseParam (const TrieString & para, const QString & val) {
+ if (para == StringPool::attr_src && !src.startsWith ("#")) {
+ QString abs = absolutePath ();
+ if (abs != src)
+ src = val;
+ else
+ src = KURL (abs, val).url ();
+ for (NodePtr c = firstChild (); c; c = c->nextSibling ())
+ if (c->mrl () && c->mrl ()->opener.ptr () == this) {
+ removeChild (c);
+ c->reset();
+ }
+ resolved = false;
+ }
+}
+
+Surface::Surface (NodePtr n, const SRect & r)
+ : node (n),
+ bounds (r),
+ xscale (1.0), yscale (1.0),
+ background_color (0),
+ dirty (false)
+#ifdef HAVE_CAIRO
+ , surface (0L)
+#endif
+{}
+
+Surface::~Surface() {
+#ifdef HAVE_CAIRO
+ if (surface)
+ cairo_surface_destroy (surface);
+#endif
+}
+
+void Surface::remove () {
+ Surface *sp = parentNode ().ptr ();
+ if (sp) {
+ sp->markDirty ();
+ sp->removeChild (this);
+ }
+}
+
+void Surface::markDirty () {
+ for (Surface *s = this; s; s = s->parentNode ().ptr ())
+ s->dirty = true;
+}
+
+//-----------------------------------------------------------------------------
+
+Postpone::Postpone (NodePtr doc) : m_doc (doc) {
+ if (m_doc)
+ m_doc->document ()->timeOfDay (postponed_time);
+}
+
+Postpone::~Postpone () {
+ if (m_doc)
+ m_doc->document ()->proceed (postponed_time);
+}
+
+//-----------------------------------------------------------------------------
+
+namespace KMPlayer {
+ static NodePtr dummy_element;
+}
+
+Document::Document (const QString & s, PlayListNotify * n)
+ : Mrl (dummy_element, id_node_document),
+ notify_listener (n),
+ m_tree_version (0),
+ m_PostponedListeners (new NodeRefList),
+ cur_timeout (-1), intimer (false) {
+ m_doc = m_self; // just-in-time setting fragile m_self to m_doc
+ src = s;
+ editable = false;
+}
+
+Document::~Document () {
+ kdDebug () << "~Document" << endl;
+}
+
+static NodePtr getElementByIdImpl (NodePtr n, const QString & id, bool inter) {
+ NodePtr elm;
+ if (!n->isElementNode ())
+ return elm;
+ Element * e = convertNode <Element> (n);
+ if (e->getAttribute (StringPool::attr_id) == id)
+ return n;
+ for (NodePtr c = e->firstChild (); c; c = c->nextSibling ()) {
+ if (!inter && c->mrl () && c->mrl ()->opener == n)
+ continue;
+ if ((elm = getElementByIdImpl (c, id, inter)))
+ break;
+ }
+ return elm;
+}
+
+NodePtr Document::getElementById (const QString & id) {
+ return getElementByIdImpl (this, id, true);
+}
+
+NodePtr Document::getElementById (NodePtr n, const QString & id, bool inter) {
+ return getElementByIdImpl (n, id, inter);
+}
+
+NodePtr Document::childFromTag (const QString & tag) {
+ Node * elm = fromXMLDocumentTag (m_doc, tag);
+ if (elm)
+ return elm;
+ return 0L;
+}
+
+void Document::dispose () {
+ clear ();
+ m_doc = 0L;
+}
+
+void Document::activate () {
+ first_event_time.tv_sec = 0;
+ last_event_time = 0;
+ Mrl::activate ();
+}
+
+void Document::defer () {
+ if (resolved)
+ postpone_lock = postpone ();
+ Mrl::defer ();
+}
+
+void Document::undefer () {
+ if (!postpone_lock) {
+ Mrl::undefer ();
+ } else {
+ setState (state_activated);
+ postpone_lock = 0L;
+ }
+}
+
+void Document::reset () {
+ Mrl::reset ();
+ if (timers.first ()) {
+ if (notify_listener)
+ notify_listener->setTimeout (-1);
+ timers.clear ();
+ }
+ postpone_lock = 0L;
+}
+
+static inline
+int diffTime (const struct timeval & tv1, const struct timeval & tv2) {
+ //kdDebug () << "diffTime sec:" << ((tv1.tv_sec - tv2.tv_sec) * 1000) << " usec:" << ((tv1.tv_usec - tv2.tv_usec) /1000) << endl;
+ return (tv1.tv_sec - tv2.tv_sec) * 1000 + (tv1.tv_usec - tv2.tv_usec) /1000;
+}
+
+static inline void addTime (struct timeval & tv, int ms) {
+ tv.tv_sec += (tv.tv_usec + ms*1000) / 1000000;
+ tv.tv_usec = (tv.tv_usec + ms*1000) % 1000000;
+}
+
+void Document::timeOfDay (struct timeval & tv) {
+ gettimeofday (&tv, 0L);
+ if (!first_event_time.tv_sec) {
+ first_event_time = tv;
+ last_event_time = 0;
+ } else
+ last_event_time = diffTime (tv, first_event_time) / 100;
+}
+
+TimerInfoPtrW Document::setTimeout (NodePtr n, int ms, unsigned id) {
+ if (!notify_listener)
+ return 0L;
+ TimerInfoPtr ti = timers.first ();
+ int pos = 0;
+ struct timeval tv;
+ timeOfDay (tv);
+ addTime (tv, ms);
+ for (; ti && diffTime (ti->timeout, tv) <= 0; ti = ti->nextSibling ()) {
+ pos++;
+ //kdDebug () << "setTimeout tv:" << tv.tv_sec << "." << tv.tv_usec << " " << ti->timeout.tv_sec << "." << ti->timeout.tv_usec << endl;
+ }
+ TimerInfo * tinfo = new TimerInfo (n, id, tv, ms);
+ timers.insertBefore (tinfo, ti);
+ //kdDebug () << "setTimeout " << ms << " at:" << pos << " tv:" << tv.tv_sec << "." << tv.tv_usec << endl;
+ if (!postpone_ref && pos == 0 && !intimer) { // timer() does that too
+ cur_timeout = ms;
+ notify_listener->setTimeout (ms);
+ }
+ return tinfo;
+}
+
+void Document::cancelTimer (TimerInfoPtr tinfo) {
+ if (!postpone_ref && !intimer && tinfo == timers.first ()) {
+ //kdDebug () << "cancel first" << endl;
+ TimerInfoPtr second = tinfo->nextSibling ();
+ if (second) {
+ struct timeval now;
+ timeOfDay (now);
+ int diff = diffTime (now, second->timeout);
+ cur_timeout = diff > 0 ? 0 : -diff;
+ } else
+ cur_timeout = -1;
+ notify_listener->setTimeout (cur_timeout);
+ }
+ timers.remove (tinfo);
+}
+
+bool Document::timer () {
+ struct timeval now = { 0, 0 }; // unset
+ int new_timeout = -1;
+ TimerInfoPtrW tinfo = timers.first (); // keep use_count on 1
+
+ intimer = true;
+ // handle max 100 timeouts with timeout set to now
+ for (int i = 0; !!tinfo && !postpone_ref && i < 100; ++i) {
+ if (tinfo && !tinfo->node) {
+ // some part of document has gone and didn't remove timer
+ kdError () << "spurious timer" << endl;
+ for (; tinfo && !tinfo->node; tinfo = timers.first ())
+ timers.remove (tinfo);
+ tinfo = timers.first ();
+ }
+ if (!tinfo)
+ break;
+ TimerEvent * te = new TimerEvent (tinfo);
+ EventPtr e (te);
+ tinfo->node->handleEvent (e);
+ if (tinfo) { // may be removed from timers and become 0
+ if (te->interval) {
+ TimerInfoPtr tinfo2 (tinfo); // prevent destruction
+ timers.remove (tinfo);
+ timeOfDay (now);
+ int drift = diffTime (now, tinfo2->timeout);
+ if (drift > tinfo2->milli_sec) {
+ drift = tinfo2->milli_sec;
+ //kdWarning() << "time drift" << endl;
+ }
+ tinfo2->timeout = now;
+ addTime (tinfo2->timeout, tinfo2->milli_sec - drift);
+ TimerInfoPtr ti = timers.first ();
+ int pos = 0;
+ for (; ti && diffTime (tinfo2->timeout, ti->timeout) >= 0; ti = ti->nextSibling ()) {
+ pos++;
+ }
+ timers.insertBefore (tinfo2, ti);
+ } else
+ timers.remove (tinfo);
+ }
+ tinfo = timers.first ();
+ if (!tinfo)
+ break;
+ if (!now.tv_sec)
+ timeOfDay (now);
+ int diff = diffTime (now, tinfo->timeout);
+ new_timeout = diff > 0 ? 0 : -diff;
+ if (new_timeout > 0)
+ break;
+ }
+ intimer = false;
+
+ // set new timeout to prevent interval timer events
+ if (notify_listener && !postpone_ref && tinfo) {
+ if (new_timeout != cur_timeout) {
+ cur_timeout = new_timeout;
+ notify_listener->setTimeout (cur_timeout);
+ }
+ // else keep the timer, no new setTimeout
+ } else {
+ cur_timeout = -1;
+ notify_listener->setTimeout (-1); // kill timer
+ }
+ return false;
+}
+
+PostponePtr Document::postpone () {
+ if (postpone_ref)
+ return postpone_ref;
+ kdDebug () << "postpone" << endl;
+ if (!intimer && notify_listener) {
+ cur_timeout = -1;
+ notify_listener->setTimeout (-1);
+ }
+ PostponePtr p = new Postpone (this);
+ postpone_ref = p;
+ propagateEvent (new PostponedEvent (true));
+ return p;
+}
+
+void Document::proceed (const struct timeval & postponed_time) {
+ kdDebug () << "proceed" << endl;
+ if (timers.first () && notify_listener) {
+ struct timeval now;
+ timeOfDay (now);
+ int diff = diffTime (now, postponed_time);
+ if (diff > 0) {
+ for (TimerInfoPtr t = timers.first (); t; t = t->nextSibling ())
+ addTime (t->timeout, diff);
+ }
+ if (!intimer) { // eg. postpone() + proceed() in same timer()
+ diff = diffTime (timers.first ()->timeout, now);
+ cur_timeout = diff < 0 ? 0 : diff;
+ notify_listener->setTimeout (cur_timeout);
+ }
+ }
+ propagateEvent (new PostponedEvent (false));
+}
+
+SurfacePtr Document::getSurface (NodePtr node) {
+ if (notify_listener)
+ return notify_listener->getSurface (node);
+ return 0L;
+}
+
+NodeRefListPtr Document::listeners (unsigned int id) {
+ if (id == event_postponed)
+ return m_PostponedListeners;
+ return Mrl::listeners (id);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT TextNode::TextNode (NodePtr & d, const QString & s, short i)
+ : Node (d, i), text (s) {}
+
+void TextNode::appendText (const QString & s) {
+ text += s;
+}
+
+QString TextNode::nodeValue () const {
+ return text;
+}
+
+KDE_NO_EXPORT bool TextNode::expose () const {
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT CData::CData (NodePtr & d, const QString & s)
+ : TextNode (d, s, id_node_cdata) {}
+
+//-----------------------------------------------------------------------------
+
+DarkNode::DarkNode (NodePtr & d, const QString & n, short id)
+ : Element (d, id), name (n) {
+}
+
+NodePtr DarkNode::childFromTag (const QString & tag) {
+ return new DarkNode (m_doc, tag);
+}
+
+KDE_NO_EXPORT bool DarkNode::expose () const {
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+
+GenericURL::GenericURL (NodePtr & d, const QString & s, const QString & name)
+ : Mrl (d, id_node_playlist_item) {
+ src = s;
+ if (!src.isEmpty ())
+ setAttribute (StringPool::attr_src, src);
+ pretty_name = name;
+}
+
+KDE_NO_EXPORT void GenericURL::closed () {
+ if (src.isEmpty ())
+ src = getAttribute (StringPool::attr_src);
+}
+
+//-----------------------------------------------------------------------------
+
+GenericMrl::GenericMrl (NodePtr & d, const QString & s, const QString & name, const QString & tag)
+ : Mrl (d, id_node_playlist_item), node_name (tag) {
+ src = s;
+ if (!src.isEmpty ())
+ setAttribute (StringPool::attr_src, src);
+ pretty_name = name;
+ if (!name.isEmpty ())
+ setAttribute (StringPool::attr_name, name);
+}
+
+void GenericMrl::closed () {
+ if (src.isEmpty ()) {
+ src = getAttribute (StringPool::attr_src);
+ if (src.isEmpty ())
+ src = getAttribute (StringPool::attr_url);
+ }
+ if (pretty_name.isEmpty ())
+ pretty_name = getAttribute (StringPool::attr_name);
+}
+
+bool GenericMrl::expose () const {
+ return !pretty_name.isEmpty () || //return false if no title and only one
+ previousSibling () || nextSibling ();
+}
+
+//-----------------------------------------------------------------------------
+
+namespace KMPlayer {
+
+class KMPLAYER_NO_EXPORT DocumentBuilder {
+ int m_ignore_depth;
+ bool m_set_opener;
+ bool m_root_is_first;
+ NodePtr m_node;
+ NodePtr m_root;
+public:
+ DocumentBuilder (NodePtr d, bool set_opener);
+ ~DocumentBuilder () {}
+ bool startTag (const QString & tag, AttributeListPtr attr);
+ bool endTag (const QString & tag);
+ bool characterData (const QString & data);
+ bool cdataData (const QString & data);
+#ifdef HAVE_EXPAT
+ void cdataStart ();
+ void cdataEnd ();
+private:
+ bool in_cdata;
+ QString cdata;
+#endif
+};
+
+} // namespace KMPlayer
+
+DocumentBuilder::DocumentBuilder (NodePtr d, bool set_opener)
+ : m_ignore_depth (0), m_set_opener (set_opener), m_root_is_first (false)
+ , m_node (d), m_root (d)
+#ifdef HAVE_EXPAT
+ , in_cdata (false)
+#endif
+{}
+
+bool DocumentBuilder::startTag(const QString &tag, AttributeListPtr attr) {
+ if (m_ignore_depth) {
+ m_ignore_depth++;
+ //kdDebug () << "Warning: ignored tag " << tag.latin1 () << " ignore depth = " << m_ignore_depth << endl;
+ } else {
+ NodePtr n = m_node->childFromTag (tag);
+ if (!n) {
+ kdDebug () << "Warning: unknown tag " << tag.latin1 () << endl;
+ NodePtr doc = m_root->document ();
+ n = new DarkNode (doc, tag);
+ }
+ //kdDebug () << "Found tag " << tag << endl;
+ if (n->isElementNode ())
+ convertNode <Element> (n)->setAttributes (attr);
+ if (m_node == n && m_node == m_root)
+ m_root_is_first = true;
+ else
+ m_node->appendChild (n);
+ if (m_set_opener && m_node == m_root) {
+ Mrl * mrl = n->mrl ();
+ if (mrl)
+ mrl->opener = m_root;
+ }
+ n->opened ();
+ m_node = n;
+ }
+ return true;
+}
+
+bool DocumentBuilder::endTag (const QString & tag) {
+ if (m_ignore_depth) { // endtag to ignore
+ m_ignore_depth--;
+ kdDebug () << "Warning: ignored end tag " << " ignore depth = " << m_ignore_depth << endl;
+ } else { // endtag
+ NodePtr n = m_node;
+ while (n) {
+ if (!strcasecmp (n->nodeName (), tag.local8Bit ().data ()) &&
+ (m_root_is_first || n != m_root)) {
+ while (n != m_node) {
+ kdWarning() << m_node->nodeName () << " not closed" << endl;
+ if (m_root == m_node->parentNode ())
+ break;
+ m_node->closed ();
+ m_node = m_node->parentNode ();
+ }
+ break;
+ }
+ if (n == m_root) {
+ if (n == m_node) {
+ kdError () << "m_node == m_doc, stack underflow " << endl;
+ return false;
+ }
+ kdWarning () << "endtag: no match " << tag.local8Bit () << endl;
+ break;
+ } else
+ kdWarning () << "tag " << tag << " not " << n->nodeName () << endl;
+ n = n ->parentNode ();
+ }
+ //kdDebug () << "end tag " << tag << endl;
+ m_node->closed ();
+ m_node = m_node->parentNode ();
+ }
+ return true;
+}
+
+bool DocumentBuilder::characterData (const QString & data) {
+ if (!m_ignore_depth) {
+#ifdef HAVE_EXPAT
+ if (in_cdata)
+ cdata += data;
+ else
+#endif
+ m_node->characterData (data);
+ }
+ //kdDebug () << "characterData " << d.latin1() << endl;
+ return true;
+}
+
+bool DocumentBuilder::cdataData (const QString & data) {
+ if (!m_ignore_depth) {
+ NodePtr d = m_node->document ();
+ m_node->appendChild (new CData (d, data));
+ }
+ //kdDebug () << "cdataData " << d.latin1() << endl;
+ return true;
+}
+
+#ifdef HAVE_EXPAT
+
+void DocumentBuilder::cdataStart () {
+ cdata.truncate (0);
+ in_cdata = true;
+}
+
+void DocumentBuilder::cdataEnd () {
+ cdataData (cdata);
+ cdata.truncate (0);
+ in_cdata = false;
+}
+
+static void startTag (void *data, const char * tag, const char **attr) {
+ DocumentBuilder * builder = static_cast <DocumentBuilder *> (data);
+ AttributeListPtr attributes = new AttributeList;
+ if (attr && attr [0]) {
+ for (int i = 0; attr[i]; i += 2)
+ attributes->append (new Attribute (QString::fromUtf8 (attr [i]), QString::fromUtf8 (attr [i+1])));
+ }
+ builder->startTag (QString::fromUtf8 (tag), attributes);
+}
+
+static void endTag (void *data, const char * tag) {
+ DocumentBuilder * builder = static_cast <DocumentBuilder *> (data);
+ builder->endTag (QString::fromUtf8 (tag));
+}
+
+static void characterData (void *data, const char *s, int len) {
+ DocumentBuilder * builder = static_cast <DocumentBuilder *> (data);
+ char * buf = new char [len + 1];
+ strncpy (buf, s, len);
+ buf[len] = 0;
+ builder->characterData (QString::fromUtf8 (buf));
+ delete [] buf;
+}
+
+static void cdataStart (void *data) {
+ DocumentBuilder * builder = static_cast <DocumentBuilder *> (data);
+ builder->cdataStart ();
+}
+
+static void cdataEnd (void *data) {
+ DocumentBuilder * builder = static_cast <DocumentBuilder *> (data);
+ builder->cdataEnd ();
+}
+
+namespace KMPlayer {
+
+KMPLAYER_EXPORT
+void readXML (NodePtr root, QTextStream & in, const QString & firstline, bool set_opener) {
+ bool ok = true;
+ DocumentBuilder builder (root, set_opener);
+ XML_Parser parser = XML_ParserCreate (0L);
+ XML_SetUserData (parser, &builder);
+ XML_SetElementHandler (parser, startTag, endTag);
+ XML_SetCharacterDataHandler (parser, characterData);
+ XML_SetCdataSectionHandler (parser, cdataStart, cdataEnd);
+ if (!firstline.isEmpty ()) {
+ QString str (firstline + QChar ('\n'));
+ QCString buf = str.utf8 ();
+ ok = XML_Parse(parser, buf, strlen (buf), false) != XML_STATUS_ERROR;
+ if (!ok)
+ kdWarning () << XML_ErrorString(XML_GetErrorCode(parser)) << " at " << XML_GetCurrentLineNumber(parser) << " col " << XML_GetCurrentColumnNumber(parser) << endl;
+ }
+ if (ok && !in.atEnd ()) {
+ QCString buf = in.read ().utf8 ();
+ ok = XML_Parse(parser, buf, strlen (buf), true) != XML_STATUS_ERROR;
+ if (!ok)
+ kdWarning () << XML_ErrorString(XML_GetErrorCode(parser)) << " at " << XML_GetCurrentLineNumber(parser) << " col " << XML_GetCurrentColumnNumber(parser) << endl;
+ }
+ XML_ParserFree(parser);
+ root->normalize ();
+ //return ok;
+}
+
+} // namespace KMPlayer
+
+//-----------------------------------------------------------------------------
+#else // HAVE_EXPAT
+
+namespace {
+
+class KMPLAYER_NO_EXPORT SimpleSAXParser {
+public:
+ SimpleSAXParser (DocumentBuilder & b) : builder (b), position (0), m_attributes (new AttributeList), equal_seen (false), in_dbl_quote (false), in_sngl_quote (false), have_error (false), no_entitity_look_ahead (false), have_next_char (false) {}
+ virtual ~SimpleSAXParser () {};
+ bool parse (QTextStream & d);
+private:
+ QTextStream * data;
+ DocumentBuilder & builder;
+ int position;
+ QChar next_char;
+ enum Token { tok_empty, tok_text, tok_white_space, tok_angle_open,
+ tok_equal, tok_double_quote, tok_single_quote, tok_angle_close,
+ tok_slash, tok_exclamation, tok_amp, tok_hash, tok_semi_colon,
+ tok_question_mark, tok_cdata_start };
+ enum State {
+ InTag, InStartTag, InPITag, InDTDTag, InEndTag, InAttributes, InContent, InCDATA, InComment
+ };
+ struct TokenInfo {
+ TokenInfo () : token (tok_empty) {}
+ Token token;
+ QString string;
+ SharedPtr <TokenInfo> next;
+ };
+ typedef SharedPtr <TokenInfo> TokenInfoPtr;
+ struct StateInfo {
+ StateInfo (State s, SharedPtr <StateInfo> n) : state (s), next (n) {}
+ State state;
+ QString data;
+ SharedPtr <StateInfo> next;
+ };
+ SharedPtr <StateInfo> m_state;
+ TokenInfoPtr next_token, token, prev_token;
+ // for element reading
+ QString tagname;
+ AttributeListPtr m_attributes;
+ QString attr_name, attr_value;
+ QString cdata;
+ bool equal_seen;
+ bool in_dbl_quote;
+ bool in_sngl_quote;
+ bool have_error;
+ bool no_entitity_look_ahead;
+ bool have_next_char;
+
+ bool readTag ();
+ bool readEndTag ();
+ bool readAttributes ();
+ bool readPI ();
+ bool readDTD ();
+ bool readCDATA ();
+ bool readComment ();
+ bool nextToken ();
+ void push ();
+ void push_attribute ();
+};
+
+} // namespace
+
+KMPLAYER_EXPORT
+void KMPlayer::readXML (NodePtr root, QTextStream & in, const QString & firstline, bool set_opener) {
+ DocumentBuilder builder (root, set_opener);
+ SimpleSAXParser parser (builder);
+ if (!firstline.isEmpty ()) {
+ QString str (firstline + QChar ('\n'));
+ QTextStream fl_in (&str, IO_ReadOnly);
+ parser.parse (fl_in);
+ }
+ if (!in.atEnd ())
+ parser.parse (in);
+ for (NodePtr e = root; e; e = e->parentNode ())
+ e->closed ();
+ //doc->normalize ();
+ //kdDebug () << root->outerXML ();
+}
+
+void SimpleSAXParser::push () {
+ if (next_token->string.length ()) {
+ prev_token = token;
+ token = next_token;
+ if (prev_token)
+ prev_token->next = token;
+ next_token = TokenInfoPtr (new TokenInfo);
+ //kdDebug () << "push " << token->string << endl;
+ }
+}
+
+void SimpleSAXParser::push_attribute () {
+ //kdDebug () << "attribute " << attr_name.latin1 () << "=" << attr_value.latin1 () << endl;
+ m_attributes->append (new Attribute (attr_name, attr_value));
+ attr_name.truncate (0);
+ attr_value.truncate (0);
+ equal_seen = in_sngl_quote = in_dbl_quote = false;
+}
+
+bool SimpleSAXParser::nextToken () {
+ TokenInfoPtr cur_token = token;
+ while (!data->atEnd () && cur_token == token && !(token && token->next)) {
+ if (have_next_char)
+ have_next_char = false;
+ else
+ *data >> next_char;
+ bool append_char = true;
+ if (next_char.isSpace ()) {
+ if (next_token->token != tok_white_space)
+ push ();
+ next_token->token = tok_white_space;
+ } else if (!next_char.isLetterOrNumber ()) {
+ if (next_char == QChar ('#')) {
+ //if (next_token->token == tok_empty) { // check last item on stack &
+ push ();
+ next_token->token = tok_hash;
+ //}
+ } else if (next_char == QChar ('/')) {
+ push ();
+ next_token->token = tok_slash;
+ } else if (next_char == QChar ('!')) {
+ push ();
+ next_token->token = tok_exclamation;
+ } else if (next_char == QChar ('?')) {
+ push ();
+ next_token->token = tok_question_mark;
+ } else if (next_char == QChar ('<')) {
+ push ();
+ next_token->token = tok_angle_open;
+ } else if (next_char == QChar ('>')) {
+ push ();
+ next_token->token = tok_angle_close;
+ } else if (next_char == QChar (';')) {
+ push ();
+ next_token->token = tok_semi_colon;
+ } else if (next_char == QChar ('=')) {
+ push ();
+ next_token->token = tok_equal;
+ } else if (next_char == QChar ('"')) {
+ push ();
+ next_token->token = tok_double_quote;
+ } else if (next_char == QChar ('\'')) {
+ push ();
+ next_token->token = tok_single_quote;
+ } else if (next_char == QChar ('&')) {
+ push ();
+ if (no_entitity_look_ahead) {
+ have_next_char = true;
+ break;
+ }
+ append_char = false;
+ no_entitity_look_ahead = true;
+ TokenInfoPtr tmp = token;
+ TokenInfoPtr prev_tmp = prev_token;
+ if (nextToken () && token->token == tok_text &&
+ nextToken () && token->token == tok_semi_colon) {
+ if (prev_token->string == QString ("amp"))
+ token->string = QChar ('&');
+ else if (prev_token->string == QString ("lt"))
+ token->string = QChar ('<');
+ else if (prev_token->string == QString ("gt"))
+ token->string = QChar ('>');
+ else if (prev_token->string == QString ("quot"))
+ token->string = QChar ('"');
+ else if (prev_token->string == QString ("apos"))
+ token->string = QChar ('\'');
+ else if (prev_token->string == QString ("copy"))
+ token->string = QChar (169);
+ else
+ token->string = QChar ('?');// TODO lookup more ..
+ token->token = tok_text;
+ if (tmp) { // cut out the & xxx ; tokens
+ tmp->next = token;
+ token = tmp;
+ }
+ //kdDebug () << "entity found "<<prev_token->string << endl;
+ } else if (token->token == tok_hash &&
+ nextToken () && token->token == tok_text &&
+ nextToken () && token->token == tok_semi_colon) {
+ //kdDebug () << "char entity found " << prev_token->string << prev_token->string.toInt (0L, 16) << endl;
+ token->token = tok_text;
+ if (!prev_token->string.startsWith (QChar ('x')))
+ token->string = QChar (prev_token->string.toInt ());
+ else
+ token->string = QChar (prev_token->string.mid (1).toInt (0L, 16));
+ if (tmp) { // cut out the '& # xxx ;' tokens
+ tmp->next = token;
+ token = tmp;
+ }
+ } else {
+ token = tmp; // restore and insert the lost & token
+ tmp = TokenInfoPtr (new TokenInfo);
+ tmp->token = tok_amp;
+ tmp->string += QChar ('&');
+ tmp->next = token->next;
+ if (token)
+ token->next = tmp;
+ else
+ token = tmp; // hmm
+ }
+ no_entitity_look_ahead = false;
+ prev_token = prev_tmp;
+ } else if (next_token->token != tok_text) {
+ push ();
+ next_token->token = tok_text;
+ }
+ } else if (next_token->token != tok_text) {
+ push ();
+ next_token->token = tok_text;
+ }
+ if (append_char)
+ next_token->string += next_char;
+ if (next_token->token == tok_text &&
+ next_char == QChar ('[' ) && next_token->string == "[CDATA[") {
+ next_token->token = tok_cdata_start;
+ break;
+ }
+ }
+ if (token == cur_token) {
+ if (token && token->next) {
+ prev_token = token;
+ token = token->next;
+ } else if (next_token->string.length ()) {
+ push (); // last token
+ } else
+ return false;
+ return true;
+ }
+ return true;
+}
+
+bool SimpleSAXParser::readAttributes () {
+ bool closed = false;
+ while (true) {
+ if (!nextToken ()) return false;
+ //kdDebug () << "readAttributes " << token->string.latin1() << endl;
+ if ((in_dbl_quote && token->token != tok_double_quote) ||
+ (in_sngl_quote && token->token != tok_single_quote)) {
+ attr_value += token->string;
+ } else if (token->token == tok_equal) {
+ if (attr_name.isEmpty ())
+ return false;
+ if (equal_seen)
+ attr_value += token->string; // EQ=a=2c ???
+ //kdDebug () << "equal_seen"<< endl;
+ equal_seen = true;
+ } else if (token->token == tok_white_space) {
+ if (!attr_value.isEmpty ())
+ push_attribute ();
+ } else if (token->token == tok_single_quote) {
+ if (!equal_seen)
+ attr_name += token->string; // D'OH=xxx ???
+ else if (in_sngl_quote) { // found one
+ push_attribute ();
+ } else if (attr_value.isEmpty ())
+ in_sngl_quote = true;
+ else
+ attr_value += token->string;
+ } else if (token->token == tok_double_quote) {
+ if (!equal_seen)
+ attr_name += token->string; // hmm
+ else if (in_dbl_quote) { // found one
+ push_attribute ();
+ } else if (attr_value.isEmpty ())
+ in_dbl_quote = true;
+ else
+ attr_value += token->string;
+ //kdDebug () << "in_dbl_quote:"<< in_dbl_quote << endl;
+ } else if (token->token == tok_slash) {
+ TokenInfoPtr mark_token = token;
+ if (nextToken () &&
+ (token->token != tok_white_space || nextToken()) &&//<e / >
+ token->token == tok_angle_close) {
+ //kdDebug () << "close mark:"<< endl;
+ closed = true;
+ break;
+ } else {
+ token = mark_token;
+ //kdDebug () << "not end mark:"<< equal_seen << endl;
+ if (equal_seen)
+ attr_value += token->string; // ABBR=w/o ???
+ else
+ attr_name += token->string;
+ }
+ } else if (token->token == tok_angle_close) {
+ if (!attr_name.isEmpty ())
+ push_attribute ();
+ break;
+ } else if (equal_seen) {
+ attr_value += token->string;
+ } else {
+ attr_name += token->string;
+ }
+ }
+ m_state = m_state->next;
+ if (m_state->state == InPITag) {
+ if (tagname == QString ("xml")) {
+ /*const AttributeMap::const_iterator e = attr.end ();
+ for (AttributeMap::const_iterator i = attr.begin (); i != e; ++i)
+ if (!strcasecmp (i.key ().latin1 (), "encoding"))
+ kdDebug () << "encodeing " << i.data().latin1() << endl;*/
+ }
+ } else {
+ have_error = builder.startTag (tagname, m_attributes);
+ if (closed)
+ have_error &= builder.endTag (tagname);
+ //kdDebug () << "readTag " << tagname << " closed:" << closed << " ok:" << have_error << endl;
+ }
+ m_state = m_state->next; // pop Node or PI
+ return true;
+}
+
+bool SimpleSAXParser::readPI () {
+ // TODO: <?xml .. encoding="ENC" .. ?>
+ if (!nextToken ()) return false;
+ if (token->token == tok_text && !token->string.compare ("xml")) {
+ m_state = new StateInfo (InAttributes, m_state);
+ return readAttributes ();
+ } else {
+ while (nextToken ())
+ if (token->token == tok_angle_close) {
+ m_state = m_state->next;
+ return true;
+ }
+ }
+ return false;
+}
+
+bool SimpleSAXParser::readDTD () {
+ //TODO: <!ENTITY ..>
+ if (!nextToken ()) return false;
+ if (token->token == tok_text && token->string.startsWith (QString ("--"))) {
+ m_state = new StateInfo (InComment, m_state->next); // note: pop DTD
+ return readComment ();
+ }
+ //kdDebug () << "readDTD: " << token->string.latin1 () << endl;
+ if (token->token == tok_cdata_start) {
+ m_state = new StateInfo (InCDATA, m_state->next); // note: pop DTD
+ if (token->next) {
+ cdata = token->next->string;
+ token->next = 0;
+ } else {
+ cdata = next_token->string;
+ next_token->string.truncate (0);
+ next_token->token = tok_empty;
+ }
+ return readCDATA ();
+ }
+ while (nextToken ())
+ if (token->token == tok_angle_close) {
+ m_state = m_state->next;
+ return true;
+ }
+ return false;
+}
+
+bool SimpleSAXParser::readCDATA () {
+ while (!data->atEnd ()) {
+ *data >> next_char;
+ if (next_char == QChar ('>') && cdata.endsWith (QString ("]]"))) {
+ cdata.truncate (cdata.length () - 2);
+ m_state = m_state->next;
+ if (m_state->state == InContent)
+ have_error = builder.cdataData (cdata);
+ else if (m_state->state == InAttributes) {
+ if (equal_seen)
+ attr_value += cdata;
+ else
+ attr_name += cdata;
+ }
+ cdata.truncate (0);
+ return true;
+ }
+ cdata += next_char;
+ }
+ return false;
+}
+
+bool SimpleSAXParser::readComment () {
+ while (nextToken ()) {
+ if (token->token == tok_angle_close && prev_token)
+ if (prev_token->string.endsWith (QString ("--"))) {
+ m_state = m_state->next;
+ return true;
+ }
+ }
+ return false;
+}
+
+bool SimpleSAXParser::readEndTag () {
+ if (!nextToken ()) return false;
+ if (token->token == tok_white_space)
+ if (!nextToken ()) return false;
+ tagname = token->string;
+ if (!nextToken ()) return false;
+ if (token->token == tok_white_space)
+ if (!nextToken ()) return false;
+ if (token->token != tok_angle_close)
+ return false;
+ have_error = builder.endTag (tagname);
+ m_state = m_state->next;
+ return true;
+}
+
+// TODO: <!ENTITY ..> &#1234;
+bool SimpleSAXParser::readTag () {
+ if (!nextToken ()) return false;
+ if (token->token == tok_exclamation) {
+ m_state = new StateInfo (InDTDTag, m_state->next);
+ //kdDebug () << "readTag: " << token->string.latin1 () << endl;
+ return readDTD ();
+ }
+ if (token->token == tok_white_space)
+ if (!nextToken ()) return false; // allow '< / foo', '< foo', '< ? foo'
+ if (token->token == tok_question_mark) {
+ m_state = new StateInfo (InPITag, m_state->next);
+ return readPI ();
+ }
+ if (token->token == tok_slash) {
+ m_state = new StateInfo (InEndTag, m_state->next);
+ return readEndTag ();
+ }
+ if (token->token != tok_text)
+ return false; // FIXME entities
+ tagname = token->string;
+ //kdDebug () << "readTag " << tagname.latin1() << endl;
+ m_state = new StateInfo (InAttributes, m_state);
+ return readAttributes ();
+}
+
+bool SimpleSAXParser::parse (QTextStream & d) {
+ data = &d;
+ if (!next_token) {
+ next_token = TokenInfoPtr (new TokenInfo);
+ m_state = new StateInfo (InContent, m_state);
+ }
+ bool ok = true;
+ bool in_character_data = false;
+ QString white_space;
+ while (ok) {
+ switch (m_state->state) {
+ case InTag:
+ ok = readTag ();
+ break;
+ case InPITag:
+ ok = readPI ();
+ break;
+ case InDTDTag:
+ ok = readDTD ();
+ break;
+ case InEndTag:
+ ok = readEndTag ();
+ break;
+ case InAttributes:
+ ok = readAttributes ();
+ break;
+ case InCDATA:
+ ok = readCDATA ();
+ break;
+ case InComment:
+ ok = readComment ();
+ break;
+ default:
+ if ((ok = nextToken ())) {
+ if (token->token == tok_angle_open) {
+ attr_name.truncate (0);
+ attr_value.truncate (0);
+ m_attributes = new AttributeList;
+ equal_seen = in_sngl_quote = in_dbl_quote = false;
+ m_state = new StateInfo (InTag, m_state);
+ ok = readTag ();
+ in_character_data = false;
+ white_space.truncate (0);
+ } else if (token->token == tok_white_space) {
+ white_space += token->string;
+ } else {
+ if (!white_space.isEmpty ()) {
+ if (!in_character_data) {
+ int pos = white_space.findRev (QChar ('\n'));
+ if (pos > -1)
+ white_space = white_space.mid (pos + 1);
+ }
+ have_error = builder.characterData (white_space);
+ white_space.truncate (0);
+ }
+ have_error = builder.characterData (token->string);
+ in_character_data = true;
+ }
+ }
+ }
+ if (!m_state)
+ return true; // end document
+ }
+ return false; // need more data
+}
+
+#endif // HAVE_EXPAT
diff --git a/src/kmplayerplaylist.h b/src/kmplayerplaylist.h
new file mode 100644
index 0000000..c9c0b6b
--- /dev/null
+++ b/src/kmplayerplaylist.h
@@ -0,0 +1,979 @@
+/* This file is part of the KDE project
+ *
+ * Copyright (C) 2004 Koos Vriezen <koos.vriezen@xs4all.nl>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * until boost gets common, a more or less compatable one ..
+ */
+
+#ifndef _KMPLAYER_PLAYLIST_H_
+#define _KMPLAYER_PLAYLIST_H_
+
+#include <config.h>
+#include <sys/time.h>
+
+#include <qstring.h>
+
+#include "kmplayer_def.h"
+#include "kmplayertypes.h"
+#include "kmplayershared.h"
+
+typedef struct _cairo_surface cairo_surface_t;
+
+class QTextStream;
+
+namespace KMPlayer {
+
+class Document;
+class Node;
+class Mrl;
+class Surface;
+class ElementPrivate;
+class RemoteObjectPrivate;
+class Visitor;
+
+/*
+ * Base class for objects that will be used as SharedPtr/WeakPtr pointers.
+ * Item<T> keeps its own copy of the shared SharedData<T> as a weak refence.
+ * \sa: self()
+ */
+template <class T>
+class KMPLAYER_EXPORT Item {
+ friend class SharedPtr<T>;
+ friend class WeakPtr<T>;
+public:
+ typedef SharedPtr <T> SharedType;
+ typedef WeakPtr <T> WeakType;
+
+ virtual ~Item () {}
+
+ SharedType self () const { return m_self; }
+protected:
+ Item ();
+ WeakType m_self;
+private:
+ Item (const Item <T> &); // forbidden copy constructor
+};
+
+/**
+ * Because of the m_self member of Item<T>, it's not allowed to assign a
+ * Item<T>* directly to SharedPtr<Item<T>>. Item<T>* will then reside in
+ * two independent SharedData<Item<T>> objects.
+ * So specialize constructor and assignment operators to fetch the
+ * SharedData<Item<T>> from the Item<T>* instead of creating a new one
+ */
+#define ITEM_AS_POINTER(CLASS) \
+ template <> inline SharedPtr<CLASS>::SharedPtr (CLASS * t) \
+ : data (t ? t->m_self.data : 0L) { \
+ if (data) \
+ data->addRef (); \
+ } \
+ \
+ template <> \
+ inline SharedPtr<CLASS> & SharedPtr<CLASS>::operator = (CLASS * t) { \
+ if (t) { \
+ operator = (t->m_self); \
+ } else if (data) { \
+ data->release (); \
+ data = 0L; \
+ } \
+ return *this; \
+ } \
+ \
+ template <> inline WeakPtr<CLASS>::WeakPtr (CLASS * t) \
+ : data (t ? t->m_self.data : 0L) { \
+ if (data) \
+ data->addWeakRef (); \
+ } \
+ \
+ template <> \
+ inline WeakPtr<CLASS> & WeakPtr<CLASS>::operator = (CLASS * t) { \
+ if (t) { \
+ operator = (t->m_self); \
+ } else if (data) { \
+ data->releaseWeak (); \
+ data = 0L; \
+ } \
+ return *this; \
+ }
+
+/*
+ * A shareable double linked list of ListNodeBase<T> nodes
+ */
+template <class T>
+class KMPLAYER_EXPORT List : public Item <List <T> > {
+public:
+ List () {}
+ List (typename Item<T>::SharedType f, typename Item<T>::SharedType l)
+ : m_first (f), m_last (l) {}
+ ~List () { clear (); }
+
+ typename Item<T>::SharedType first () const { return m_first; }
+ typename Item<T>::SharedType last () const { return m_last; }
+ void append (typename Item<T>::SharedType c);
+ void insertBefore(typename Item<T>::SharedType c, typename Item<T>::SharedType b);
+ void remove (typename Item<T>::SharedType c);
+ void clear ();
+ unsigned int length () const;
+ typename Item<T>::SharedType item (int i) const;
+protected:
+ typename Item<T>::SharedType m_first;
+ typename Item<T>::WeakType m_last;
+};
+
+/*
+ * Base class for double linked list nodes of SharedPtr/WeakPtr objects.
+ * The linkage is a shared nextSibling and a weak previousSibling.
+ */
+template <class T>
+class KMPLAYER_EXPORT ListNodeBase : public Item <T> {
+ friend class List<T>;
+public:
+ virtual ~ListNodeBase () {}
+
+ typename Item<T>::SharedType nextSibling () const { return m_next; }
+ typename Item<T>::SharedType previousSibling () const { return m_prev; }
+protected:
+ ListNodeBase () {}
+ typename Item<T>::SharedType m_next;
+ typename Item<T>::WeakType m_prev;
+};
+
+/*
+ * ListNode for class T storage
+ */
+template <class T>
+class ListNode : public ListNodeBase <ListNode <T> > {
+public:
+ ListNode (T d) : data (d) {}
+ T data;
+};
+
+/*
+ * Base class for double linked tree nodes having parent/siblings/children.
+ * The linkage is a shared firstChild and weak parentNode.
+ */
+template <class T>
+class KMPLAYER_EXPORT TreeNode : public ListNodeBase <T> {
+public:
+ virtual ~TreeNode () {}
+
+ virtual void appendChild (typename Item<T>::SharedType c);
+ virtual void removeChild (typename Item<T>::SharedType c);
+
+ bool hasChildNodes () const { return m_first_child != 0L; }
+ typename Item<T>::SharedType parentNode () const { return m_parent; }
+ typename Item<T>::SharedType firstChild () const { return m_first_child; }
+ typename Item<T>::SharedType lastChild () const { return m_last_child; }
+
+protected:
+ TreeNode () {}
+ typename Item<T>::WeakType m_parent;
+ typename Item<T>::SharedType m_first_child;
+ typename Item<T>::WeakType m_last_child;
+};
+
+/**
+ * Attribute having a name/value pair for use with Elements
+ */
+class KMPLAYER_EXPORT Attribute : public ListNodeBase <Attribute> {
+public:
+ KDE_NO_CDTOR_EXPORT Attribute () {}
+ Attribute (const TrieString & n, const QString & v);
+ KDE_NO_CDTOR_EXPORT ~Attribute () {}
+ TrieString name () const { return m_name; }
+ QString value () const { return m_value; }
+ void setName (const TrieString &);
+ void setValue (const QString &);
+protected:
+ TrieString m_name;
+ QString m_value;
+};
+
+ITEM_AS_POINTER(KMPlayer::Attribute)
+
+/**
+ * Object should scale according the passed Fit value in SizedEvent
+ */
+enum Fit {
+ fit_fill, // fill complete area, no aspect preservation
+ fit_hidden, // keep aspect and don't scale, cut off what doesn't fit
+ fit_meet, // keep aspect and scale so that the smallest size just fits
+ fit_slice, // keep aspect and scale so that the largest size just fits
+ fit_scroll // keep aspect and don't scale, add scollbars if needed
+};
+
+/*
+ * A generic event type
+ */
+class KMPLAYER_EXPORT Event : public Item <Event> {
+public:
+ KDE_NO_CDTOR_EXPORT Event (unsigned int event_id) : m_event_id (event_id) {}
+ KDE_NO_CDTOR_EXPORT virtual ~Event () {}
+ KDE_NO_EXPORT unsigned int id () const { return m_event_id; }
+protected:
+ unsigned int m_event_id;
+};
+
+ITEM_AS_POINTER(KMPlayer::Event)
+
+extern const unsigned int event_pointer_clicked;
+extern const unsigned int event_pointer_moved;
+extern const unsigned int event_inbounds;
+extern const unsigned int event_outbounds;
+extern const unsigned int event_sized;
+extern const unsigned int event_postponed;
+extern const unsigned int event_timer;
+extern const unsigned int mediatype_attached;
+
+// convenient types
+typedef Item<Node>::SharedType NodePtr;
+typedef Item<Node>::WeakType NodePtrW;
+typedef Item<Attribute>::SharedType AttributePtr;
+typedef Item<Attribute>::WeakType AttributePtrW;
+typedef Item<Event>::SharedType EventPtr;
+typedef List<Node> NodeList; // eg. for Node's children
+typedef Item<NodeList>::SharedType NodeListPtr;
+typedef Item<NodeList>::WeakType NodeListPtrW;
+ITEM_AS_POINTER(KMPlayer::NodeList)
+typedef List<Attribute> AttributeList; // eg. for Element's attributes
+typedef Item<AttributeList>::SharedType AttributeListPtr;
+ITEM_AS_POINTER(KMPlayer::AttributeList)
+typedef ListNode<NodePtrW> NodeRefItem; // Node for ref Nodes
+ITEM_AS_POINTER(KMPlayer::NodeRefItem)
+//typedef ListNode<NodePtr> NodeStoreItem; // list stores Nodes
+typedef NodeRefItem::SharedType NodeRefItemPtr;
+typedef NodeRefItem::WeakType NodeRefItemPtrW;
+typedef List<NodeRefItem> NodeRefList; // ref nodes, eg. event listeners
+typedef Item<NodeRefList>::SharedType NodeRefListPtr;
+typedef Item<NodeRefList>::WeakType NodeRefListPtrW;
+ITEM_AS_POINTER(KMPlayer::NodeRefList)
+typedef Item<Surface>::SharedType SurfacePtr;
+typedef Item<Surface>::WeakType SurfacePtrW;
+
+/*
+ * Weak ref of the listeners list from signaler and the listener node
+ */
+class KMPLAYER_EXPORT Connection {
+ friend class Node;
+public:
+ KDE_NO_CDTOR_EXPORT ~Connection () { disconnect (); }
+ void disconnect ();
+ NodePtrW connectee; // the one that will, when ever, trigger the event
+private:
+ Connection (NodeRefListPtr ls, NodePtr node, NodePtr invoker);
+ NodeRefListPtrW listeners;
+ NodeRefItemPtrW listen_item;
+};
+
+typedef SharedPtr <Connection> ConnectionPtr;
+
+/*
+ * Base class for XML nodes. Provides a w3c's DOM like API
+ *
+ * Most severe traps with using SharedPtr/WeakPtr for tree nodes:
+ * - pointer ends up in two independent shared objects (hopefully with
+ * template specialization for constructor for T* and assignment of T* should
+ * be enough of defences ..)
+ * - Node added two times (added ASSERT in appendChild/insertBefore)
+ * - Node is destroyed before being stored in a SharedPtr with kmplayer usage
+ * of each object having a WeakPtr to itself (eg. be extremely careful with
+ * using m_self in the constructor, no SharedPtr storage yet)
+ *
+ * Livetime of an element is
+ |-->state_activated<-->state_began<-->state_finished-->state_deactivated-->|
+ In scope begin event end event Out scope
+ */
+class KMPLAYER_EXPORT Node : public TreeNode <Node> {
+ friend class DocumentBuilder;
+public:
+ enum State {
+ state_init, state_deferred,
+ state_activated, state_began, state_finished, state_deactivated
+ };
+ enum PlayType {
+ play_type_none, play_type_unknown, play_type_info,
+ play_type_image, play_type_audio, play_type_video
+ };
+ virtual ~Node ();
+ Document * document ();
+ virtual Mrl * mrl ();
+ virtual NodePtr childFromTag (const QString & tag);
+ void characterData (const QString & s);
+ QString innerText () const;
+ QString innerXML () const;
+ QString outerXML () const;
+ virtual const char * nodeName () const;
+ virtual QString nodeValue () const;
+ virtual void setNodeName (const QString &) {}
+
+ /**
+ * If this is a derived Mrl object and has a SRC attribute
+ */
+ virtual PlayType playType ();
+ bool isPlayable () { return playType () > play_type_none; }
+ virtual bool isElementNode () { return false; }
+ /**
+ * If this node should be visible to the user
+ */
+ virtual bool expose () const;
+ /**
+ * If this node should be visible to the user
+ */
+ bool isEditable () const { return editable; }
+ /**
+ * If this node purpose is for storing runtime data only,
+ * ie. node doesn't exist in the original document
+ */
+ bool auxiliaryNode () const { return auxiliary_node; }
+ void setAuxiliaryNode (bool b) { auxiliary_node = b; }
+ /**
+ * Add node as listener for a certain event_id.
+ * Return a NULL ptr if event_id is not supported.
+ * \sa: Connection::disconnect()
+ */
+ ConnectionPtr connectTo (NodePtr node, unsigned int event_id);
+ /*
+ * Event send to this node, return true if handled
+ */
+ virtual bool handleEvent (EventPtr event);
+ /*
+ * Dispatch Event to all listeners of event->id()
+ */
+ void propagateEvent (EventPtr event);
+ /**
+ * Alternative to event handling is the Visitor pattern
+ */
+ virtual void accept (Visitor *);
+ /*
+ * Returns a listener list for event_id, or a null ptr if not supported.
+ */
+ virtual NodeRefListPtr listeners (unsigned int event_id);
+ /**
+ * Adds node to call 'handleEvent()' for all events that gets
+ * delivered to this node, ignored by default
+ */
+ virtual SurfacePtr getSurface (NodePtr node);
+ /**
+ * Activates element, sets state to state_activated. Will call activate() on
+ * firstChild or call deactivate().
+ */
+ virtual void activate ();
+ /**
+ * if state is between state_activated and state_deactivated
+ */
+ bool active () const
+ { return state >= state_deferred && state < state_deactivated; }
+ /**
+ * if state is between state_activated and state_finished
+ */
+ bool unfinished () const
+ { return state > state_deferred && state < state_finished; }
+ /**
+ * Defers an activated, so possible playlists items can be added.
+ */
+ virtual void defer ();
+ /**
+ * Puts a deferred element in activated again, calls activate() again
+ */
+ virtual void undefer ();
+ /**
+ * Sets state to state_begin when active
+ */
+ virtual void begin ();
+ /**
+ * Sets state to state_finish when >= state_activated.
+ * Notifies parent with a childDone call.
+ */
+ virtual void finish ();
+ /**
+ * Stops element, sets state to state_deactivated. Calls deactivate() on
+ * activated/deferred children. May call childDone() when active() and not
+ * finished yet.
+ */
+ virtual void deactivate ();
+ /**
+ * Resets element, calls deactivate() if state is state_activated and sets
+ * state to state_init.
+ */
+ virtual void reset ();
+ /**
+ * Notification from child that it has began.
+ */
+ virtual void childBegan (NodePtr child);
+ /**
+ * Notification from child that it's finished. Will call deactivate() on
+ * child if it state is state_finished. Call activate() on nexSibling
+ * or deactivate() if there is none.
+ */
+ virtual void childDone (NodePtr child);
+ virtual void clear ();
+ void clearChildren ();
+ void appendChild (NodePtr c);
+ void insertBefore (NodePtr c, NodePtr b);
+ void removeChild (NodePtr c);
+ void replaceChild (NodePtr _new, NodePtr old);
+ /*
+ * Get rid of whitespace only text nodes
+ */
+ void normalize ();
+ KDE_NO_EXPORT bool isDocument () const { return m_doc == m_self; }
+
+ KDE_NO_EXPORT NodeListPtr childNodes () const;
+ void setState (State nstate);
+ /*
+ * Open tag is found by parser, attributes are set
+ */
+ virtual void opened ();
+ /*
+ * Close tag is found by parser, children are appended
+ */
+ virtual void closed ();
+protected:
+ Node (NodePtr & d, short _id=0);
+ NodePtr m_doc;
+public:
+ State state;
+ short id;
+private:
+ bool auxiliary_node;
+protected:
+ bool editable;
+};
+
+ITEM_AS_POINTER(KMPlayer::Node)
+
+const short id_node_document = 1;
+const short id_node_text = 5;
+const short id_node_cdata = 6;
+
+const short id_node_group_node = 25;
+const short id_node_playlist_document = 26;
+const short id_node_playlist_item = 27;
+const short id_node_param = 28;
+const short id_node_html_object = 29;
+const short id_node_html_embed = 30;
+
+/*
+ * Element node, XML node that can have attributes
+ */
+class KMPLAYER_EXPORT Element : public Node {
+public:
+ ~Element ();
+ void setAttributes (AttributeListPtr attrs);
+ void setAttribute (const TrieString & name, const QString & value);
+ QString getAttribute (const TrieString & name);
+ KDE_NO_EXPORT AttributeListPtr attributes () const { return m_attributes; }
+ virtual void init ();
+ virtual void reset ();
+ virtual void clear ();
+ virtual bool isElementNode () { return true; }
+ /**
+ * Params are like attributes, but meant to be set dynamically. Caller may
+ * pass a modification id, that it can use to restore the old value.
+ * Param will be auto removed on deactivate
+ */
+ void setParam (const TrieString &para, const QString &val, int * mod_id=0L);
+ QString param (const TrieString & para);
+ void resetParam (const TrieString & para, int mod_id);
+ /**
+ * Called from (re)setParam for specialized interpretation of params
+ **/
+ virtual void parseParam (const TrieString &, const QString &) {}
+protected:
+ Element (NodePtr & d, short id=0);
+ AttributeListPtr m_attributes;
+private:
+ ElementPrivate * d;
+};
+
+/**
+ * Node that references another node
+ */
+class RefNode : public Node {
+public:
+ RefNode (NodePtr & d, NodePtr ref);
+ virtual const char * nodeName () const { return tag_name.ascii (); }
+ NodePtr refNode () const { return ref_node; }
+ void setRefNode (const NodePtr ref);
+protected:
+ NodePtrW ref_node;
+ QString tag_name;
+};
+
+template <class T>
+inline KDE_NO_EXPORT T * convertNode (NodePtr e) {
+ return static_cast <T *> (e.ptr ());
+}
+
+/**
+ * Element representing a playable link, like URL to a movie or playlist.
+ */
+class KMPLAYER_EXPORT Mrl : public Element {
+protected:
+ Mrl (NodePtr & d, short id=0);
+ NodePtr childFromTag (const QString & tag);
+ void parseParam (const TrieString &, const QString &);
+ unsigned int cached_ismrl_version;
+ PlayType cached_play_type;
+public:
+ ~Mrl ();
+ PlayType playType ();
+ /*
+ * The original node (or this) having the URL, needed for playlist expansion
+ */
+ virtual Mrl * linkNode ();
+ virtual Mrl * mrl ();
+ virtual void endOfFile ();
+ QString absolutePath ();
+ /*
+ * Reimplement to callback with requestPlayURL if isPlayable()
+ */
+ virtual void activate ();
+ virtual void begin ();
+ /**
+ * By default support one event handler (eg. SMIL or RP child document)
+ */
+ virtual SurfacePtr getSurface (NodePtr node);
+ virtual bool handleEvent (EventPtr event);
+
+ /**
+ * If this Mrl is top node of external document, opener has the
+ * location in SCR. Typically that's the parent of this node.
+ */
+ NodePtrW opener; //if this node is top node of external document,
+ QString src;
+ QString pretty_name;
+ QString mimetype;
+ Single width;
+ Single height;
+ float aspect;
+ int repeat;
+ enum { SingleMode = 0, WindowMode } view_mode;
+ bool resolved;
+ bool bookmarkable;
+};
+
+/**
+ * Document listener interface
+ */
+class KMPLAYER_EXPORT PlayListNotify {
+public:
+ virtual ~PlayListNotify () {}
+ /**
+ * Ask for playing a video/audio mrl by backend players
+ * If returning false, the element will be set to finished
+ */
+ virtual bool requestPlayURL (NodePtr mrl) = 0;
+ /**
+ * Called by an unresolved Mrl, check if this node points to a playlist
+ */
+ virtual bool resolveURL (NodePtr mrl) = 0;
+ /**
+ * Element has activated or deactivated notification
+ */
+ virtual void stateElementChanged (Node * element, Node::State old_state, Node::State new_state) = 0;
+ /**
+ * Set element to which to send GUI events and return a surface for drawing
+ */
+ virtual SurfacePtr getSurface (NodePtr node) = 0;
+ /**
+ * Request to show msg for informing the user
+ */
+ virtual void setInfoMessage (const QString & msg) = 0;
+ /**
+ * Ask for connection bitrates settings
+ */
+ virtual void bitRates (int & preferred, int & maximal) = 0;
+ /**
+ * Sets next call to Document::timer() or -1 to cancel a previous call
+ */
+ virtual void setTimeout (int ms) = 0;
+};
+
+/**
+ * Base class for cached network data
+ */
+class KMPLAYER_NO_EXPORT RemoteObject {
+ friend class RemoteObjectPrivate;
+public:
+ RemoteObject ();
+ virtual ~RemoteObject ();
+ bool wget (const QString & url);
+ void killWGet ();
+ void clear ();
+ QString mimetype ();
+protected:
+ KDE_NO_EXPORT virtual void remoteReady (QByteArray &) {}
+ bool downloading () const;
+private:
+ RemoteObjectPrivate *d;
+};
+
+class KMPLAYER_NO_EXPORT Surface : public TreeNode <Surface> {
+public:
+ Surface (NodePtr node, const SRect & rect);
+ ~Surface();
+
+ virtual SurfacePtr createSurface (NodePtr owner, const SRect & rect) = 0;
+ virtual IRect toScreen (Single x, Single y, Single w, Single h) = 0;
+ virtual void resize (const SRect & rect) = 0;
+ virtual void repaint () = 0;
+ virtual void repaint (const SRect &rect) = 0;
+ virtual void video () = 0;
+ void remove (); // remove from parent, mark ancestors dirty
+ void markDirty (); // mark this and ancestors dirty
+
+ NodePtrW node;
+ SRect bounds; // bounds in in parent coord.
+ float xscale, yscale; // internal scaling
+ unsigned int background_color; // rgba background color
+ bool dirty; // a decendant is removed
+#ifdef HAVE_CAIRO
+ cairo_surface_t *surface;
+#endif
+};
+
+ITEM_AS_POINTER(KMPlayer::Surface)
+
+/**
+ * To have a somewhat synchronized time base, node having timers should use
+ * this. Idea is that if a node still waiting for network data, it can hold
+ * this time line.
+ */
+class KMPLAYER_NO_EXPORT TimerInfo : public ListNodeBase <TimerInfo> {
+public:
+ TimerInfo (NodePtr n, unsigned id, struct timeval & now, int ms);
+ KDE_NO_CDTOR_EXPORT ~TimerInfo () {}
+ NodePtrW node;
+ unsigned event_id;
+ struct timeval timeout;
+ int milli_sec;
+};
+
+ITEM_AS_POINTER(KMPlayer::TimerInfo)
+typedef Item <TimerInfo>::SharedType TimerInfoPtr;
+typedef Item <TimerInfo>::WeakType TimerInfoPtrW;
+
+/**
+ * Event signaling a timer event
+ */
+class KMPLAYER_NO_EXPORT TimerEvent : public Event {
+public:
+ TimerEvent (TimerInfoPtr tinfo);
+ TimerInfoPtrW timer_info;
+ bool interval; // set to 'true' in 'Node::handleEvent()' to make it repeat
+};
+
+/**
+ * Event signaling postponed or proceeded
+ */
+class KMPLAYER_NO_EXPORT PostponedEvent : public Event {
+public:
+ PostponedEvent (bool postponed);
+ bool is_postponed; // postponed or proceeded
+};
+
+/**
+ * Postpone object representing a postponed document
+ * During its livetime, no TimerEvent's happen
+ */
+class KMPLAYER_NO_EXPORT Postpone {
+ friend class Document;
+ struct timeval postponed_time;
+ NodePtrW m_doc;
+ Postpone (NodePtr doc);
+public:
+ ~Postpone ();
+};
+
+typedef SharedPtr <Postpone> PostponePtr;
+typedef WeakPtr <Postpone> PostponePtrW;
+
+/**
+ * The root of the DOM tree
+ */
+class KMPLAYER_EXPORT Document : public Mrl {
+ friend class Postpone;
+public:
+ Document (const QString &, PlayListNotify * notify = 0L);
+ ~Document ();
+ NodePtr getElementById (const QString & id);
+ NodePtr getElementById (NodePtr start, const QString & id, bool inter_doc);
+ /** All nodes have shared pointers to Document,
+ * so explicitly dispose it (calls clear and set m_doc to 0L)
+ * */
+ void dispose ();
+ virtual NodePtr childFromTag (const QString & tag);
+ KDE_NO_EXPORT const char * nodeName () const { return "document"; }
+ virtual void activate ();
+ virtual void defer ();
+ virtual void undefer ();
+ virtual void reset ();
+ /**
+ * Ask for TimerEvent for Node n in ms milli-seconds.
+ * Returns weak ref to TimerInfo ptr, which is an item in the timers list
+ */
+ TimerInfoPtrW setTimeout (NodePtr n, int ms, unsigned id=0);
+ void cancelTimer (TimerInfoPtr ti);
+ void timeOfDay (struct timeval &);
+ PostponePtr postpone ();
+ /**
+ * Called by PlayListNotify, creates TimerEvent on first item in timers.
+ * Returns true if to repeat this same timeout FIXME.
+ */
+ bool timer ();
+ /**
+ * Document has list of postponed listeners, eg. for running (gif)movies
+ */
+ virtual NodeRefListPtr listeners (unsigned int event_id);
+ /**
+ * Reimplement, so it will call PlayListNotify::getSurface()
+ */
+ virtual SurfacePtr getSurface (NodePtr node);
+
+ List <TimerInfo> timers; //FIXME: make as connections
+ PlayListNotify * notify_listener;
+ unsigned int m_tree_version;
+ unsigned int last_event_time;
+private:
+ void proceed (const struct timeval & postponed_time);
+ PostponePtrW postpone_ref;
+ PostponePtr postpone_lock;
+ NodeRefListPtr m_PostponedListeners;
+ int cur_timeout;
+ struct timeval first_event_time;
+ bool intimer;
+};
+
+/**
+ * Represents XML text, like "some text" in '<foo>some text</foo>'
+ */
+class KMPLAYER_EXPORT TextNode : public Node {
+public:
+ TextNode (NodePtr & d, const QString & s, short _id = id_node_text);
+ KDE_NO_CDTOR_EXPORT ~TextNode () {}
+ void appendText (const QString & s);
+ void setText (const QString & txt) { text = txt; }
+ const char * nodeName () const { return "#text"; }
+ QString nodeValue () const;
+ bool expose () const;
+protected:
+ QString text;
+};
+
+/**
+ * Represents cdata sections, like "some text" in '<![CDATA[some text]]>'
+ */
+class KMPLAYER_EXPORT CData : public TextNode {
+public:
+ CData (NodePtr & d, const QString & s);
+ KDE_NO_CDTOR_EXPORT ~CData () {}
+ const char * nodeName () const { return "#cdata"; }
+};
+
+/**
+ * Unrecognized tag by parent element or just some auxiliary node
+ */
+class KMPLAYER_EXPORT DarkNode : public Element {
+public:
+ DarkNode (NodePtr & d, const QString & n, short id=0);
+ KDE_NO_CDTOR_EXPORT ~DarkNode () {}
+ const char * nodeName () const { return name.ascii (); }
+ NodePtr childFromTag (const QString & tag);
+ virtual bool expose () const;
+protected:
+ QString name;
+};
+
+namespace SMIL {
+ class RegionBase;
+ class Region;
+ class Layout;
+ class Transition;
+ class MediaType;
+ class ImageMediaType;
+ class TextMediaType;
+ class RefMediaType;
+ class AVMediaType;
+ class Brush;
+ class TimedMrl;
+ class Anchor;
+ class Area;
+}
+namespace RP {
+ class Imfl;
+ class Crossfade;
+ class Fadein;
+ class Fadeout;
+ class Fill;
+ class Wipe;
+ class ViewChange;
+ class Animate;
+}
+
+class KMPLAYER_NO_EXPORT Visitor {
+public:
+ KDE_NO_CDTOR_EXPORT Visitor () {}
+ KDE_NO_CDTOR_EXPORT virtual ~Visitor () {}
+ virtual void visit (Node *) {}
+ virtual void visit (SMIL::Region *);
+ virtual void visit (SMIL::Layout *);
+ virtual void visit (SMIL::Transition *);
+ virtual void visit (SMIL::TimedMrl *);
+ virtual void visit (SMIL::MediaType *);
+ virtual void visit (SMIL::ImageMediaType *);
+ virtual void visit (SMIL::TextMediaType *);
+ virtual void visit (SMIL::RefMediaType *);
+ virtual void visit (SMIL::AVMediaType *);
+ virtual void visit (SMIL::Brush *);
+ virtual void visit (SMIL::Anchor *);
+ virtual void visit (SMIL::Area *);
+ virtual void visit (RP::Imfl *) {}
+ virtual void visit (RP::Crossfade *) {}
+ virtual void visit (RP::Fadein *) {}
+ virtual void visit (RP::Fadeout *) {}
+ virtual void visit (RP::Fill *) {}
+ virtual void visit (RP::Wipe *) {}
+ virtual void visit (RP::ViewChange *) {}
+ virtual void visit (RP::Animate *) {}
+};
+
+//-----------------------------------------------------------------------------
+
+/**
+ * just some url, can get a SMIL, RSS, or ASX childtree
+ */
+class KMPLAYER_EXPORT GenericURL : public Mrl {
+public:
+ GenericURL(NodePtr &d, const QString &s, const QString &n=QString ());
+ KDE_NO_EXPORT const char * nodeName () const { return "url"; }
+ void closed ();
+};
+
+/**
+ * Non url mrl
+ */
+class KMPLAYER_EXPORT GenericMrl : public Mrl {
+public:
+ KDE_NO_CDTOR_EXPORT GenericMrl (NodePtr & d) : Mrl (d), node_name ("mrl") {}
+ GenericMrl(NodePtr &d, const QString &s, const QString & name=QString (), const QString &tag=QString ("mrl"));
+ KDE_NO_EXPORT const char * nodeName () const { return node_name.ascii (); }
+ void closed ();
+ bool expose () const;
+ QString node_name;
+};
+
+KMPLAYER_EXPORT
+void readXML (NodePtr root, QTextStream & in, const QString & firstline, bool set_opener=true);
+KMPLAYER_EXPORT Node * fromXMLDocumentTag (NodePtr & d, const QString & tag);
+
+template <class T>
+inline Item<T>::Item () : m_self (static_cast <T*> (this), true) {}
+
+template <class T> inline void List<T>::append(typename Item<T>::SharedType c) {
+ if (!m_first) {
+ m_first = m_last = c;
+ } else {
+ m_last->m_next = c;
+ c->m_prev = m_last;
+ m_last = c;
+ }
+}
+
+template <class T> inline void List<T>::insertBefore(typename Item<T>::SharedType c, typename Item<T>::SharedType b) {
+ if (!b) {
+ append (c);
+ } else {
+ if (b->m_prev) {
+ b->m_prev->m_next = c;
+ c->m_prev = b->m_prev;
+ } else {
+ c->m_prev = 0L;
+ m_first = c;
+ }
+ b->m_prev = c;
+ c->m_next = b;
+ }
+}
+
+template <class T> inline void List<T>::remove(typename Item<T>::SharedType c) {
+ if (c->m_prev) {
+ c->m_prev->m_next = c->m_next;
+ } else
+ m_first = c->m_next;
+ if (c->m_next) {
+ c->m_next->m_prev = c->m_prev;
+ c->m_next = 0L;
+ } else
+ m_last = c->m_prev;
+ c->m_prev = 0L;
+}
+
+template <class T> inline unsigned int List<T>::length () const {
+ unsigned int count = 0;
+ for (typename Item<T>::SharedType t = m_first; t; t = t->nextSibling ())
+ count++;
+ return count;
+}
+
+template <class T> inline void List<T>::clear () {
+ m_first = m_last = 0L;
+}
+
+template <class T>
+inline typename Item<T>::SharedType List<T>::item (int i) const {
+ for (typename Item<T>::SharedType t = m_first; t; t = t->nextSibling(), --i)
+ if (i == 0)
+ return t;
+ return typename Item<T>::SharedType ();
+}
+
+template <class T>
+inline void TreeNode<T>::appendChild (typename Item<T>::SharedType c) {
+ if (!m_first_child) {
+ m_first_child = m_last_child = c;
+ } else {
+ m_last_child->m_next = c;
+ c->m_prev = m_last_child;
+ m_last_child = c;
+ }
+ c->m_parent = Item<T>::m_self;
+}
+
+template <class T>
+inline void TreeNode<T>::removeChild (typename Item<T>::SharedType c) {
+ if (c->m_prev) {
+ c->m_prev->m_next = c->m_next;
+ } else
+ m_first_child = c->m_next;
+ if (c->m_next) {
+ c->m_next->m_prev = c->m_prev;
+ c->m_next = 0L;
+ } else
+ m_last_child = c->m_prev;
+ c->m_prev = 0L;
+ c->m_parent = 0L;
+}
+
+inline KDE_NO_EXPORT NodeListPtr Node::childNodes () const {
+ return new NodeList (m_first_child, m_last_child);
+}
+
+} // KMPlayer namespace
+
+#endif //_KMPLAYER_PLAYLIST_H_
diff --git a/src/kmplayerprocess.cpp b/src/kmplayerprocess.cpp
new file mode 100644
index 0000000..fff98f4
--- /dev/null
+++ b/src/kmplayerprocess.cpp
@@ -0,0 +1,2567 @@
+/* This file is part of the KDE project
+ *
+ * Copyright (C) 2003 Koos Vriezen <koos.vriezen@xs4all.nl>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#include <math.h>
+#include <config.h>
+#include <qstring.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+#include <qtimer.h>
+#include <qlayout.h>
+#include <qtable.h>
+#include <qlineedit.h>
+#include <qslider.h>
+#include <qcombobox.h>
+#include <qcheckbox.h>
+#include <qspinbox.h>
+#include <qlabel.h>
+#include <qfontmetrics.h>
+#include <qwhatsthis.h>
+
+#include <dcopobject.h>
+#include <dcopclient.h>
+#include <kprocess.h>
+#include <kdebug.h>
+#include <kprocctrl.h>
+#include <kprotocolmanager.h>
+#include <kfiledialog.h>
+#include <kmessagebox.h>
+#include <klocale.h>
+#include <kapplication.h>
+#include <kstandarddirs.h>
+#include <kio/job.h>
+
+#ifdef HAVE_DBUS
+# include <kstaticdeleter.h>
+# include <dbus/connection.h>
+#endif
+
+#include "kmplayerview.h"
+#include "kmplayercontrolpanel.h"
+#include "kmplayerprocess.h"
+#include "kmplayersource.h"
+#include "kmplayerconfig.h"
+#include "kmplayer_callback.h"
+#include "kmplayer_backend_stub.h"
+
+using namespace KMPlayer;
+
+static const char * default_supported [] = { 0L };
+
+static QString getPath (const KURL & url) {
+ QString p = KURL::decode_string (url.url ());
+ if (p.startsWith (QString ("file:/"))) {
+ p = p.mid (5);
+ unsigned int i = 0;
+ for (; i < p.length () && p[i] == QChar ('/'); ++i)
+ ;
+ //kdDebug () << "getPath " << p.mid (i-1) << endl;
+ if (i > 0)
+ return p.mid (i-1);
+ return QString (QChar ('/') + p);
+ }
+ return p;
+}
+
+Process::Process (QObject * parent, Settings * settings, const char * n)
+ : QObject (parent, n), m_source (0L), m_settings (settings),
+ m_state (NotRunning), m_old_state (NotRunning), m_process (0L), m_job(0L),
+ m_supported_sources (default_supported), m_viewer (0L) {}
+
+Process::~Process () {
+ stop ();
+ delete m_process;
+}
+
+void Process::init () {
+}
+
+QString Process::menuName () const {
+ return QString (className ());
+}
+
+void Process::initProcess (Viewer * viewer) {
+ m_viewer = viewer;
+ delete m_process;
+ m_process = new KProcess;
+ m_process->setUseShell (true);
+ m_process->setEnvironment (QString::fromLatin1 ("SESSION_MANAGER"), QString::fromLatin1 (""));
+ if (m_source) m_source->setPosition (0);
+}
+
+WId Process::widget () {
+ return 0;
+}
+
+bool Process::playing () const {
+ return m_process && m_process->isRunning ();
+}
+
+void Process::setAudioLang (int, const QString &) {}
+
+void Process::setSubtitle (int, const QString &) {}
+
+bool Process::pause () {
+ return false;
+}
+
+bool Process::seek (int /*pos*/, bool /*absolute*/) {
+ return false;
+}
+
+bool Process::volume (int /*pos*/, bool /*absolute*/) {
+ return false;
+}
+
+bool Process::saturation (int /*pos*/, bool /*absolute*/) {
+ return false;
+}
+
+bool Process::hue (int /*pos*/, bool /*absolute*/) {
+ return false;
+}
+
+bool Process::contrast (int /*pos*/, bool /*absolute*/) {
+ return false;
+}
+
+bool Process::brightness (int /*pos*/, bool /*absolute*/) {
+ return false;
+}
+
+bool Process::grabPicture (const KURL & /*url*/, int /*pos*/) {
+ return false;
+}
+
+bool Process::supports (const char * source) const {
+ for (const char ** s = m_supported_sources; s[0]; ++s) {
+ if (!strcmp (s[0], source))
+ return true;
+ }
+ return false;
+}
+
+bool Process::stop () {
+ if (!playing ())
+ return true;
+ return false;
+}
+
+bool Process::quit () {
+ while (playing ()) {
+ if (m_source && !m_source->pipeCmd ().isEmpty ()) {
+ void (*oldhandler)(int) = signal(SIGTERM, SIG_IGN);
+ ::kill (-1 * ::getpid (), SIGTERM);
+ signal(SIGTERM, oldhandler);
+ } else
+ m_process->kill (SIGTERM);
+ KProcessController::theKProcessController->waitForProcessExit (1);
+ if (!m_process->isRunning ())
+ break;
+ m_process->kill (SIGKILL);
+ KProcessController::theKProcessController->waitForProcessExit (1);
+ if (m_process->isRunning ()) {
+ KMessageBox::error (viewer (), i18n ("Failed to end player process."), i18n ("Error"));
+ }
+ break;
+ }
+ setState (NotRunning);
+ return !playing ();
+}
+
+void Process::setState (State newstate) {
+ if (m_state != newstate) {
+ bool need_timer = m_old_state == m_state;
+ m_old_state = m_state;
+ m_state = newstate;
+ if (need_timer && m_source)
+ QTimer::singleShot (0, this, SLOT (rescheduledStateChanged ()));
+ }
+}
+
+KDE_NO_EXPORT void Process::rescheduledStateChanged () {
+ State old_state = m_old_state;
+ m_old_state = m_state;
+ m_source->stateChange (this, old_state, m_state);
+}
+
+bool Process::play (Source * src, NodePtr _mrl) {
+ m_source = src;
+ m_mrl = _mrl;
+ Mrl * m = _mrl ? _mrl->mrl () : 0L;
+ QString url = m ? m->absolutePath () : QString ();
+ bool changed = m_url != url;
+ m_url = url;
+#if KDE_IS_VERSION(3,3,91)
+ if (!changed || KURL (m_url).isLocalFile ())
+ return deMediafiedPlay ();
+ m_url = url;
+ m_job = KIO::stat (m_url, false);
+ connect(m_job, SIGNAL (result(KIO::Job *)), this, SLOT(result(KIO::Job *)));
+ return true;
+#else
+ return deMediafiedPlay ();
+#endif
+}
+
+bool Process::deMediafiedPlay () {
+ return false;
+}
+
+void Process::result (KIO::Job * job) {
+#if KDE_IS_VERSION(3,3,91)
+ KIO::UDSEntry entry = static_cast <KIO::StatJob *> (job)->statResult ();
+ KIO::UDSEntry::iterator e = entry.end ();
+ for (KIO::UDSEntry::iterator it = entry.begin (); it != e; ++it)
+ if ((*it).m_uds == KIO::UDS_LOCAL_PATH) {
+ m_url = KURL::fromPathOrURL ((*it).m_str).url ();
+ break;
+ }
+ m_job = 0L;
+ deMediafiedPlay ();
+#endif
+}
+
+void Process::terminateJobs () {
+ if (m_job) {
+ m_job->kill ();
+ m_job = 0L;
+ }
+}
+
+bool Process::ready (Viewer * viewer) {
+ m_viewer = viewer;
+ setState (Ready);
+ return true;
+}
+
+Viewer * Process::viewer () const {
+ return (m_viewer ? (Viewer*)m_viewer :
+ (m_settings->defaultView() ? m_settings->defaultView()->viewer() : 0L));
+}
+
+//-----------------------------------------------------------------------------
+
+static bool proxyForURL (const KURL& url, QString& proxy) {
+ KProtocolManager::slaveProtocol (url, proxy);
+ return !proxy.isNull ();
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT MPlayerBase::MPlayerBase (QObject * parent, Settings * settings, const char * n)
+ : Process (parent, settings, n), m_use_slave (true) {
+ m_process = new KProcess;
+}
+
+KDE_NO_CDTOR_EXPORT MPlayerBase::~MPlayerBase () {
+}
+
+KDE_NO_EXPORT void MPlayerBase::initProcess (Viewer * viewer) {
+ Process::initProcess (viewer);
+ const KURL & url (m_source->url ());
+ if (!url.isEmpty ()) {
+ QString proxy_url;
+ if (KProtocolManager::useProxy () && proxyForURL (url, proxy_url))
+ m_process->setEnvironment("http_proxy", proxy_url);
+ }
+ connect (m_process, SIGNAL (wroteStdin (KProcess *)),
+ this, SLOT (dataWritten (KProcess *)));
+ connect (m_process, SIGNAL (processExited (KProcess *)),
+ this, SLOT (processStopped (KProcess *)));
+}
+
+KDE_NO_EXPORT bool MPlayerBase::sendCommand (const QString & cmd) {
+ if (playing () && m_use_slave) {
+ commands.push_front (cmd + '\n');
+ fprintf (stderr, "eval %s", commands.last ().latin1 ());
+ if (commands.size () < 2)
+ m_process->writeStdin (QFile::encodeName(commands.last ()),
+ commands.last ().length ());
+ return true;
+ }
+ return false;
+}
+
+KDE_NO_EXPORT bool MPlayerBase::stop () {
+ terminateJobs ();
+ if (!m_source || !m_process || !m_process->isRunning ())
+ return true;
+ return true;
+}
+
+KDE_NO_EXPORT bool MPlayerBase::quit () {
+ if (playing ()) {
+ stop ();
+ disconnect (m_process, SIGNAL (processExited (KProcess *)),
+ this, SLOT (processStopped (KProcess *)));
+ if (!m_use_slave) {
+ void (*oldhandler)(int) = signal(SIGTERM, SIG_IGN);
+ ::kill (-1 * ::getpid (), SIGTERM);
+ signal(SIGTERM, oldhandler);
+ }
+#if KDE_IS_VERSION(3, 1, 90)
+ m_process->wait(2);
+#else
+ QTime t;
+ t.start ();
+ do {
+ KProcessController::theKProcessController->waitForProcessExit (2);
+ } while (t.elapsed () < 2000 && m_process->isRunning ());
+#endif
+ if (m_process->isRunning ())
+ Process::quit ();
+ processStopped (0L);
+ commands.clear ();
+ }
+ return Process::quit ();
+}
+
+KDE_NO_EXPORT void MPlayerBase::dataWritten (KProcess *) {
+ if (!commands.size ()) return;
+ kdDebug() << "eval done " << commands.last () << endl;
+ commands.pop_back ();
+ if (commands.size ())
+ m_process->writeStdin (QFile::encodeName(commands.last ()),
+ commands.last ().length ());
+}
+
+KDE_NO_EXPORT void MPlayerBase::processStopped (KProcess *) {
+ kdDebug() << "process stopped" << endl;
+ commands.clear ();
+ setState (Ready);
+}
+
+//-----------------------------------------------------------------------------
+
+static const char * mplayer_supports [] = {
+ "dvdsource", "exitsource", "hrefsource", "introsource", "pipesource", "tvscanner", "tvsource", "urlsource", "vcdsource", "audiocdsource", 0L
+};
+
+KDE_NO_CDTOR_EXPORT MPlayer::MPlayer (QObject * parent, Settings * settings)
+ : MPlayerBase (parent, settings, "mplayer"),
+ m_widget (0L),
+ m_configpage (new MPlayerPreferencesPage (this)),
+ aid (-1), sid (-1),
+ m_needs_restarted (false) {
+ m_supported_sources = mplayer_supports;
+ m_settings->addPage (m_configpage);
+}
+
+KDE_NO_CDTOR_EXPORT MPlayer::~MPlayer () {
+ if (m_widget && !m_widget->parent ())
+ delete m_widget;
+ delete m_configpage;
+}
+
+KDE_NO_EXPORT void MPlayer::init () {
+}
+
+QString MPlayer::menuName () const {
+ return i18n ("&MPlayer");
+}
+
+KDE_NO_EXPORT WId MPlayer::widget () {
+ return viewer ()->embeddedWinId ();
+}
+
+KDE_NO_EXPORT bool MPlayer::ready (Viewer * viewer) {
+ Process::ready (viewer);
+ viewer->changeProtocol (QXEmbed::XPLAIN);
+ return false;
+}
+
+KDE_NO_EXPORT bool MPlayer::deMediafiedPlay () {
+ if (playing ())
+ return sendCommand (QString ("gui_play"));
+ if (!m_needs_restarted && playing ())
+ quit (); // rescheduling of setState will reset state just-in-time
+ initProcess (viewer ());
+ m_source->setPosition (0);
+ if (!m_needs_restarted) {
+ aid = sid = -1;
+ } else
+ m_needs_restarted = false;
+ alanglist = 0L;
+ slanglist = 0L;
+ m_request_seek = -1;
+ QString args = m_source->options () + ' ';
+ KURL url (m_url);
+ if (!url.isEmpty ()) {
+ if (m_source->url ().isLocalFile ())
+ m_process->setWorkingDirectory
+ (QFileInfo (m_source->url ().path ()).dirPath (true));
+ if (url.isLocalFile ()) {
+ m_url = getPath (url);
+ if (m_configpage->alwaysbuildindex &&
+ (m_url.lower ().endsWith (".avi") ||
+ m_url.lower ().endsWith (".divx")))
+ args += QString (" -idx ");
+ } else {
+ int cache = m_configpage->cachesize;
+ if (cache > 3 && !url.url ().startsWith (QString ("dvd")) &&
+ !url.url ().startsWith (QString ("vcd")) &&
+ !url.url ().startsWith (QString ("tv://")))
+ args += QString ("-cache %1 ").arg (cache);
+ if (m_url.startsWith (QString ("cdda:/")) &&
+ !m_url.startsWith (QString ("cdda://")))
+ m_url = QString ("cdda://") + m_url.mid (6);
+ }
+ if (url.protocol () != QString ("stdin"))
+ args += KProcess::quote (QString (QFile::encodeName (m_url)));
+ }
+ m_tmpURL.truncate (0);
+ if (!m_source->identified () && !m_settings->mplayerpost090) {
+ args += QString (" -quiet -nocache -identify -frames 0 ");
+ } else {
+ if (m_mrl->mrl ()->repeat > 0)
+ args += QString(" -loop " +QString::number(m_mrl->mrl()->repeat+1));
+ else if (m_settings->loop)
+ args += QString (" -loop 0");
+ if (m_settings->mplayerpost090)
+ args += QString (" -identify");
+ if (!m_source->subUrl ().isEmpty ()) {
+ args += QString (" -sub ");
+ const KURL & sub_url (m_source->subUrl ());
+ if (!sub_url.isEmpty ()) {
+ QString myurl (sub_url.isLocalFile () ? getPath (sub_url) : sub_url.url ());
+ args += KProcess::quote (QString (QFile::encodeName (myurl)));
+ }
+ }
+ }
+ return run (args.ascii (), m_source->pipeCmd ().ascii ());
+}
+
+KDE_NO_EXPORT bool MPlayer::stop () {
+ terminateJobs ();
+ if (!m_source || !m_process || !m_process->isRunning ()) return true;
+ if (m_use_slave)
+ sendCommand (QString ("quit"));
+ return MPlayerBase::stop ();
+}
+
+KDE_NO_EXPORT bool MPlayer::pause () {
+ return sendCommand (QString ("pause"));
+}
+
+KDE_NO_EXPORT bool MPlayer::seek (int pos, bool absolute) {
+ if (!m_source || !m_source->hasLength () ||
+ (absolute && m_source->position () == pos))
+ return false;
+ if (m_request_seek >= 0 && commands.size () > 1) {
+ QStringList::iterator i = commands.begin ();
+ QStringList::iterator end ( commands.end () );
+ for (++i; i != end; ++i)
+ if ((*i).startsWith (QString ("seek"))) {
+ i = commands.erase (i);
+ m_request_seek = -1;
+ break;
+ }
+ }
+ if (m_request_seek >= 0) {
+ //m_request_seek = pos;
+ return false;
+ }
+ m_request_seek = pos;
+ QString cmd;
+ cmd.sprintf ("seek %d %d", pos/10, absolute ? 2 : 0);
+ if (!absolute)
+ pos = m_source->position () + pos;
+ m_source->setPosition (pos);
+ return sendCommand (cmd);
+}
+
+KDE_NO_EXPORT bool MPlayer::volume (int incdec, bool absolute) {
+ if (absolute)
+ incdec -= old_volume;
+ if (incdec == 0)
+ return true;
+ old_volume += incdec;
+ return sendCommand (QString ("volume ") + QString::number (incdec));
+}
+
+KDE_NO_EXPORT bool MPlayer::saturation (int val, bool absolute) {
+ QString cmd;
+ cmd.sprintf ("saturation %d %d", val, absolute ? 1 : 0);
+ return sendCommand (cmd);
+}
+
+KDE_NO_EXPORT bool MPlayer::hue (int val, bool absolute) {
+ QString cmd;
+ cmd.sprintf ("hue %d %d", val, absolute ? 1 : 0);
+ return sendCommand (cmd);
+}
+
+KDE_NO_EXPORT bool MPlayer::contrast (int val, bool /*absolute*/) {
+ QString cmd;
+ cmd.sprintf ("contrast %d 1", val);
+ return sendCommand (cmd);
+}
+
+KDE_NO_EXPORT bool MPlayer::brightness (int val, bool /*absolute*/) {
+ QString cmd;
+ cmd.sprintf ("brightness %d 1", val);
+ return sendCommand (cmd);
+}
+
+bool MPlayer::run (const char * args, const char * pipe) {
+ //m_view->consoleOutput ()->clear ();
+ m_process_output = QString ();
+ connect (m_process, SIGNAL (receivedStdout (KProcess *, char *, int)),
+ this, SLOT (processOutput (KProcess *, char *, int)));
+ connect (m_process, SIGNAL (receivedStderr (KProcess *, char *, int)),
+ this, SLOT (processOutput (KProcess *, char *, int)));
+ m_use_slave = !(pipe && pipe[0]);
+ if (!m_use_slave) {
+ fprintf (stderr, "%s | ", pipe);
+ *m_process << pipe << " | ";
+ }
+ QString exe = m_configpage->mplayer_path;
+ if (exe.isEmpty ())
+ exe = "mplayer";
+ fprintf (stderr, "%s -wid %lu ", exe.ascii(), (unsigned long) widget ());
+ *m_process << exe << " -wid " << QString::number (widget ());
+
+ if (m_use_slave) {
+ fprintf (stderr, "-slave ");
+ *m_process << "-slave ";
+ }
+
+ QString strVideoDriver = QString (m_settings->videodrivers[m_settings->videodriver].driver);
+ if (!strVideoDriver.isEmpty ()) {
+ fprintf (stderr, " -vo %s", strVideoDriver.lower().ascii());
+ *m_process << " -vo " << strVideoDriver.lower();
+ if (viewer ()->view ()->keepSizeRatio () &&
+ strVideoDriver.lower() == QString::fromLatin1 ("x11")) {
+ fprintf (stderr, " -zoom");
+ *m_process << " -zoom";
+ }
+ }
+ QString strAudioDriver = QString (m_settings->audiodrivers[m_settings->audiodriver].driver);
+ if (!strAudioDriver.isEmpty ()) {
+ fprintf (stderr, " -ao %s", strAudioDriver.lower().ascii());
+ *m_process << " -ao " << strAudioDriver.lower();
+ }
+ if (m_settings->framedrop) {
+ fprintf (stderr, " -framedrop");
+ *m_process << " -framedrop";
+ }
+
+ if (m_configpage->additionalarguments.length () > 0) {
+ fprintf (stderr, " %s", m_configpage->additionalarguments.ascii());
+ *m_process << " " << m_configpage->additionalarguments;
+ }
+ // postproc thingies
+
+ fprintf (stderr, " %s", m_source->filterOptions ().ascii ());
+ *m_process << " " << m_source->filterOptions ();
+
+ if (m_settings->autoadjustcolors) {
+ fprintf (stderr, " -contrast %d", m_settings->contrast);
+ *m_process << " -contrast " << QString::number (m_settings->contrast);
+
+ fprintf (stderr, " -brightness %d", m_settings->brightness);
+ *m_process << " -brightness " <<QString::number(m_settings->brightness);
+
+ fprintf (stderr, " -hue %d", m_settings->hue);
+ *m_process << " -hue " << QString::number (m_settings->hue);
+
+ fprintf (stderr, " -saturation %d", m_settings->saturation);
+ *m_process << " -saturation " <<QString::number(m_settings->saturation);
+ }
+ if (aid > -1) {
+ fprintf (stderr, " -aid %d", aid);
+ *m_process << " -aid " << QString::number (aid);
+ }
+
+ if (sid > -1) {
+ fprintf (stderr, " -sid %d", sid);
+ *m_process << " -sid " << QString::number (sid);
+ }
+ for (NodePtr n = m_mrl; n; n = n->parentNode ()) {
+ if (n->id != id_node_group_node && n->id != id_node_playlist_item)
+ break;
+ QString plops = convertNode <Element> (n)->getAttribute ("mplayeropts");
+ if (!plops.isNull ()) {
+ QStringList sl = QStringList::split (QChar (' '), plops);
+ for (int i = 0; i < sl.size (); ++i) {
+ QString plop = KProcess::quote (sl[i]);
+ fprintf (stderr, " %s", plop.ascii ());
+ *m_process << " " << plop;
+ }
+ break;
+ }
+ }
+
+ fprintf (stderr, " %s\n", args);
+ *m_process << " " << args;
+
+ QValueList<QCString>::const_iterator it;
+ QString sMPArgs;
+ QValueList<QCString>::const_iterator end( m_process->args().end() );
+ for ( it = m_process->args().begin(); it != end; ++it ){
+ sMPArgs += (*it);
+ }
+ m_process->start (KProcess::NotifyOnExit, KProcess::All);
+
+ old_volume = viewer ()->view ()->controlPanel ()->volumeBar ()->value ();
+
+ if (m_process->isRunning ()) {
+ setState (Buffering); // wait for start regexp for state Playing
+ return true;
+ }
+ return false;
+}
+
+KDE_NO_EXPORT bool MPlayer::grabPicture (const KURL & url, int pos) {
+ stop ();
+ initProcess (viewer ());
+ QString outdir = locateLocal ("data", "kmplayer/");
+ m_grabfile = outdir + QString ("00000001.jpg");
+ unlink (m_grabfile.ascii ());
+ QString myurl (url.isLocalFile () ? getPath (url) : url.url ());
+ QString args ("mplayer ");
+ if (m_settings->mplayerpost090)
+ args += "-vo jpeg:outdir=";
+ else
+ args += "-vo jpeg -jpeg outdir=";
+ args += KProcess::quote (outdir);
+ args += QString (" -frames 1 -nosound -quiet ");
+ if (pos > 0)
+ args += QString ("-ss %1 ").arg (pos);
+ args += KProcess::quote (QString (QFile::encodeName (myurl)));
+ *m_process << args;
+ kdDebug () << args << endl;
+ m_process->start (KProcess::NotifyOnExit, KProcess::NoCommunication);
+ return m_process->isRunning ();
+}
+
+KDE_NO_EXPORT void MPlayer::processOutput (KProcess *, char * str, int slen) {
+ if (!viewer () || slen <= 0) return;
+ View * v = viewer ()->view ();
+
+ bool ok;
+ QRegExp * patterns = m_configpage->m_patterns;
+ QRegExp & m_refURLRegExp = patterns[MPlayerPreferencesPage::pat_refurl];
+ QRegExp & m_refRegExp = patterns[MPlayerPreferencesPage::pat_ref];
+ do {
+ int len = strcspn (str, "\r\n");
+ QString out = m_process_output + QString::fromLocal8Bit (str, len);
+ m_process_output = QString ();
+ str += len;
+ slen -= len;
+ if (slen <= 0) {
+ m_process_output = out;
+ break;
+ }
+ bool process_stats = false;
+ if (str[0] == '\r') {
+ if (slen > 1 && str[1] == '\n') {
+ str++;
+ slen--;
+ } else
+ process_stats = true;
+ }
+ str++;
+ slen--;
+
+ if (process_stats) {
+ QRegExp & m_posRegExp = patterns[MPlayerPreferencesPage::pat_pos];
+ QRegExp & m_cacheRegExp = patterns[MPlayerPreferencesPage::pat_cache];
+ if (m_source->hasLength () && m_posRegExp.search (out) > -1) {
+ int pos = int (10.0 * m_posRegExp.cap (1).toFloat ());
+ m_source->setPosition (pos);
+ m_request_seek = -1;
+ } else if (m_cacheRegExp.search (out) > -1) {
+ m_source->setLoading (int (m_cacheRegExp.cap(1).toDouble()));
+ }
+ } else if (out.startsWith ("ID_LENGTH")) {
+ int pos = out.find ('=');
+ if (pos > 0) {
+ int l = (int) out.mid (pos + 1).toDouble (&ok);
+ if (ok && l >= 0) {
+ m_source->setLength (m_mrl, 10 * l);
+ }
+ }
+ } else if (m_refURLRegExp.search(out) > -1) {
+ kdDebug () << "Reference mrl " << m_refURLRegExp.cap (1) << endl;
+ if (!m_tmpURL.isEmpty () && m_url != m_tmpURL)
+ m_source->insertURL (m_mrl, m_tmpURL);;
+ m_tmpURL = KURL::fromPathOrURL (m_refURLRegExp.cap (1)).url ();
+ if (m_source->url () == m_tmpURL || m_url == m_tmpURL)
+ m_tmpURL.truncate (0);
+ } else if (m_refRegExp.search (out) > -1) {
+ kdDebug () << "Reference File " << endl;
+ m_tmpURL.truncate (0);
+ } else if (out.startsWith ("ID_VIDEO_WIDTH")) {
+ int pos = out.find ('=');
+ if (pos > 0) {
+ int w = out.mid (pos + 1).toInt ();
+ m_source->setDimensions (m_mrl, w, m_source->height ());
+ }
+ } else if (out.startsWith ("ID_VIDEO_HEIGHT")) {
+ int pos = out.find ('=');
+ if (pos > 0) {
+ int h = out.mid (pos + 1).toInt ();
+ m_source->setDimensions (m_mrl, m_source->width (), h);
+ }
+ } else if (out.startsWith ("ID_VIDEO_ASPECT")) {
+ int pos = out.find ('=');
+ if (pos > 0) {
+ bool ok;
+ QString val = out.mid (pos + 1);
+ float a = val.toFloat (&ok);
+ if (!ok) {
+ val.replace (',', '.');
+ a = val.toFloat (&ok);
+ }
+ if (ok && a > 0.001)
+ m_source->setAspect (m_mrl, a);
+ }
+ } else if (out.startsWith ("ID_AID_")) {
+ int pos = out.find ('_', 7);
+ if (pos > 0) {
+ int id = out.mid (7, pos - 7).toInt ();
+ pos = out.find ('=', pos);
+ if (pos > 0) {
+ if (!alanglist_end) {
+ alanglist = new LangInfo (id, out.mid (pos + 1));
+ alanglist_end = alanglist;
+ } else {
+ alanglist_end->next = new LangInfo (id, out.mid(pos+1));
+ alanglist_end = alanglist_end->next;
+ }
+ kdDebug () << "lang " << id << " " << alanglist_end->name <<endl;
+ }
+ }
+ } else if (out.startsWith ("ID_SID_")) {
+ int pos = out.find ('_', 7);
+ if (pos > 0) {
+ int id = out.mid (7, pos - 7).toInt ();
+ pos = out.find ('=', pos);
+ if (pos > 0) {
+ if (!slanglist_end) {
+ slanglist = new LangInfo (id, out.mid (pos + 1));
+ slanglist_end = slanglist;
+ } else {
+ slanglist_end->next = new LangInfo (id, out.mid(pos+1));
+ slanglist_end = slanglist_end->next;
+ }
+ kdDebug () << "sid " << id << " " << slanglist_end->name <<endl;
+ }
+ }
+ } else if (out.startsWith ("ICY Info")) {
+ int p = out.find ("StreamTitle=", 8);
+ if (p > -1) {
+ p += 12;
+ int e = out.find (';', p);
+ if (e > -1)
+ e -= p;
+ ((PlayListNotify *)m_source)->setInfoMessage (out.mid (p, e));
+ }
+ } else {
+ QRegExp & m_startRegExp = patterns[MPlayerPreferencesPage::pat_start];
+ QRegExp & m_sizeRegExp = patterns[MPlayerPreferencesPage::pat_size];
+ v->addText (out, true);
+ if (!m_source->processOutput (out)) {
+ // int movie_width = m_source->width ();
+ if (/*movie_width <= 0 &&*/ m_sizeRegExp.search (out) > -1) {
+ int movie_width = m_sizeRegExp.cap (1).toInt (&ok);
+ int movie_height = ok ? m_sizeRegExp.cap (2).toInt (&ok) : 0;
+ if (ok && movie_width > 0 && movie_height > 0) {
+ m_source->setDimensions(m_mrl,movie_width,movie_height);
+ m_source->setAspect (m_mrl, 1.0*movie_width/movie_height);
+ }
+ } else if (m_startRegExp.search (out) > -1) {
+ if (m_settings->mplayerpost090) {
+ if (!m_tmpURL.isEmpty () && m_url != m_tmpURL) {
+ m_source->insertURL (m_mrl, m_tmpURL);;
+ m_tmpURL.truncate (0);
+ }
+ m_source->setIdentified ();
+ }
+ QStringList alst, slst;
+ for (SharedPtr <LangInfo> li = alanglist; li; li = li->next)
+ alst.push_back (li->name);
+ for (SharedPtr <LangInfo> li = slanglist; li; li = li->next)
+ slst.push_back (li->name);
+ m_source->setLanguages (alst, slst);
+ setState (Playing);
+ }
+ }
+ }
+ } while (slen > 0);
+}
+
+KDE_NO_EXPORT void MPlayer::processStopped (KProcess * p) {
+ if (p && !m_grabfile.isEmpty ()) {
+ emit grabReady (m_grabfile);
+ m_grabfile.truncate (0);
+ } else if (p) {
+ QString url;
+ if (!m_source->identified ()) {
+ m_source->setIdentified ();
+ if (!m_tmpURL.isEmpty () && m_url != m_tmpURL) {
+ m_source->insertURL (m_mrl, m_tmpURL);;
+ m_tmpURL.truncate (0);
+ }
+ }
+ if (m_source && m_needs_restarted) {
+ commands.clear ();
+ int pos = m_source->position ();
+ play (m_source, m_mrl);
+ seek (pos, true);
+ } else
+ MPlayerBase::processStopped (p);
+ }
+}
+
+void MPlayer::setAudioLang (int id, const QString &) {
+ SharedPtr <LangInfo> li = alanglist;
+ for (; id > 0 && li; li = li->next)
+ id--;
+ if (li)
+ aid = li->id;
+ m_needs_restarted = true;
+ sendCommand (QString ("quit"));
+}
+
+void MPlayer::setSubtitle (int id, const QString &) {
+ SharedPtr <LangInfo> li = slanglist;
+ for (; id > 0 && li; li = li->next)
+ id--;
+ if (li)
+ sid = li->id;
+ m_needs_restarted = true;
+ sendCommand (QString ("quit"));
+}
+
+//-----------------------------------------------------------------------------
+
+extern const char * strMPlayerGroup;
+static const char * strMPlayerPatternGroup = "MPlayer Output Matching";
+static const char * strMPlayerPath = "MPlayer Path";
+static const char * strAddArgs = "Additional Arguments";
+static const char * strCacheSize = "Cache Size for Streaming";
+static const char * strAlwaysBuildIndex = "Always build index";
+static const int non_patterns = 4;
+
+static struct MPlayerPattern {
+ QString caption;
+ const char * name;
+ const char * pattern;
+} _mplayer_patterns [] = {
+ { i18n ("Size pattern"), "Movie Size", "VO:.*[^0-9]([0-9]+)x([0-9]+)" },
+ { i18n ("Cache pattern"), "Cache Fill", "Cache fill:[^0-9]*([0-9\\.]+)%" },
+ { i18n ("Position pattern"), "Movie Position", "V:\\s*([0-9\\.]+)" },
+ { i18n ("Index pattern"), "Index Pattern", "Generating Index: +([0-9]+)%" },
+ { i18n ("Reference URL pattern"), "Reference URL Pattern", "Playing\\s+(.*[^\\.])\\.?\\s*$" },
+ { i18n ("Reference pattern"), "Reference Pattern", "Reference Media file" },
+ { i18n ("Start pattern"), "Start Playing", "Start[^ ]* play" },
+ { i18n ("DVD language pattern"), "DVD Language", "\\[open].*audio.*language: ([A-Za-z]+).*aid.*[^0-9]([0-9]+)" },
+ { i18n ("DVD subtitle pattern"), "DVD Sub Title", "\\[open].*subtitle.*[^0-9]([0-9]+).*language: ([A-Za-z]+)" },
+ { i18n ("DVD titles pattern"), "DVD Titles", "There are ([0-9]+) titles" },
+ { i18n ("DVD chapters pattern"), "DVD Chapters", "There are ([0-9]+) chapters" },
+ { i18n ("VCD track pattern"), "VCD Tracks", "track ([0-9]+):" },
+ { i18n ("Audio CD tracks pattern"), "CDROM Tracks", "[Aa]udio CD[^0-9]+([0-9]+)[^0-9]tracks" }
+};
+
+namespace KMPlayer {
+
+class KMPLAYER_NO_EXPORT MPlayerPreferencesFrame : public QFrame {
+public:
+ MPlayerPreferencesFrame (QWidget * parent);
+ QTable * table;
+};
+
+} // namespace
+
+KDE_NO_CDTOR_EXPORT MPlayerPreferencesFrame::MPlayerPreferencesFrame (QWidget * parent)
+ : QFrame (parent) {
+ QVBoxLayout * layout = new QVBoxLayout (this);
+ table = new QTable (int (MPlayerPreferencesPage::pat_last)+non_patterns, 2, this);
+ table->verticalHeader ()->hide ();
+ table->setLeftMargin (0);
+ table->horizontalHeader ()->hide ();
+ table->setTopMargin (0);
+ table->setColumnReadOnly (0, true);
+ table->setText (0, 0, i18n ("MPlayer command:"));
+ table->setText (1, 0, i18n ("Additional command line arguments:"));
+ table->setText (2, 0, QString("%1 (%2)").arg (i18n ("Cache size:")).arg (i18n ("kB"))); // FIXME for new translations
+ table->setCellWidget (2, 1, new QSpinBox (0, 32767, 32, table->viewport()));
+ table->setText (3, 0, i18n ("Build new index when possible"));
+ table->setCellWidget (3, 1, new QCheckBox (table->viewport()));
+ QWhatsThis::add (table->cellWidget (3, 1), i18n ("Allows seeking in indexed files (AVIs)"));
+ for (int i = 0; i < int (MPlayerPreferencesPage::pat_last); i++)
+ table->setText (i+non_patterns, 0, _mplayer_patterns[i].caption);
+ QFontMetrics metrics (table->font ());
+ int first_column_width = 50;
+ for (int i = 0; i < int (MPlayerPreferencesPage::pat_last+non_patterns); i++) {
+ int strwidth = metrics.boundingRect (table->text (i, 0)).width ();
+ if (strwidth > first_column_width)
+ first_column_width = strwidth + 4;
+ }
+ table->setColumnWidth (0, first_column_width);
+ table->setColumnStretchable (1, true);
+ layout->addWidget (table);
+}
+
+KDE_NO_CDTOR_EXPORT MPlayerPreferencesPage::MPlayerPreferencesPage (MPlayer * p)
+ : m_process (p), m_configframe (0L) {
+}
+
+KDE_NO_EXPORT void MPlayerPreferencesPage::write (KConfig * config) {
+ config->setGroup (strMPlayerPatternGroup);
+ for (int i = 0; i < int (pat_last); i++)
+ config->writeEntry
+ (_mplayer_patterns[i].name, m_patterns[i].pattern ());
+ config->setGroup (strMPlayerGroup);
+ config->writeEntry (strMPlayerPath, mplayer_path);
+ config->writeEntry (strAddArgs, additionalarguments);
+ config->writeEntry (strCacheSize, cachesize);
+ config->writeEntry (strAlwaysBuildIndex, alwaysbuildindex);
+}
+
+KDE_NO_EXPORT void MPlayerPreferencesPage::read (KConfig * config) {
+ config->setGroup (strMPlayerPatternGroup);
+ for (int i = 0; i < int (pat_last); i++)
+ m_patterns[i].setPattern (config->readEntry
+ (_mplayer_patterns[i].name, _mplayer_patterns[i].pattern));
+ config->setGroup (strMPlayerGroup);
+ mplayer_path = config->readEntry (strMPlayerPath, "mplayer");
+ additionalarguments = config->readEntry (strAddArgs);
+ cachesize = config->readNumEntry (strCacheSize, 384);
+ alwaysbuildindex = config->readBoolEntry (strAlwaysBuildIndex, false);
+}
+
+KDE_NO_EXPORT void MPlayerPreferencesPage::sync (bool fromUI) {
+ QTable * table = m_configframe->table;
+ QSpinBox * cacheSize = static_cast<QSpinBox *>(table->cellWidget (2, 1));
+ QCheckBox * buildIndex = static_cast<QCheckBox *>(table->cellWidget (3, 1));
+ if (fromUI) {
+ mplayer_path = table->text (0, 1);
+ additionalarguments = table->text (1, 1);
+ for (int i = 0; i < int (pat_last); i++)
+ m_patterns[i].setPattern (table->text (i+non_patterns, 1));
+ cachesize = cacheSize->value();
+ alwaysbuildindex = buildIndex->isChecked ();
+ } else {
+ table->setText (0, 1, mplayer_path);
+ table->setText (1, 1, additionalarguments);
+ for (int i = 0; i < int (pat_last); i++)
+ table->setText (i+non_patterns, 1, m_patterns[i].pattern ());
+ if (cachesize > 0)
+ cacheSize->setValue(cachesize);
+ buildIndex->setChecked (alwaysbuildindex);
+ }
+}
+
+KDE_NO_EXPORT void MPlayerPreferencesPage::prefLocation (QString & item, QString & icon, QString & tab) {
+ item = i18n ("General Options");
+ icon = QString ("kmplayer");
+ tab = i18n ("MPlayer");
+}
+
+KDE_NO_EXPORT QFrame * MPlayerPreferencesPage::prefPage (QWidget * parent) {
+ m_configframe = new MPlayerPreferencesFrame (parent);
+ return m_configframe;
+}
+
+//-----------------------------------------------------------------------------
+
+static const char * mencoder_supports [] = {
+ "dvdsource", "pipesource", "tvscanner", "tvsource", "urlsource", "vcdsource", "audiocdsource", 0L
+};
+
+KDE_NO_CDTOR_EXPORT MEncoder::MEncoder (QObject * parent, Settings * settings)
+ : MPlayerBase (parent, settings, "mencoder") {
+ m_supported_sources = mencoder_supports;
+}
+
+KDE_NO_CDTOR_EXPORT MEncoder::~MEncoder () {
+}
+
+KDE_NO_EXPORT void MEncoder::init () {
+}
+
+bool MEncoder::deMediafiedPlay () {
+ bool success = false;
+ stop ();
+ initProcess (viewer ());
+ KURL url (m_url);
+ m_source->setPosition (0);
+ QString args;
+ m_use_slave = m_source->pipeCmd ().isEmpty ();
+ if (!m_use_slave)
+ args = m_source->pipeCmd () + QString (" | ");
+ QString margs = m_settings->mencoderarguments;
+ if (m_settings->recordcopy)
+ margs = QString ("-oac copy -ovc copy");
+ args += QString ("mencoder ") + margs + ' ' + m_source->recordCmd ();
+ // FIXME if (m_player->source () == source) // ugly
+ // m_player->stop ();
+ QString myurl = url.isLocalFile () ? getPath (url) : url.url ();
+ bool post090 = m_settings->mplayerpost090;
+ if (!myurl.isEmpty ()) {
+ if (!post090 && myurl.startsWith (QString ("tv://")))
+ ; // skip it
+ else if (!post090 && myurl.startsWith (QString ("vcd://")))
+ args += myurl.replace (0, 6, QString (" -vcd "));
+ else if (!post090 && myurl.startsWith (QString ("dvd://")))
+ args += myurl.replace (0, 6, QString (" -dvd "));
+ else
+ args += ' ' + KProcess::quote (QString (QFile::encodeName (myurl)));
+ }
+ QString outurl = KProcess::quote (QString (QFile::encodeName (m_recordurl.isLocalFile () ? getPath (m_recordurl) : m_recordurl.url ())));
+ kdDebug () << args << " -o " << outurl << endl;
+ *m_process << args << " -o " << outurl;
+ m_process->start (KProcess::NotifyOnExit, KProcess::NoCommunication);
+ success = m_process->isRunning ();
+ if (success)
+ setState (Playing);
+ return success;
+}
+
+KDE_NO_EXPORT bool MEncoder::stop () {
+ terminateJobs ();
+ if (!m_source || !m_process || !m_process->isRunning ()) return true;
+ kdDebug () << "MEncoder::stop ()" << endl;
+ if (m_use_slave)
+ m_process->kill (SIGINT);
+ return MPlayerBase::stop ();
+}
+
+//-----------------------------------------------------------------------------
+
+static const char * mplayerdump_supports [] = {
+ "dvdsource", "pipesource", "tvscanner", "tvsource", "urlsource", "vcdsource", "audiocdsource", 0L
+};
+
+KDE_NO_CDTOR_EXPORT
+MPlayerDumpstream::MPlayerDumpstream (QObject * parent, Settings * settings)
+ : MPlayerBase (parent, settings, "mplayerdumpstream") {
+ m_supported_sources = mplayerdump_supports;
+ }
+
+KDE_NO_CDTOR_EXPORT MPlayerDumpstream::~MPlayerDumpstream () {
+}
+
+KDE_NO_EXPORT void MPlayerDumpstream::init () {
+}
+
+bool MPlayerDumpstream::deMediafiedPlay () {
+ bool success = false;
+ stop ();
+ initProcess (viewer ());
+ KURL url (m_url);
+ m_source->setPosition (0);
+ QString args;
+ m_use_slave = m_source->pipeCmd ().isEmpty ();
+ if (!m_use_slave)
+ args = m_source->pipeCmd () + QString (" | ");
+ args += QString ("mplayer ") + m_source->recordCmd ();
+ // FIXME if (m_player->source () == source) // ugly
+ // m_player->stop ();
+ QString myurl = url.isLocalFile () ? getPath (url) : url.url ();
+ bool post090 = m_settings->mplayerpost090;
+ if (!myurl.isEmpty ()) {
+ if (!post090 && myurl.startsWith (QString ("tv://")))
+ ; // skip it
+ else if (!post090 && myurl.startsWith (QString ("vcd://")))
+ args += myurl.replace (0, 6, QString (" -vcd "));
+ else if (!post090 && myurl.startsWith (QString ("dvd://")))
+ args += myurl.replace (0, 6, QString (" -dvd "));
+ else
+ args += ' ' + KProcess::quote (QString (QFile::encodeName (myurl)));
+ }
+ QString outurl = KProcess::quote (QString (QFile::encodeName (m_recordurl.isLocalFile () ? getPath (m_recordurl) : m_recordurl.url ())));
+ kdDebug () << args << " -dumpstream -dumpfile " << outurl << endl;
+ *m_process << args << " -dumpstream -dumpfile " << outurl;
+ m_process->start (KProcess::NotifyOnExit, KProcess::NoCommunication);
+ success = m_process->isRunning ();
+ if (success)
+ setState (Playing);
+ return success;
+}
+
+KDE_NO_EXPORT bool MPlayerDumpstream::stop () {
+ terminateJobs ();
+ if (!m_source || !m_process || !m_process->isRunning ()) return true;
+ kdDebug () << "MPlayerDumpstream::stop ()" << endl;
+ if (m_use_slave)
+ m_process->kill (SIGINT);
+ return MPlayerBase::stop ();
+}
+
+//-----------------------------------------------------------------------------
+
+static int callback_counter = 0;
+
+Callback::Callback (CallbackProcess * process)
+ : DCOPObject (QString (QString ("KMPlayerCallback-") +
+ QString::number (callback_counter++)).ascii ()),
+ m_process (process) {}
+
+void Callback::statusMessage (int code, QString msg) {
+ if (!m_process->m_source) return;
+ switch ((StatusCode) code) {
+ case stat_newtitle:
+ //m_process->source ()->setTitle (msg);
+ if (m_process->viewer ())
+ ((PlayListNotify *) m_process->source ())->setInfoMessage (msg);
+ break;
+ case stat_hasvideo:
+ if (m_process->viewer ())
+ m_process->viewer ()->view ()->videoStart ();
+ break;
+ default:
+ m_process->setStatusMessage (msg);
+ };
+}
+
+void Callback::subMrl (QString mrl, QString title) {
+ if (!m_process->m_source) return;
+ m_process->m_source->insertURL (m_process->m_mrl, KURL::fromPathOrURL (mrl).url (), title);
+ if (m_process->m_mrl && m_process->m_mrl->active ())
+ m_process->m_mrl->defer (); // Xine detected this is a playlist
+}
+
+void Callback::errorMessage (int code, QString msg) {
+ m_process->setErrorMessage (code, msg);
+}
+
+void Callback::finished () {
+ m_process->setFinished ();
+}
+
+void Callback::playing () {
+ m_process->setPlaying ();
+}
+
+void Callback::started (QCString dcopname, QByteArray data) {
+ m_process->setStarted (dcopname, data);
+}
+
+void Callback::movieParams (int length, int w, int h, float aspect, QStringList alang, QStringList slang) {
+ m_process->setMovieParams (length, w, h, aspect, alang, slang);
+}
+
+void Callback::moviePosition (int position) {
+ m_process->setMoviePosition (position);
+}
+
+void Callback::loadingProgress (int percentage) {
+ m_process->setLoadingProgress (percentage);
+}
+
+void Callback::toggleFullScreen () {
+ Viewer * v = m_process->viewer ();
+ if (v)
+ v->view ()->fullScreen ();
+}
+
+//-----------------------------------------------------------------------------
+
+CallbackProcess::CallbackProcess (QObject * parent, Settings * settings, const char * n, const QString & menuname)
+ : Process (parent, settings, n),
+ m_callback (new Callback (this)),
+ m_backend (0L),
+ m_menuname (menuname),
+ m_configpage (new XMLPreferencesPage (this)),
+ in_gui_update (false),
+ m_have_config (config_unknown),
+ m_send_config (send_no) {
+}
+
+CallbackProcess::~CallbackProcess () {
+ delete m_callback;
+ delete m_configpage;
+ if (configdoc)
+ configdoc->document()->dispose ();
+}
+
+void CallbackProcess::setStatusMessage (const QString & /*msg*/) {
+}
+
+QString CallbackProcess::menuName () const {
+ return m_menuname;
+}
+
+void CallbackProcess::setErrorMessage (int code, const QString & msg) {
+ kdDebug () << "setErrorMessage " << code << " " << msg << endl;
+ if (code == 0 && m_send_config != send_no) {
+ if (m_send_config == send_new)
+ stop ();
+ m_send_config = send_no;
+ }
+}
+
+void CallbackProcess::setFinished () {
+ setState (Ready);
+}
+
+void CallbackProcess::setPlaying () {
+ setState (Playing);
+}
+
+void CallbackProcess::setStarted (QCString dcopname, QByteArray & data) {
+ if (data.size ())
+ m_configdata = data;
+ kdDebug () << "up and running " << dcopname << endl;
+ m_backend = new Backend_stub (dcopname, "Backend");
+ if (m_send_config == send_new) {
+ m_backend->setConfig (m_changeddata);
+ }
+ if (m_have_config == config_probe || m_have_config == config_unknown) {
+ bool was_probe = m_have_config == config_probe;
+ m_have_config = data.size () ? config_yes : config_no;
+ if (m_have_config == config_yes) {
+ configdoc = new ConfigDocument ();
+ QTextStream ts (data, IO_ReadOnly);
+ readXML (configdoc, ts, QString ());
+ configdoc->normalize ();
+ //kdDebug () << mydoc->innerText () << endl;
+ }
+ emit configReceived ();
+ if (m_configpage)
+ m_configpage->sync (false);
+ if (was_probe) {
+ quit ();
+ return;
+ }
+ }
+ if (m_settings->autoadjustcolors) {
+ saturation (m_settings->saturation, true);
+ hue (m_settings->hue, true);
+ brightness (m_settings->brightness, true);
+ contrast (m_settings->contrast, true);
+ }
+ setState (Ready);
+}
+
+void CallbackProcess::setMovieParams (int len, int w, int h, float a, const QStringList & alang, const QStringList & slang) {
+ kdDebug () << "setMovieParams " << len << " " << w << "," << h << " " << a << endl;
+ if (!m_source) return;
+ in_gui_update = true;
+ m_source->setDimensions (m_mrl, w, h);
+ m_source->setAspect (m_mrl, a);
+ m_source->setLength (m_mrl, len);
+ m_source->setLanguages (alang, slang);
+ in_gui_update = false;
+}
+
+void CallbackProcess::setMoviePosition (int position) {
+ if (!m_source) return;
+ in_gui_update = true;
+ m_source->setPosition (position);
+ m_request_seek = -1;
+ in_gui_update = false;
+}
+
+void CallbackProcess::setLoadingProgress (int percentage) {
+ in_gui_update = true;
+ m_source->setLoading (percentage);
+ in_gui_update = false;
+}
+
+bool CallbackProcess::getConfigData () {
+ if (m_have_config == config_no)
+ return false;
+ if (m_have_config == config_unknown && !playing ()) {
+ m_have_config = config_probe;
+ ready (viewer ());
+ }
+ return true;
+}
+
+void CallbackProcess::setChangedData (const QByteArray & data) {
+ m_changeddata = data;
+ m_send_config = playing () ? send_try : send_new;
+ if (m_send_config == send_try)
+ m_backend->setConfig (data);
+ else
+ ready (viewer ());
+}
+
+bool CallbackProcess::deMediafiedPlay () {
+ if (!m_backend)
+ return false;
+ kdDebug () << "CallbackProcess::play " << m_url << endl;
+ QString u = m_url;
+ if (u == "tv://" && !m_source->tuner ().isEmpty ()) {
+ u = "v4l:/" + m_source->tuner ();
+ if (m_source->frequency () > 0)
+ u += QChar ('/') + QString::number (m_source->frequency ());
+ }
+ KURL url (u);
+ QString myurl = url.isLocalFile () ? getPath (url) : url.url ();
+ m_backend->setURL (myurl);
+ const KURL & sub_url = m_source->subUrl ();
+ if (!sub_url.isEmpty ())
+ m_backend->setSubTitleURL (QString (QFile::encodeName (sub_url.isLocalFile () ? QFileInfo (getPath (sub_url)).absFilePath () : sub_url.url ())));
+ if (m_source->frequency () > 0)
+ m_backend->frequency (m_source->frequency ());
+ m_backend->play (m_mrl ? m_mrl->mrl ()->repeat : 0);
+ setState (Buffering);
+ return true;
+}
+
+bool CallbackProcess::stop () {
+ terminateJobs ();
+ if (!m_process || !m_process->isRunning () || m_state < Buffering)
+ return true;
+ kdDebug () << "CallbackProcess::stop ()" << m_backend << endl;
+ if (m_backend)
+ m_backend->stop ();
+ return true;
+}
+
+bool CallbackProcess::quit () {
+ if (m_have_config == config_probe)
+ m_have_config = config_unknown; // hmm
+ if (m_send_config == send_new)
+ m_send_config = send_no; // oh well
+ if (playing ()) {
+ kdDebug () << "CallbackProcess::quit ()" << endl;
+ if (m_backend)
+ m_backend->quit ();
+ else if (viewer ())
+ viewer ()->sendKeyEvent ('q');
+#if KDE_IS_VERSION(3, 1, 90)
+ m_process->wait(1);
+#else
+ QTime t;
+ t.start ();
+ do {
+ KProcessController::theKProcessController->waitForProcessExit (2);
+ } while (t.elapsed () < 1000 && m_process->isRunning ());
+#endif
+ }
+ return Process::quit ();
+}
+
+bool CallbackProcess::pause () {
+ if (!playing () || !m_backend) return false;
+ m_backend->pause ();
+ return true;
+}
+
+void CallbackProcess::setAudioLang (int id, const QString & al) {
+ if (!m_backend) return;
+ m_backend->setAudioLang (id, al);
+}
+
+void CallbackProcess::setSubtitle (int id, const QString & sl) {
+ if (!m_backend) return;
+ m_backend->setSubtitle (id, sl);
+}
+
+bool CallbackProcess::seek (int pos, bool absolute) {
+ if (in_gui_update || !playing () ||
+ !m_backend || !m_source ||
+ !m_source->hasLength () ||
+ (absolute && m_source->position () == pos))
+ return false;
+ if (!absolute)
+ pos = m_source->position () + pos;
+ m_source->setPosition (pos);
+ if (m_request_seek < 0)
+ m_backend->seek (pos, true);
+ m_request_seek = pos;
+ return true;
+}
+
+bool CallbackProcess::volume (int val, bool b) {
+ if (m_backend)
+ m_backend->volume (int (sqrt (val*100)), b);
+ //m_backend->volume (100 * log (1.0*val) / log (100.0), b);
+ return !!m_backend;
+}
+
+bool CallbackProcess::saturation (int val, bool b) {
+ if (m_backend)
+ m_backend->saturation (val, b);
+ return !!m_backend;
+}
+
+bool CallbackProcess::hue (int val, bool b) {
+ if (m_backend)
+ m_backend->hue (val, b);
+ return !!m_backend;
+}
+
+bool CallbackProcess::brightness (int val, bool b) {
+ if (m_backend)
+ m_backend->brightness (val, b);
+ return !!m_backend;
+}
+
+bool CallbackProcess::contrast (int val, bool b) {
+ if (m_backend)
+ m_backend->contrast (val, b);
+ return !!m_backend;
+}
+
+QString CallbackProcess::dcopName () {
+ QString cbname;
+ cbname.sprintf ("%s/%s", QString (kapp->dcopClient ()->appId ()).ascii (),
+ QString (m_callback->objId ()).ascii ());
+ return cbname;
+}
+
+void CallbackProcess::initProcess (Viewer * viewer) {
+ Process::initProcess (viewer);
+ connect (m_process, SIGNAL (processExited (KProcess *)),
+ this, SLOT (processStopped (KProcess *)));
+ connect (m_process, SIGNAL (receivedStdout (KProcess *, char *, int)),
+ this, SLOT (processOutput (KProcess *, char *, int)));
+ connect (m_process, SIGNAL (receivedStderr (KProcess *, char *, int)),
+ this, SLOT (processOutput (KProcess *, char *, int)));
+}
+
+KDE_NO_EXPORT void CallbackProcess::processOutput (KProcess *, char * str, int slen) {
+ if (viewer () && slen > 0)
+ viewer ()->view ()->addText (QString::fromLocal8Bit (str, slen));
+}
+
+KDE_NO_EXPORT void CallbackProcess::processStopped (KProcess *) {
+ if (m_source)
+ ((PlayListNotify *) m_source)->setInfoMessage (QString ());
+ delete m_backend;
+ m_backend = 0L;
+ setState (NotRunning);
+ if (m_send_config == send_try) {
+ m_send_config = send_new; // we failed, retry ..
+ ready (viewer ());
+ }
+}
+
+WId CallbackProcess::widget () {
+ return viewer () ? viewer ()->embeddedWinId () : 0;
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT ConfigDocument::ConfigDocument ()
+ : Document (QString ()) {}
+
+KDE_NO_CDTOR_EXPORT ConfigDocument::~ConfigDocument () {
+ kdDebug () << "~ConfigDocument" << endl;
+}
+
+namespace KMPlayer {
+ /*
+ * Element for ConfigDocument
+ */
+ struct KMPLAYER_NO_EXPORT SomeNode : public ConfigNode {
+ KDE_NO_CDTOR_EXPORT SomeNode (NodePtr & d, const QString & t)
+ : ConfigNode (d, t) {}
+ KDE_NO_CDTOR_EXPORT ~SomeNode () {}
+ NodePtr childFromTag (const QString & t);
+ };
+} // namespace
+
+KDE_NO_CDTOR_EXPORT ConfigNode::ConfigNode (NodePtr & d, const QString & t)
+ : DarkNode (d, t), w (0L) {}
+
+NodePtr ConfigDocument::childFromTag (const QString & tag) {
+ if (tag.lower () == QString ("document"))
+ return new ConfigNode (m_doc, tag);
+ return 0L;
+}
+
+NodePtr ConfigNode::childFromTag (const QString & t) {
+ return new TypeNode (m_doc, t);
+}
+
+KDE_NO_CDTOR_EXPORT TypeNode::TypeNode (NodePtr & d, const QString & t)
+ : ConfigNode (d, t), tag (t) {}
+
+NodePtr TypeNode::childFromTag (const QString & tag) {
+ return new SomeNode (m_doc, tag);
+}
+
+NodePtr SomeNode::childFromTag (const QString & t) {
+ return new SomeNode (m_doc, t);
+}
+
+QWidget * TypeNode::createWidget (QWidget * parent) {
+ QString type_attr = getAttribute (StringPool::attr_type);
+ const char * ctype = type_attr.ascii ();
+ QString value = getAttribute (StringPool::attr_value);
+ if (!strcmp (ctype, "range")) {
+ w = new QSlider (getAttribute (QString ("START")).toInt (),
+ getAttribute (StringPool::attr_end).toInt (),
+ 1, value.toInt (), Qt::Horizontal, parent);
+ } else if (!strcmp (ctype, "num") || !strcmp (ctype, "string")) {
+ w = new QLineEdit (value, parent);
+ } else if (!strcmp (ctype, "bool")) {
+ QCheckBox * checkbox = new QCheckBox (parent);
+ checkbox->setChecked (value.toInt ());
+ w = checkbox;
+ } else if (!strcmp (ctype, "enum")) {
+ QComboBox * combo = new QComboBox (parent);
+ for (NodePtr e = firstChild (); e; e = e->nextSibling ())
+ if (e->isElementNode () && !strcmp (e->nodeName (), "item"))
+ combo->insertItem (convertNode <Element> (e)->getAttribute (StringPool::attr_value));
+ combo->setCurrentItem (value.toInt ());
+ w = combo;
+ } else if (!strcmp (ctype, "tree")) {
+ } else
+ kdDebug() << "Unknown type:" << ctype << endl;
+ return w;
+}
+
+void TypeNode::changedXML (QTextStream & out) {
+ if (!w) return;
+ QString type_attr = getAttribute (StringPool::attr_type);
+ const char * ctype = type_attr.ascii ();
+ QString value = getAttribute (StringPool::attr_value);
+ QString newvalue;
+ if (!strcmp (ctype, "range")) {
+ newvalue = QString::number (static_cast <QSlider *> (w)->value ());
+ } else if (!strcmp (ctype, "num") || !strcmp (ctype, "string")) {
+ newvalue = static_cast <QLineEdit *> (w)->text ();
+ } else if (!strcmp (ctype, "bool")) {
+ newvalue = QString::number (static_cast <QCheckBox *> (w)->isChecked());
+ } else if (!strcmp (ctype, "enum")) {
+ newvalue = QString::number (static_cast<QComboBox *>(w)->currentItem());
+ } else if (!strcmp (ctype, "tree")) {
+ } else
+ kdDebug() << "Unknown type:" << ctype << endl;
+ if (value != newvalue) {
+ value = newvalue;
+ setAttribute (StringPool::attr_value, newvalue);
+ out << outerXML ();
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+namespace KMPlayer {
+
+class KMPLAYER_NO_EXPORT XMLPreferencesFrame : public QFrame {
+public:
+ XMLPreferencesFrame (QWidget * parent, CallbackProcess *);
+ KDE_NO_CDTOR_EXPORT ~XMLPreferencesFrame () {}
+ QTable * table;
+protected:
+ void showEvent (QShowEvent *);
+private:
+ CallbackProcess * m_process;
+};
+
+} // namespace
+
+KDE_NO_CDTOR_EXPORT XMLPreferencesFrame::XMLPreferencesFrame
+(QWidget * parent, CallbackProcess * p)
+ : QFrame (parent), m_process (p){
+ QVBoxLayout * layout = new QVBoxLayout (this);
+ table = new QTable (this);
+ layout->addWidget (table);
+}
+
+KDE_NO_CDTOR_EXPORT XMLPreferencesPage::XMLPreferencesPage (CallbackProcess * p)
+ : m_process (p), m_configframe (0L) {
+}
+
+KDE_NO_CDTOR_EXPORT XMLPreferencesPage::~XMLPreferencesPage () {
+}
+
+KDE_NO_EXPORT void XMLPreferencesFrame::showEvent (QShowEvent *) {
+ if (!m_process->haveConfig ())
+ m_process->getConfigData ();
+}
+
+KDE_NO_EXPORT void XMLPreferencesPage::write (KConfig *) {
+}
+
+KDE_NO_EXPORT void XMLPreferencesPage::read (KConfig *) {
+}
+
+KDE_NO_EXPORT void XMLPreferencesPage::sync (bool fromUI) {
+ if (!m_configframe) return;
+ QTable * table = m_configframe->table;
+ int row = 0;
+ if (fromUI) {
+ NodePtr configdoc = m_process->configDocument ();
+ if (!configdoc || m_configframe->table->numCols () < 1) //not yet created
+ return;
+ NodePtr elm = configdoc->firstChild (); // document
+ if (!elm || !elm->hasChildNodes ()) {
+ kdDebug () << "No valid data" << endl;
+ return;
+ }
+ QString str;
+ QTextStream ts (&str, IO_WriteOnly);
+ ts << "<document>";
+ for (NodePtr e = elm->firstChild (); e; e = e->nextSibling ())
+ convertNode <TypeNode> (e)->changedXML (ts);
+ if (str.length () > 10) {
+ ts << "</document>";
+ QByteArray changeddata = QCString (str.ascii ());
+ kdDebug () << str << " " << changeddata.size () << str.length () << endl;
+ changeddata.resize (str.length ());
+ m_process->setChangedData (changeddata);
+ }
+ } else {
+ if (!m_process->haveConfig ())
+ return;
+ NodePtr configdoc = m_process->configDocument ();
+ if (!configdoc)
+ return;
+ if (m_configframe->table->numCols () < 1) { // not yet created
+ QString err;
+ int first_column_width = 50;
+ NodePtr elm = configdoc->firstChild (); // document
+ if (!elm || !elm->hasChildNodes ()) {
+ kdDebug () << "No valid data" << endl;
+ return;
+ }
+ // set up the table fields
+ table->setNumCols (2);
+ table->setNumRows (elm->childNodes ()->length ());
+ table->verticalHeader ()->hide ();
+ table->setLeftMargin (0);
+ table->horizontalHeader ()->hide ();
+ table->setTopMargin (0);
+ table->setColumnReadOnly (0, true);
+ QFontMetrics metrics (table->font ());
+ for (elm=elm->firstChild (); elm; elm=elm->nextSibling (), row++) {
+ TypeNode * tn = convertNode <TypeNode> (elm);
+ QString name = tn->getAttribute (StringPool::attr_name);
+ m_configframe->table->setText (row, 0, name);
+ int strwid = metrics.boundingRect (name).width ();
+ if (strwid > first_column_width)
+ first_column_width = strwid + 4;
+ QWidget * w = tn->createWidget (table->viewport ());
+ if (w) {
+ table->setCellWidget (row, 1, w);
+ QWhatsThis::add (w, elm->innerText ());
+ } else
+ kdDebug () << "No widget for " << name;
+ }
+ table->setColumnWidth (0, first_column_width);
+ table->setColumnStretchable (1, true);
+ }
+ }
+}
+
+KDE_NO_EXPORT void XMLPreferencesPage::prefLocation (QString & item, QString & icon, QString & tab) {
+ item = i18n ("General Options");
+ icon = QString ("kmplayer");
+ tab = m_process->menuName ();
+}
+
+KDE_NO_EXPORT QFrame * XMLPreferencesPage::prefPage (QWidget * parent) {
+ m_configframe = new XMLPreferencesFrame (parent, m_process);
+ return m_configframe;
+}
+
+//-----------------------------------------------------------------------------
+
+static const char * xine_supported [] = {
+ "dvdnavsource", "dvdsource", "exitsource", "introsource", "pipesource",
+ "tvsource", "urlsource", "vcdsource", "audiocdsource", 0L
+};
+
+KDE_NO_CDTOR_EXPORT Xine::Xine (QObject * parent, Settings * settings)
+ : CallbackProcess (parent, settings, "xine", i18n ("&Xine")) {
+#ifdef HAVE_XINE
+ m_supported_sources = xine_supported;
+ m_settings->addPage (m_configpage);
+#endif
+}
+
+KDE_NO_CDTOR_EXPORT Xine::~Xine () {}
+
+bool Xine::ready (Viewer * viewer) {
+ initProcess (viewer);
+ viewer->changeProtocol (QXEmbed::XPLAIN);
+ QString xine_config = KProcess::quote (QString (QFile::encodeName (locateLocal ("data", "kmplayer/") + QString ("xine_config"))));
+ m_request_seek = -1;
+ if (m_source && !m_source->pipeCmd ().isEmpty ()) {
+ fprintf (stderr, "%s | ", m_source->pipeCmd ().ascii ());
+ *m_process << m_source->pipeCmd ().ascii () << " | ";
+ }
+ fprintf (stderr, "kxineplayer -wid %lu", (unsigned long) widget ());
+ *m_process << "kxineplayer -wid " << QString::number (widget ());
+ fprintf (stderr, " -f %s", xine_config.ascii ());
+ *m_process << " -f " << xine_config;
+
+ QString strVideoDriver = QString (m_settings->videodrivers[m_settings->videodriver].driver);
+ if (!strVideoDriver.isEmpty ()) {
+ fprintf (stderr, " -vo %s", strVideoDriver.lower().ascii());
+ *m_process << " -vo " << strVideoDriver.lower();
+ }
+ QString strAudioDriver = QString (m_settings->audiodrivers[m_settings->audiodriver].driver);
+ if (!strAudioDriver.isEmpty ()) {
+ if (strAudioDriver.startsWith (QString ("alsa")))
+ strAudioDriver = QString ("alsa");
+ fprintf (stderr, " -ao %s", strAudioDriver.lower().ascii());
+ *m_process << " -ao " << strAudioDriver.lower();
+ }
+ fprintf (stderr, " -cb %s", dcopName ().ascii());
+ *m_process << " -cb " << dcopName ();
+ if (m_have_config == config_unknown || m_have_config == config_probe) {
+ fprintf (stderr, " -c");
+ *m_process << " -c";
+ }
+ if (m_source)
+ if (m_source->url ().url ().startsWith (QString ("dvd://")) &&
+ !m_settings->dvddevice.isEmpty ()) {
+ fprintf (stderr, " -dvd-device %s", m_settings->dvddevice.ascii ());
+ *m_process << " -dvd-device " << m_settings->dvddevice;
+ } else if (m_source->url ().url ().startsWith (QString ("vcd://")) &&
+ !m_settings->vcddevice.isEmpty ()) {
+ fprintf (stderr, " -vcd-device %s", m_settings->vcddevice.ascii ());
+ *m_process << " -vcd-device " << m_settings->vcddevice;
+ } else if (m_source->url ().url ().startsWith (QString ("tv://")) &&
+ !m_source->videoDevice ().isEmpty ()) {
+ fprintf (stderr, " -vd %s", m_source->videoDevice ().ascii ());
+ *m_process << " -vd " << m_source->videoDevice ();
+ }
+ if (!m_recordurl.isEmpty ()) {
+ QString rf = KProcess::quote (
+ QString (QFile::encodeName (getPath (m_recordurl))));
+ fprintf (stderr, " -rec %s", rf.ascii ());
+ *m_process << " -rec " << rf;
+ }
+ fprintf (stderr, "\n");
+ m_process->start (KProcess::NotifyOnExit, KProcess::All);
+ return m_process->isRunning ();
+}
+
+// TODO:input.v4l_video_device_path input.v4l_radio_device_path
+// v4l:/Webcam/0 v4l:/Television/21600 v4l:/Radio/96
+
+//-----------------------------------------------------------------------------
+
+static const char * gst_supported [] = {
+ "exitsource", "introsource", "urlsource", "vcdsource", "audiocdsource", 0L
+};
+
+KDE_NO_CDTOR_EXPORT GStreamer::GStreamer (QObject * parent, Settings * settings)
+ : CallbackProcess (parent, settings, "gstreamer", i18n ("&GStreamer")) {
+#ifdef HAVE_GSTREAMER
+ m_supported_sources = gst_supported;
+#endif
+}
+
+KDE_NO_CDTOR_EXPORT GStreamer::~GStreamer () {}
+
+KDE_NO_EXPORT bool GStreamer::ready (Viewer * viewer) {
+ initProcess (viewer);
+ viewer->changeProtocol (QXEmbed::XPLAIN);
+ m_request_seek = -1;
+ fprintf (stderr, "kgstplayer -wid %lu", (unsigned long) widget ());
+ *m_process << "kgstplayer -wid " << QString::number (widget ());
+
+ QString strVideoDriver = QString (m_settings->videodrivers[m_settings->videodriver].driver);
+ if (!strVideoDriver.isEmpty ()) {
+ fprintf (stderr, " -vo %s", strVideoDriver.lower().ascii());
+ *m_process << " -vo " << strVideoDriver.lower();
+ }
+ QString strAudioDriver = QString (m_settings->audiodrivers[m_settings->audiodriver].driver);
+ if (!strAudioDriver.isEmpty ()) {
+ if (strAudioDriver.startsWith (QString ("alsa")))
+ strAudioDriver = QString ("alsa");
+ fprintf (stderr, " -ao %s", strAudioDriver.lower().ascii());
+ *m_process << " -ao " << strAudioDriver.lower();
+ }
+ fprintf (stderr, " -cb %s", dcopName ().ascii());
+ *m_process << " -cb " << dcopName ();
+ if (m_source)
+ if (m_source->url ().url ().startsWith (QString ("dvd://")) &&
+ !m_settings->dvddevice.isEmpty ()) {
+ fprintf (stderr, " -dvd-device %s", m_settings->dvddevice.ascii ());
+ *m_process << " -dvd-device " << m_settings->dvddevice;
+ } else if (m_source->url ().url ().startsWith (QString ("vcd://")) &&
+ !m_settings->vcddevice.isEmpty ()) {
+ fprintf (stderr, " -vcd-device %s", m_settings->vcddevice.ascii ());
+ *m_process << " -vcd-device " << m_settings->vcddevice;
+ }
+ fprintf (stderr, "\n");
+ m_process->start (KProcess::NotifyOnExit, KProcess::All);
+ return m_process->isRunning ();
+}
+
+//-----------------------------------------------------------------------------
+
+static const char * ffmpeg_supports [] = {
+ "tvsource", "urlsource", 0L
+};
+
+FFMpeg::FFMpeg (QObject * parent, Settings * settings)
+ : Process (parent, settings, "ffmpeg") {
+ m_supported_sources = ffmpeg_supports;
+}
+
+KDE_NO_CDTOR_EXPORT FFMpeg::~FFMpeg () {
+}
+
+KDE_NO_EXPORT void FFMpeg::init () {
+}
+
+bool FFMpeg::deMediafiedPlay () {
+ initProcess (viewer ());
+ KURL url (m_url);
+ connect (m_process, SIGNAL (processExited (KProcess *)),
+ this, SLOT (processStopped (KProcess *)));
+ QString outurl = QString (QFile::encodeName (m_recordurl.isLocalFile () ? getPath (m_recordurl) : m_recordurl.url ()));
+ if (m_recordurl.isLocalFile ())
+ QFile (outurl).remove ();
+ QString cmd ("ffmpeg ");
+ if (!m_source->videoDevice ().isEmpty () ||
+ !m_source->audioDevice ().isEmpty ()) {
+ if (!m_source->videoDevice ().isEmpty ())
+ cmd += QString ("-vd ") + m_source->videoDevice ();
+ else
+ cmd += QString ("-vn");
+ if (!m_source->audioDevice ().isEmpty ())
+ cmd += QString (" -ad ") + m_source->audioDevice ();
+ else
+ cmd += QString (" -an");
+ KProcess process;
+ process.setUseShell (true);
+ if (!m_source->videoNorm ().isEmpty ()) {
+ process << "v4lctl -c " << m_source->videoDevice () << " setnorm " << m_source->videoNorm ();
+ kdDebug () << "v4lctl -c " << m_source->videoDevice () << " setnorm " << m_source->videoNorm () << endl;
+ process.start (KProcess::Block);
+ cmd += QString (" -tvstd ") + m_source->videoNorm ();
+ }
+ if (m_source->frequency () > 0) {
+ process.clearArguments();
+ process << "v4lctl -c " << m_source->videoDevice () << " setfreq " << QString::number (m_source->frequency ());
+ kdDebug () << "v4lctl -c " << m_source->videoDevice () << " setfreq " << m_source->frequency () << endl;
+ process.start (KProcess::Block);
+ }
+ } else {
+ cmd += QString ("-i ") + KProcess::quote (QString (QFile::encodeName (url.isLocalFile () ? getPath (url) : url.url ())));
+ }
+ cmd += QChar (' ') + m_settings->ffmpegarguments;
+ cmd += QChar (' ') + KProcess::quote (QString (QFile::encodeName (outurl)));
+ fprintf (stderr, "%s\n", (const char *) cmd.local8Bit ());
+ *m_process << cmd;
+ // FIXME if (m_player->source () == source) // ugly
+ // m_player->stop ();
+ m_process->start (KProcess::NotifyOnExit, KProcess::All);
+ if (m_process->isRunning ())
+ setState (Playing);
+ return m_process->isRunning ();
+}
+
+KDE_NO_EXPORT bool FFMpeg::stop () {
+ terminateJobs ();
+ if (!playing ()) return true;
+ kdDebug () << "FFMpeg::stop" << endl;
+ m_process->writeStdin ("q", 1);
+ return true;
+}
+
+KDE_NO_EXPORT bool FFMpeg::quit () {
+ stop ();
+ if (!playing ()) return true;
+ QTime t;
+ t.start ();
+ do {
+ KProcessController::theKProcessController->waitForProcessExit (2);
+ } while (t.elapsed () < 2000 && m_process->isRunning ());
+ return Process::quit ();
+}
+
+KDE_NO_EXPORT void FFMpeg::processStopped (KProcess *) {
+ setState (NotRunning);
+}
+
+//-----------------------------------------------------------------------------
+
+#ifdef HAVE_NSPR
+
+struct KMPLAYER_NO_EXPORT DBusStatic {
+ DBusStatic ();
+ ~DBusStatic ();
+ DBusQt::Connection *connection; // FIXME find a way to detect if already connected
+ DBusConnection *dbus_connnection;
+};
+
+static DBusStatic * dbus_static = 0L;
+
+DBusStatic::DBusStatic ()
+ : connection (new DBusQt::Connection (DBUS_BUS_SESSION, 0L)),
+ dbus_connnection (0L) {}
+
+DBusStatic::~DBusStatic () {
+ dbus_connection_unref (dbus_connnection);
+ delete connection;
+ dbus_static = 0L;
+}
+
+static KStaticDeleter <DBusStatic> dbus_static_deleter;
+
+//------------------%<---------------------------------------------------------
+
+static DBusHandlerResult
+dbusFilter (DBusConnection *conn, DBusMessage *msg, void *data) {
+ DBusMessageIter args;
+ //const char *iface = "org.kde.kmplayer.backend";
+ NpPlayer *process = (NpPlayer *) data;
+ const char * iface = process->interface ().ascii ();
+ const char * path = dbus_message_get_path (msg);
+
+ if (dbus_message_has_destination (msg, process->destination ().ascii ()) &&
+ dbus_message_has_interface (msg, iface) &&
+ QString (path).startsWith(process->objectPath ()))
+ {
+ //kdDebug () << "dbusFilter " << sender <<
+ // " iface:" << dbus_message_get_interface (msg) <<
+ // " member:" << dbus_message_get_member (msg) <<
+ // " dest:" << dbus_message_get_destination (msg) << endl;
+
+ if (dbus_message_is_method_call (msg, iface, "getUrl")) {
+ char *param = 0;
+ QString url, target;
+ if (dbus_message_iter_init (msg, &args) &&
+ DBUS_TYPE_STRING == dbus_message_iter_get_arg_type(&args)) {
+ dbus_message_iter_get_basic (&args, &param);
+ url = QString::fromLocal8Bit (param);
+ if (dbus_message_iter_next (&args) &&
+ DBUS_TYPE_STRING==dbus_message_iter_get_arg_type(&args)) {
+ dbus_message_iter_get_basic (&args, &param);
+ target = QString::fromLocal8Bit (param);
+ }
+ process->requestStream (path, url, target);
+ }
+ //kdDebug () << "getUrl " << param << endl;
+
+ } else if (dbus_message_is_method_call (msg, iface, "evaluate")) {
+ char *param = 0;
+ if (dbus_message_iter_init (msg, &args) &&
+ DBUS_TYPE_STRING == dbus_message_iter_get_arg_type(&args)) {
+ dbus_message_iter_get_basic (&args, &param);
+ QString r = process->evaluateScript (QString::fromUtf8 (param));
+ DBusMessage * rmsg = dbus_message_new_method_return (msg);
+ char *res = strdup (r.utf8 ().data ());
+ //kdDebug () << "evaluate => " << res << endl;
+ dbus_message_append_args (rmsg,
+ DBUS_TYPE_STRING, &res,
+ DBUS_TYPE_INVALID);
+ dbus_connection_send (conn, rmsg, NULL);
+ dbus_connection_flush (conn);
+ dbus_message_unref (rmsg);
+ free (res);
+ }
+
+ } else if (dbus_message_is_method_call (msg, iface, "destroy")) {
+ QString stream =QString(path).mid(process->objectPath().length()+1);
+ process->destroyStream (stream);
+
+ } else if (dbus_message_is_method_call (msg, iface, "running")) {
+ char *param = 0;
+ if (dbus_message_iter_init (msg, &args) &&
+ DBUS_TYPE_STRING == dbus_message_iter_get_arg_type(&args)) {
+ dbus_message_iter_get_basic (&args, &param);
+ process->setStarted (QString (param));
+ }
+
+ } else if (dbus_message_is_method_call (msg, iface, "plugged")) {
+ process->viewer ()->view ()->videoStart ();
+ } else if (dbus_message_is_method_call (msg, iface, "dimension")) {
+ Q_UINT32 w, h;
+ if (dbus_message_iter_init (msg, &args) &&
+ DBUS_TYPE_UINT32 == dbus_message_iter_get_arg_type(&args)) {
+ dbus_message_iter_get_basic (&args, &w);
+ if (dbus_message_iter_next (&args) &&
+ DBUS_TYPE_UINT32 == dbus_message_iter_get_arg_type(&args)) {
+ dbus_message_iter_get_basic (&args, &h);
+ if (h > 0)
+ process->source ()->setAspect (process->mrl(), 1.0*w/h);
+ }
+ }
+ }
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+KDE_NO_CDTOR_EXPORT
+NpStream::NpStream (QObject *p, Q_UINT32 sid, const KURL & u)
+ : QObject (p),
+ url (u),
+ job (0L), bytes (0), content_length (0),
+ stream_id (sid),
+ finish_reason (NoReason) {
+ data_arrival.tv_sec = 0;
+}
+
+KDE_NO_CDTOR_EXPORT NpStream::~NpStream () {
+ close ();
+}
+
+KDE_NO_EXPORT void NpStream::open () {
+ kdDebug () << "NpStream " << stream_id << " open " << url.url () << endl;
+ if (url.url().startsWith ("javascript:")) {
+ NpPlayer *npp = static_cast <NpPlayer *> (parent ());
+ QString result = npp->evaluateScript (url.url().mid (11));
+ if (!result.isEmpty ()) {
+ QCString cr = result.local8Bit ();
+ int len = cr.length ();
+ pending_buf.resize (len + 1);
+ memcpy (pending_buf.data (), cr.data (), len);
+ pending_buf.data ()[len] = 0;
+ gettimeofday (&data_arrival, 0L);
+ }
+ kdDebug () << "result is " << pending_buf.data () << endl;
+ finish_reason = BecauseDone;
+ emit stateChanged ();
+ } else {
+ job = KIO::get (url, false, false);
+ job->addMetaData ("errorPage", "false");
+ connect (job, SIGNAL (data (KIO::Job *, const QByteArray &)),
+ this, SLOT (slotData (KIO::Job *, const QByteArray &)));
+ connect (job, SIGNAL (result (KIO::Job *)),
+ this, SLOT (slotResult (KIO::Job *)));
+ connect (job, SIGNAL (redirection (KIO::Job *, const KURL &)),
+ this, SLOT (redirection (KIO::Job *, const KURL &)));
+ connect (job, SIGNAL (mimetype (KIO::Job *, const QString &)),
+ SLOT (slotMimetype (KIO::Job *, const QString &)));
+ connect (job, SIGNAL (totalSize (KIO::Job *, KIO::filesize_t)),
+ SLOT (slotTotalSize (KIO::Job *, KIO::filesize_t)));
+ }
+}
+
+KDE_NO_EXPORT void NpStream::close () {
+ if (job) {
+ job->kill (); // quiet, no result signal
+ job = 0L;
+ finish_reason = BecauseStopped;
+ // don't emit stateChanged(), because always triggered from NpPlayer
+ }
+}
+
+KDE_NO_EXPORT void NpStream::slotResult (KIO::Job *jb) {
+ kdDebug() << "slotResult " << bytes << " err:" << jb->error () << endl;
+ finish_reason = jb->error () ? BecauseError : BecauseDone;
+ job = 0L; // signal KIO::Job::result deletes itself
+ emit stateChanged ();
+}
+
+KDE_NO_EXPORT void NpStream::slotData (KIO::Job*, const QByteArray& qb) {
+ pending_buf = qb; // we suspend job, so qb should be valid until resume
+ if (qb.size()) {
+ job->suspend ();
+ gettimeofday (&data_arrival, 0L);
+ emit stateChanged ();
+ }
+}
+
+KDE_NO_EXPORT void NpStream::redirection (KIO::Job *, const KURL &u) {
+ url = u;
+ emit redirected (stream_id, url);
+}
+
+void NpStream::slotMimetype (KIO::Job *, const QString &mime) {
+ mimetype = mime;
+}
+
+void NpStream::slotTotalSize (KIO::Job *, KIO::filesize_t sz) {
+ content_length = sz;
+}
+
+static const char * npplayer_supports [] = {
+ "urlsource", 0L
+};
+
+KDE_NO_CDTOR_EXPORT
+NpPlayer::NpPlayer (QObject * parent, Settings * settings, const QString & srv)
+ : Process (parent, settings, "npp"),
+ service (srv),
+ write_in_progress (false) {
+ m_supported_sources = npplayer_supports;
+}
+
+KDE_NO_CDTOR_EXPORT NpPlayer::~NpPlayer () {
+ if (!iface.isEmpty ()) {
+ DBusError dberr;
+ dbus_error_init (&dberr);
+ DBusConnection *conn = dbus_static->dbus_connnection;
+ if (conn) {
+ dbus_bus_remove_match (conn, filter.ascii(), &dberr);
+ if (dbus_error_is_set (&dberr))
+ dbus_error_free (&dberr);
+ dbus_connection_remove_filter (conn, dbusFilter, this);
+ dbus_connection_flush (conn);
+ }
+ }
+}
+
+KDE_NO_EXPORT void NpPlayer::init () {
+}
+
+KDE_NO_EXPORT void NpPlayer::initProcess (Viewer * viewer) {
+ Process::initProcess (viewer);
+ connect (m_process, SIGNAL (processExited (KProcess *)),
+ this, SLOT (processStopped (KProcess *)));
+ connect (m_process, SIGNAL (receivedStdout (KProcess *, char *, int)),
+ this, SLOT (processOutput (KProcess *, char *, int)));
+ connect (m_process, SIGNAL (receivedStderr (KProcess *, char *, int)),
+ this, SLOT (processOutput (KProcess *, char *, int)));
+ connect (m_process, SIGNAL (wroteStdin (KProcess *)),
+ this, SLOT (wroteStdin (KProcess *)));
+ if (!dbus_static)
+ dbus_static = dbus_static_deleter.setObject (new DBusStatic ());
+ if (iface.isEmpty ()) {
+ DBusError dberr;
+ iface = QString ("org.kde.kmplayer.callback");
+ static int count = 0;
+ path = QString ("/npplayer%1").arg (count++);
+ filter = QString ("type='method_call',interface='org.kde.kmplayer.callback'");
+
+ dbus_error_init (&dberr);
+ DBusConnection *conn = dbus_bus_get (DBUS_BUS_SESSION, &dberr);
+ if (dbus_error_is_set (&dberr))
+ dbus_error_free (&dberr);
+ if (!conn) {
+ kdError () << "Failed to get dbus connection: " << dberr.message << endl;
+ return;
+ }
+ bool has_service = !service.isEmpty();
+ if (has_service) { // standalone kmplayer
+ dbus_bus_request_name (conn, service.ascii(),
+ DBUS_NAME_FLAG_DO_NOT_QUEUE, &dberr);
+ if (dbus_error_is_set (&dberr)) {
+ kdError () << "Failed to register name " << service << ": " << dberr.message;
+ dbus_error_free (&dberr);
+ has_service = false;
+ }
+ }
+ if (!has_service) // plugin, accept what-is [sic]
+ service = QString (dbus_bus_get_unique_name (conn));
+ kdDebug() << "using service " << service << " interface " << iface << endl;
+ dbus_bus_add_match (conn, filter.ascii(), &dberr);
+ if (dbus_error_is_set (&dberr)) {
+ kdError () << "Failed to set match " << filter << ": " << dberr.message << endl;
+ dbus_error_free (&dberr);
+ }
+ dbus_connection_add_filter (conn, dbusFilter, this, 0L);
+ dbus_connection_flush (conn);
+ dbus_static->dbus_connnection = conn;
+ }
+}
+
+KDE_NO_EXPORT bool NpPlayer::deMediafiedPlay () {
+ kdDebug() << "NpPlayer::play '" << m_url << "'" << endl;
+ // if we change from XPLAIN to XEMBED, the DestroyNotify may come later
+ viewer ()->changeProtocol (QXEmbed::XEMBED);
+ if (m_mrl && !m_url.isEmpty () && dbus_static->dbus_connnection) {
+ QString mime = "text/plain";
+ QString plugin;
+ Element *elm = m_mrl->mrl ();
+ if (elm->id == id_node_html_object) {
+ // this sucks to have to do this here ..
+ for (NodePtr n = elm->firstChild (); n; n = n->nextSibling ())
+ if (n->id == KMPlayer::id_node_html_embed) {
+ elm = convertNode <Element> (n);
+ break;
+ }
+ }
+ for (NodePtr n = m_mrl; n; n = n->parentNode ()) {
+ Mrl *mrl = n->mrl ();
+ if (mrl && m_base_url.isEmpty ())
+ m_base_url = mrl->getAttribute ("pluginbaseurl");
+ if (mrl && !mrl->mimetype.isEmpty ()) {
+ plugin = m_source->plugin (mrl->mimetype);
+ kdDebug() << "search plugin " << mrl->mimetype << "->" << plugin << endl;
+ if (!plugin.isEmpty ()) {
+ mime = mrl->mimetype;
+ break;
+ }
+ }
+ }
+ if (!plugin.isEmpty ()) {
+ DBusMessage *msg = dbus_message_new_method_call (
+ remote_service.ascii(),
+ "/plugin",
+ "org.kde.kmplayer.backend",
+ "play");
+ char *c_url = strdup (m_url.local8Bit().data ());
+ char *c_mime = strdup (mime.ascii ());
+ char *c_plugin = strdup (plugin.ascii ());
+ DBusMessageIter it;
+ dbus_message_iter_init_append (msg, &it);
+ dbus_message_iter_append_basic (&it, DBUS_TYPE_STRING, &c_url);
+ dbus_message_iter_append_basic (&it, DBUS_TYPE_STRING, &c_mime);
+ dbus_message_iter_append_basic (&it, DBUS_TYPE_STRING, &c_plugin);
+ unsigned int param_len = elm->attributes ()->length ();
+ char **argn = (char **) malloc (param_len * sizeof (char *));
+ char **argv = (char **) malloc (param_len * sizeof (char *));
+ dbus_message_iter_append_basic (&it, DBUS_TYPE_UINT32, &param_len);
+ DBusMessageIter ait;
+ dbus_message_iter_open_container (&it, DBUS_TYPE_ARRAY,"{ss}",&ait);
+ AttributePtr a = elm->attributes ()->first ();
+ for (int i = 0; i < param_len && a; i++, a = a->nextSibling ()) {
+ DBusMessageIter dit;
+ dbus_message_iter_open_container (&ait,
+ DBUS_TYPE_DICT_ENTRY,
+ NULL,
+ &dit);
+ argn[i] = strdup (a->name ().toString ().local8Bit().data ());
+ argv[i] = strdup (a->value ().local8Bit().data ());
+ dbus_message_iter_append_basic (&dit, DBUS_TYPE_STRING, &argn[i]);
+ dbus_message_iter_append_basic (&dit, DBUS_TYPE_STRING, &argv[i]);
+ dbus_message_iter_close_container (&ait, &dit);
+ }
+ dbus_message_iter_close_container (&it, &ait);
+ dbus_message_set_no_reply (msg, TRUE);
+ dbus_connection_send (dbus_static->dbus_connnection, msg, NULL);
+ dbus_message_unref (msg);
+ dbus_connection_flush (dbus_static->dbus_connnection);
+ free (c_url);
+ free (c_mime);
+ free (c_plugin);
+ for (int i = 0; i < param_len; i++) {
+ free (argn[i]);
+ free (argv[i]);
+ }
+ free (argn);
+ free (argv);
+ setState (Buffering);
+ return true;
+ }
+ }
+ stop ();
+ return false;
+}
+
+KDE_NO_EXPORT bool NpPlayer::ready (Viewer * viewer) {
+ if (playing ())
+ return true; // wait for callback
+ initProcess (viewer);
+ viewer->changeProtocol (QXEmbed::XEMBED);
+ kdDebug() << "NpPlayer::ready" << endl;
+ QString cmd ("knpplayer");
+ cmd += QString (" -cb ");
+ cmd += service;
+ cmd += path;
+ cmd += QString (" -wid ");
+ cmd += QString::number (viewer->winId ());
+ fprintf (stderr, "%s\n", cmd.local8Bit ().data ());
+ *m_process << cmd;
+ m_process->start (KProcess::NotifyOnExit, KProcess::All);
+ return m_process->isRunning ();
+}
+
+KDE_NO_EXPORT void NpPlayer::setStarted (const QString & srv) {
+ remote_service = srv;
+ kdDebug () << "NpPlayer::setStarted " << srv << endl;
+ setState (Ready);
+}
+
+KDE_NO_EXPORT QString NpPlayer::evaluateScript (const QString & script) {
+ QString result;
+ emit evaluate (script, result);
+ //kdDebug () << "evaluateScript " << script << " => " << result << endl;
+ return result;
+}
+
+static int getStreamId (const QString &path) {
+ int p = path.findRev (QChar ('_'));
+ if (p < 0) {
+ kdError() << "wrong object path " << path << endl;
+ return -1;
+ }
+ bool ok;
+ Q_UINT32 sid = path.mid (p+1).toInt (&ok);
+ if (!ok) {
+ kdError() << "wrong object path suffix " << path.mid (p+1) << endl;
+ return -1;
+ }
+ return sid;
+}
+
+KDE_NO_EXPORT
+void NpPlayer::requestStream (const QString &path, const QString & url, const QString & target) {
+ KURL uri (m_base_url.isEmpty () ? m_url : m_base_url, url);
+ kdDebug () << "NpPlayer::request " << path << " '" << uri << "'" << endl;
+ Q_UINT32 sid = getStreamId (path);
+ if (sid >= 0) {
+ if (!target.isEmpty ()) {
+ kdDebug () << "new page request " << target << endl;
+ if (url.startsWith ("javascript:")) {
+ QString result = evaluateScript (url.mid (11));
+ kdDebug() << "result is " << result << endl;
+ if (result == "undefined")
+ uri = KURL ();
+ else
+ uri = KURL (m_url, result); // probably wrong ..
+ }
+ if (uri.isValid ())
+ emit openUrl (uri, target);
+ sendFinish (sid, 0, NpStream::BecauseDone);
+ } else {
+ NpStream * ns = new NpStream (this, sid, uri);
+ connect (ns, SIGNAL (stateChanged ()),
+ this, SLOT (streamStateChanged ()));
+ streams[sid] = ns;
+ if (url != uri.url ())
+ streamRedirected (sid, uri.url ());
+ if (!write_in_progress)
+ processStreams ();
+ }
+ }
+}
+
+KDE_NO_EXPORT void NpPlayer::destroyStream (const QString &s) {
+ int sid = getStreamId (s);
+ if (sid >= 0 && streams.contains ((Q_UINT32) sid)) {
+ NpStream *ns = streams[(Q_UINT32) sid];
+ ns->close ();
+ if (!write_in_progress)
+ processStreams ();
+ } else {
+ kdWarning () << "Object " << s << " not found" << endl;
+ }
+}
+
+KDE_NO_EXPORT
+void NpPlayer::sendFinish (Q_UINT32 sid, Q_UINT32 bytes, NpStream::Reason because) {
+ if (playing () && dbus_static->dbus_connnection) {
+ Q_UINT32 reason = (int) because;
+ QString objpath = QString ("/plugin/stream_%1").arg (sid);
+ DBusMessage *msg = dbus_message_new_method_call (
+ remote_service.ascii(),
+ objpath.ascii (),
+ "org.kde.kmplayer.backend",
+ "eof");
+ dbus_message_append_args(msg,
+ DBUS_TYPE_UINT32, &bytes,
+ DBUS_TYPE_UINT32, &reason,
+ DBUS_TYPE_INVALID);
+ dbus_message_set_no_reply (msg, TRUE);
+ dbus_connection_send (dbus_static->dbus_connnection, msg, NULL);
+ dbus_message_unref (msg);
+ dbus_connection_flush (dbus_static->dbus_connnection);
+ }
+}
+
+KDE_NO_EXPORT void NpPlayer::terminateJobs () {
+ Process::terminateJobs ();
+ const StreamMap::iterator e = streams.end ();
+ for (StreamMap::iterator i = streams.begin (); i != e; ++i)
+ delete i.data ();
+ streams.clear ();
+}
+
+KDE_NO_EXPORT bool NpPlayer::stop () {
+ terminateJobs ();
+ if (!playing ()) return true;
+ kdDebug () << "NpPlayer::stop " << endl;
+ if (dbus_static->dbus_connnection) {
+ DBusMessage *msg = dbus_message_new_method_call (
+ remote_service.ascii(),
+ "/plugin",
+ "org.kde.kmplayer.backend",
+ "quit");
+ dbus_message_set_no_reply (msg, TRUE);
+ dbus_connection_send (dbus_static->dbus_connnection, msg, NULL);
+ dbus_message_unref (msg);
+ dbus_connection_flush (dbus_static->dbus_connnection);
+ }
+ return true;
+}
+
+KDE_NO_EXPORT bool NpPlayer::quit () {
+ if (playing ()) {
+ stop ();
+ QTime t;
+ t.start ();
+ do {
+ KProcessController::theKProcessController->waitForProcessExit (2);
+ } while (t.elapsed () < 2000 && m_process->isRunning ());
+ return Process::quit ();
+ }
+ return true;
+}
+
+KDE_NO_EXPORT void NpPlayer::processOutput (KProcess *, char * str, int slen) {
+ if (viewer () && slen > 0)
+ viewer ()->view ()->addText (QString::fromLocal8Bit (str, slen));
+}
+
+KDE_NO_EXPORT void NpPlayer::processStopped (KProcess *) {
+ terminateJobs ();
+ if (m_source)
+ ((PlayListNotify *) m_source)->setInfoMessage (QString ());
+ setState (NotRunning);
+}
+
+KDE_NO_EXPORT void NpPlayer::streamStateChanged () {
+ setState (Playing); // hmm, this doesn't really fit in current states
+ if (!write_in_progress)
+ processStreams ();
+}
+
+KDE_NO_EXPORT void NpPlayer::streamRedirected (Q_UINT32 sid, const KURL &u) {
+ if (playing () && dbus_static->dbus_connnection) {
+ kdDebug() << "redirected " << sid << " to " << u.url() << endl;
+ char *cu = strdup (u.url ().local8Bit().data ());
+ QString objpath = QString ("/plugin/stream_%1").arg (sid);
+ DBusMessage *msg = dbus_message_new_method_call (
+ remote_service.ascii(),
+ objpath.ascii (),
+ "org.kde.kmplayer.backend",
+ "redirected");
+ dbus_message_append_args(msg, DBUS_TYPE_STRING, &cu, DBUS_TYPE_INVALID);
+ dbus_message_set_no_reply (msg, TRUE);
+ dbus_connection_send (dbus_static->dbus_connnection, msg, NULL);
+ dbus_message_unref (msg);
+ dbus_connection_flush (dbus_static->dbus_connnection);
+ free (cu);
+ }
+}
+
+KDE_NO_EXPORT void NpPlayer::processStreams () {
+ NpStream *stream = 0L;
+ Q_UINT32 stream_id;
+ timeval tv = { 0x7fffffff, 0 };
+ const StreamMap::iterator e = streams.end ();
+ int active_count = 0;
+ //kdDebug() << "NpPlayer::processStreams " << streams.size() << endl;
+ for (StreamMap::iterator i = streams.begin (); i != e;) {
+ NpStream *ns = i.data ();
+ if (ns->job) {
+ active_count++;
+ } else if (active_count < 5 &&
+ ns->finish_reason == NpStream::NoReason) {
+ write_in_progress = true; // javascript: urls emit stateChange
+ ns->open ();
+ write_in_progress = false;
+ if (ns->job) {
+ connect (ns, SIGNAL (redirected (Q_UINT32, const KURL&)),
+ this, SLOT (streamRedirected (Q_UINT32, const KURL&)));
+ active_count++;
+ }
+ }
+ if (ns->finish_reason == NpStream::BecauseStopped ||
+ ns->finish_reason == NpStream::BecauseError ||
+ (ns->finish_reason == NpStream::BecauseDone &&
+ ns->pending_buf.size () == 0)) {
+ sendFinish (i.key(), ns->bytes, ns->finish_reason);
+ StreamMap::iterator ii = i;
+ ++ii;
+ streams.erase (i);
+ i = ii;
+ delete ns;
+ } else {
+ if (ns->pending_buf.size () > 0 &&
+ (ns->data_arrival.tv_sec < tv.tv_sec ||
+ (ns->data_arrival.tv_sec == tv.tv_sec &&
+ ns->data_arrival.tv_usec < tv.tv_usec))) {
+ tv = ns->data_arrival;
+ stream = ns;
+ stream_id = i.key();
+ }
+ ++i;
+ }
+ }
+ //kdDebug() << "NpPlayer::processStreams " << stream << endl;
+ if (stream) {
+ if (dbus_static->dbus_connnection &&
+ !stream->bytes &&
+ (!stream->mimetype.isEmpty() || stream->content_length)) {
+ char *mt = strdup (stream->mimetype.isEmpty ()
+ ? ""
+ : stream->mimetype.utf8 ().data ());
+ QString objpath=QString("/plugin/stream_%1").arg(stream->stream_id);
+ DBusMessage *msg = dbus_message_new_method_call (
+ remote_service.ascii(),
+ objpath.ascii (),
+ "org.kde.kmplayer.backend",
+ "streamInfo");
+ dbus_message_append_args (msg,
+ DBUS_TYPE_STRING, &mt,
+ DBUS_TYPE_UINT32, &stream->content_length,
+ DBUS_TYPE_INVALID);
+ dbus_message_set_no_reply (msg, TRUE);
+ dbus_connection_send (dbus_static->dbus_connnection, msg, NULL);
+ dbus_message_unref (msg);
+ dbus_connection_flush (dbus_static->dbus_connnection);
+ free (mt);
+ }
+ const int header_len = 2 * sizeof (Q_UINT32);
+ Q_UINT32 chunk = stream->pending_buf.size();
+ send_buf.resize (chunk + header_len);
+ memcpy (send_buf.data (), &stream_id, sizeof (Q_UINT32));
+ memcpy (send_buf.data() + sizeof (Q_UINT32), &chunk, sizeof (Q_UINT32));
+ memcpy (send_buf.data()+header_len, stream->pending_buf.data (), chunk);
+ stream->pending_buf = QByteArray ();
+ /*fprintf (stderr, " => %d %d\n", (long)stream_id, chunk);*/
+ stream->bytes += chunk;
+ write_in_progress = true;
+ m_process->writeStdin (send_buf.data (), send_buf.size ());
+ if (stream->finish_reason == NpStream::NoReason)
+ stream->job->resume ();
+ }
+}
+
+KDE_NO_EXPORT void NpPlayer::wroteStdin (KProcess *) {
+ write_in_progress = false;
+ if (playing ())
+ processStreams ();
+}
+
+KDE_NO_EXPORT QString NpPlayer::menuName () const {
+ return i18n ("&Ice Ape");
+}
+
+#else
+
+KDE_NO_CDTOR_EXPORT
+NpStream::NpStream (QObject *p, Q_UINT32, const KURL & url)
+ : QObject (p) {}
+
+KDE_NO_CDTOR_EXPORT NpStream::~NpStream () {}
+void NpStream::slotResult (KIO::Job*) {}
+void NpStream::slotData (KIO::Job*, const QByteArray&) {}
+void NpStream::redirection (KIO::Job *, const KURL &) {}
+void NpStream::slotMimetype (KIO::Job *, const QString &) {}
+void NpStream::slotTotalSize (KIO::Job *, KIO::filesize_t) {}
+
+KDE_NO_CDTOR_EXPORT
+NpPlayer::NpPlayer (QObject * parent, Settings * settings, const QString &)
+ : Process (parent, settings, "npp") {}
+KDE_NO_CDTOR_EXPORT NpPlayer::~NpPlayer () {}
+KDE_NO_EXPORT void NpPlayer::init () {}
+KDE_NO_EXPORT bool NpPlayer::deMediafiedPlay () { return false; }
+KDE_NO_EXPORT void NpPlayer::initProcess (Viewer *) {}
+KDE_NO_EXPORT QString NpPlayer::menuName () const { return QString (); }
+KDE_NO_EXPORT void NpPlayer::setStarted (const QString &) {}
+KDE_NO_EXPORT bool NpPlayer::stop () { return false; }
+KDE_NO_EXPORT bool NpPlayer::quit () { return false; }
+KDE_NO_EXPORT bool NpPlayer::ready (Viewer *) { return false; }
+KDE_NO_EXPORT void NpPlayer::processOutput (KProcess *, char *, int) {}
+KDE_NO_EXPORT void NpPlayer::processStopped (KProcess *) {}
+KDE_NO_EXPORT void NpPlayer::wroteStdin (KProcess *) {}
+KDE_NO_EXPORT void NpPlayer::streamStateChanged () {}
+KDE_NO_EXPORT void NpPlayer::streamRedirected (Q_UINT32, const KURL &) {}
+KDE_NO_EXPORT void NpPlayer::terminateJobs () {}
+
+#endif
+
+#include "kmplayerprocess.moc"
diff --git a/src/kmplayerprocess.h b/src/kmplayerprocess.h
new file mode 100644
index 0000000..8a51702
--- /dev/null
+++ b/src/kmplayerprocess.h
@@ -0,0 +1,500 @@
+/* This file is part of the KDE project
+ *
+ * Copyright (C) 2003 Koos Vriezen <koos.vriezen@xs4all.nl>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _KMPLAYERPROCESS_H_
+#define _KMPLAYERPROCESS_H_
+
+#include <qobject.h>
+#include <qguardedptr.h>
+#include <qstring.h>
+#include <qcstring.h>
+#include <qstringlist.h>
+#include <qregexp.h>
+
+#include <kurl.h>
+#include <kio/global.h>
+
+#include "kmplayerconfig.h"
+#include "kmplayersource.h"
+
+class QWidget;
+class KProcess;
+
+namespace KIO {
+ class Job;
+ class TransferJob;
+}
+
+namespace KMPlayer {
+
+class Settings;
+class Viewer;
+class Source;
+class Callback;
+class Backend_stub;
+
+/*
+ * Base class for all backend processes
+ */
+class KMPLAYER_EXPORT Process : public QObject {
+ Q_OBJECT
+public:
+ enum State {
+ NotRunning = 0, Ready, Buffering, Playing
+ };
+ Process (QObject * parent, Settings * settings, const char * n);
+ virtual ~Process ();
+ virtual void init ();
+ virtual void initProcess (Viewer *);
+ virtual QString menuName () const;
+ virtual void setAudioLang (int, const QString &);
+ virtual void setSubtitle (int, const QString &);
+ bool playing () const;
+ KDE_NO_EXPORT KProcess * process () const { return m_process; }
+ KDE_NO_EXPORT Source * source () const { return m_source; }
+ virtual WId widget ();
+ Viewer * viewer () const;
+ void setSource (Source * src) { m_source = src; }
+ virtual bool grabPicture (const KURL & url, int pos);
+ bool supports (const char * source) const;
+ State state () const { return m_state; }
+ NodePtr mrl () const { return m_mrl; }
+signals:
+ void grabReady (const QString & path);
+public slots:
+ virtual bool ready (Viewer *);
+ bool play (Source *, NodePtr mrl);
+ virtual bool stop ();
+ virtual bool quit ();
+ virtual bool pause ();
+ /* seek (pos, abs) seek position in deci-seconds */
+ virtual bool seek (int pos, bool absolute);
+ /* volume from 0 to 100 */
+ virtual bool volume (int pos, bool absolute);
+ /* saturation/hue/contrast/brightness from -100 to 100 */
+ virtual bool saturation (int pos, bool absolute);
+ virtual bool hue (int pos, bool absolute);
+ virtual bool contrast (int pos, bool absolute);
+ virtual bool brightness (int pos, bool absolute);
+protected slots:
+ void rescheduledStateChanged ();
+ void result (KIO::Job *);
+protected:
+ void setState (State newstate);
+ virtual bool deMediafiedPlay ();
+ virtual void terminateJobs ();
+ Source * m_source;
+ Settings * m_settings;
+ NodePtrW m_mrl;
+ State m_state;
+ State m_old_state;
+ KProcess * m_process;
+ KIO::Job * m_job;
+ QString m_url;
+ int m_request_seek;
+ const char ** m_supported_sources;
+private:
+ QGuardedPtr <Viewer> m_viewer;
+};
+
+/*
+ * Base class for all MPlayer based processes
+ */
+class MPlayerBase : public Process {
+ Q_OBJECT
+public:
+ MPlayerBase (QObject * parent, Settings * settings, const char * n);
+ ~MPlayerBase ();
+ void initProcess (Viewer *);
+public slots:
+ virtual bool stop ();
+ virtual bool quit ();
+protected:
+ bool sendCommand (const QString &);
+ QStringList commands;
+ bool m_use_slave : 1;
+protected slots:
+ virtual void processStopped (KProcess *);
+private slots:
+ void dataWritten (KProcess *);
+};
+
+class MPlayerPreferencesPage;
+class MPlayerPreferencesFrame;
+
+/*
+ * MPlayer process
+ */
+class KDE_EXPORT MPlayer : public MPlayerBase {
+ Q_OBJECT
+public:
+ MPlayer (QObject * parent, Settings * settings);
+ ~MPlayer ();
+ virtual void init ();
+ virtual QString menuName () const;
+ virtual WId widget ();
+ virtual bool grabPicture (const KURL & url, int pos);
+ virtual void setAudioLang (int, const QString &);
+ virtual void setSubtitle (int, const QString &);
+ bool run (const char * args, const char * pipe = 0L);
+public slots:
+ virtual bool deMediafiedPlay ();
+ virtual bool stop ();
+ virtual bool pause ();
+ virtual bool seek (int pos, bool absolute);
+ virtual bool volume (int pos, bool absolute);
+ virtual bool saturation (int pos, bool absolute);
+ virtual bool hue (int pos, bool absolute);
+ virtual bool contrast (int pos, bool absolute);
+ virtual bool brightness (int pos, bool absolute);
+ MPlayerPreferencesPage * configPage () const { return m_configpage; }
+ bool ready (Viewer *);
+protected slots:
+ void processStopped (KProcess *);
+private slots:
+ void processOutput (KProcess *, char *, int);
+private:
+ QString m_process_output;
+ QString m_grabfile;
+ QWidget * m_widget;
+ MPlayerPreferencesPage * m_configpage;
+ QString m_tmpURL;
+ struct LangInfo {
+ LangInfo (int i, const QString & n) : id (i), name (n) {}
+ int id; QString name; SharedPtr <LangInfo> next;
+ };
+ SharedPtr <LangInfo> alanglist;
+ WeakPtr <LangInfo> alanglist_end;
+ SharedPtr <LangInfo> slanglist;
+ WeakPtr <LangInfo> slanglist_end;
+ int aid, sid;
+ int old_volume;
+ bool m_needs_restarted;
+};
+
+/*
+ * MPlayer preferences page
+ */
+class KMPLAYER_NO_EXPORT MPlayerPreferencesPage : public PreferencesPage {
+public:
+ enum Pattern {
+ pat_size = 0, pat_cache, pat_pos, pat_index,
+ pat_refurl, pat_ref, pat_start,
+ pat_dvdlang, pat_dvdsub, pat_dvdtitle, pat_dvdchapter,
+ pat_vcdtrack, pat_cdromtracks,
+ pat_last
+ };
+ MPlayerPreferencesPage (MPlayer *);
+ KDE_NO_CDTOR_EXPORT ~MPlayerPreferencesPage () {}
+ void write (KConfig *);
+ void read (KConfig *);
+ void sync (bool fromUI);
+ void prefLocation (QString & item, QString & icon, QString & tab);
+ QFrame * prefPage (QWidget * parent);
+ QRegExp m_patterns[pat_last];
+ int cachesize;
+ QString mplayer_path;
+ QString additionalarguments;
+ bool alwaysbuildindex;
+private:
+ MPlayer * m_process;
+ MPlayerPreferencesFrame * m_configframe;
+};
+
+/*
+ * Base class for all recorders
+ */
+class KMPLAYER_EXPORT Recorder {
+public:
+ KDE_NO_EXPORT const KURL & recordURL () const { return m_recordurl; }
+ KDE_NO_EXPORT void setURL (const KURL & url) { m_recordurl = url; }
+protected:
+ KURL m_recordurl;
+};
+
+/*
+ * MEncoder recorder
+ */
+class MEncoder : public MPlayerBase, public Recorder {
+ Q_OBJECT
+public:
+ MEncoder (QObject * parent, Settings * settings);
+ ~MEncoder ();
+ virtual void init ();
+ virtual bool deMediafiedPlay ();
+public slots:
+ virtual bool stop ();
+};
+
+/*
+ * MPlayer recorder, runs 'mplayer -dumpstream'
+ */
+class KMPLAYER_NO_EXPORT MPlayerDumpstream
+ : public MPlayerBase, public Recorder {
+ Q_OBJECT
+public:
+ MPlayerDumpstream (QObject * parent, Settings * settings);
+ ~MPlayerDumpstream ();
+ virtual void init ();
+ virtual bool deMediafiedPlay ();
+public slots:
+ virtual bool stop ();
+};
+
+class XMLPreferencesPage;
+class XMLPreferencesFrame;
+
+/*
+ * Base class for all backend processes having the KMPlayer::Backend interface
+ */
+class KMPLAYER_EXPORT CallbackProcess : public Process {
+ Q_OBJECT
+ friend class Callback;
+public:
+ CallbackProcess (QObject * parent, Settings * settings, const char * n, const QString & menu);
+ ~CallbackProcess ();
+ virtual void setStatusMessage (const QString & msg);
+ virtual void setErrorMessage (int code, const QString & msg);
+ virtual void setFinished ();
+ virtual void setPlaying ();
+ virtual void setStarted (QCString dcopname, QByteArray & data);
+ virtual void setMovieParams (int length, int width, int height, float aspect, const QStringList & alang, const QStringList & slang);
+ virtual void setMoviePosition (int position);
+ virtual void setLoadingProgress (int percentage);
+ virtual void setAudioLang (int, const QString &);
+ virtual void setSubtitle (int, const QString &);
+ virtual QString menuName () const;
+ virtual WId widget ();
+ KDE_NO_EXPORT QByteArray & configData () { return m_configdata; }
+ KDE_NO_EXPORT bool haveConfig () { return m_have_config == config_yes; }
+ bool getConfigData ();
+ void setChangedData (const QByteArray &);
+ QString dcopName ();
+ NodePtr configDocument () { return configdoc; }
+ void initProcess (Viewer *);
+ virtual bool deMediafiedPlay ();
+public slots:
+ bool stop ();
+ bool quit ();
+ bool pause ();
+ bool seek (int pos, bool absolute);
+ bool volume (int pos, bool absolute);
+ bool saturation (int pos, bool absolute);
+ bool hue (int pos, bool absolute);
+ bool contrast (int pos, bool absolute);
+ bool brightness (int pos, bool absolute);
+signals:
+ void configReceived ();
+protected slots:
+ void processStopped (KProcess *);
+ void processOutput (KProcess *, char *, int);
+protected:
+ Callback * m_callback;
+ Backend_stub * m_backend;
+ QString m_menuname;
+ QByteArray m_configdata;
+ QByteArray m_changeddata;
+ XMLPreferencesPage * m_configpage;
+ NodePtr configdoc;
+ bool in_gui_update;
+ enum { config_unknown, config_probe, config_yes, config_no } m_have_config;
+ enum { send_no, send_try, send_new } m_send_config;
+};
+
+/*
+ * Config document as used by kxineplayer backend
+ */
+struct KMPLAYER_NO_EXPORT ConfigDocument : public Document {
+ ConfigDocument ();
+ ~ConfigDocument ();
+ NodePtr childFromTag (const QString & tag);
+};
+
+/*
+ * Element for ConfigDocument
+ */
+struct KMPLAYER_NO_EXPORT ConfigNode : public DarkNode {
+ ConfigNode (NodePtr & d, const QString & tag);
+ KDE_NO_CDTOR_EXPORT ~ConfigNode () {}
+ NodePtr childFromTag (const QString & tag);
+ QWidget * w;
+};
+
+/*
+ * Element for ConfigDocument, defining type of config item
+ */
+struct KMPLAYER_NO_EXPORT TypeNode : public ConfigNode {
+ TypeNode (NodePtr & d, const QString & t);
+ KDE_NO_CDTOR_EXPORT ~TypeNode () {}
+ NodePtr childFromTag (const QString & tag);
+ void changedXML (QTextStream & out);
+ QWidget * createWidget (QWidget * parent);
+ const char * nodeName () const { return tag.ascii (); }
+ QString tag;
+};
+
+/*
+ * Preference page for XML type of docuement
+ */
+class KMPLAYER_NO_EXPORT XMLPreferencesPage : public PreferencesPage {
+public:
+ XMLPreferencesPage (CallbackProcess *);
+ ~XMLPreferencesPage ();
+ void write (KConfig *);
+ void read (KConfig *);
+ void sync (bool fromUI);
+ void prefLocation (QString & item, QString & icon, QString & tab);
+ QFrame * prefPage (QWidget * parent);
+private:
+ CallbackProcess * m_process;
+ XMLPreferencesFrame * m_configframe;
+};
+
+/*
+ * Xine backend process
+ */
+class KMPLAYER_NO_EXPORT Xine : public CallbackProcess, public Recorder {
+ Q_OBJECT
+public:
+ Xine (QObject * parent, Settings * settings);
+ ~Xine ();
+public slots:
+ bool ready (Viewer *);
+};
+
+/*
+ * GStreamer backend process
+ */
+class KMPLAYER_NO_EXPORT GStreamer : public CallbackProcess {
+ Q_OBJECT
+public:
+ GStreamer (QObject * parent, Settings * settings);
+ ~GStreamer ();
+public slots:
+ virtual bool ready (Viewer *);
+};
+
+/*
+ * ffmpeg backend recorder
+ */
+class KMPLAYER_EXPORT FFMpeg : public Process, public Recorder {
+ Q_OBJECT
+public:
+ FFMpeg (QObject * parent, Settings * settings);
+ ~FFMpeg ();
+ virtual void init ();
+ virtual bool deMediafiedPlay ();
+public slots:
+ virtual bool stop ();
+ virtual bool quit ();
+private slots:
+ void processStopped (KProcess *);
+};
+
+/*
+ * npplayer backend
+ */
+
+class KMPLAYER_NO_EXPORT NpStream : public QObject {
+ Q_OBJECT
+public:
+ enum Reason {
+ NoReason = -1,
+ BecauseDone = 0, BecauseError = 1, BecauseStopped = 2
+ };
+
+ NpStream (QObject *parent, Q_UINT32 stream_id, const KURL & url);
+ ~NpStream ();
+
+ void open ();
+ void close ();
+
+ KURL url;
+ QByteArray pending_buf;
+ KIO::TransferJob *job;
+ timeval data_arrival;
+ Q_UINT32 bytes;
+ Q_UINT32 stream_id;
+ Q_UINT32 content_length;
+ Reason finish_reason;
+ QString mimetype;
+signals:
+ void stateChanged ();
+ void redirected (Q_UINT32, const KURL &);
+private slots:
+ void slotResult (KIO::Job*);
+ void slotData (KIO::Job*, const QByteArray& qb);
+ void redirection (KIO::Job *, const KURL &url);
+ void slotMimetype (KIO::Job *, const QString &mime);
+ void slotTotalSize (KIO::Job *, KIO::filesize_t sz);
+};
+
+class KMPLAYER_NO_EXPORT NpPlayer : public Process {
+ Q_OBJECT
+public:
+ NpPlayer (QObject * parent, Settings * settings, const QString & srv);
+ ~NpPlayer ();
+ virtual void init ();
+ virtual bool deMediafiedPlay ();
+ virtual void initProcess (Viewer * viewer);
+ virtual QString menuName () const;
+
+ void setStarted (const QString & srv);
+ void requestStream (const QString & path, const QString & url, const QString & target);
+ void destroyStream (const QString & path);
+
+ KDE_NO_EXPORT const QString & destination () const { return service; }
+ KDE_NO_EXPORT const QString & interface () const { return iface; }
+ KDE_NO_EXPORT QString objectPath () const { return path; }
+ QString evaluateScript (const QString & scr);
+signals:
+ void evaluate (const QString & scr, QString & result);
+ void openUrl (const KURL & url, const QString & target);
+public slots:
+ virtual bool stop ();
+ virtual bool quit ();
+public slots:
+ bool ready (Viewer *);
+private slots:
+ void processOutput (KProcess *, char *, int);
+ void processStopped (KProcess *);
+ void wroteStdin (KProcess *);
+ void streamStateChanged ();
+ void streamRedirected (Q_UINT32, const KURL &);
+protected:
+ virtual void terminateJobs ();
+private:
+ void sendFinish (Q_UINT32 sid, Q_UINT32 total, NpStream::Reason because);
+ void processStreams ();
+ QString service;
+ QString iface;
+ QString path;
+ QString filter;
+ QString m_base_url;
+ typedef QMap <Q_UINT32, NpStream *> StreamMap;
+ StreamMap streams;
+ QString remote_service;
+ QByteArray send_buf;
+ bool write_in_progress;
+};
+
+} // namespace
+
+#endif //_KMPLAYERPROCESS_H_
diff --git a/src/kmplayerrc b/src/kmplayerrc
new file mode 100644
index 0000000..cba3dad
--- /dev/null
+++ b/src/kmplayerrc
@@ -0,0 +1,55 @@
+[General Options]
+Show Statusbar=true
+Show Toolbar=true
+pipesource=xine
+urlsource=xine
+vcdsource=xine
+
+[KFileDialog Settings]
+
+[KFileDialog Speedbar]
+
+[MPlayer]
+Post MPlayer 0.90=true
+Add Configure Button=true
+Additional Arguments=
+Mencoder Arguments=-oac mp3lame -ovc lavc
+Cache Size for Streaming=128
+DVD Device=/dev/dvd
+Forward/Backward Seek Time=10
+Immediately Play DVD=true
+Keep Size Ratio=true
+Loop=false
+Frame Drop=true
+Add Record Button=true
+Add Broadcast Button=true
+Show DVD Menu=true
+Video Driver=xv
+
+[Pipe Command]
+Command1=cat ~/example.avi
+
+[MPlayer Output Matching]
+DVD Chapters=There are ([0-9]+) chapters
+DVD Language=ID_AID_([0-9]+)_LANG=([A-Za-z]+)
+DVD Sub Title=ID_SID_([0-9]+)_LANG=([A-Za-z]+)
+DVD Titles=There are ([0-9]+) titles
+Movie Size=VO:.*[^0-9]([0-9]+)x([0-9]+)
+Cache Fill=Cache fill:[^0-9]*([0-9\\.]+)%
+Movie Position=V:\\s*([0-9\\.]+)
+Start Playing=Start[^ ]* play
+VCD Tracks=track ([0-9]+):
+
+[Broadcast]
+Custom Setting=asf;mp3;32;22050;mpeg4;80;10;10;12;320;240;127.0.0.1;10.0.0.0 10.255.255.255;192.168.0.0 192.168.255.255
+Profile_Modem (32k)=asf;mp3;8;11025;mpeg4;50;19;3;3;160;128;27.0.0.1;10.0.0.0 10.255.255.255;192.168.0.0 192.168.255.255
+Profile_ISDN (64k)=asf;mp3;8;11025;mpeg4;50;16;3;3;320;240;127.0.0.1;10.0.0.0 10.255.255.255;192.168.0.0 192.168.255.255
+Profile_ISDN2 (128k)=asf;mp3;32;22050;mpeg4;80;10;10;12;320;240;127.0.0.1;10.0.0.0 10.255.255.255;192.168.0.0 192.168.255.255
+Profile_LAN (1024k)=mpeg;;64;44100;;512;5;25;12;320;240;127.0.0.1;10.0.0.0 10.255.255.255;192.168.0.0 192.168.255.255
+Profiles=Modem (32k);ISDN (64k);ISDN2 (128k);LAN (1024k)
+
+[Recent Files]
+
+[Recording]
+Auto Play After Recording=0
+Recorder=3
diff --git a/src/kmplayershared.h b/src/kmplayershared.h
new file mode 100644
index 0000000..3066b4c
--- /dev/null
+++ b/src/kmplayershared.h
@@ -0,0 +1,264 @@
+/* This file is part of the KDE project
+ *
+ * Copyright (C) 2004 Koos Vriezen <koos.vriezen@xs4all.nl>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * until boost gets common, a more or less compatable one ..
+ */
+
+#ifndef _SHAREDPTR_H_
+#define _SHAREDPTR_H_
+
+//#define SHAREDPTR_DEBUG
+
+#ifdef SHAREDPTR_DEBUG
+extern int shared_data_count;
+#include <iostream>
+#endif
+
+namespace KMPlayer {
+
+/**
+ * Shared data for SharedPtr and WeakPtr objects.
+ **/
+template <class T>
+struct SharedData {
+ SharedData (T * t, bool w) : use_count (w?0:1), weak_count (1), ptr (t) {
+#ifdef SHAREDPTR_DEBUG
+ std::cerr << "SharedData::SharedData use:" << use_count << " weak:" << weak_count << " total:" << ++shared_data_count << std::endl;
+#endif
+ }
+#ifdef SHAREDPTR_DEBUG
+ ~SharedData () { std::cerr << "SharedData::~SharedData" << " total:" << --shared_data_count << std::endl; }
+#endif
+ void addRef ();
+ void addWeakRef ();
+ void release ();
+ void releaseWeak ();
+ void dispose ();
+ int use_count;
+ int weak_count;
+ T * ptr;
+};
+
+template <class T> inline void SharedData<T>::addRef () {
+ use_count++;
+ weak_count++;
+#ifdef SHAREDPTR_DEBUG
+ std::cerr << "SharedData::addRef use:" << use_count << " weak:" << weak_count << std::endl;
+#endif
+}
+
+template <class T> inline void SharedData<T>::addWeakRef () {
+ weak_count++;
+#ifdef SHAREDPTR_DEBUG
+ std::cerr << "SharedData::addWeakRef use:" << use_count << " weak:" << weak_count << std::endl;
+#endif
+}
+
+template <class T> inline void SharedData<T>::releaseWeak () {
+ ASSERT (weak_count > 0 && weak_count > use_count);
+#ifdef SHAREDPTR_DEBUG
+ std::cerr << "SharedData::releaseWeak use:" << use_count << " weak:" << weak_count-1 << std::endl;
+#endif
+ if (--weak_count <= 0) delete this;
+}
+
+template <class T> inline void SharedData<T>::release () {
+ ASSERT (use_count > 0);
+ if (--use_count <= 0) dispose ();
+#ifdef SHAREDPTR_DEBUG
+ std::cerr << "SharedData::release use:" << use_count << " weak:" << weak_count << std::endl;
+#endif
+ releaseWeak ();
+}
+
+template <class T> inline void SharedData<T>::dispose () {
+ ASSERT (use_count == 0);
+#ifdef SHAREDPTR_DEBUG
+ std::cerr << "SharedData::dispose use:" << use_count << " weak:" << weak_count << std::endl;
+#endif
+ delete ptr;
+ ptr = 0;
+}
+
+template <class T> struct WeakPtr;
+
+/**
+ * Shared class based on boost shared
+ * This makes it possible to share pointers w/o having to worry about
+ * memory leaks. A pointer gets deleted as soon as the last Shared pointer
+ * gets destroyed. As such, never use (or be extremely carefull) not to
+ * use pointers or references to shared objects
+ **/
+template <class T>
+struct SharedPtr {
+ SharedPtr () : data (0L) {};
+ SharedPtr (T *t) : data (t ? new SharedData<T> (t, false) : 0L) {}
+ SharedPtr (const SharedPtr<T> & s) : data (s.data) { if (data) data->addRef (); }
+ SharedPtr (const WeakPtr <T> &);
+ ~SharedPtr () { if (data) data->release (); }
+ SharedPtr<T> & operator = (const SharedPtr<T> &);
+ SharedPtr<T> & operator = (const WeakPtr<T> &);
+ SharedPtr<T> & operator = (T *);
+ T * ptr () const { return data ? data->ptr : 0L; }
+ T * operator -> () { return data ? data->ptr : 0L; }
+ T * operator -> () const { return data ? data->ptr : 0L; }
+ T & operator * () { return *data->ptr; }
+ const T & operator * () const { return *data->ptr; }
+ // operator bool () const { return data && data->ptr; }
+ bool operator == (const SharedPtr<T> & s) const { return data == s.data; }
+ bool operator == (const WeakPtr<T> & w) const;
+ bool operator == (const T * t) const { return (!t && !data) || (data && data->ptr == t); }
+ bool operator == (T * t) const { return (!t && !data) || (data && data->ptr == t); }
+ bool operator != (const SharedPtr<T> & s) const { return data != s.data; }
+ bool operator != (const WeakPtr<T> & w) const;
+ bool operator != (const T * t) const { return !operator == (t); }
+ operator T * () { return data ? data->ptr : 0L; }
+ operator const T * () const { return data ? data->ptr : 0L; }
+ mutable SharedData<T> * data;
+};
+
+template <class T>
+bool operator == (T * t, SharedPtr <T> & s) {
+ return (!t && !s.data) || (s.data && s.data->ptr == t);
+}
+
+template <class T>
+bool operator == (const T * t, SharedPtr <T> & s) {
+ return (!t && !s.data) || (s.data && s.data->ptr == t);
+}
+
+template <class T>
+inline SharedPtr<T> & SharedPtr<T>::operator = (const SharedPtr<T> & s) {
+ if (data != s.data) {
+ SharedData<T> * tmp = data;
+ data = s.data;
+ if (data) data->addRef ();
+ if (tmp) tmp->release ();
+ }
+ return *this;
+}
+
+template <class T> inline SharedPtr<T> & SharedPtr<T>::operator = (T * t) {
+ if ((!data && t) || (data && data->ptr != t)) {
+ if (data) data->release ();
+ data = t ? new SharedData<T> (t, false) : 0L;
+ }
+ return *this;
+}
+
+/**
+ * Weak version of SharedPtr. This will also have access to the SharedData
+ * pointer, only these object wont prevent destruction of the shared
+ * pointer, hence weak references
+ */
+template <class T>
+struct WeakPtr {
+ WeakPtr () : data (0L) {};
+ WeakPtr (T * t) : data (t ? new SharedData<T> (t, true) : 0) {}
+ WeakPtr (T * t, bool /*b*/) : data (t ? new SharedData<T> (t, true) : 0) {}
+ WeakPtr (const WeakPtr<T> & s) : data (s.data) { if (data) data->addWeakRef (); }
+ WeakPtr (const SharedPtr<T> & s) : data (s.data) { if (data) data->addWeakRef (); }
+ ~WeakPtr () { if (data) data->releaseWeak (); }
+ WeakPtr<T> & operator = (const WeakPtr<T> &);
+ WeakPtr<T> & operator = (const SharedPtr<T> &);
+ WeakPtr<T> & operator = (T *);
+ T * ptr () const { return data ? data->ptr : 0L; }
+ T * operator -> () { return data ? data->ptr : 0L; }
+ const T * operator -> () const { return data ? data->ptr : 0L; }
+ T & operator * () { return *data->ptr; }
+ const T & operator * () const { return *data->ptr; }
+ // operator bool () const { return data && !!data->ptr; }
+ bool operator == (const WeakPtr<T> & w) const { return data == w.data; }
+ bool operator == (const SharedPtr<T> & s) const { return data == s.data; }
+ bool operator == (const T * t) const { return (!t && !data) || (data && data.ptr == t); }
+ bool operator == (T * t) const { return (!t && !data) || (data && data.ptr == t); }
+ bool operator != (const WeakPtr<T> & w) const { return data != w.data; }
+ bool operator != (const SharedPtr<T> & s) const { return data != s.data; }
+ operator T * () { return data ? data->ptr : 0L; }
+ operator const T * () const { return data ? data->ptr : 0L; }
+ mutable SharedData<T> * data;
+};
+
+template <class T>
+bool operator == (T * t, WeakPtr <T> & s) {
+ return (!t && !s.data) || (s.data && s.data->ptr == t);
+}
+
+template <class T>
+bool operator == (const T * t, WeakPtr <T> & s) {
+ return (!t && !s.data) || (s.data && s.data->ptr == t);
+}
+
+template <class T>
+inline WeakPtr<T> & WeakPtr<T>::operator = (const WeakPtr<T> & w) {
+ if (data != w.data) {
+ SharedData<T> * tmp = data;
+ data = w.data;
+ if (data) data->addWeakRef ();
+ if (tmp) tmp->releaseWeak ();
+ }
+ return *this;
+}
+
+template <class T>
+inline WeakPtr<T> & WeakPtr<T>::operator = (const SharedPtr<T> & s) {
+ if (data != s.data) {
+ SharedData<T> * tmp = data;
+ data = s.data;
+ if (data) data->addWeakRef ();
+ if (tmp) tmp->releaseWeak ();
+ }
+ return *this;
+}
+
+template <class T>
+inline WeakPtr<T> & WeakPtr<T>::operator = (T * t) {
+ if (data) data->releaseWeak ();
+ data = t ? new SharedData<T> (t, true) : 0L;
+ return *this;
+}
+
+template <class T> inline SharedPtr<T>::SharedPtr (const WeakPtr <T> & w) : data (w.data) {
+ if (data) data->addRef ();
+}
+
+template <class T>
+inline SharedPtr<T> & SharedPtr<T>::operator = (const WeakPtr<T> & s) {
+ if (data != s.data) {
+ SharedData<T> * tmp = data;
+ data = s.data;
+ if (data) data->addRef ();
+ if (tmp) tmp->release ();
+ }
+ return *this;
+}
+
+template <class T>
+inline bool SharedPtr<T>::operator == (const WeakPtr<T> & w) const {
+ return data == w.data;
+}
+
+template <class T>
+inline bool SharedPtr<T>::operator != (const WeakPtr<T> & w) const {
+ return data != w.data;
+}
+
+}
+
+#endif
diff --git a/src/kmplayersource.h b/src/kmplayersource.h
new file mode 100644
index 0000000..e93f98f
--- /dev/null
+++ b/src/kmplayersource.h
@@ -0,0 +1,176 @@
+/* This file is part of the KDE project
+ *
+ * Copyright (C) 2003 Koos Vriezen <koos.vriezen@xs4all.nl>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KMPLAYERSOURCE_H
+#define KMPLAYERSOURCE_H
+
+#include <qobject.h>
+#include <qstring.h>
+#include <kurl.h>
+
+#include "kmplayerplaylist.h"
+#include "kmplayerprocess.h"
+
+class KConfig;
+class QWidget;
+class QFrame;
+
+namespace KMPlayer {
+
+class PartBase;
+
+/**
+ * Class for a certain media, like URL, DVD, TV etc
+ */
+class KMPLAYER_EXPORT Source : public QObject, public PlayListNotify {
+ Q_OBJECT
+public:
+ Source (const QString & name, PartBase * player, const char * src);
+ virtual ~Source ();
+ virtual void init ();
+ virtual bool processOutput (const QString & line);
+
+ bool identified () const { return m_identified; }
+ virtual bool hasLength ();
+ virtual bool isSeekable ();
+
+ KDE_NO_EXPORT int width () const { return m_width; }
+ KDE_NO_EXPORT int height () const { return m_height; }
+ virtual void dimensions (int & w, int & h) { w = m_width; h = m_height; }
+ /* length () returns length in deci-seconds */
+ KDE_NO_EXPORT int length () const { return m_length; }
+ /* position () returns position in deci-seconds */
+ KDE_NO_EXPORT int position () const { return m_position; }
+ KDE_NO_EXPORT float aspect () const { return m_aspect; }
+ KDE_NO_EXPORT const KURL & url () const { return m_url; }
+ KDE_NO_EXPORT const KURL & subUrl () const { return m_sub_url; }
+ PartBase * player () { return m_player; }
+ virtual void reset ();
+ QString currentMrl ();
+ KDE_NO_EXPORT const QString & audioDevice () const { return m_audiodevice; }
+ KDE_NO_EXPORT const QString & videoDevice () const { return m_videodevice; }
+ KDE_NO_EXPORT const QString & videoNorm () const { return m_videonorm; }
+ /* frequency() if set, returns frequency in kHz */
+ KDE_NO_EXPORT int frequency () const { return m_frequency; }
+ KDE_NO_EXPORT int xvPort () const { return m_xvport; }
+ KDE_NO_EXPORT int xvEncoding () const { return m_xvencoding; }
+ KDE_NO_EXPORT const QString & pipeCmd () const { return m_pipecmd; }
+ KDE_NO_EXPORT const QString & options () const { return m_options; }
+ KDE_NO_EXPORT const QString & recordCmd () const { return m_recordcmd; }
+ KDE_NO_EXPORT const QString & tuner () const { return m_tuner; }
+ KDE_NO_EXPORT NodePtr current () const { return m_current; }
+ QString plugin (const QString &mime) const;
+ virtual NodePtr document ();
+ virtual NodePtr root ();
+ virtual QString filterOptions ();
+
+ virtual void setURL (const KURL & url);
+ void insertURL (NodePtr mrl, const QString & url, const QString & title=QString());
+ KDE_NO_EXPORT void setSubURL (const KURL & url) { m_sub_url = url; }
+ void setLanguages (const QStringList & alang, const QStringList & slang);
+ KDE_NO_EXPORT void setWidth (int w) { m_width = w; }
+ KDE_NO_EXPORT void setHeight (int h) { m_height = h; }
+ virtual void setDimensions (NodePtr, int w, int h);
+ virtual void setAspect (NodePtr, float a);
+ /* setLength (len) set length in deci-seconds */
+ void setLength (NodePtr, int len);
+ /* setPosition (pos) set position in deci-seconds */
+ void setPosition (int pos);
+ virtual void setIdentified (bool b = true);
+ // backend process state changed
+ virtual void stateChange (Process *, Process::State os, Process::State ns);
+ KDE_NO_EXPORT void setAutoPlay (bool b) { m_auto_play = b; }
+ KDE_NO_EXPORT bool autoPlay () const { return m_auto_play; }
+ void setTitle (const QString & title);
+ void setLoading (int percentage);
+ bool setCurrent (NodePtr mrl);
+
+ virtual QString prettyName ();
+signals:
+ void startPlaying ();
+ void stopPlaying ();
+ void startRecording ();
+ void stopRecording ();
+ /**
+ * Signal for notifying this source is at the end of play items
+ */
+ void endOfPlayItems ();
+ void dimensionsChanged ();
+ void titleChanged (const QString & title);
+public slots:
+ virtual void activate () = 0;
+ virtual void deactivate () = 0;
+ virtual void forward ();
+ virtual void backward ();
+ virtual void play ();
+ /**
+ * Continuing playing where current is now
+ * May call play process if a video needs to play or
+ * emit endOfPlayItems when done
+ */
+ virtual void playCurrent ();
+ virtual void jump (NodePtr e);
+ void setAudioLang (int);
+ void setSubtitle (int);
+protected:
+ void timerEvent (QTimerEvent *);
+ /**
+ * PlayListNotify implementation
+ */
+ bool requestPlayURL (NodePtr mrl);
+ bool resolveURL (NodePtr mrl);
+ void stateElementChanged (Node * element, Node::State os, Node::State ns);
+ SurfacePtr getSurface (NodePtr node);
+ void setInfoMessage (const QString & msg);
+ void bitRates (int & preferred, int & maximal);
+ void setTimeout (int ms);
+
+ NodePtr m_document;
+ NodePtrW m_current;
+ NodePtrW m_back_request;
+ QString m_name;
+ PartBase * m_player;
+ QString m_recordcmd;
+ bool m_identified;
+ bool m_auto_play;
+ KURL m_url;
+ KURL m_sub_url;
+ QString m_audiodevice;
+ QString m_videodevice;
+ QString m_videonorm;
+ QString m_tuner;
+ int m_frequency;
+ int m_xvport;
+ int m_xvencoding;
+ QString m_pipecmd;
+ QString m_options;
+ QString m_plugin;
+private:
+ int m_width;
+ int m_height;
+ float m_aspect;
+ int m_length;
+ int m_position;
+ int m_doc_timer;
+};
+
+} // namespace
+
+#endif
diff --git a/src/kmplayertvsource.cpp b/src/kmplayertvsource.cpp
new file mode 100644
index 0000000..8ccdcd6
--- /dev/null
+++ b/src/kmplayertvsource.cpp
@@ -0,0 +1,737 @@
+/* This file is part of the KMPlayer application
+ Copyright (C) 2003 Koos Vriezen <koos.vriezen@xs4all.nl>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qtimer.h>
+#include <qpushbutton.h>
+#include <qcheckbox.h>
+#include <qtable.h>
+#include <qstringlist.h>
+#include <qcombobox.h>
+#include <qlineedit.h>
+#include <qgroupbox.h>
+#include <qwhatsthis.h>
+#include <qtabwidget.h>
+#include <qmessagebox.h>
+#include <qpopupmenu.h>
+#include <qfontmetrics.h>
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kmessagebox.h>
+#include <klineedit.h>
+#include <kurlrequester.h>
+#include <kcombobox.h>
+#include <kconfig.h>
+#include <kstandarddirs.h>
+
+#include "kmplayerpartbase.h"
+#include "kmplayerprocess.h"
+#include "kmplayerconfig.h"
+#include "kmplayertvsource.h"
+#include "playlistview.h"
+#include "kmplayer.h"
+#include "kmplayercontrolpanel.h"
+#include "kmplayerbroadcast.h"
+
+static const char * strTV = "TV";
+static const char * strTVDriver = "Driver";
+
+
+KDE_NO_CDTOR_EXPORT TVDevicePage::TVDevicePage (QWidget *parent, KMPlayer::NodePtr dev)
+: QFrame (parent, "PageTVDevice"), device_doc (dev) {
+ TVDevice * device = KMPlayer::convertNode <TVDevice> (device_doc);
+ QVBoxLayout *layout = new QVBoxLayout (this, 5, 2);
+ QLabel * deviceLabel = new QLabel (i18n ("Video device:") + device->src, this, 0);
+ layout->addWidget (deviceLabel);
+ QGridLayout *gridlayout = new QGridLayout (layout, 3, 4);
+ QLabel * audioLabel = new QLabel (i18n ("Audio device:"), this);
+ audiodevice = new KURLRequester (device->getAttribute ("audio"), this);
+ QLabel * nameLabel = new QLabel (i18n ("Name:"), this, 0);
+ name = new QLineEdit (device->pretty_name, this, 0);
+ QLabel *sizewidthLabel = new QLabel (i18n ("Width:"), this, 0);
+ sizewidth = new QLineEdit (device->getAttribute (KMPlayer::StringPool::attr_width), this, 0);
+ QLabel *sizeheightLabel = new QLabel (i18n ("Height:"), this, 0);
+ sizeheight = new QLineEdit (device->getAttribute (KMPlayer::StringPool::attr_height), this, 0);
+ noplayback = new QCheckBox (i18n ("Do not immediately play"), this);
+ noplayback->setChecked (!device->getAttribute ("playback").toInt ());
+ QWhatsThis::add (noplayback, i18n ("Only start playing after clicking the play button"));
+ inputsTab = new QTabWidget (this);
+ for (KMPlayer::NodePtr ip = device->firstChild (); ip; ip = ip->nextSibling ()) {
+ if (ip->id != id_node_tv_input)
+ continue;
+ TVInput * input = KMPlayer::convertNode <TVInput> (ip);
+ QWidget * widget = new QWidget (this);
+ QHBoxLayout *tablayout = new QHBoxLayout (widget, 5, 2);
+ if (!input->getAttribute ("tuner").isEmpty ()) {
+ QHBoxLayout *horzlayout = new QHBoxLayout ();
+ QVBoxLayout *vertlayout = new QVBoxLayout ();
+ horzlayout->addWidget (new QLabel (i18n ("Norm:"), widget));
+ QComboBox * norms = new QComboBox (widget, "PageTVNorm");
+ norms->insertItem (QString ("NTSC"), 0);
+ norms->insertItem (QString ("PAL"), 1);
+ norms->insertItem (QString ("SECAM"), 2);
+ norms->setCurrentText (input->getAttribute ("norm"));
+ horzlayout->addWidget (norms);
+ vertlayout->addLayout (horzlayout);
+ vertlayout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+ QTable * table = new QTable (90, 2, widget, "PageTVChannels");
+ QFontMetrics metrics (table->font ());
+ QHeader *header = table->horizontalHeader();
+ header->setLabel (0, i18n ("Channel"));
+ header->setLabel (1, i18n ("Frequency (MHz)"));
+ int index = 0;
+ int first_column_width = QFontMetrics (header->font ()).boundingRect (header->label (0)).width () + 20;
+ for (KMPlayer::NodePtr c=input->firstChild();c;c=c->nextSibling()) {
+ if (c->id != id_node_tv_channel)
+ continue;
+ int strwid = metrics.boundingRect (c->mrl ()->pretty_name).width ();
+ if (strwid > first_column_width)
+ first_column_width = strwid + 4;
+ table->setItem (index, 0, new QTableItem (table, QTableItem::Always, c->mrl ()->pretty_name));
+ table->setItem (index++, 1, new QTableItem (table, QTableItem::Always, KMPlayer::convertNode<TVChannel>(c)->getAttribute ("frequency")));
+ }
+ table->setColumnWidth (0, first_column_width);
+ table->setColumnStretchable (1, true);
+ tablayout->addWidget (table);
+ tablayout->addLayout (vertlayout);
+ }
+ inputsTab->addTab (widget, input->mrl ()->pretty_name);
+ }
+ QPushButton * delButton = new QPushButton (i18n ("Delete"), this);
+ connect (delButton, SIGNAL (clicked ()), this, SLOT (slotDelete ()));
+ gridlayout->addWidget (audioLabel, 0, 0);
+ gridlayout->addMultiCellWidget (audiodevice, 0, 0, 1, 3);
+ gridlayout->addWidget (nameLabel, 1, 0);
+ gridlayout->addMultiCellWidget (name, 1, 1, 1, 3);
+ gridlayout->addWidget (sizewidthLabel, 2, 0);
+ gridlayout->addWidget (sizewidth, 2, 1);
+ gridlayout->addWidget (sizeheightLabel, 2, 2);
+ gridlayout->addWidget (sizeheight, 2, 3);
+ layout->addWidget (inputsTab);
+ layout->addSpacing (5);
+ layout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum));
+ QHBoxLayout *buttonlayout = new QHBoxLayout ();
+ buttonlayout->addWidget (noplayback);
+ buttonlayout->addItem (new QSpacerItem (0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
+ buttonlayout->addWidget (delButton);
+ layout->addLayout (buttonlayout);
+}
+
+KDE_NO_EXPORT void TVDevicePage::slotDelete () {
+ if (KMessageBox::warningYesNo (this, i18n ("You are about to remove this device from the Source menu.\nContinue?"), i18n ("Confirm")) == KMessageBox::Yes)
+ emit deleted (this);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerPrefSourcePageTV::KMPlayerPrefSourcePageTV (QWidget *parent, KMPlayerTVSource * tvsource)
+: QFrame (parent), m_tvsource (tvsource) {
+ QVBoxLayout * mainlayout = new QVBoxLayout (this, 5);
+ notebook = new QTabWidget (this);
+ notebook->setTabPosition (QTabWidget::Bottom);
+ mainlayout->addWidget (notebook);
+ QWidget * general = new QWidget (notebook);
+ QVBoxLayout *layout = new QVBoxLayout (general);
+ QGridLayout *gridlayout = new QGridLayout (layout, 2, 2, 2);
+ QLabel *driverLabel = new QLabel (i18n ("Driver:"), general, 0);
+ driver = new QLineEdit ("", general, 0);
+ QWhatsThis::add (driver, i18n ("dummy, v4l or bsdbt848"));
+ QLabel *deviceLabel = new QLabel (i18n ("Device:"), general, 0);
+ device = new KURLRequester ("/dev/video", general);
+ QWhatsThis::add(device, i18n("Path to your video device, eg. /dev/video0"));
+ scan = new QPushButton (i18n ("Scan..."), general);
+ gridlayout->addWidget (driverLabel, 0, 0);
+ gridlayout->addWidget (driver, 0, 1);
+ gridlayout->addWidget (deviceLabel, 1, 0);
+ gridlayout->addWidget (device, 1, 1);
+ QHBoxLayout *buttonlayout = new QHBoxLayout ();
+ buttonlayout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum));
+ buttonlayout->addWidget (scan);
+ layout->addLayout (buttonlayout);
+ layout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+ notebook->insertTab (general, i18n ("General"));
+}
+
+KDE_NO_EXPORT void KMPlayerPrefSourcePageTV::showEvent (QShowEvent *) {
+ m_tvsource->readXML ();
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT TVNode::TVNode (KMPlayer::NodePtr &d, const QString & s, const char * t, short id, const QString & n) : KMPlayer::GenericMrl (d, s, n, t) {
+ this->id = id;
+ editable = true;
+}
+
+KDE_NO_EXPORT void TVNode::setNodeName (const QString & nn) {
+ pretty_name = nn;
+ setAttribute (KMPlayer::StringPool::attr_name, nn);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT TVChannel::TVChannel (KMPlayer::NodePtr & d, const QString & n, double freq) : TVNode (d, QString ("tv://"), "channel", id_node_tv_channel, n) {
+ setAttribute (KMPlayer::StringPool::attr_name, n);
+ setAttribute ("frequency", QString::number (freq, 'f', 2));
+}
+
+KDE_NO_CDTOR_EXPORT TVChannel::TVChannel (KMPlayer::NodePtr & d) : TVNode (d, QString ("tv://"), "channel", id_node_tv_channel) {
+}
+
+KDE_NO_EXPORT void TVChannel::closed () {
+ pretty_name = getAttribute (KMPlayer::StringPool::attr_name);
+}
+
+//-----------------------------------------------------------------------------
+
+TVInput::TVInput (KMPlayer::NodePtr & d, const QString & n, int id)
+ : TVNode (d, QString ("tv://"), "input", id_node_tv_input, n) {
+ setAttribute (KMPlayer::StringPool::attr_name, n);
+ setAttribute (KMPlayer::StringPool::attr_id, QString::number (id));
+}
+
+KDE_NO_CDTOR_EXPORT TVInput::TVInput (KMPlayer::NodePtr & d) : TVNode (d, QString ("tv://"), "input", id_node_tv_input) {
+}
+
+KDE_NO_EXPORT KMPlayer::NodePtr TVInput::childFromTag (const QString & tag) {
+ // kdDebug () << nodeName () << " childFromTag " << tag << endl;
+ if (tag == QString::fromLatin1 ("channel")) {
+ return new TVChannel (m_doc);
+ } else
+ return 0L;
+}
+
+KDE_NO_EXPORT void TVInput::closed () {
+ //pretty_name = getAttribute (KMPlayer::StringPool::attr_name);
+}
+
+KDE_NO_EXPORT void TVInput::setNodeName (const QString & name) {
+ Node * p = parentNode ().ptr ();
+ QString nm (name);
+ if (p && p->id == id_node_tv_device) {
+ int pos = name.find (QString (" - ") + p->mrl ()->pretty_name);
+ if (pos > -1)
+ nm.truncate (pos);
+ }
+ pretty_name = nm + QString (" - ") + pretty_name;
+ TVNode::setNodeName (nm);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT TVDevice::TVDevice (KMPlayer::NodePtr & doc, const QString & d) : TVNode (doc, d, "device", id_node_tv_device), zombie (false) {
+ setAttribute ("path", d);
+}
+
+KDE_NO_CDTOR_EXPORT TVDevice::TVDevice (KMPlayer::NodePtr & doc)
+ : TVNode (doc, i18n ("tv device"), "device", id_node_tv_device), zombie (false) {
+}
+
+KDE_NO_CDTOR_EXPORT TVDevice::~TVDevice () {
+ if (device_page)
+ device_page->deleteLater ();
+}
+
+KDE_NO_EXPORT KMPlayer::NodePtr TVDevice::childFromTag (const QString & tag) {
+ // kdDebug () << nodeName () << " childFromTag " << tag << endl;
+ if (tag == QString::fromLatin1 ("input"))
+ return new TVInput (m_doc);
+ return 0L;
+}
+
+KDE_NO_EXPORT void TVDevice::closed () {
+ updateNodeName ();
+}
+
+KDE_NO_EXPORT void TVDevice::childDone (KMPlayer::NodePtr) {
+ finish ();
+}
+
+KDE_NO_EXPORT void TVDevice::setNodeName (const QString & name) {
+ TVNode::setNodeName (name);
+ updateNodeName ();
+}
+
+KDE_NO_EXPORT void TVDevice::updateNodeName () {
+ pretty_name = getAttribute (KMPlayer::StringPool::attr_name);
+ src = getAttribute ("path");
+ for (KMPlayer::NodePtr c = firstChild (); c; c = c->nextSibling ())
+ if (c->id == id_node_tv_input) {
+ TVInput * i = static_cast <TVInput *> (c.ptr ());
+ i->pretty_name = i->getAttribute (KMPlayer::StringPool::attr_name) +
+ QString (" - ") + pretty_name;
+ }
+}
+
+KDE_NO_EXPORT void TVDevice::updateDevicePage () {
+ if (!device_page)
+ return;
+ pretty_name = device_page->name->text ();
+ setAttribute (KMPlayer::StringPool::attr_name, pretty_name);
+ setAttribute ("audio", device_page->audiodevice->lineEdit()->text ());
+ setAttribute ("playback", device_page->noplayback->isChecked() ? "0" : "1");
+ setAttribute (KMPlayer::StringPool::attr_width, device_page->sizewidth->text ());
+ setAttribute (KMPlayer::StringPool::attr_height, device_page->sizeheight->text ());
+ int i = 0;
+ for (KMPlayer::NodePtr ip = firstChild(); ip; ip=ip->nextSibling(),++i) {
+ if (ip->id != id_node_tv_input)
+ continue;
+ TVInput * input = KMPlayer::convertNode <TVInput> (ip);
+ bool ok;
+ if (input->getAttribute ("tuner").toInt (&ok) && ok) {
+ QWidget * widget = device_page->inputsTab->page (i);
+ QTable * table = static_cast <QTable *> (widget->child ("PageTVChannels", "QTable"));
+ if (table) {
+ input->clearChildren ();
+ for (int j = 0; j<table->numRows() && table->item (j, 1); ++j) {
+ input->appendChild (new TVChannel (m_doc, table->item (j, 0)->text (), table->item (j, 1)->text ().toDouble ()));
+ }
+ }
+ QComboBox * norms = static_cast <QComboBox *> (widget->child ("PageTVNorm", "QComboBox"));
+ if (norms) {
+ input->setAttribute ("norm", norms->currentText ());
+ }
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT
+TVDocument::TVDocument (KMPlayerTVSource * source)
+ : FileDocument (id_node_tv_document, "tv://", source), m_source (source) {
+ pretty_name = i18n ("Television");
+}
+
+KDE_NO_EXPORT KMPlayer::NodePtr TVDocument::childFromTag (const QString & tag) {
+ // kdDebug () << nodeName () << " childFromTag " << tag << endl;
+ if (tag == QString::fromLatin1 ("device"))
+ return new TVDevice (m_doc);
+ return FileDocument::childFromTag (tag);
+}
+
+KDE_NO_EXPORT void TVDocument::childDone (KMPlayer::NodePtr) {
+ finish ();
+}
+
+KDE_NO_EXPORT void TVDocument::defer () {
+ if (!resolved) {
+ resolved = true;
+ readFromFile (locateLocal ("data", "kmplayer/tv.xml"));
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerTVSource::KMPlayerTVSource (KMPlayerApp * a, QPopupMenu * m)
+ : KMPlayerMenuSource (i18n ("TV"), a, m, "tvsource"), m_configpage (0L), scanner (0L), config_read (false) {
+ m_url = "tv://";
+ m_menu->insertTearOffHandle ();
+ connect (m_menu, SIGNAL (aboutToShow ()), this, SLOT (menuAboutToShow ()));
+ m_document = new TVDocument (this);
+ m_player->settings ()->addPage (this);
+ tree_id = static_cast <KMPlayer::View*>(m_player->view ())->playList ()->addTree (m_document, "tvsource", "tv", KMPlayer::PlayListView::TreeEdit | KMPlayer::PlayListView::Moveable | KMPlayer::PlayListView::Deleteable);
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerTVSource::~KMPlayerTVSource () {
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::activate () {
+ m_identified = true;
+ if (m_player->settings ()->showbroadcastbutton)
+ m_app->view()->controlPanel()->broadcastButton ()->show ();
+ if (m_cur_tvdevice && !m_current) {
+ for (KMPlayer::NodePtr i = m_cur_tvdevice->firstChild(); i && !m_current; i=i->nextSibling())
+ if (i->id == id_node_tv_input) {
+ TVInput * input = KMPlayer::convertNode <TVInput> (i);
+ bool ok;
+ m_cur_tvinput = i;
+ if (input->getAttribute ("tuner").toInt (&ok) && ok) {
+ for (KMPlayer::NodePtr c = i->firstChild (); c; c = c->nextSibling ())
+ if (c->id == id_node_tv_channel) {
+ m_current = c;
+ break;
+ }
+ } else
+ m_current = i;
+ }
+ } else if (!m_cur_tvdevice)
+ KMPlayer::Source::reset ();
+ buildArguments ();
+ if (m_cur_tvdevice) {
+ QString playback = static_cast <KMPlayer::Element *> (m_cur_tvdevice.ptr ())->getAttribute (QString::fromLatin1 ("playback"));
+ if (playback.isEmpty () || playback.toInt ())
+ QTimer::singleShot (0, m_player, SLOT (play ()));
+ }
+}
+/* TODO: playback by
+ * ffmpeg -vd /dev/video0 -r 25 -s 768x576 -f rawvideo - |mplayer -nocache -ao arts -rawvideo on:w=768:h=576:fps=25 -quiet -
+ */
+
+KDE_NO_EXPORT void KMPlayerTVSource::deactivate () {
+ if (m_player->view () && !m_app->view ()->controlPanel()->broadcastButton ()->isOn ())
+ m_app->view ()->controlPanel()->broadcastButton ()->hide ();
+ reset ();
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::buildMenu () {
+ m_menu->clear ();
+ int counter = 0;
+ for (KMPlayer::NodePtr dp = m_document->firstChild (); dp; dp = dp->nextSibling ())
+ if (dp->id == id_node_tv_device)
+ m_menu->insertItem (KMPlayer::convertNode <TVDevice> (dp)->pretty_name, this, SLOT (menuClicked (int)), 0, counter++);
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::menuAboutToShow () {
+ readXML ();
+}
+
+void KMPlayerTVSource::jump (KMPlayer::NodePtr e) {
+ if (e->id == id_node_tv_document) {
+ readXML ();
+ } else {
+ m_current = e;
+ for (; e; e = e->parentNode ()) {
+ if (e->id == id_node_tv_device) {
+ m_cur_tvdevice = e;
+ break;
+ } else if (e->id == id_node_tv_input)
+ m_cur_tvinput = e;
+ }
+ if (m_player->source () != this)
+ m_player->setSource (this);
+ else if (m_player->process ()->playing ()) {
+ m_back_request = m_current;
+ m_player->process ()->stop ();
+ } else
+ playCurrent ();
+ }
+}
+
+KDE_NO_EXPORT KMPlayer::NodePtr KMPlayerTVSource::root () {
+ return m_cur_tvinput;
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::buildArguments () {
+ TVChannel * channel = 0L;
+ TVInput * input = 0L;
+ KMPlayer::NodePtr elm = m_current;
+ if (elm && elm->id == id_node_tv_channel) {
+ channel = KMPlayer::convertNode <TVChannel> (elm);
+ elm = elm->parentNode ();
+ }
+ if (elm && elm->id == id_node_tv_input)
+ input = KMPlayer::convertNode <TVInput> (elm);
+ if (!(channel || (input && input->getAttribute ("tuner").isEmpty ())))
+ return;
+ m_cur_tvinput = input;
+ m_cur_tvdevice = input->parentNode ();
+ static_cast <KMPlayer::View*>(m_player->view ())->playList ()->updateTree (0, m_cur_tvinput, m_current, true, false);
+ if (m_cur_tvdevice->id != id_node_tv_device) {
+ return;
+ }
+ TVDevice * tvdevice = KMPlayer::convertNode <TVDevice> (m_cur_tvdevice);
+ m_identified = true;
+ m_audiodevice = tvdevice->getAttribute ("audio");
+ m_videodevice = tvdevice->src;
+ m_videonorm = input->getAttribute ("norm");
+ m_tuner = input->getAttribute (KMPlayer::StringPool::attr_name);
+ QString xvport = tvdevice->getAttribute ("xvport");
+ if (!xvport.isEmpty ())
+ m_xvport = xvport.toInt ();
+ QString xvenc = input->getAttribute ("xvenc");
+ if (!xvenc.isEmpty ())
+ m_xvencoding = xvenc.toInt ();
+ QString command;
+ command.sprintf ("device=%s:input=%s",
+ tvdevice->src.ascii (),
+ input->getAttribute (KMPlayer::StringPool::attr_id).ascii ());
+ if (channel) {
+ QString freq = channel->getAttribute ("frequency");
+ m_frequency = (int)(1000 * freq.toDouble ());
+ command += QString (":freq=%1").arg (freq);
+ } else
+ m_frequency = 0;
+ if (!m_videonorm.isEmpty ())
+ command += QString (":norm=%1").arg (m_videonorm);
+ m_app->setCaption (i18n ("TV: ") + (channel ? channel->mrl ()->pretty_name : input->mrl ()->pretty_name), false);
+ setDimensions (m_cur_tvdevice,
+ tvdevice->getAttribute (KMPlayer::StringPool::attr_width).toInt (),
+ tvdevice->getAttribute (KMPlayer::StringPool::attr_height).toInt ());
+ m_options.sprintf ("-tv noaudio:driver=%s:%s:width=%d:height=%d -slave -nocache -quiet", tvdriver.ascii (), command.ascii (), width (), height ());
+ if (m_player->settings ()->mplayerpost090)
+ m_recordcmd.sprintf ("-tv %s:driver=%s:%s:width=%d:height=%d", m_audiodevice.isEmpty () ? "noaudio" : (QString ("forceaudio:adevice=") + m_audiodevice).ascii(), tvdriver.ascii (), command.ascii (), width (), height ());
+ else
+ m_recordcmd.sprintf ("-tv on:%s:driver=%s:%s:width=%d:height=%d", m_audiodevice.isEmpty () ? "noaudio" : (QString ("forceaudio:adevice=") + m_audiodevice).ascii(), tvdriver.ascii (), command.ascii (), width (), height ());
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::playCurrent () {
+ buildArguments ();
+ if (m_app->broadcasting ())
+ QTimer::singleShot (0, m_app->broadcastConfig (), SLOT (startFeed ()));
+ else
+ KMPlayer::Source::playCurrent ();
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::menuClicked (int id) {
+ KMPlayer::NodePtr elm = m_document->firstChild ();
+ for (; id > 0; --id, elm = elm->nextSibling ())
+ ;
+ m_cur_tvdevice = elm;
+ m_cur_tvinput = elm->firstChild (); // FIXME
+ m_current = 0L;
+ m_player->setSource (this);
+}
+
+KDE_NO_EXPORT QString KMPlayerTVSource::filterOptions () {
+ if (! m_player->settings ()->disableppauto)
+ return KMPlayer::Source::filterOptions ();
+ return QString ("-vf pp=lb");
+}
+
+KDE_NO_EXPORT bool KMPlayerTVSource::hasLength () {
+ return false;
+}
+
+KDE_NO_EXPORT bool KMPlayerTVSource::isSeekable () {
+ return true;
+}
+
+KDE_NO_EXPORT QString KMPlayerTVSource::prettyName () {
+ QString name (i18n ("TV"));
+ //if (m_tvsource)
+ // name += ' ' + m_tvsource->title;
+ return name;
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::write (KConfig * m_config) {
+ if (!config_read) return;
+ m_config->setGroup (strTV);
+ m_config->writeEntry (strTVDriver, tvdriver);
+ static_cast <TVDocument *> (m_document.ptr ())->writeToFile
+ (locateLocal ("data", "kmplayer/tv.xml"));
+ kdDebug () << "KMPlayerTVSource::write XML" << endl;
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::readXML () {
+ if (config_read) return;
+ config_read = true;
+ kdDebug () << "KMPlayerTVSource::readXML" << endl;
+ m_document->defer ();
+ static_cast <KMPlayer::View*>(m_player->view ())->playList ()->updateTree (tree_id, m_document, 0, false, false);
+ buildMenu ();
+ sync (false);
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::read (KConfig * m_config) {
+ m_config->setGroup (strTV);
+ tvdriver = m_config->readEntry (strTVDriver, "v4l");
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::sync (bool fromUI) {
+ if (!m_configpage) return;
+ if (m_document && m_document->hasChildNodes ())
+ m_app->showBroadcastConfig ();
+ else
+ m_app->hideBroadcastConfig ();
+ if (fromUI) {
+ tvdriver = m_configpage->driver->text ();
+ for (KMPlayer::NodePtr d=m_document->firstChild();d; d=d->nextSibling())
+ if (d->id == id_node_tv_device)
+ static_cast <TVDevice *> (d.ptr ())->updateDevicePage ();
+ } else {
+ m_configpage->driver->setText (tvdriver);
+ for (KMPlayer::NodePtr dp = m_document->firstChild (); dp; dp = dp->nextSibling ())
+ if (dp->id == id_node_tv_device)
+ addTVDevicePage (KMPlayer::convertNode <TVDevice> (dp));
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::prefLocation (QString & item, QString & icon, QString & tab) {
+ item = i18n ("Source");
+ icon = QString ("source");
+ tab = i18n ("TV");
+}
+
+KDE_NO_EXPORT QFrame * KMPlayerTVSource::prefPage (QWidget * parent) {
+ if (!m_configpage) {
+ m_configpage = new KMPlayerPrefSourcePageTV (parent, this);
+ scanner = new TVDeviceScannerSource (this);
+ connect (m_configpage->scan, SIGNAL(clicked()), this, SLOT(slotScan()));
+ }
+ return m_configpage;
+}
+
+static bool hasTVDevice (KMPlayer::NodePtr doc, const QString & devstr) {
+ for (KMPlayer::NodePtr e = doc->firstChild (); e; e = e->nextSibling ())
+ if (e->id == id_node_tv_device &&
+ KMPlayer::convertNode <TVDevice> (e)->src == devstr)
+ return true;
+ return false;
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::slotScan () {
+ QString devstr = m_configpage->device->lineEdit()->text ();
+ if (!hasTVDevice(m_document, devstr)) {
+ scanner->scan (devstr, m_configpage->driver->text());
+ connect (scanner, SIGNAL (scanFinished (TVDevice *)),
+ this, SLOT (slotScanFinished (TVDevice *)));
+ } else
+ KMessageBox::error (m_configpage, i18n ("Device already present."),
+ i18n ("Error"));
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::slotScanFinished (TVDevice * tvdevice) {
+ disconnect (scanner, SIGNAL (scanFinished (TVDevice *)),
+ this, SLOT (slotScanFinished (TVDevice *)));
+ if (tvdevice) {
+ tvdevice->zombie = false;
+ addTVDevicePage (tvdevice, true);
+ } else
+ KMessageBox::error(m_configpage,i18n("No device found."),i18n("Error"));
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::addTVDevicePage(TVDevice *dev, bool show) {
+ if (dev->device_page)
+ dev->device_page->deleteLater ();
+ dev->device_page = new TVDevicePage (m_configpage->notebook, dev);
+ m_configpage->notebook->insertTab (dev->device_page, dev->pretty_name);
+ connect (dev->device_page, SIGNAL (deleted (TVDevicePage *)),
+ this, SLOT (slotDeviceDeleted (TVDevicePage *)));
+ if (show)
+ m_configpage->notebook->setCurrentPage (m_configpage->notebook->count ()-1);
+}
+
+KDE_NO_EXPORT void KMPlayerTVSource::slotDeviceDeleted (TVDevicePage *devpage) {
+ m_document->removeChild (devpage->device_doc);
+ m_configpage->notebook->setCurrentPage (0);
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT TVDeviceScannerSource::TVDeviceScannerSource (KMPlayerTVSource * src)
+ : KMPlayer::Source (i18n ("TVScanner"), src->player (), "tvscanner"), m_tvsource (src), m_tvdevice (0L) {
+}
+
+KDE_NO_EXPORT void TVDeviceScannerSource::init () {
+}
+
+KDE_NO_EXPORT bool TVDeviceScannerSource::processOutput (const QString & line) {
+ if (m_nameRegExp.search (line) > -1) {
+ m_tvdevice->pretty_name = m_nameRegExp.cap (1);
+ m_tvdevice->setAttribute(KMPlayer::StringPool::attr_name,m_tvdevice->pretty_name);
+ kdDebug() << "Name " << m_tvdevice->pretty_name << endl;
+ } else if (m_sizesRegExp.search (line) > -1) {
+ m_tvdevice->setAttribute (KMPlayer::StringPool::attr_width,
+ m_sizesRegExp.cap(1));
+ m_tvdevice->setAttribute (KMPlayer::StringPool::attr_height,
+ m_sizesRegExp.cap(2));
+ m_tvdevice->setAttribute ("minwidth", m_sizesRegExp.cap (1));
+ m_tvdevice->setAttribute ("minheight", m_sizesRegExp.cap (2));
+ m_tvdevice->setAttribute ("maxwidth", m_sizesRegExp.cap (3));
+ m_tvdevice->setAttribute ("maxheight", m_sizesRegExp.cap (4));
+ } else if (m_inputRegExp.search (line) > -1) {
+ KMPlayer::NodePtr doc = m_tvsource->document ();
+ TVInput * input = new TVInput (doc, m_inputRegExp.cap (2).stripWhiteSpace (),
+ m_inputRegExp.cap (1).toInt ());
+ if (m_inputRegExp.cap (3).toInt () == 1)
+ input->setAttribute ("tuner", "1");
+ m_tvdevice->appendChild (input);
+ kdDebug() << "Input " << input->mrl ()->pretty_name << endl;
+ } else
+ return false;
+ return true;
+}
+
+KDE_NO_EXPORT QString TVDeviceScannerSource::filterOptions () {
+ return QString ("");
+}
+
+KDE_NO_EXPORT bool TVDeviceScannerSource::hasLength () {
+ return false;
+}
+
+KDE_NO_EXPORT bool TVDeviceScannerSource::isSeekable () {
+ return false;
+}
+
+KDE_NO_EXPORT bool TVDeviceScannerSource::scan (const QString & dev, const QString & dri) {
+ if (m_tvdevice)
+ return false;
+ setURL (KURL ("tv://"));
+ KMPlayer::NodePtr doc = m_tvsource->document ();
+ m_tvdevice = new TVDevice (doc, dev);
+ m_tvsource->document ()->appendChild (m_tvdevice);
+ m_tvdevice->zombie = true; // not for real yet
+ m_driver = dri;
+ m_old_source = m_tvsource->player ()->source ();
+ m_tvsource->player ()->setSource (this);
+ m_identified = true;
+ play ();
+ return true;
+}
+
+KDE_NO_EXPORT void TVDeviceScannerSource::activate () {
+ m_nameRegExp.setPattern ("Selected device:\\s*([^\\s].*)");
+ m_sizesRegExp.setPattern ("Supported sizes:\\s*([0-9]+)x([0-9]+) => ([0-9]+)x([0-9]+)");
+ m_inputRegExp.setPattern ("\\s*([0-9]+):\\s*([^:]+):[^\\(]*\\(tuner:([01]),\\s*norm:([^\\)]+)\\)");
+}
+
+KDE_NO_EXPORT void TVDeviceScannerSource::deactivate () {
+ kdDebug () << "TVDeviceScannerSource::deactivate" << endl;
+ if (m_tvdevice) {
+ if (m_tvdevice->parentNode ())
+ m_tvdevice->parentNode ()->removeChild (m_tvdevice);
+ m_tvdevice = 0L;
+ emit scanFinished (m_tvdevice);
+ }
+}
+
+KDE_NO_EXPORT void TVDeviceScannerSource::play () {
+ if (!m_tvdevice)
+ return;
+ QString args;
+ args.sprintf ("tv:// -tv driver=%s:device=%s -identify -frames 0", m_driver.ascii (), m_tvdevice->src.ascii ());
+ m_tvsource->player ()->stop ();
+ m_tvsource->player ()->process ()->initProcess (m_player->settings ()->defaultView ()->viewer ());
+ KMPlayer::Process *proc = m_tvsource->player ()->players () ["mplayer"];
+ proc->setSource (this);
+ if (!static_cast <KMPlayer::MPlayer *> (proc)->run (args.ascii()))
+ deactivate ();
+}
+
+KDE_NO_EXPORT void TVDeviceScannerSource::stateChange (KMPlayer::Process * p, KMPlayer::Process::State os, KMPlayer::Process::State ns) {
+ if (m_tvdevice && // can be deactivated
+ ns == KMPlayer::Process::Ready && os > KMPlayer::Process::Ready) {
+ TVDevice * dev = 0L;
+ kdDebug () << "scanning done " << m_tvdevice->hasChildNodes () << endl;
+ if (!m_tvdevice->hasChildNodes ())
+ m_tvsource->document ()->removeChild (m_tvdevice);
+ else
+ dev = m_tvdevice;
+ m_tvdevice = 0L;
+ m_player->setSource (m_old_source);
+ emit scanFinished (dev);
+ }
+ KMPlayer::Source::stateChange (p, os, ns);
+}
+
+#include "kmplayertvsource.moc"
diff --git a/src/kmplayertvsource.h b/src/kmplayertvsource.h
new file mode 100644
index 0000000..ef5f416
--- /dev/null
+++ b/src/kmplayertvsource.h
@@ -0,0 +1,218 @@
+/* This file is part of the KMPlayer application
+ Copyright (C) 2003 Koos Vriezen <koos.vriezen@xs4all.nl>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef _KMPLAYER_TV_SOURCE_H_
+#define _KMPLAYER_TV_SOURCE_H_
+
+#include <qguardedptr.h>
+#include <qstring.h>
+#include <qframe.h>
+
+#include "kmplayerappsource.h"
+#include "kmplayerconfig.h"
+#include "kmplayer.h"
+
+const short id_node_tv_document = 40;
+const short id_node_tv_device = 41;
+const short id_node_tv_input = 42;
+const short id_node_tv_channel = 43;
+
+class KMPlayerPrefSourcePageTV; // source, TV
+class TVDeviceScannerSource;
+class KMPlayerTVSource;
+class KURLRequester;
+class KHistoryCombo;
+class KMPlayerApp;
+class QTabWidget;
+class QGroupBox;
+class QLineEdit;
+class QCheckBox;
+class KComboBox;
+class KConfig;
+
+
+class KMPLAYER_NO_EXPORT TVDevicePage : public QFrame {
+ Q_OBJECT
+public:
+ TVDevicePage (QWidget *parent, KMPlayer::NodePtr dev);
+ KDE_NO_CDTOR_EXPORT ~TVDevicePage () {}
+
+ QLineEdit * name;
+ KURLRequester * audiodevice;
+ QLineEdit * sizewidth;
+ QLineEdit * sizeheight;
+ QCheckBox * noplayback;
+ QTabWidget * inputsTab;
+ KMPlayer::NodePtrW device_doc;
+signals:
+ void deleted (TVDevicePage *);
+private slots:
+ void slotDelete ();
+};
+
+class KMPLAYER_NO_EXPORT KMPlayerPrefSourcePageTV : public QFrame {
+ Q_OBJECT
+public:
+ KMPlayerPrefSourcePageTV (QWidget *parent, KMPlayerTVSource *);
+ KDE_NO_CDTOR_EXPORT ~KMPlayerPrefSourcePageTV () {}
+ QLineEdit * driver;
+ KURLRequester * device;
+ QPushButton * scan;
+ QTabWidget * notebook;
+protected:
+ void showEvent (QShowEvent *);
+ KMPlayerTVSource * m_tvsource;
+};
+
+class KMPLAYER_NO_EXPORT TVNode : public KMPlayer::GenericMrl {
+public:
+ TVNode (KMPlayer::NodePtr &d, const QString &s, const char * t, short id, const QString &n=QString ());
+ virtual void setNodeName (const QString &);
+};
+
+/*
+ * Element for channels
+ */
+class KMPLAYER_NO_EXPORT TVChannel : public TVNode {
+public:
+ TVChannel (KMPlayer::NodePtr & d, const QString & n, double f);
+ TVChannel (KMPlayer::NodePtr & d);
+ KDE_NO_CDTOR_EXPORT ~TVChannel () {}
+ void closed ();
+};
+
+/*
+ * Element for inputs
+ */
+class KMPLAYER_NO_EXPORT TVInput : public TVNode {
+public:
+ TVInput (KMPlayer::NodePtr & d, const QString & n, int id);
+ TVInput (KMPlayer::NodePtr & d);
+ KDE_NO_CDTOR_EXPORT ~TVInput () {}
+ KMPlayer::NodePtr childFromTag (const QString &);
+ void setNodeName (const QString &);
+ void closed ();
+};
+
+/*
+ * Element for TV devices
+ */
+class KMPLAYER_NO_EXPORT TVDevice : public TVNode {
+public:
+ TVDevice (KMPlayer::NodePtr & d, const QString & s);
+ TVDevice (KMPlayer::NodePtr & d);
+ ~TVDevice ();
+ KMPlayer::NodePtr childFromTag (const QString &);
+ void closed ();
+ void childDone (KMPlayer::NodePtr child);
+ void setNodeName (const QString &);
+ bool expose () const { return false; }
+ void updateNodeName ();
+ void updateDevicePage ();
+ bool zombie;
+ QGuardedPtr <TVDevicePage> device_page;
+};
+
+class KMPLAYER_NO_EXPORT TVDocument : public FileDocument {
+ KMPlayerTVSource * m_source;
+public:
+ TVDocument (KMPlayerTVSource *);
+ KMPlayer::NodePtr childFromTag (const QString &);
+ void defer ();
+ KDE_NO_EXPORT const char * nodeName () const { return "tvdevices"; }
+ void childDone (KMPlayer::NodePtr child);
+};
+
+
+/*
+ * Source form scanning TV devices
+ */
+class KMPLAYER_NO_EXPORT TVDeviceScannerSource : public KMPlayer::Source {
+ Q_OBJECT
+public:
+ TVDeviceScannerSource (KMPlayerTVSource * src);
+ KDE_NO_CDTOR_EXPORT ~TVDeviceScannerSource () {};
+ virtual void init ();
+ virtual bool processOutput (const QString & line);
+ virtual QString filterOptions ();
+ virtual bool hasLength ();
+ virtual bool isSeekable ();
+ virtual bool scan (const QString & device, const QString & driver);
+public slots:
+ virtual void activate ();
+ virtual void deactivate ();
+ virtual void play ();
+ virtual void stateChange (KMPlayer::Process *, KMPlayer::Process::State os, KMPlayer::Process::State ns);
+signals:
+ void scanFinished (TVDevice * tvdevice);
+private:
+ KMPlayerTVSource * m_tvsource;
+ TVDevice * m_tvdevice;
+ KMPlayer::Source * m_old_source;
+ QString m_driver;
+ QRegExp m_nameRegExp;
+ QRegExp m_sizesRegExp;
+ QRegExp m_inputRegExp;
+};
+
+/*
+ * Source form TV devices, also implementing preference page for it
+ */
+class KMPLAYER_NO_EXPORT KMPlayerTVSource : public KMPlayerMenuSource, public KMPlayer::PreferencesPage {
+ Q_OBJECT
+public:
+ KMPlayerTVSource (KMPlayerApp * app, QPopupMenu * m);
+ virtual ~KMPlayerTVSource ();
+ virtual QString filterOptions ();
+ virtual bool hasLength ();
+ virtual bool isSeekable ();
+ virtual KMPlayer::NodePtr root ();
+ void buildMenu ();
+ virtual QString prettyName ();
+ virtual void write (KConfig *);
+ virtual void read (KConfig *);
+ virtual void sync (bool);
+ virtual void prefLocation (QString & item, QString & icon, QString & tab);
+ virtual QFrame * prefPage (QWidget * parent);
+ void readXML ();
+public slots:
+ virtual void activate ();
+ virtual void deactivate ();
+ virtual void playCurrent ();
+ virtual void jump (KMPlayer::NodePtr e);
+ void menuAboutToShow ();
+ void menuClicked (int id);
+private slots:
+ void slotScan ();
+ void slotScanFinished (TVDevice * device);
+ void slotDeviceDeleted (TVDevicePage *);
+private:
+ void addTVDevicePage (TVDevice * dev, bool show=false);
+ void buildArguments ();
+ KMPlayer::NodePtrW m_cur_tvdevice;
+ KMPlayer::NodePtrW m_cur_tvinput;
+ QPopupMenu * m_channelmenu;
+ QString tvdriver;
+ KMPlayerPrefSourcePageTV * m_configpage;
+ TVDeviceScannerSource * scanner;
+ int tree_id;
+ bool config_read; // whether tv.xml is read
+};
+
+#endif //_KMPLAYER_TV_SOURCE_H_
diff --git a/src/kmplayertypes.h b/src/kmplayertypes.h
new file mode 100644
index 0000000..8b2e141
--- /dev/null
+++ b/src/kmplayertypes.h
@@ -0,0 +1,300 @@
+/*
+* Copyright (C) 2006 Koos Vriezen <koos.vriezen@gmail.com>
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation; either
+* version 2 of the License, or (at your option) any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef _KMPLAYER_TYPES_H_
+#define _KMPLAYER_TYPES_H_
+
+#include <stdint.h>
+#include "kmplayer_def.h"
+#include "triestring.h"
+
+namespace KMPlayer {
+
+/**
+ * Type meant for screen coordinates
+ */
+class KMPLAYER_NO_EXPORT Single {
+ int value;
+ friend Single operator + (const Single s1, const Single s2);
+ friend Single operator - (const Single s1, const Single s2);
+ friend Single operator * (const Single s1, const Single s2);
+ friend Single operator / (const Single s1, const Single s2);
+ friend Single operator + (const Single s1, const int i);
+ friend Single operator - (const Single s1, const int i);
+ friend float operator * (const Single s, const float f);
+ friend double operator * (const Single s, const double f);
+ friend Single operator * (const int i, const Single s);
+ friend float operator * (const float f, const Single s);
+ friend double operator * (const double d, const Single s);
+ friend Single operator / (const Single s, const int i);
+ friend float operator / (const Single s, const float f);
+ friend double operator / (const Single s, const double d);
+ friend double operator / (const double d, const Single s);
+ friend bool operator > (const Single s1, const Single s2);
+ friend bool operator > (const Single s, const int i);
+ friend bool operator > (const int i, const Single s);
+ friend bool operator >= (const Single s1, const Single s2);
+ friend bool operator == (const Single s1, const Single s2);
+ friend bool operator != (const Single s1, const Single s2);
+ friend bool operator < (const Single s1, const Single s2);
+ friend bool operator < (const Single s, const int i);
+ friend bool operator < (const int i, const Single s);
+ friend bool operator <= (const Single s1, const Single s2);
+ friend bool operator <= (const Single s, const int i);
+#ifdef _KDEBUG_H_
+ friend kdbgstream & operator << (kdbgstream &, Single s);
+ friend kndbgstream & operator << (kndbgstream &, Single s);
+#endif
+ friend Single operator - (const Single s);
+public:
+ Single () : value (0) {}
+ Single (const int v) : value (v << 8) {}
+ Single (const float v) : value (int (256 * v)) {}
+ Single (const double v) : value (int (256 * v)) {}
+ Single & operator = (const Single s) { value = s.value; return *this; }
+ Single & operator = (const int v) { value = v << 8; return *this; }
+ Single & operator = (const float v) { value = int (256 * v); return *this; }
+ Single & operator = (const double v) { value = int(256 * v); return *this; }
+ Single & operator += (const Single s) { value += s.value; return *this; }
+ Single & operator += (const int i) { value += (i << 8); return *this; }
+ Single & operator -= (const Single s) { value -= s.value; return *this; }
+ Single & operator -= (const int i) { value -= (i << 8); return *this; }
+ Single & operator *= (const Single s);
+ Single & operator *= (const float f) { value = int(value*f); return *this; }
+ Single & operator /= (const int i) { value /= i; return *this; }
+ Single & operator /= (const float f);
+ operator int () const { return value >> 8; }
+ operator double () const { return 1.0 * value / 256; }
+};
+
+/** a b 0
+ * Matrix for coordinate transforms c d 0
+ * tx ty 1 */
+class KMPLAYER_NO_EXPORT Matrix {
+ friend class SizeEvent;
+ float a, b, c, d;
+ Single tx, ty;
+public:
+ Matrix ();
+ Matrix (const Matrix & matrix);
+ Matrix (Single xoff, Single yoff, float xscale, float yscale);
+ void getXY (Single & x, Single & y) const;
+ void getXYWH (Single & x, Single & y, Single & w, Single & h) const;
+ void invXYWH (Single & x, Single & y, Single & w, Single & h) const;
+ void transform (const Matrix & matrix);
+ void scale (float sx, float sy);
+ void translate (Single x, Single y);
+ // void rotate (float phi); // add this when needed
+};
+
+class KMPLAYER_NO_EXPORT SRect {
+ Single _x, _y, _w, _h;
+#ifdef _KDEBUG_H_
+ friend kdbgstream & operator << (kdbgstream &, const SRect &s);
+ friend kndbgstream & operator << (kndbgstream &, const SRect &s);
+#endif
+public:
+ SRect () {}
+ SRect (Single a, Single b, Single w, Single h)
+ : _x (a), _y (b), _w (w), _h (h) {}
+ Single x () const { return _x; }
+ Single y () const { return _y; }
+ Single width () const { return _w; }
+ Single height () const { return _h; }
+ SRect unite (const SRect & r) const;
+ SRect intersect (const SRect & r) const;
+ bool isValid () const { return _w >= Single (0) && _h >= Single (0); }
+ bool operator == (const SRect & r) const;
+ bool operator != (const SRect & r) const;
+};
+
+class KMPLAYER_NO_EXPORT IRect {
+public:
+ int x, y, w, h;
+ IRect ()
+ : x (0), y (0), w (0), h (0) {}
+ explicit IRect (const SRect r)
+ : x (r.x ()), y (r.y ()), w (r.width ()), h (r.height ()) {}
+ IRect (int a, int b, int c, int d)
+ : x (a), y (b), w (c), h (d) {}
+ IRect unite (const IRect & r) const;
+ IRect intersect (const IRect & r) const;
+ bool isValid () const { return w >= 0 && h >= 0; }
+ bool isEmpty () const { return w < 0 || h < 0; }
+};
+
+//-----------------------------------------------------------------------------
+
+#ifdef _KDEBUG_H_
+inline kdbgstream & operator << (kdbgstream & dbg, Single s) {
+ dbg << (double) (s);
+ return dbg;
+}
+
+inline kndbgstream & operator << (kndbgstream & dbg, Single) { return dbg; }
+
+inline kdbgstream & operator << (kdbgstream & dbg, const SRect &r) {
+ dbg << "SRect(x=" << r._x << " y=" << r._y << " w=" << r._w << " h=" << r._h << ")";
+ return dbg;
+}
+
+inline kndbgstream & operator << (kndbgstream &d, const SRect&) { return d; }
+
+inline kdbgstream & operator << (kdbgstream & dbg, const IRect &r) {
+ dbg << "IRect(x=" << r.x << " y=" << r.y << " w=" << r.w << " h=" << r.h << ")";
+ return dbg;
+}
+
+inline kndbgstream & operator << (kndbgstream &d, const IRect&) { return d; }
+#endif
+
+inline Single & Single::operator *= (const Single s) {
+ value = (((int64_t)value) * s.value) >> 8;
+ return *this;
+}
+
+inline Single & Single::operator /= (const float f) {
+ value = (int) (value / f);
+ return *this;
+}
+
+inline Single operator + (const Single s1, const Single s2) {
+ Single s;
+ s.value = s1.value + s2.value;
+ return s;
+}
+
+inline Single operator - (const Single s1, const Single s2) {
+ Single s;
+ s.value = s1.value - s2.value;
+ return s;
+}
+
+inline Single operator * (const Single s1, const Single s2) {
+ Single s;
+ s.value = (((int64_t)s1.value) * s2.value) >> 8;
+ return s;
+}
+
+inline Single operator / (const Single s1, const Single s2) {
+ Single s;
+ s.value = ((int64_t)s1.value << 8) / s2.value;
+ return s;
+}
+
+inline Single operator + (const Single s, const int i) {
+ return s + Single (i);
+}
+
+inline Single operator - (const Single s, const int i) {
+ return s - Single (i);
+}
+
+inline Single operator * (const int i, const Single s) {
+ Single s1;
+ s1.value = s.value * i;
+ return s1;
+}
+
+inline Single operator * (const Single s, const int i) {
+ return i * s;
+}
+inline float operator * (const Single s, const float f) {
+ return s.value * f / 256;
+}
+
+inline double operator * (const Single s, const double d) {
+ return s.value * d / 256;
+}
+
+inline float operator * (const float f, const Single s) {
+ return s.value * f / 256;
+}
+
+inline double operator * (const double d, const Single s) {
+ return s.value * d / 256;
+}
+
+inline Single operator / (const Single s, const int i) {
+ Single s1;
+ s1.value = s.value / i;
+ return s1;
+}
+
+inline float operator / (const Single s, const float f) {
+ return (s.value / f ) / 256;
+}
+
+inline double operator / (const Single s, const double d) {
+ return (s.value / d ) / 256;
+}
+
+inline double operator / (const double d, const Single s) {
+ return (d * 256 / s.value);
+}
+
+inline bool
+operator > (const Single s1, const Single s2) { return s1.value > s2.value; }
+
+inline bool
+operator > (const Single s, const int i) { return s > Single (i); }
+
+inline bool
+operator > (const int i, const Single s) { return Single (i) > s; }
+
+inline bool
+operator >= (const Single s1, const Single s2) { return s1.value >= s2.value; }
+
+inline bool
+operator == (const Single s1, const Single s2) { return s1.value == s2.value; }
+
+inline bool
+operator != (const Single s1, const Single s2) { return s1.value != s2.value; }
+
+inline bool
+operator < (const Single s1, const Single s2) { return s1.value < s2.value; }
+
+inline bool
+operator < (const Single s, const int i) { return s < Single (i); }
+
+inline bool
+operator < (const int i, const Single s) { return Single (i) < s; }
+
+inline bool
+operator <= (const Single s1, const Single s2) { return s1.value <= s2.value; }
+
+inline bool
+operator <= (const Single s, const int i) { return s <= Single (i); }
+
+inline Single operator - (const Single s) {
+ Single s1;
+ s1.value = -s.value;
+ return s1;
+}
+
+//-----------------------------------------------------------------------------
+
+inline bool SRect::operator == (const SRect & r) const {
+ return _x == r._x && _y == r._y && _w == r._w && _h == r._h;
+}
+
+inline bool SRect::operator != (const SRect & r) const { return !(*this == r); }
+
+} // KMPlayer namespace
+
+#endif //_KMPLAYER_TYPES_H_
diff --git a/src/kmplayerui.rc b/src/kmplayerui.rc
new file mode 100644
index 0000000..c726c4c
--- /dev/null
+++ b/src/kmplayerui.rc
@@ -0,0 +1,99 @@
+<!DOCTYPE kpartgui>
+<kpartgui name="kmplayer" version="24">
+<MenuBar>
+ <Menu name="file"><text>&amp;File</text>
+ <Action name="open"/>
+ <Action name="new_window"/>
+ <Action name="open_recent"/>
+ <Action name="save_as"/>
+ <Action name="clear_history"/>
+ <Separator/>
+ <Action name="source_pipe"/>
+ <Menu name="vdr"><text>VD&amp;R</text>
+ <Action name="vdr_connect"/>
+ <Action name="vdr_key_up"/>
+ <Action name="vdr_key_down"/>
+ <Action name="vdr_key_back"/>
+ <Action name="vdr_key_ok"/>
+ <Action name="vdr_key_setup"/>
+ <Action name="vdr_key_channels"/>
+ <Action name="vdr_key_menu"/>
+ <Action name="vdr_key_red"/>
+ <Action name="vdr_key_green"/>
+ <Action name="vdr_key_yellow"/>
+ <Action name="vdr_key_blue"/>
+ <Action name="vdr_key_custom"/>
+ </Menu>
+ </Menu>
+ <Menu name="view"><text>&amp;View</text>
+ <Action name="view_video"/>
+ <Action name="view_playlist"/>
+ <Action name="view_minimal"/>
+ <Action name="view_fullscreen"/>
+ <Menu name="zoom"><text>&amp;Zoom</text>
+ <Action name="view_zoom_50"/>
+ <Action name="view_zoom_100"/>
+ <Action name="view_zoom_150"/>
+ </Menu>
+ <Action name="view_keep_ratio"/>
+ <Separator />
+ <Action name="play"/>
+ <Action name="pause"/>
+ <Action name="stop"/>
+ <Separator />
+ <Action name="find"/>
+ <Action name="next"/>
+ <Separator />
+ <Action name="edit_mode"/>
+ <Action name="sync_edit_mode"/>
+ <Action name="edit_playlist_item"/>
+ <Separator />
+ <Action name="view_arts_control"/>
+ </Menu>
+ <Menu name="settings"><text>&amp;Settings</text>
+ <Separator />
+ <Action name="showmenu"/>
+ <Action name="showtoolbar"/>
+ <Action name="showstatusbar"/>
+ <Separator />
+ <Action name="configkeys"/>
+ <Action name="configtoolbars"/>
+ <Action name="configure"/>
+ </Menu>
+</MenuBar>
+<ActionProperties>
+ <Action name="new_window" icon="window_new"/>
+ <Action name="play" icon="player_play"/>
+ <Action name="pause" icon="player_pause"/>
+ <Action name="stop" icon="player_stop"/>
+ <Action shortcut="F" name="view_fullscreen" />
+ <Action shortcut="R" name="play" />
+ <Action shortcut="P" name="pause" />
+ <Action shortcut="S" name="stop" />
+ <Action shortcut="F2" name="edit_playlist_item"/>
+ <Action shortcut="C" name="view_arts_control" />
+</ActionProperties>
+<ToolBar name="mainToolBar"><text></text>
+ <Action name="new_window"/>
+ <Action name="open"/>
+ <Separator/>
+ <Action name="play"/>
+ <Action name="pause"/>
+ <Action name="stop"/>
+ <Separator/>
+ <Action name="view_fullscreen"/>
+ <Action name="view_zoom_100"/>
+ <Separator/>
+ <Action name="view_video"/>
+ <Action name="view_playlist"/>
+ <Action name="sync_edit_mode"/>
+ <Separator/>
+ <Action name="configure"/>
+ <Separator/>
+ <Action name="vdr_key_up"/>
+ <Action name="vdr_key_down"/>
+ <Action name="vdr_key_back"/>
+ <Action name="vdr_key_ok"/>
+ <Action name="vdr_key_menu"/>
+</ToolBar>
+</kpartgui>
diff --git a/src/kmplayervdr.cpp b/src/kmplayervdr.cpp
new file mode 100644
index 0000000..14a57ec
--- /dev/null
+++ b/src/kmplayervdr.cpp
@@ -0,0 +1,780 @@
+/* This file is part of the KMPlayer application
+ Copyright (C) 2004 Koos Vriezen <koos.vriezen@xs4all.nl>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <math.h>
+#include <unistd.h>
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qmap.h>
+#include <qtimer.h>
+#include <qpushbutton.h>
+#include <qbuttongroup.h>
+#include <qcheckbox.h>
+#include <qtable.h>
+#include <qstringlist.h>
+#include <qcombobox.h>
+#include <qlineedit.h>
+#include <qgroupbox.h>
+#include <qwhatsthis.h>
+#include <qtabwidget.h>
+#include <qradiobutton.h>
+#include <qmessagebox.h>
+#include <qpopupmenu.h>
+#include <qsocket.h>
+#include <qeventloop.h>
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kmessagebox.h>
+#include <klineedit.h>
+#include <kurlrequester.h>
+#include <kcombobox.h>
+#include <kstatusbar.h>
+#include <kprocess.h>
+#include <kconfig.h>
+#include <kaction.h>
+#include <kiconloader.h>
+#include <klistview.h>
+#include <kdeversion.h>
+#if KDE_IS_VERSION(3, 1, 90)
+#include <kinputdialog.h>
+#endif
+
+#include "kmplayer_backend_stub.h"
+#include "kmplayer_callback.h"
+#include "kmplayerpartbase.h"
+#include "kmplayercontrolpanel.h"
+#include "kmplayerconfig.h"
+#include "playlistview.h"
+#include "viewarea.h"
+#include "kmplayervdr.h"
+#include "kmplayer.h"
+
+using namespace KMPlayer;
+
+static const char * strVDR = "VDR";
+static const char * strVDRPort = "Port";
+static const char * strXVPort = "XV Port";
+static const char * strXVEncoding = "XV Encoding";
+static const char * strXVScale = "XV Scale";
+
+KDE_NO_CDTOR_EXPORT KMPlayerPrefSourcePageVDR::KMPlayerPrefSourcePageVDR (QWidget * parent, KMPlayer::PartBase * player)
+ : QFrame (parent), m_player (player) {
+ //KURLRequester * v4ldevice;
+ QVBoxLayout *layout = new QVBoxLayout (this, 5, 2);
+ QGridLayout *gridlayout = new QGridLayout (1, 2);
+ xv_port = new KListView (this);
+ xv_port->addColumn (QString());
+ xv_port->header()->hide ();
+ xv_port->setTreeStepSize (15);
+ //xv_port->setRootIsDecorated (true);
+ //xv_port->setSorting (-1);
+ QListViewItem * vitem = new QListViewItem (xv_port, i18n ("XVideo port"));
+ vitem->setOpen (true);
+ QWhatsThis::add (xv_port, i18n ("Port base of the X Video extension.\nIf left to default (0), the first available port will be used. However if you have multiple XVideo instances, you might have to provide the port to use here.\nSee the output from 'xvinfo' for more information"));
+ QLabel * label = new QLabel (i18n ("Communication port:"), this);
+ gridlayout->addWidget (label, 0, 0);
+ tcp_port = new QLineEdit ("", this);
+ QWhatsThis::add (tcp_port, i18n ("Communication port with VDR. Default is port 2001.\nIf you use another port, with the '-p' option of 'vdr', you must set it here too."));
+ gridlayout->addWidget (tcp_port, 0, 1);
+ layout->addWidget (xv_port);
+ layout->addLayout (gridlayout);
+ scale = new QButtonGroup (2, Qt::Vertical, i18n ("Scale"), this);
+ new QRadioButton (i18n ("4:3"), scale);
+ new QRadioButton (i18n ("16:9"), scale);
+ QWhatsThis::add (scale, i18n ("Aspects to use when viewing VDR"));
+ scale->setButton (0);
+ layout->addWidget (scale);
+ layout->addItem (new QSpacerItem (5, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerPrefSourcePageVDR::~KMPlayerPrefSourcePageVDR () {}
+
+KDE_NO_EXPORT void KMPlayerPrefSourcePageVDR::showEvent (QShowEvent *) {
+ XVideo * xvideo = static_cast<XVideo *>(m_player->players()["xvideo"]);
+ if (!xvideo->configDocument ())
+ xvideo->getConfigData ();
+}
+//-----------------------------------------------------------------------------
+
+static const char * cmd_chan_query = "CHAN\n";
+static const char * cmd_list_channels = "LSTC\n";
+static const char * cmd_volume_query = "VOLU\n";
+
+class VDRCommand {
+public:
+ KDE_NO_CDTOR_EXPORT VDRCommand (const char * c, VDRCommand * n=0L)
+ : command (strdup (c)), next (n) {}
+ KDE_NO_CDTOR_EXPORT ~VDRCommand () { free (command); }
+ char * command;
+ VDRCommand * next;
+};
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT KMPlayerVDRSource::KMPlayerVDRSource (KMPlayerApp * app)
+ : KMPlayer::Source (QString ("VDR"), app->player (), "vdrsource"),
+ m_app (app),
+ m_configpage (0),
+ m_socket (new QSocket (this)),
+ commands (0L),
+ channel_timer (0),
+ timeout_timer (0),
+ finish_timer (0),
+ tcp_port (0),
+ m_stored_volume (0) {
+ memset (m_actions, 0, sizeof (KAction *) * int (act_last));
+ m_player->settings ()->addPage (this);
+ connect (m_socket, SIGNAL (connectionClosed()), this, SLOT(disconnected()));
+ connect (m_socket, SIGNAL (connected ()), this, SLOT (connected ()));
+ connect (m_socket, SIGNAL (readyRead ()), this, SLOT (readyRead ()));
+ connect (m_socket, SIGNAL (error (int)), this, SLOT (socketError (int)));
+}
+
+KDE_NO_CDTOR_EXPORT KMPlayerVDRSource::~KMPlayerVDRSource () {}
+
+KDE_NO_CDTOR_EXPORT void KMPlayerVDRSource::waitForConnectionClose () {
+ if (timeout_timer) {
+ finish_timer = startTimer (500);
+ kdDebug () << "VDR connection not yet closed" << endl;
+ QApplication::eventLoop ()->enterLoop ();
+ kdDebug () << "VDR connection:" << (m_socket->state () == QSocket::Connected) << endl;
+ timeout_timer = 0;
+ }
+}
+
+KDE_NO_EXPORT bool KMPlayerVDRSource::hasLength () {
+ return false;
+}
+
+KDE_NO_EXPORT bool KMPlayerVDRSource::isSeekable () {
+ return true;
+}
+
+KDE_NO_EXPORT QString KMPlayerVDRSource::prettyName () {
+ return i18n ("VDR");
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::activate () {
+ last_channel = 0;
+ connect (this, SIGNAL (startPlaying ()), this, SLOT (processStarted()));
+ connect (this, SIGNAL (stopPlaying ()), this, SLOT (processStopped ()));
+ KMPlayer::ControlPanel * panel = m_app->view()->controlPanel ();
+ panel->button (KMPlayer::ControlPanel::button_red)->show ();
+ panel->button (KMPlayer::ControlPanel::button_green)->show ();
+ panel->button (KMPlayer::ControlPanel::button_yellow)->show ();
+ panel->button (KMPlayer::ControlPanel::button_blue)->show ();
+ panel->button (KMPlayer::ControlPanel::button_pause)->hide ();
+ panel->button (KMPlayer::ControlPanel::button_record)->hide ();
+ connect (panel->volumeBar (), SIGNAL (volumeChanged (int)), this, SLOT (volumeChanged (int)));
+ connect (panel->button (KMPlayer::ControlPanel::button_red), SIGNAL (clicked ()), this, SLOT (keyRed ()));
+ connect (panel->button (KMPlayer::ControlPanel::button_green), SIGNAL (clicked ()), this, SLOT (keyGreen ()));
+ connect (panel->button (KMPlayer::ControlPanel::button_yellow), SIGNAL (clicked ()), this, SLOT (keyYellow ()));
+ connect (panel->button (KMPlayer::ControlPanel::button_blue), SIGNAL (clicked ()), this, SLOT (keyBlue ()));
+ setAspect (m_document, scale ? 16.0/9 : 1.33);
+ if (!m_url.protocol ().compare ("kmplayer"))
+ m_request_jump = KURL::decode_string (m_url.path ()).mid (1);
+ setURL (KURL (QString ("vdr://localhost:%1").arg (tcp_port)));
+ QTimer::singleShot (0, m_player, SLOT (play ()));
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::deactivate () {
+ disconnect (m_socket, SIGNAL (error (int)), this, SLOT (socketError (int)));
+ if (m_player->view ()) {
+ disconnect (this, SIGNAL(startPlaying()), this, SLOT(processStarted()));
+ disconnect (this, SIGNAL (stopPlaying()), this, SLOT(processStopped()));
+ KMPlayer::ControlPanel * panel = m_app->view()->controlPanel ();
+ disconnect (panel->volumeBar (), SIGNAL (volumeChanged (int)), this, SLOT (volumeChanged (int)));
+ disconnect (panel->button (KMPlayer::ControlPanel::button_red), SIGNAL (clicked ()), this, SLOT (keyRed ()));
+ disconnect (panel->button (KMPlayer::ControlPanel::button_green), SIGNAL (clicked ()), this, SLOT (keyGreen ()));
+ disconnect (panel->button (KMPlayer::ControlPanel::button_yellow), SIGNAL (clicked ()), this, SLOT (keyYellow ()));
+ disconnect (panel->button (KMPlayer::ControlPanel::button_blue), SIGNAL (clicked ()), this, SLOT (keyBlue ()));
+ }
+ processStopped ();
+ m_request_jump.truncate (0);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::playCurrent () {
+ if (m_player->process ())
+ m_player->process ()->play (this, current ()); // FIXME HACK
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::processStopped () {
+ if (m_socket->state () == QSocket::Connected) {
+ queueCommand (QString ("VOLU %1\n").arg (m_stored_volume).ascii ());
+ queueCommand ("QUIT\n");
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::processStarted () {
+ m_socket->connectToHost ("127.0.0.1", tcp_port);
+ commands = new VDRCommand ("connect", commands);
+}
+
+#define DEF_ACT(i,text,pix,scut,slot,name) \
+ m_actions [i] = new KAction (text, QString (pix), KShortcut (scut), this, slot, m_app->actionCollection (), name); \
+ m_fullscreen_actions [i] = new KAction (text, KShortcut (scut), this, slot, m_app->view ()->viewArea ()->actionCollection (), name)
+
+KDE_NO_EXPORT void KMPlayerVDRSource::connected () {
+ queueCommand (cmd_list_channels);
+ queueCommand (cmd_volume_query);
+ killTimer (channel_timer);
+ channel_timer = startTimer (3000);
+ KAction * action = m_app->actionCollection ()->action ("vdr_connect");
+ action->setIcon (QString ("connect_no"));
+ action->setText (i18n ("Dis&connect"));
+ DEF_ACT (act_up, i18n ("VDR Key Up"), "up", , SLOT (keyUp ()), "vdr_key_up");
+ DEF_ACT (act_down, i18n ("VDR Key Down"), "down", , SLOT (keyDown ()), "vdr_key_down");
+ DEF_ACT (act_back, i18n ("VDR Key Back"), "back", , SLOT (keyBack ()), "vdr_key_back");
+ DEF_ACT (act_ok, i18n ("VDR Key Ok"), "ok", , SLOT (keyOk ()), "vdr_key_ok");
+ DEF_ACT (act_setup, i18n ("VDR Key Setup"), "configure", , SLOT (keySetup ()), "vdr_key_setup");
+ DEF_ACT (act_channels, i18n ("VDR Key Channels"), "player_playlist", , SLOT (keyChannels ()), "vdr_key_channels");
+ DEF_ACT (act_menu, i18n ("VDR Key Menu"), "showmenu", , SLOT (keyMenu ()), "vdr_key_menu");
+ DEF_ACT (act_red, i18n ("VDR Key Red"), "red", , SLOT (keyRed ()), "vdr_key_red");
+ DEF_ACT (act_green, i18n ("VDR Key Green"), "green", , SLOT (keyGreen ()), "vdr_key_green");
+ DEF_ACT (act_yellow, i18n ("VDR Key Yellow"), "yellow", , SLOT (keyYellow ()), "vdr_key_yellow");
+ DEF_ACT (act_blue, i18n ("VDR Key Blue"), "blue", , SLOT (keyBlue ()), "vdr_key_blue");
+#if KDE_IS_VERSION(3, 1, 90)
+ DEF_ACT (act_custom, "VDR Custom Command", "exec", , SLOT (customCmd ()), "vdr_key_custom");
+#endif
+ m_app->initMenu (); // update menu and toolbar
+ DEF_ACT (act_0, i18n ("VDR Key 0"), "0", Qt::Key_0, SLOT (key0 ()), "vdr_key_0");
+ DEF_ACT (act_1, i18n ("VDR Key 1"), "1", Qt::Key_1, SLOT (key1 ()), "vdr_key_1");
+ DEF_ACT (act_2, i18n ("VDR Key 2"), "2", Qt::Key_2, SLOT (key2 ()), "vdr_key_2");
+ DEF_ACT (act_3, i18n ("VDR Key 3"), "3", Qt::Key_3, SLOT (key3 ()), "vdr_key_3");
+ DEF_ACT (act_4, i18n ("VDR Key 4"), "4", Qt::Key_4, SLOT (key4 ()), "vdr_key_4");
+ DEF_ACT (act_5, i18n ("VDR Key 5"), "5", Qt::Key_5, SLOT (key5 ()), "vdr_key_5");
+ DEF_ACT (act_6, i18n ("VDR Key 6"), "6", Qt::Key_6, SLOT (key6 ()), "vdr_key_6");
+ DEF_ACT (act_7, i18n ("VDR Key 7"), "7", Qt::Key_7, SLOT (key7 ()), "vdr_key_7");
+ DEF_ACT (act_8, i18n ("VDR Key 8"), "8", Qt::Key_8, SLOT (key8 ()), "vdr_key_8");
+ DEF_ACT (act_9, i18n ("VDR Key 9"), "9", Qt::Key_9, SLOT (key9 ()), "vdr_key_9");
+ //KMPlayer::ViewLayer * layer = m_app->view ()->viewArea ();
+ for (int i = 0; i < int (act_last); ++i)
+ // somehow, the configured shortcuts only show up after createGUI() call
+ m_fullscreen_actions [i]->setShortcut (m_actions [i]->shortcut ());
+ // m_fullscreen_actions[i]->plug (layer);
+}
+
+#undef DEF_ACT
+
+KDE_NO_EXPORT void KMPlayerVDRSource::disconnected () {
+ kdDebug() << "disconnected " << commands << endl;
+ if (finish_timer) {
+ deleteCommands ();
+ return;
+ }
+ setURL (KURL (QString ("vdr://localhost:%1").arg (tcp_port)));
+ if (channel_timer && m_player->source () == this)
+ m_player->process ()->quit ();
+ deleteCommands ();
+ KAction * action = m_app->actionCollection ()->action ("vdr_connect");
+ action->setIcon (QString ("connect_established"));
+ action->setText (i18n ("&Connect"));
+ m_app->guiFactory ()->removeClient (m_app);// crash w/ m_actions[i]->unplugAll (); in for loop below
+ for (int i = 0; i < int (act_last); ++i)
+ if (m_player->view () && m_actions[i]) {
+ m_fullscreen_actions[i]->unplug (m_app->view()->viewArea());
+ delete m_actions[i];
+ delete m_fullscreen_actions[i];
+ }
+ m_app->initMenu ();
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::toggleConnected () {
+ if (m_socket->state () == QSocket::Connected) {
+ queueCommand ("QUIT\n");
+ killTimer (channel_timer);
+ channel_timer = 0;
+ } else {
+ m_socket->connectToHost ("127.0.0.1", tcp_port);
+ commands = new VDRCommand ("connect", commands);
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::volumeChanged (int val) {
+ queueCommand (QString ("VOLU %1\n").arg (int (sqrt (255 * 255 * val / 100))).ascii ());
+}
+
+static struct ReadBuf {
+ char * buf;
+ int length;
+ KDE_NO_CDTOR_EXPORT ReadBuf () : buf (0L), length (0) {}
+ KDE_NO_CDTOR_EXPORT ~ReadBuf () {
+ clear ();
+ }
+ KDE_NO_EXPORT void operator += (const char * s) {
+ int l = strlen (s);
+ char * b = new char [length + l + 1];
+ if (length)
+ strcpy (b, buf);
+ strcpy (b + length, s);
+ length += l;
+ delete buf;
+ buf = b;
+ }
+ KDE_NO_EXPORT QCString mid (int p) {
+ return QCString (buf + p);
+ }
+ KDE_NO_EXPORT QCString left (int p) {
+ return QCString (buf, p);
+ }
+ KDE_NO_EXPORT QCString getReadLine ();
+ KDE_NO_EXPORT void clear () {
+ delete [] buf;
+ buf = 0;
+ length = 0;
+ }
+} readbuf;
+
+KDE_NO_EXPORT QCString ReadBuf::getReadLine () {
+ QCString out;
+ if (!length)
+ return out;
+ int p = strcspn (buf, "\r\n");
+ if (p < length) {
+ int skip = strspn (buf + p, "\r\n");
+ out = left (p+1);
+ int nl = length - p - skip;
+ memmove (buf, buf + p + skip, nl + 1);
+ length = nl;
+ }
+ return out;
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::readyRead () {
+ KMPlayer::View * v = finish_timer ? 0L : static_cast <KMPlayer::View *> (m_player->view ());
+ long nr = m_socket->bytesAvailable();
+ char * data = new char [nr + 1];
+ m_socket->readBlock (data, nr);
+ data [nr] = 0;
+ readbuf += data;
+ QCString line = readbuf.getReadLine ();
+ if (commands) {
+ bool cmd_done = false;
+ while (!line.isEmpty ()) {
+ bool toconsole = true;
+ cmd_done = (line.length () > 3 && line[3] == ' '); // from svdrpsend.pl
+ // kdDebug () << "readyRead " << cmd_done << " " << commands->command << endl;
+ if (!strcmp (commands->command, cmd_list_channels) && m_document) {
+ int p = line.find (';');
+ int q = line.find (':');
+ if (q > 0 && (p < 0 || q < p))
+ p = q;
+ if (p > 0)
+ line.truncate (p);
+ QString channel_name = line.mid (4);
+ m_document->appendChild (new KMPlayer::GenericMrl (m_document, QString ("kmplayer://vdrsource/%1").arg(channel_name), channel_name));
+ if (cmd_done) {
+ m_player->updateTree ();
+ if (!m_request_jump.isEmpty ()) {
+ jump (m_request_jump);
+ m_request_jump.truncate (0);
+ }
+ }
+ toconsole = false;
+ } else if (!strcmp (commands->command, cmd_chan_query)) {
+ if (v && line.length () > 4) {
+ QString ch = line.mid (4);
+ setTitle (ch);
+ KMPlayer::PlayListItem * lvi = static_cast <KMPlayer::PlayListItem *> (v->playList ()->findItem (ch, 0));
+ if (lvi && lvi->node != m_last_channel) {
+ KMPlayer::PlayListItem * si = static_cast <KMPlayer::PlayListItem *> (v->playList ()->selectedItem ());
+ bool jump_selection = (si && (si->node == m_document || si->node == m_last_channel));
+ if (m_last_channel)
+ m_last_channel->setState (KMPlayer::Node::state_finished);
+ m_last_channel = lvi->node;
+ if (m_last_channel)
+ m_last_channel->setState (KMPlayer::Node::state_began);
+ if (jump_selection) {
+ v->playList ()->setSelected (lvi, true);
+ v->playList ()->ensureItemVisible (lvi);
+ }
+ v->playList ()->triggerUpdate ();
+ }
+ //v->playList ()->selectItem (ch);
+ int c = strtol(ch.ascii(), 0L, 10);
+ if (c != last_channel) {
+ last_channel = c;
+ m_app->statusBar ()->changeItem (QString::number (c),
+ id_status_timer);
+ }
+ }
+ } else if (cmd_done && !strcmp(commands->command,cmd_volume_query)){
+ int pos = line.findRev (QChar (' '));
+ if (pos > 0) {
+ QString vol = line.mid (pos + 1);
+ if (!vol.compare ("mute"))
+ m_stored_volume = 0;
+ else
+ m_stored_volume = vol.toInt ();
+ if (m_stored_volume == 0)
+ volumeChanged (m_app->view ()->controlPanel ()->volumeBar ()->value ());
+ }
+ }
+ if (v && toconsole)
+ v->addText (QString (line), true);
+ line = readbuf.getReadLine ();
+ }
+ if (cmd_done) {
+ VDRCommand * c = commands->next;
+ delete commands;
+ commands = c;
+ if (commands)
+ sendCommand ();
+ else {
+ killTimer (timeout_timer);
+ timeout_timer = 0;
+ }
+ }
+ }
+ delete [] data;
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::socketError (int code) {
+ if (code == QSocket::ErrHostNotFound) {
+ KMessageBox::error (m_configpage, i18n ("Host not found"), i18n ("Error"));
+ } else if (code == QSocket::ErrConnectionRefused) {
+ KMessageBox::error (m_configpage, i18n ("Connection refused"), i18n ("Error"));
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::queueCommand (const char * cmd) {
+ if (m_player->source () != this)
+ return;
+ if (!commands) {
+ readbuf.clear ();
+ commands = new VDRCommand (cmd);
+ if (m_socket->state () == QSocket::Connected) {
+ sendCommand ();
+ } else {
+ m_socket->connectToHost ("127.0.0.1", tcp_port);
+ commands = new VDRCommand ("connect", commands);
+ }
+ } else {
+ VDRCommand * c = commands;
+ for (int i = 0; i < 10; ++i, c = c->next)
+ if (!c->next) {
+ c->next = new VDRCommand (cmd);
+ break;
+ }
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::queueCommand (const char * cmd, int t) {
+ queueCommand (cmd);
+ killTimer (channel_timer);
+ channel_timer = startTimer (t);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::sendCommand () {
+ //kdDebug () << "sendCommand " << commands->command << endl;
+ m_socket->writeBlock (commands->command, strlen(commands->command));
+ m_socket->flush ();
+ killTimer (timeout_timer);
+ timeout_timer = startTimer (30000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::customCmd () {
+#if KDE_IS_VERSION(3, 1, 90)
+ QString cmd = KInputDialog::getText (i18n ("Custom VDR command"), i18n ("You can pass commands to VDR.\nEnter 'HELP' to see a list of available commands.\nYou can see VDR response in the console window.\n\nVDR Command:"), QString(), 0, m_player->view ());
+ if (!cmd.isEmpty ())
+ queueCommand (QString (cmd + QChar ('\n')).local8Bit ());
+#endif
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::timerEvent (QTimerEvent * e) {
+ if (e->timerId () == timeout_timer || e->timerId () == finish_timer) {
+ deleteCommands ();
+ } else if (e->timerId () == channel_timer) {
+ queueCommand (cmd_chan_query);
+ killTimer (channel_timer);
+ channel_timer = startTimer (30000);
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::deleteCommands () {
+ killTimer (timeout_timer);
+ timeout_timer = 0;
+ killTimer (channel_timer);
+ channel_timer = 0;
+ for (VDRCommand * c = commands; c; c = commands) {
+ commands = commands->next;
+ delete c;
+ }
+ readbuf.clear ();
+ if (finish_timer) {
+ killTimer (finish_timer);
+ QApplication::eventLoop ()->exitLoop ();
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::jump (KMPlayer::NodePtr e) {
+ if (!e->isPlayable ()) return;
+ m_current = e;
+ jump (e->mrl ()->pretty_name);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::jump (const QString & channel) {
+ QCString c ("CHAN ");
+ QCString ch = channel.local8Bit ();
+ int p = ch.find (' ');
+ if (p > 0)
+ c += ch.left (p);
+ else
+ c += ch; // hope for the best ..
+ c += '\n';
+ queueCommand (c);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::forward () {
+ queueCommand ("CHAN +\n", 1000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::backward () {
+ queueCommand ("CHAN -\n", 1000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::keyUp () {
+ queueCommand ("HITK UP\n", 1000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::keyDown () {
+ queueCommand ("HITK DOWN\n", 1000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::keyBack () {
+ queueCommand ("HITK BACK\n");
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::keyOk () {
+ queueCommand ("HITK OK\n");
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::keySetup () {
+ queueCommand ("HITK SETUP\n");
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::keyChannels () {
+ queueCommand ("HITK CHANNELS\n");
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::keyMenu () {
+ queueCommand ("HITK MENU\n");
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::key0 () {
+ queueCommand ("HITK 0\n", 2000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::key1 () {
+ queueCommand ("HITK 1\n", 2000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::key2 () {
+ queueCommand ("HITK 2\n", 2000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::key3 () {
+ queueCommand ("HITK 3\n", 2000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::key4 () {
+ queueCommand ("HITK 4\n", 2000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::key5 () {
+ queueCommand ("HITK 5\n", 2000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::key6 () {
+ queueCommand ("HITK 6\n", 2000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::key7 () {
+ queueCommand ("HITK 7\n", 2000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::key8 () {
+ queueCommand ("HITK 8\n", 2000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::key9 () {
+ queueCommand ("HITK 9\n", 2000);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::keyRed () {
+ queueCommand ("HITK RED\n");
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::keyGreen () {
+ queueCommand ("HITK GREEN\n");
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::keyYellow () {
+ queueCommand ("HITK YELLOW\n");
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::keyBlue () {
+ queueCommand ("HITK BLUE\n");
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::write (KConfig * m_config) {
+ m_config->setGroup (strVDR);
+ m_config->writeEntry (strVDRPort, tcp_port);
+ m_config->writeEntry (strXVPort, m_xvport);
+ m_config->writeEntry (strXVEncoding, m_xvencoding);
+ m_config->writeEntry (strXVScale, scale);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::read (KConfig * m_config) {
+ m_config->setGroup (strVDR);
+ tcp_port = m_config->readNumEntry (strVDRPort, 2001);
+ m_xvport = m_config->readNumEntry (strXVPort, 0);
+ m_xvencoding = m_config->readNumEntry (strXVEncoding, 0);
+ scale = m_config->readNumEntry (strXVScale, 0);
+}
+
+struct XVTreeItem : public QListViewItem {
+ XVTreeItem (QListViewItem *parent, const QString & t, int p, int e)
+ : QListViewItem (parent, t), port (p), encoding (e) {}
+ int port;
+ int encoding;
+};
+
+KDE_NO_EXPORT void KMPlayerVDRSource::sync (bool fromUI) {
+ XVideo * xvideo = static_cast<XVideo *>(m_player->players()["xvideo"]);
+ if (fromUI) {
+ tcp_port = m_configpage->tcp_port->text ().toInt ();
+ scale = m_configpage->scale->id (m_configpage->scale->selected ());
+ setAspect (m_document, scale ? 16.0/9 : 1.25);
+ XVTreeItem * vitem = dynamic_cast <XVTreeItem *> (m_configpage->xv_port->selectedItem ());
+ if (vitem) {
+ m_xvport = vitem->port;
+ m_xvencoding = vitem->encoding;
+ }
+ } else {
+ m_configpage->tcp_port->setText (QString::number (tcp_port));
+ m_configpage->scale->setButton (scale);
+ QListViewItem * vitem = m_configpage->xv_port->firstChild ();
+ NodePtr configdoc = xvideo->configDocument ();
+ if (configdoc && configdoc->firstChild ()) {
+ for (QListViewItem *i=vitem->firstChild(); i; i=vitem->firstChild())
+ delete i;
+ NodePtr node = configdoc->firstChild ();
+ for (node = node->firstChild (); node; node = node->nextSibling()) {
+ if (!node->isElementNode ())
+ continue; // some text sneaked in ?
+ Element * elm = convertNode <Element> (node);
+ if (elm->getAttribute (KMPlayer::StringPool::attr_type) !=
+ QString ("tree"))
+ continue;
+ for (NodePtr n = elm->firstChild (); n; n = n->nextSibling ()) {
+ if (!n->isElementNode () || strcmp (n->nodeName (), "Port"))
+ continue;
+ Element * e = convertNode <Element> (n);
+ QString portatt = e->getAttribute (
+ KMPlayer::StringPool::attr_value);
+ int port;
+ QListViewItem *pi = new QListViewItem (vitem, i18n ("Port ") + portatt);
+ port = portatt.toInt ();
+ for (NodePtr in=e->firstChild(); in; in=in->nextSibling()) {
+ if (!in->isElementNode () ||
+ strcmp (in->nodeName (), "Input"))
+ continue;
+ Element * i = convertNode <Element> (in);
+ QString inp = i->getAttribute (
+ KMPlayer::StringPool::attr_name);
+ int enc = i->getAttribute (
+ KMPlayer::StringPool::attr_value).toInt ();
+ QListViewItem * ii = new XVTreeItem(pi, inp, port, enc);
+ if (m_xvport == port && enc == m_xvencoding) {
+ ii->setSelected (true);
+ m_configpage->xv_port->ensureItemVisible (ii);
+ }
+ }
+ }
+ }
+ } else // wait for showEvent
+ connect (xvideo, SIGNAL (configReceived()), this, SLOT (configReceived()));
+ }
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::configReceived () {
+ XVideo * xvideo = static_cast<XVideo *>(m_player->players()["xvideo"]);
+ disconnect (xvideo, SIGNAL (configReceived()), this, SLOT (configReceived()));
+ sync (false);
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::prefLocation (QString & item, QString & icon, QString & tab) {
+ item = i18n ("Source");
+ icon = QString ("source");
+ tab = i18n ("VDR");
+}
+
+KDE_NO_EXPORT QFrame * KMPlayerVDRSource::prefPage (QWidget * parent) {
+ if (!m_configpage)
+ m_configpage = new KMPlayerPrefSourcePageVDR (parent, m_player);
+ return m_configpage;
+}
+
+KDE_NO_EXPORT bool KMPlayerVDRSource::requestPlayURL (KMPlayer::NodePtr) {
+ return true;
+}
+
+KDE_NO_EXPORT void KMPlayerVDRSource::stateElementChanged (KMPlayer::Node *, KMPlayer::Node::State, KMPlayer::Node::State) {
+}
+
+//-----------------------------------------------------------------------------
+
+static const char * xv_supported [] = {
+ "tvsource", "vdrsource", 0L
+};
+
+KDE_NO_CDTOR_EXPORT XVideo::XVideo (QObject * parent, Settings * settings)
+ : KMPlayer::CallbackProcess (parent, settings, "xvideo", i18n ("X&Video")) {
+ m_supported_sources = xv_supported;
+ //m_player->settings ()->addPage (m_configpage);
+}
+
+KDE_NO_CDTOR_EXPORT XVideo::~XVideo () {}
+
+KDE_NO_EXPORT bool XVideo::ready (KMPlayer::Viewer * v) {
+ if (playing ()) {
+ return true;
+ }
+ initProcess (v);
+ QString cmd = QString ("kxvplayer -wid %3 -cb %4").arg (viewer ()->embeddedWinId ()).arg (dcopName ());
+ if (m_have_config == config_unknown || m_have_config == config_probe)
+ cmd += QString (" -c");
+ if (m_source) {
+ int xv_port = m_source->xvPort ();
+ int xv_encoding = m_source->xvEncoding ();
+ int freq = m_source->frequency ();
+ cmd += QString (" -port %1 -enc %2 -norm \"%3\"").arg (xv_port).arg (xv_encoding).arg (m_source->videoNorm ());
+ if (freq > 0)
+ cmd += QString (" -freq %1").arg (freq);
+ }
+ fprintf (stderr, "%s\n", cmd.latin1 ());
+ *m_process << cmd;
+ m_process->start (KProcess::NotifyOnExit, KProcess::All);
+ return m_process->isRunning ();
+}
+
+#include "kmplayervdr.moc"
diff --git a/src/kmplayervdr.h b/src/kmplayervdr.h
new file mode 100644
index 0000000..4f11e8f
--- /dev/null
+++ b/src/kmplayervdr.h
@@ -0,0 +1,169 @@
+/* This file is part of the KMPlayer application
+ Copyright (C) 2004 Koos Vriezen <koos.vriezen@xs4all.nl>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef KMPLAYER_VDR_SOURCE_H
+#define KMPLAYER_VDR_SOURCE_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <qframe.h>
+
+#include <kurl.h>
+
+#include "kmplayerappsource.h"
+#include "kmplayerconfig.h"
+#include "kmplayerprocess.h"
+
+
+class KMPlayerApp;
+class VDRCommand;
+class KURLRequester;
+class QButtonGroup;
+class QMenuItem;
+class QCheckBox;
+class QLineEdit;
+class KAction;
+class QSocket;
+class QTimerEvent;
+class KListView;
+
+/*
+ * Preference page for VDR
+ */
+class KMPLAYER_NO_EXPORT KMPlayerPrefSourcePageVDR : public QFrame {
+ Q_OBJECT
+public:
+ KMPlayerPrefSourcePageVDR (QWidget * parent, KMPlayer::PartBase * player);
+ ~KMPlayerPrefSourcePageVDR ();
+ KURLRequester * vcddevice;
+ KListView * xv_port;
+ QLineEdit * tcp_port;
+ QButtonGroup * scale;
+protected:
+ void showEvent (QShowEvent *);
+private:
+ KMPlayer::PartBase * m_player;
+};
+
+
+/*
+ * Source from VDR (XVideo actually) and socket connection
+ */
+class KMPLAYER_NO_EXPORT KMPlayerVDRSource : public KMPlayer::Source, public KMPlayer::PreferencesPage {
+ Q_OBJECT
+public:
+ KMPlayerVDRSource (KMPlayerApp * app);
+ virtual ~KMPlayerVDRSource ();
+ virtual bool hasLength ();
+ virtual bool isSeekable ();
+ virtual QString prettyName ();
+ virtual void write (KConfig *);
+ virtual void read (KConfig *);
+ virtual void sync (bool);
+ virtual void prefLocation (QString & item, QString & icon, QString & tab);
+ virtual QFrame * prefPage (QWidget * parent);
+ virtual bool requestPlayURL (KMPlayer::NodePtr mrl);
+ virtual void stateElementChanged (KMPlayer::Node * node, KMPlayer::Node::State os, KMPlayer::Node::State ns);
+ void waitForConnectionClose ();
+public slots:
+ void activate ();
+ void deactivate ();
+ void jump (KMPlayer::NodePtr e);
+ void forward ();
+ void backward ();
+ void playCurrent ();
+ void toggleConnected ();
+ void volumeChanged (int);
+private slots:
+ void keyUp ();
+ void keyDown ();
+ void keyBack ();
+ void keyOk ();
+ void keySetup ();
+ void keyChannels ();
+ void keyMenu ();
+ void key0 ();
+ void key1 ();
+ void key2 ();
+ void key3 ();
+ void key4 ();
+ void key5 ();
+ void key6 ();
+ void key7 ();
+ void key8 ();
+ void key9 ();
+ void keyRed ();
+ void keyGreen ();
+ void keyYellow ();
+ void keyBlue ();
+ void customCmd ();
+ void connected ();
+ void disconnected ();
+ void readyRead ();
+ void socketError (int);
+ void processStopped ();
+ void processStarted ();
+ void configReceived ();
+protected:
+ void timerEvent (QTimerEvent *);
+private:
+ enum {
+ act_up = 0, act_down, act_back, act_ok,
+ act_setup, act_channels, act_menu,
+ act_red, act_green, act_yellow, act_blue,
+ act_0, act_1, act_2, act_3, act_4, act_5, act_6, act_7, act_8, act_9,
+#if KDE_IS_VERSION(3, 1, 90)
+ act_custom,
+#endif
+ act_last
+ };
+ void queueCommand (const char * cmd);
+ void queueCommand (const char * cmd, int repeat_ms);
+ void sendCommand ();
+ void deleteCommands ();
+ void jump (const QString & channel);
+ KMPlayerApp * m_app;
+ KMPlayerPrefSourcePageVDR * m_configpage;
+ KAction * m_actions [act_last];
+ KAction * m_fullscreen_actions [act_last];
+ QSocket * m_socket;
+ VDRCommand * commands;
+ QString m_request_jump;
+ KMPlayer::NodePtrW m_last_channel;
+ int channel_timer;
+ int timeout_timer;
+ int finish_timer;
+ int tcp_port;
+ int m_stored_volume;
+ int scale;
+ int last_channel;
+};
+
+class XVideo : public KMPlayer::CallbackProcess {
+ Q_OBJECT
+public:
+ XVideo (QObject * parent, KMPlayer::Settings * settings);
+ ~XVideo ();
+public slots:
+ virtual bool ready (KMPlayer::Viewer *);
+};
+
+#endif // KMPLAYER_VDR_SOURCE_H
diff --git a/src/kmplayerview.cpp b/src/kmplayerview.cpp
new file mode 100644
index 0000000..d55be16
--- /dev/null
+++ b/src/kmplayerview.cpp
@@ -0,0 +1,831 @@
+/**
+ * Copyright (C) 2002-2003 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include <stdio.h>
+#include <math.h>
+
+#include <config.h>
+// include files for Qt
+#include <qstyle.h>
+#include <qtimer.h>
+#include <qpainter.h>
+#include <qmetaobject.h>
+#include <qlayout.h>
+#include <qpixmap.h>
+#include <qtextedit.h>
+#include <qtooltip.h>
+#include <qapplication.h>
+#include <qiconset.h>
+#include <qcursor.h>
+#include <qkeysequence.h>
+#include <qslider.h>
+#include <qlabel.h>
+#include <qdatastream.h>
+#include <qwidgetstack.h>
+#include <qcursor.h>
+#include <qclipboard.h>
+
+#include <kiconloader.h>
+#include <kstatusbar.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include <kapplication.h>
+#include <kactioncollection.h>
+#include <kstdaction.h>
+#include <kshortcut.h>
+#include <kurldrag.h>
+#include <kfinddialog.h>
+#include <dcopclient.h>
+#include <kglobalsettings.h>
+#include <kstaticdeleter.h>
+
+#include "kmplayerview.h"
+#include "kmplayercontrolpanel.h"
+#include "kmplayersource.h"
+#include "playlistview.h"
+#include "viewarea.h"
+
+#include <X11/Xlib.h>
+#include <X11/keysym.h>
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+static const int XKeyPress = KeyPress;
+#undef KeyPress
+#undef Always
+#undef Never
+#undef Status
+#undef Unsorted
+#undef Bool
+
+extern const char * normal_window_xpm[];
+extern const char * playlist_xpm[];
+
+
+/* mouse invisible: define the time (in 1/1000 seconds) before mouse goes invisible */
+
+
+using namespace KMPlayer;
+
+//-------------------------------------------------------------------------
+
+namespace KMPlayer {
+
+class KMPlayerPictureWidget : public QWidget {
+ View * m_view;
+public:
+ KDE_NO_CDTOR_EXPORT KMPlayerPictureWidget (QWidget * parent, View * view)
+ : QWidget (parent), m_view (view) {}
+ KDE_NO_CDTOR_EXPORT ~KMPlayerPictureWidget () {}
+protected:
+ void mousePressEvent (QMouseEvent *);
+};
+
+} // namespace
+
+KDE_NO_EXPORT void KMPlayerPictureWidget::mousePressEvent (QMouseEvent *) {
+ m_view->emitPictureClicked ();
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT TextEdit::TextEdit (QWidget * parent, View * view) : QTextEdit (parent, "kde_kmplayer_console"), m_view (view) {
+ setReadOnly (true);
+ setPaper (QBrush (QColor (0, 0, 0)));
+ setColor (QColor (0xB2, 0xB2, 0xB2));
+}
+
+KDE_NO_EXPORT void TextEdit::contextMenuEvent (QContextMenuEvent * e) {
+ m_view->controlPanel ()->popupMenu ()->exec (e->globalPos ());
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT InfoWindow::InfoWindow (QWidget * parent, View * view) : QTextEdit (parent, "kde_kmplayer_console"), m_view (view) {
+ setReadOnly (true);
+ setLinkUnderline (false);
+}
+
+KDE_NO_EXPORT void InfoWindow::contextMenuEvent (QContextMenuEvent * e) {
+ m_view->controlPanel ()->popupMenu ()->exec (e->globalPos ());
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT View::View (QWidget *parent, const char *name)
+ : KMediaPlayer::View (parent, name),
+ m_image (0L),
+ m_control_panel (0L),
+ m_status_bar (0L),
+ m_volume_slider (0L),
+ m_mixer_object ("kicker"),
+ m_controlpanel_mode (CP_Show),
+ m_old_controlpanel_mode (CP_Show),
+ m_statusbar_mode (SB_Hide),
+ controlbar_timer (0),
+ infopanel_timer (0),
+ m_keepsizeratio (false),
+ m_playing (false),
+ m_mixer_init (false),
+ m_inVolumeUpdate (false),
+ m_tmplog_needs_eol (false),
+ m_revert_fullscreen (false),
+ m_no_info (false),
+ m_edit_mode (false)
+{}
+
+KDE_NO_EXPORT void View::dropEvent (QDropEvent * de) {
+ KURL::List sl;
+ if (KURLDrag::canDecode (de)) {
+ KURLDrag::decode (de, sl);
+ } else if (QTextDrag::canDecode (de)) {
+ QString text;
+ QTextDrag::decode (de, text);
+ sl.push_back (KURL (text));
+ }
+ if (sl.size () > 0) {
+ for (unsigned i = 0; i < sl.size (); i++)
+ sl [i] = KURL::decode_string (sl [i].url ());
+ m_widgetstack->visibleWidget ()->setFocus ();
+ emit urlDropped (sl);
+ de->accept ();
+ }
+}
+
+KDE_NO_EXPORT void View::dragEnterEvent (QDragEnterEvent* dee) {
+ if (isDragValid (dee))
+ dee->accept ();
+}
+
+KDE_NO_EXPORT void View::init (KActionCollection * action_collection) {
+ setBackgroundMode(Qt::NoBackground); // prevents flashing
+ //m_dockarea->setEraseColor (QColor (0, 0, 0));
+ QPalette pal (QColor (64, 64,64), QColor (32, 32, 32));
+ QVBoxLayout * viewbox = new QVBoxLayout (this, 0, 0);
+ m_dockarea = new KDockArea (this, "kde_kmplayer_dock_area");
+ m_dock_video = new KDockWidget (m_dockarea->manager (), 0, KGlobal::iconLoader ()->loadIcon (QString ("kmplayer"), KIcon::Small), m_dockarea);
+ m_dock_video->setEraseColor (QColor (0, 0, 255));
+ m_dock_video->setDockSite (KDockWidget::DockLeft | KDockWidget::DockBottom | KDockWidget::DockRight | KDockWidget::DockTop);
+ m_dock_video->setEnableDocking(KDockWidget::DockNone);
+ m_view_area = new ViewArea (m_dock_video, this);
+ m_dock_video->setWidget (m_view_area);
+ m_dockarea->setMainDockWidget (m_dock_video);
+ m_dock_playlist = m_dockarea->createDockWidget (i18n ("Play List"), KGlobal::iconLoader ()->loadIcon (QString ("player_playlist"), KIcon::Small));
+ m_playlist = new PlayListView (m_dock_playlist, this, action_collection);
+ m_dock_playlist->setWidget (m_playlist);
+ viewbox->addWidget (m_dockarea);
+ m_widgetstack = new QWidgetStack (m_view_area);
+ m_control_panel = new ControlPanel (m_view_area, this);
+ m_control_panel->setMaximumSize (2500, controlPanel ()->maximumSize ().height ());
+ m_status_bar = new StatusBar (m_view_area);
+ m_status_bar->insertItem (QString (""), 0);
+ QSize sbsize = m_status_bar->sizeHint ();
+ m_status_bar->hide ();
+ m_status_bar->setMaximumSize (2500, sbsize.height ());
+ m_viewer = new Viewer (m_widgetstack, this);
+ m_widgettypes [WT_Video] = m_viewer;
+#if KDE_IS_VERSION(3,1,90)
+ setVideoWidget (m_view_area);
+#endif
+
+ m_multiedit = new TextEdit (m_widgetstack, this);
+ m_multiedit->setTextFormat (Qt::PlainText);
+ QFont fnt = KGlobalSettings::fixedFont ();
+ m_multiedit->setFont (fnt);
+ m_widgettypes[WT_Console] = m_multiedit;
+
+ m_widgettypes[WT_Picture] = new KMPlayerPictureWidget (m_widgetstack, this);
+
+ m_dock_infopanel = m_dockarea->createDockWidget ("infopanel", KGlobal::iconLoader ()->loadIcon (QString ("info"), KIcon::Small));
+ m_infopanel = new InfoWindow (m_dock_infopanel, this);
+ m_dock_infopanel->setWidget (m_infopanel);
+
+ m_widgetstack->addWidget (m_viewer);
+ m_widgetstack->addWidget (m_multiedit);
+ m_widgetstack->addWidget (m_widgettypes[WT_Picture]);
+
+ setFocusPolicy (QWidget::ClickFocus);
+
+ setAcceptDrops (true);
+ m_view_area->resizeEvent (0L);
+
+ kapp->installX11EventFilter (this);
+}
+
+KDE_NO_CDTOR_EXPORT View::~View () {
+ delete m_image;
+ if (m_view_area->parent () != this)
+ delete m_view_area;
+}
+
+KDE_NO_EXPORT void View::setEraseColor (const QColor & color) {
+ KMediaPlayer::View::setEraseColor (color);
+ if (statusBar ()) {
+ statusBar ()->setEraseColor (color);
+ controlPanel ()->setEraseColor (color);
+ }
+}
+
+void View::setInfoMessage (const QString & msg) {
+ bool ismain = m_dockarea->getMainDockWidget () == m_dock_infopanel;
+ if (msg.isEmpty ()) {
+ if (!ismain && !m_edit_mode && !infopanel_timer)
+ infopanel_timer = startTimer (0);
+ m_infopanel->clear ();
+ } else if (ismain || !m_no_info) {
+ if (!m_edit_mode && m_dock_infopanel->mayBeShow ())
+ m_dock_infopanel->manualDock(m_dock_video,KDockWidget::DockBottom,80);
+ m_infopanel->setText (msg);
+ }
+}
+
+void View::setStatusMessage (const QString & msg) {
+ if (m_statusbar_mode != SB_Hide)
+ m_status_bar->changeItem (msg, 0);
+}
+
+void View::toggleShowPlaylist () {
+ if (m_controlpanel_mode == CP_Only)
+ return;
+ if (m_dock_playlist->mayBeShow ()) {
+ if (m_dock_playlist->isDockBackPossible ())
+ m_dock_playlist->dockBack ();
+ else {
+ bool horz = true;
+ QStyle & style = m_playlist->style ();
+ int h = style.pixelMetric (QStyle::PM_ScrollBarExtent, m_playlist);
+ h += style.pixelMetric(QStyle::PM_DockWindowFrameWidth, m_playlist);
+ h +=style.pixelMetric(QStyle::PM_DockWindowHandleExtent,m_playlist);
+ for (QListViewItem *i=m_playlist->firstChild();i;i=i->itemBelow()) {
+ h += i->height ();
+ if (h > int (0.25 * height ())) {
+ horz = false;
+ break;
+ }
+ }
+ int perc = 30;
+ if (horz && 100 * h / height () < perc)
+ perc = 100 * h / height ();
+ m_dock_playlist->manualDock (m_dock_video, horz ? KDockWidget::DockTop : KDockWidget::DockLeft, perc);
+ }
+ } else
+ m_dock_playlist->undock ();
+}
+
+void View::setViewOnly () {
+ if (m_dock_playlist->mayBeHide ())
+ m_dock_playlist->undock ();
+ if (m_dock_infopanel->mayBeHide ())
+ m_dock_infopanel->undock ();
+}
+
+void View::setInfoPanelOnly () {
+ if (m_dock_playlist->mayBeHide ())
+ m_dock_playlist->undock ();
+ m_dock_video->setEnableDocking (KDockWidget::DockCenter);
+ m_dock_video->undock ();
+ m_dock_infopanel->setEnableDocking (KDockWidget::DockNone);
+ m_dockarea->setMainDockWidget (m_dock_infopanel);
+}
+
+void View::setPlaylistOnly () {
+ if (m_dock_infopanel->mayBeHide ())
+ m_dock_infopanel->undock ();
+ m_dock_video->setEnableDocking (KDockWidget::DockCenter);
+ m_dock_video->undock ();
+ m_dock_playlist->setEnableDocking (KDockWidget::DockNone);
+ m_dockarea->setMainDockWidget (m_dock_playlist);
+}
+
+void View::setEditMode (RootPlayListItem *ri, bool enable) {
+ m_edit_mode = enable;
+ m_infopanel->setReadOnly (!m_edit_mode);
+ m_infopanel->setTextFormat (enable ? Qt::PlainText : Qt::AutoText);
+ if (m_edit_mode && m_dock_infopanel->mayBeShow ())
+ m_dock_infopanel->manualDock(m_dock_video,KDockWidget::DockBottom,50);
+ m_playlist->showAllNodes (ri, m_edit_mode);
+}
+
+bool View::setPicture (const QString & path) {
+ delete m_image;
+ if (path.isEmpty ())
+ m_image = 0L;
+ else {
+ m_image = new QPixmap (path);
+ if (m_image->isNull ()) {
+ delete m_image;
+ m_image = 0L;
+ kdDebug() << "View::setPicture failed " << path << endl;
+ }
+ }
+ if (!m_image) {
+ m_widgetstack->raiseWidget (m_viewer);
+ } else {
+ m_widgettypes[WT_Picture]->setPaletteBackgroundPixmap (*m_image);
+ m_widgetstack->raiseWidget (m_widgettypes[WT_Picture]);
+ setControlPanelMode (CP_AutoHide);
+ }
+ return m_image;
+}
+
+KDE_NO_EXPORT void View::updateVolume () {
+ if (m_mixer_init && !m_volume_slider)
+ return;
+ QByteArray data, replydata;
+ QCString replyType;
+ int volume;
+ bool has_mixer = kapp->dcopClient ()->call (m_mixer_object, "Mixer0",
+ "masterVolume()", data, replyType, replydata);
+ if (!has_mixer) {
+ m_mixer_object = "kmix";
+ has_mixer = kapp->dcopClient ()->call (m_mixer_object, "Mixer0",
+ "masterVolume()", data, replyType, replydata);
+ }
+ if (has_mixer) {
+ QDataStream replystream (replydata, IO_ReadOnly);
+ replystream >> volume;
+ if (!m_mixer_init) {
+ QLabel * mixer_label = new QLabel (i18n ("Volume:"), m_control_panel->popupMenu ());
+ m_control_panel->popupMenu ()->insertItem (mixer_label, -1, 4);
+ m_volume_slider = new QSlider (0, 100, 10, volume, Qt::Horizontal, m_control_panel->popupMenu ());
+ connect(m_volume_slider, SIGNAL(valueChanged(int)), this,SLOT(setVolume(int)));
+ m_control_panel->popupMenu ()->insertItem (m_volume_slider, ControlPanel::menu_volume, 5);
+ m_control_panel->popupMenu ()->insertSeparator (6);
+ } else {
+ m_inVolumeUpdate = true;
+ m_volume_slider->setValue (volume);
+ m_inVolumeUpdate = false;
+ }
+ } else if (m_volume_slider) {
+ m_control_panel->popupMenu ()->removeItemAt (6);
+ m_control_panel->popupMenu ()->removeItemAt (5);
+ m_control_panel->popupMenu ()->removeItemAt (4);
+ m_volume_slider = 0L;
+ }
+ m_mixer_init = true;
+}
+
+void View::showWidget (WidgetType wt) {
+ m_widgetstack->raiseWidget (m_widgettypes [wt]);
+ if (m_widgetstack->visibleWidget () == m_widgettypes[WT_Console]) {
+ addText (QString (""), false);
+ if (m_controlpanel_mode == CP_AutoHide && m_playing)
+ m_control_panel->show();
+ } else
+ delayedShowButtons (false);
+ updateLayout ();
+}
+
+void View::toggleVideoConsoleWindow () {
+ WidgetType wt = WT_Console;
+ if (m_widgetstack->visibleWidget () == m_widgettypes[WT_Console]) {
+ wt = WT_Video;
+ m_control_panel->popupMenu ()->changeItem (ControlPanel::menu_video, KGlobal::iconLoader ()->loadIconSet (QString ("konsole"), KIcon::Small, 0, true), i18n ("Con&sole"));
+ } else
+ m_control_panel->popupMenu ()->changeItem (ControlPanel::menu_video, KGlobal::iconLoader ()->loadIconSet (QString ("video"), KIcon::Small, 0, true), i18n ("V&ideo"));
+ showWidget (wt);
+ emit windowVideoConsoleToggled (int (wt));
+}
+
+void View::setControlPanelMode (ControlPanelMode m) {
+ killTimer (controlbar_timer);
+ controlbar_timer = 0L;
+ m_old_controlpanel_mode = m_controlpanel_mode = m;
+ if (m_playing && isFullScreen())
+ m_controlpanel_mode = CP_AutoHide;
+ if ((m_controlpanel_mode == CP_Show || m_controlpanel_mode == CP_Only) &&
+ !m_control_panel->isVisible ()) {
+ m_control_panel->show ();
+ m_view_area->resizeEvent (0L);
+ } else if (m_controlpanel_mode == CP_AutoHide) {
+ if ((m_playing &&
+ m_widgetstack->visibleWidget () != m_widgettypes[WT_Console]))
+ delayedShowButtons (false);
+ else if (!m_control_panel->isVisible ()) {
+ m_control_panel->show ();
+ m_view_area->resizeEvent (0L);
+ }
+ } else if (m_controlpanel_mode == CP_Hide && m_control_panel->isVisible()) {
+ m_control_panel->hide ();
+ m_view_area->resizeEvent (0L);
+ }
+}
+
+void View::setStatusBarMode (StatusBarMode m) {
+ m_statusbar_mode = m;
+ if (m == SB_Hide)
+ m_status_bar->hide ();
+ else
+ m_status_bar->show ();
+ m_view_area->resizeEvent (0L);
+}
+
+KDE_NO_EXPORT void View::delayedShowButtons (bool show) {
+ if ((show && m_control_panel->isVisible ()) ||
+ (!show && !m_control_panel->isVisible ())) {
+ if (controlbar_timer) {
+ killTimer (controlbar_timer);
+ controlbar_timer = 0;
+ }
+ if (!show)
+ m_control_panel->hide (); // for initial race
+ } else if (m_controlpanel_mode == CP_AutoHide &&
+ (m_playing ||
+ m_widgetstack->visibleWidget () == m_widgettypes[WT_Picture]) &&
+ m_widgetstack->visibleWidget () != m_widgettypes[WT_Console] &&
+ !controlbar_timer) {
+ controlbar_timer = startTimer (500);
+ }
+}
+
+KDE_NO_EXPORT void View::setVolume (int vol) {
+ if (m_inVolumeUpdate) return;
+ QByteArray data;
+ QDataStream arg( data, IO_WriteOnly );
+ arg << vol;
+ if (!kapp->dcopClient()->send (m_mixer_object, "Mixer0", "setMasterVolume(int)", data))
+ kdWarning() << "Failed to update volume" << endl;
+}
+
+KDE_NO_EXPORT void View::updateLayout () {
+ if (m_controlpanel_mode == CP_Only)
+ m_control_panel->setMaximumSize (2500, height ());
+ m_view_area->resizeEvent (0L);
+}
+
+void View::setKeepSizeRatio (bool b) {
+ if (m_keepsizeratio != b) {
+ m_keepsizeratio = b;
+ updateLayout ();
+ m_view_area->update ();
+ }
+}
+
+KDE_NO_EXPORT void View::timerEvent (QTimerEvent * e) {
+ if (e->timerId () == controlbar_timer) {
+ controlbar_timer = 0;
+ if (m_playing ||
+ m_widgetstack->visibleWidget () == m_widgettypes[WT_Picture]) {
+ int vert_buttons_pos = m_view_area->height()-statusBarHeight ();
+ QPoint mouse_pos = m_view_area->mapFromGlobal (QCursor::pos ());
+ int cp_height = m_control_panel->maximumSize ().height ();
+ bool mouse_on_buttons = (//m_view_area->hasMouse () &&
+ mouse_pos.y () >= vert_buttons_pos-cp_height &&
+ mouse_pos.y ()<= vert_buttons_pos &&
+ mouse_pos.x () > 0 &&
+ mouse_pos.x () < m_control_panel->width());
+ if (mouse_on_buttons && !m_control_panel->isVisible ()) {
+ m_control_panel->show ();
+ m_view_area->resizeEvent (0L);
+ } else if (!mouse_on_buttons && m_control_panel->isVisible ()) {
+ m_control_panel->hide ();
+ m_view_area->resizeEvent (0L);
+ }
+ }
+ } else if (e->timerId () == infopanel_timer) {
+ if (m_infopanel->text ().isEmpty ())
+ m_dock_infopanel->undock ();
+ infopanel_timer = 0;
+ }
+ killTimer (e->timerId ());
+}
+
+void View::addText (const QString & str, bool eol) {
+ if (m_tmplog_needs_eol)
+ tmplog += QChar ('\n');
+ tmplog += str;
+ m_tmplog_needs_eol = eol;
+ if (m_widgetstack->visibleWidget () != m_widgettypes[WT_Console] &&
+ tmplog.length () < 7500)
+ return;
+ if (eol) {
+ m_multiedit->append (tmplog);
+ tmplog.truncate (0);
+ m_tmplog_needs_eol = false;
+ } else {
+ int pos = tmplog.findRev (QChar ('\n'));
+ if (pos >= 0) {
+ m_multiedit->append (tmplog.left (pos));
+ tmplog = tmplog.mid (pos+1);
+ }
+ }
+ int p = m_multiedit->paragraphs ();
+ if (5000 < p) {
+ m_multiedit->setSelection (0, 0, p - 4499, 0);
+ m_multiedit->removeSelectedText ();
+ }
+ m_multiedit->setCursorPosition (m_multiedit->paragraphs () - 1, 0);
+}
+
+/* void View::print (QPrinter *pPrinter)
+{
+ QPainter printpainter;
+ printpainter.begin (pPrinter);
+
+ // TODO: add your printing code here
+
+ printpainter.end ();
+}*/
+
+KDE_NO_EXPORT void View::videoStart () {
+ if (m_dockarea->getMainDockWidget () != m_dock_video) {
+ // restore from an info or playlist only setting
+ KDockWidget * dw = m_dockarea->getMainDockWidget ();
+ dw->setEnableDocking (KDockWidget::DockCenter);
+ dw->undock ();
+ m_dock_video->setEnableDocking (KDockWidget::DockNone);
+ m_dockarea->setMainDockWidget (m_dock_video);
+ m_view_area->resizeEvent (0L);
+ }
+ if (m_controlpanel_mode == CP_Only) {
+ m_control_panel->setMaximumSize(2500, controlPanel()->preferedHeight());
+ setControlPanelMode (CP_Show);
+ }
+}
+
+KDE_NO_EXPORT void View::playingStart () {
+ if (m_playing) return; //FIXME: make symetric with playingStop
+ if (m_widgetstack->visibleWidget () == m_widgettypes[WT_Picture])
+ m_widgetstack->raiseWidget (m_viewer);
+ m_playing = true;
+ m_revert_fullscreen = !isFullScreen();
+ setControlPanelMode (m_old_controlpanel_mode);
+}
+
+KDE_NO_EXPORT void View::playingStop () {
+ if (m_controlpanel_mode == CP_AutoHide &&
+ m_widgetstack->visibleWidget () != m_widgettypes[WT_Picture]) {
+ m_control_panel->show ();
+ //m_view_area->setMouseTracking (false);
+ }
+ killTimer (controlbar_timer);
+ controlbar_timer = 0;
+ m_playing = false;
+ WId w = m_viewer->embeddedWinId ();
+ if (w)
+ XClearWindow (qt_xdisplay(), w);
+ m_view_area->resizeEvent (0L);
+}
+
+KDE_NO_EXPORT void View::leaveEvent (QEvent *) {
+ delayedShowButtons (false);
+}
+
+KDE_NO_EXPORT void View::reset () {
+ if (m_revert_fullscreen && isFullScreen())
+ m_control_panel->popupMenu ()->activateItemAt (m_control_panel->popupMenu ()->indexOf (ControlPanel::menu_fullscreen));
+ //m_view_area->fullScreen ();
+ playingStop ();
+ m_viewer->show ();
+}
+
+bool View::isFullScreen () const {
+ return m_view_area->isFullScreen ();
+}
+
+void View::fullScreen () {
+ if (!m_view_area->isFullScreen()) {
+ m_sreensaver_disabled = false;
+ QByteArray data, replydata;
+ QCString replyType;
+ if (kapp->dcopClient ()->call ("kdesktop", "KScreensaverIface",
+ "isEnabled()", data, replyType, replydata)) {
+ bool enabled;
+ QDataStream replystream (replydata, IO_ReadOnly);
+ replystream >> enabled;
+ if (enabled)
+ m_sreensaver_disabled = kapp->dcopClient()->send
+ ("kdesktop", "KScreensaverIface", "enable(bool)", "false");
+ }
+ //if (m_keepsizeratio && m_viewer->aspect () < 0.01)
+ // m_viewer->setAspect (1.0 * m_viewer->width() / m_viewer->height());
+ m_view_area->fullScreen();
+ m_control_panel->popupMenu ()->setItemVisible (ControlPanel::menu_zoom, false);
+ m_widgetstack->visibleWidget ()->setFocus ();
+ } else {
+ if (m_sreensaver_disabled)
+ m_sreensaver_disabled = !kapp->dcopClient()->send
+ ("kdesktop", "KScreensaverIface", "enable(bool)", "true");
+ m_view_area->fullScreen();
+ m_control_panel->popupMenu ()->setItemVisible (ControlPanel::menu_zoom, true);
+ }
+ setControlPanelMode (m_old_controlpanel_mode);
+ emit fullScreenChanged ();
+}
+
+KDE_NO_EXPORT int View::statusBarHeight () const {
+ if (statusBar()->isVisible () && !viewArea()->isFullScreen ()) {
+ if (statusBarMode () == SB_Only)
+ return height ();
+ else
+ return statusBar()->maximumSize ().height ();
+ }
+ return 0;
+}
+
+bool View::x11Event (XEvent * e) {
+ switch (e->type) {
+ case UnmapNotify:
+ if (e->xunmap.event == m_viewer->embeddedWinId ()) {
+ videoStart ();
+ //hide();
+ }
+ break;
+ case XKeyPress:
+ if (e->xkey.window == m_viewer->embeddedWinId ()) {
+ KeySym ksym;
+ char kbuf[16];
+ XLookupString (&e->xkey, kbuf, sizeof(kbuf), &ksym, NULL);
+ switch (ksym) {
+ case XK_f:
+ case XK_F:
+ //fullScreen ();
+ break;
+ };
+ }
+ break;
+ /*case ColormapNotify:
+ fprintf (stderr, "colormap notify\n");
+ return true;*/
+ case MotionNotify:
+ if (e->xmotion.window == m_viewer->embeddedWinId ())
+ delayedShowButtons (e->xmotion.y > m_view_area->height () -
+ statusBarHeight () -
+ m_control_panel->maximumSize ().height ());
+ m_view_area->mouseMoved ();
+ break;
+ case MapNotify:
+ if (e->xmap.event == m_viewer->embeddedWinId ()) {
+ show ();
+ QTimer::singleShot (10, m_viewer, SLOT (sendConfigureEvent ()));
+ }
+ break;
+ /*case ConfigureNotify:
+ break;
+ //return true;*/
+ default:
+ break;
+ }
+ return false;
+}
+
+//----------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT Viewer::Viewer (QWidget *parent, View * view)
+ : QXEmbed (parent), m_plain_window (0), m_bgcolor (0), m_aspect (0.0),
+ m_view (view) {
+ /*XWindowAttributes xwa;
+ XGetWindowAttributes (qt_xdisplay(), winId (), &xwa);
+ XSetWindowAttributes xswa;
+ xswa.background_pixel = 0;
+ xswa.border_pixel = 0;
+ xswa.colormap = xwa.colormap;
+ create (XCreateWindow (qt_xdisplay (), parent->winId (), 0, 0, 10, 10, 0,
+ x11Depth (), InputOutput, (Visual*)x11Visual (),
+ CWBackPixel | CWBorderPixel | CWColormap, &xswa));*/
+ setAcceptDrops (true);
+ initialize ();
+ //setProtocol (QXEmbed::XPLAIN);
+}
+
+KDE_NO_CDTOR_EXPORT Viewer::~Viewer () {
+}
+
+KDE_NO_EXPORT void Viewer::changeProtocol (QXEmbed::Protocol p) {
+ kdDebug () << "changeProtocol " << (int)protocol () << "->" << p << endl;
+ if (!embeddedWinId () || p != protocol ()) {
+ if (p == QXEmbed::XPLAIN) {
+ setProtocol (p);
+ if (!m_plain_window) {
+ int scr = DefaultScreen (qt_xdisplay ());
+ m_plain_window = XCreateSimpleWindow (
+ qt_xdisplay(),
+ m_view->winId (),
+ 0, 0, width(), height(),
+ 1,
+ BlackPixel (qt_xdisplay(), scr),
+ BlackPixel (qt_xdisplay(), scr));
+ embed (m_plain_window);
+ }
+ XClearWindow (qt_xdisplay(), m_plain_window);
+ } else {
+ if (m_plain_window) {
+ XDestroyWindow (qt_xdisplay(), m_plain_window);
+ m_plain_window = 0;
+ XSync (qt_xdisplay (), false);
+ }
+ //setProtocol (p);
+ setProtocol (QXEmbed::XPLAIN);
+ }
+ }
+}
+
+KDE_NO_EXPORT void Viewer::windowChanged (WId w) {
+ kdDebug () << "windowChanged " << (int)w << endl;
+ if (w /*&& m_plain_window*/)
+ XSelectInput (qt_xdisplay (), w,
+ //KeyPressMask | KeyReleaseMask |
+ KeyPressMask |
+ //EnterWindowMask | LeaveWindowMask |
+ //FocusChangeMask |
+ ExposureMask |
+ StructureNotifyMask |
+ PointerMotionMask);
+}
+
+KDE_NO_EXPORT void Viewer::mouseMoveEvent (QMouseEvent * e) {
+ if (e->state () == Qt::NoButton) {
+ int cp_height = m_view->controlPanel ()->maximumSize ().height ();
+ m_view->delayedShowButtons (e->y () > height () - cp_height);
+ }
+ m_view->viewArea ()->mouseMoved ();
+}
+
+void Viewer::setAspect (float a) {
+ m_aspect = a;
+}
+
+KDE_NO_EXPORT int Viewer::heightForWidth (int w) const {
+ if (m_aspect <= 0.01)
+ return 0;
+ return int (w/m_aspect);
+}
+
+KDE_NO_EXPORT void Viewer::dropEvent (QDropEvent * de) {
+ m_view->dropEvent (de);
+}
+
+KDE_NO_EXPORT void Viewer::dragEnterEvent (QDragEnterEvent* dee) {
+ m_view->dragEnterEvent (dee);
+}
+/*
+*/
+void Viewer::sendKeyEvent (int key) {
+ WId w = embeddedWinId ();
+ if (w) {
+ char buf[2] = { char (key), '\0' };
+ KeySym keysym = XStringToKeysym (buf);
+ XKeyEvent event = {
+ XKeyPress, 0, true,
+ qt_xdisplay (), w, qt_xrootwin(), w,
+ /*time*/ 0, 0, 0, 0, 0,
+ 0, XKeysymToKeycode (qt_xdisplay (), keysym), true
+ };
+ XSendEvent (qt_xdisplay(), w, false, KeyPressMask, (XEvent *) &event);
+ XFlush (qt_xdisplay ());
+ }
+}
+
+KDE_NO_EXPORT void Viewer::sendConfigureEvent () {
+ WId w = embeddedWinId ();
+ if (w) {
+ XConfigureEvent c = {
+ ConfigureNotify, 0UL, True,
+ qt_xdisplay (), w, winId (),
+ x (), y (), width (), height (),
+ 0, None, False
+ };
+ XSendEvent(qt_xdisplay(),c.event,true,StructureNotifyMask,(XEvent*)&c);
+ XFlush (qt_xdisplay ());
+ }
+}
+
+KDE_NO_EXPORT void Viewer::contextMenuEvent (QContextMenuEvent * e) {
+ m_view->controlPanel ()->popupMenu ()->exec (e->globalPos ());
+}
+
+KDE_NO_EXPORT void Viewer::setBackgroundColor (const QColor & c) {
+ if (m_bgcolor != c.rgb ()) {
+ m_bgcolor = c.rgb ();
+ setCurrentBackgroundColor (c);
+ }
+}
+
+KDE_NO_EXPORT void Viewer::resetBackgroundColor () {
+ setCurrentBackgroundColor (m_bgcolor);
+}
+
+KDE_NO_EXPORT void Viewer::setCurrentBackgroundColor (const QColor & c) {
+ setPaletteBackgroundColor (c);
+ WId w = embeddedWinId ();
+ if (w) {
+ XSetWindowBackground (qt_xdisplay (), w, c.rgb ());
+ XFlush (qt_xdisplay ());
+ }
+}
+
+#include "kmplayerview.moc"
diff --git a/src/kmplayerview.h b/src/kmplayerview.h
new file mode 100644
index 0000000..d255bd0
--- /dev/null
+++ b/src/kmplayerview.h
@@ -0,0 +1,243 @@
+/**
+ * Copyright (C) 2002-2003 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#ifndef KMPLAYERVIEW_H
+#define KMPLAYERVIEW_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <qwidget.h>
+#include <qtextedit.h>
+
+#include <kdockwidget.h>
+#include <kurl.h>
+#include <qxembed.h>
+#include <kmediaplayer/view.h>
+
+#include "kmplayersource.h"
+
+#define MOUSE_INVISIBLE_DELAY 2000
+
+class QWidgetStack;
+class QPixmap;
+class QPaintDevice;
+class QPainter;
+class QSlider;
+class QLabel;
+class KActionCollection;
+class KAction;
+class KShortcut;
+class KStatusBar;
+class KFindDialog;
+
+namespace KMPlayer {
+
+class View;
+class ViewArea;
+class Viewer;
+class ControlPanel;
+class VolumeBar;
+class Console;
+class PlayListView;
+class PlayListView;
+class RootPlayListItem;
+
+typedef KStatusBar StatusBar;
+
+/*
+ * The console GUI
+ */
+class TextEdit : public QTextEdit {
+public:
+ TextEdit (QWidget * parent, View * view);
+protected:
+ void contextMenuEvent (QContextMenuEvent * e);
+private:
+ View * m_view;
+};
+
+/*
+ * The infowindow GUI
+ */
+class InfoWindow : public QTextEdit {
+public:
+ InfoWindow (QWidget * parent, View * view);
+ KDE_NO_EXPORT View * view () const { return m_view; }
+protected:
+ void contextMenuEvent (QContextMenuEvent * e);
+private:
+ View * m_view;
+};
+
+/*
+ * The view containing ViewArea and playlist
+ */
+class KMPLAYER_EXPORT View : public KMediaPlayer::View {
+ Q_OBJECT
+public:
+ enum ControlPanelMode {
+ CP_Hide, CP_AutoHide, CP_Show, CP_Only /* no video widget */
+ };
+ enum StatusBarMode {
+ SB_Hide, SB_Show, SB_Only /* no video widget */
+ };
+ enum WidgetType {
+ WT_Video, WT_Console, WT_Picture, WT_Last
+ };
+
+ View (QWidget *parent, const char *);
+ ~View();
+
+ void addText (const QString &, bool eol=false);
+ void init (KActionCollection * ac);
+ void reset ();
+ //void print(QPrinter *pPrinter);
+
+ TextEdit * console () const { return m_multiedit; }
+ KDE_NO_EXPORT Viewer * viewer () const { return m_viewer; }
+ KDE_NO_EXPORT ControlPanel * controlPanel () const {return m_control_panel;}
+ KDE_NO_EXPORT StatusBar * statusBar () const {return m_status_bar;}
+ KDE_NO_EXPORT PlayListView * playList () const { return m_playlist; }
+ KDE_NO_EXPORT InfoWindow * infoPanel () const { return m_infopanel; }
+ KDE_NO_EXPORT QWidgetStack * widgetStack () const { return m_widgetstack; }
+ KDE_NO_EXPORT KDockArea * docArea () const { return m_dockarea; }
+ KDE_NO_EXPORT ViewArea * viewArea () const { return m_view_area; }
+ KDE_NO_EXPORT bool keepSizeRatio () const { return m_keepsizeratio; }
+ void setKeepSizeRatio (bool b);
+ void showWidget (WidgetType w);
+ void setControlPanelMode (ControlPanelMode m);
+ void setStatusBarMode (StatusBarMode m);
+ void setEraseColor (const QColor &);
+ KDE_NO_EXPORT ControlPanelMode controlPanelMode () const { return m_controlpanel_mode; }
+ KDE_NO_EXPORT StatusBarMode statusBarMode () const { return m_statusbar_mode; }
+ void delayedShowButtons (bool show);
+ bool isFullScreen () const;
+ int statusBarHeight () const;
+ KDE_NO_EXPORT bool editMode () const { return m_edit_mode; }
+ bool setPicture (const QString & path);
+ KDE_NO_EXPORT QPixmap * image () const { return m_image; }
+ void setNoInfoMessages (bool b) { m_no_info = b; }
+ void setViewOnly ();
+ void setInfoPanelOnly ();
+ void setPlaylistOnly ();
+ void setEditMode (RootPlayListItem *, bool enable=true);
+ void dragEnterEvent (QDragEnterEvent *);
+ void dropEvent (QDropEvent *);
+ KDE_NO_EXPORT void emitPictureClicked () { emit pictureClicked (); }
+ /* raise video widget, might (auto) hides panel */
+ void videoStart ();
+ void playingStart ();
+ /* shows panel */
+ void playingStop ();
+public slots:
+ void setVolume (int);
+ void updateVolume ();
+ void fullScreen ();
+ void updateLayout ();
+ void toggleShowPlaylist ();
+ void toggleVideoConsoleWindow ();
+ void setInfoMessage (const QString & msg);
+ void setStatusMessage (const QString & msg);
+signals:
+ void urlDropped (const KURL::List & urls);
+ void pictureClicked ();
+ void fullScreenChanged ();
+ void windowVideoConsoleToggled (int wt);
+protected:
+ void leaveEvent (QEvent *) KDE_NO_EXPORT;
+ void timerEvent (QTimerEvent *) KDE_NO_EXPORT;
+ bool x11Event (XEvent *) KDE_NO_EXPORT;
+private:
+ // widget for player's output
+ Viewer * m_viewer;
+ // console output
+ TextEdit * m_multiedit;
+ // widget stack contains m_viewer, m_multiedit and m_picturewidget
+ QWidgetStack * m_widgetstack;
+ // widget that layouts m_widgetstack for ratio setting and m_control_panel
+ ViewArea * m_view_area;
+ // playlist widget
+ PlayListView * m_playlist;
+ // infopanel widget
+ InfoWindow * m_infopanel;
+ // all widget types
+ QWidget * m_widgettypes [WT_Last];
+ KDockArea * m_dockarea;
+ KDockWidget * m_dock_video;
+ KDockWidget * m_dock_playlist;
+ KDockWidget * m_dock_infopanel;
+ QString tmplog;
+ QPixmap * m_image;
+ ControlPanel * m_control_panel;
+ StatusBar * m_status_bar;
+ QSlider * m_volume_slider;
+ const char * m_mixer_object;
+ ControlPanelMode m_controlpanel_mode;
+ ControlPanelMode m_old_controlpanel_mode;
+ StatusBarMode m_statusbar_mode;
+ int controlbar_timer;
+ int infopanel_timer;
+ bool m_keepsizeratio;
+ bool m_playing;
+ bool m_mixer_init;
+ bool m_inVolumeUpdate;
+ bool m_sreensaver_disabled;
+ bool m_tmplog_needs_eol;
+ bool m_revert_fullscreen;
+ bool m_no_info;
+ bool m_edit_mode;
+};
+
+/*
+ * The video widget
+ */
+class KMPLAYER_EXPORT Viewer : public QXEmbed {
+ Q_OBJECT
+public:
+ Viewer(QWidget *parent, View * view);
+ ~Viewer();
+
+ int heightForWidth (int w) const;
+
+ void setAspect (float a);
+ float aspect () { return m_aspect; }
+ void sendKeyEvent (int key);
+ void setBackgroundColor (const QColor & c);
+ void resetBackgroundColor ();
+ void setCurrentBackgroundColor (const QColor & c);
+ KDE_NO_EXPORT View * view () const { return m_view; }
+ void changeProtocol (QXEmbed::Protocol p);
+public slots:
+ void sendConfigureEvent ();
+protected:
+ void dragEnterEvent (QDragEnterEvent *);
+ void dropEvent (QDropEvent *);
+ void mouseMoveEvent (QMouseEvent * e);
+ void contextMenuEvent (QContextMenuEvent * e);
+ virtual void windowChanged( WId w );
+private:
+ WId m_plain_window;
+ unsigned int m_bgcolor;
+ float m_aspect;
+ View * m_view;
+};
+
+} // namespace
+
+#endif // KMPLAYERVIEW_H
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..c10df5b
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,90 @@
+/***************************************************************************
+ main.cpp - description
+ -------------------
+begin : Sat Dec 7 16:14:51 CET 2002
+copyright : (C) 2002 by Koos Vriezen
+email :
+ ***************************************************************************/
+
+/***************************************************************************
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+ ***************************************************************************/
+#include <unistd.h>
+
+#include <config.h>
+#include <kcmdlineargs.h>
+#include <kaboutdata.h>
+#include <klocale.h>
+#include <kdemacros.h>
+#include <dcopclient.h>
+
+#include <qguardedptr.h>
+#include <qfileinfo.h>
+
+#include "kmplayer.h"
+
+static const char description[] = I18N_NOOP("KMPlayer");
+
+
+static KCmdLineOptions options[] =
+{
+ { "+[File]", I18N_NOOP("file to open"), 0 },
+ KCmdLineLastOption
+ // INSERT YOUR COMMANDLINE OPTIONS HERE
+};
+
+extern "C" {
+
+ KDE_EXPORT int kdemain (int argc, char *argv[])
+ {
+ setsid ();
+
+ KAboutData aboutData ("kmplayer", I18N_NOOP ("KMPlayer"),
+ VERSION, description, KAboutData::License_GPL,
+ "(c) 2002-2005, Koos Vriezen", 0, 0, "");
+ aboutData.addAuthor( "Koos Vriezen",0, "");
+ KCmdLineArgs::init (argc, argv, &aboutData);
+ KCmdLineArgs::addCmdLineOptions (options); // Add our own options.
+
+ KMPlayer::StringPool::init();
+
+ KApplication app;
+ QGuardedPtr <KMPlayerApp> kmplayer;
+
+ if (app.isRestored ()) {
+ RESTORE (KMPlayerApp);
+ } else {
+ kmplayer = new KMPlayerApp ();
+ kmplayer->show();
+
+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
+
+ KURL url;
+ if (args->count () == 1)
+ url = args->url (0);
+ if (args->count () > 1)
+ for (int i = 0; i < args->count (); i++) {
+ KURL url = args->url (i);
+ if (url.url ().find ("://") < 0)
+ url = KURL (QFileInfo (url.url ()).absFilePath ());
+ if (url.isValid ())
+ kmplayer->addURL (url);
+ }
+ kmplayer->openDocumentFile (url);
+ args->clear ();
+ }
+ app.dcopClient()->registerAs("kmplayer");
+ int retvalue = app.exec ();
+
+ delete kmplayer;
+
+ KMPlayer::StringPool::reset();
+
+ return retvalue;
+ }
+}
diff --git a/src/moz-sdk/jni.h b/src/moz-sdk/jni.h
new file mode 100644
index 0000000..863075a
--- /dev/null
+++ b/src/moz-sdk/jni.h
@@ -0,0 +1,1810 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Java Runtime Interface.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation and Sun Microsystems, Inc.
+ * Portions created by the Initial Developer are Copyright (C) 1993-1996
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#ifndef JNI_H
+#define JNI_H
+
+#include <stdio.h>
+#include <stdarg.h>
+
+/* jni_md.h contains the machine-dependent typedefs for jbyte, jint
+ and jlong */
+
+#include "jni_md.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * JNI Types
+ */
+
+typedef unsigned char jboolean;
+typedef unsigned short jchar;
+typedef short jshort;
+typedef float jfloat;
+typedef double jdouble;
+
+typedef jint jsize;
+
+#ifdef __cplusplus
+
+class _jobject {};
+class _jclass : public _jobject {};
+class _jthrowable : public _jobject {};
+class _jstring : public _jobject {};
+class _jarray : public _jobject {};
+class _jbooleanArray : public _jarray {};
+class _jbyteArray : public _jarray {};
+class _jcharArray : public _jarray {};
+class _jshortArray : public _jarray {};
+class _jintArray : public _jarray {};
+class _jlongArray : public _jarray {};
+class _jfloatArray : public _jarray {};
+class _jdoubleArray : public _jarray {};
+class _jobjectArray : public _jarray {};
+
+typedef _jobject *jobject;
+typedef _jclass *jclass;
+typedef _jthrowable *jthrowable;
+typedef _jstring *jstring;
+typedef _jarray *jarray;
+typedef _jbooleanArray *jbooleanArray;
+typedef _jbyteArray *jbyteArray;
+typedef _jcharArray *jcharArray;
+typedef _jshortArray *jshortArray;
+typedef _jintArray *jintArray;
+typedef _jlongArray *jlongArray;
+typedef _jfloatArray *jfloatArray;
+typedef _jdoubleArray *jdoubleArray;
+typedef _jobjectArray *jobjectArray;
+
+#else
+
+struct _jobject;
+
+typedef struct _jobject *jobject;
+typedef jobject jclass;
+typedef jobject jthrowable;
+typedef jobject jstring;
+typedef jobject jarray;
+typedef jarray jbooleanArray;
+typedef jarray jbyteArray;
+typedef jarray jcharArray;
+typedef jarray jshortArray;
+typedef jarray jintArray;
+typedef jarray jlongArray;
+typedef jarray jfloatArray;
+typedef jarray jdoubleArray;
+typedef jarray jobjectArray;
+
+#endif
+
+#if 0 /* moved to jri_md.h */
+typedef jobject jref; /* For transition---not meant to be part of public
+ API anymore.*/
+#endif
+
+typedef union jvalue {
+ jboolean z;
+ jbyte b;
+ jchar c;
+ jshort s;
+ jint i;
+ jlong j;
+ jfloat f;
+ jdouble d;
+ jobject l;
+} jvalue;
+
+struct _jfieldID;
+typedef struct _jfieldID *jfieldID;
+
+struct _jmethodID;
+typedef struct _jmethodID *jmethodID;
+
+/*
+ * jboolean constants
+ */
+
+#define JNI_FALSE 0
+#define JNI_TRUE 1
+
+/*
+ * possible return values for JNI functions.
+ */
+
+#define JNI_OK 0
+#define JNI_ERR (-1)
+
+/*
+ * used in ReleaseScalarArrayElements
+ */
+
+#define JNI_COMMIT 1
+#define JNI_ABORT 2
+
+/*
+ * used in RegisterNatives to describe native method name, signature,
+ * and function pointer.
+ */
+
+typedef struct {
+ char *name;
+ char *signature;
+ void *fnPtr;
+} JNINativeMethod;
+
+/*
+ * JNI Native Method Interface.
+ */
+
+struct JNINativeInterface_;
+
+struct JNIEnv_;
+
+#ifdef __cplusplus
+typedef JNIEnv_ JNIEnv;
+#else
+typedef const struct JNINativeInterface_ *JNIEnv;
+#endif
+
+/*
+ * JNI Invocation Interface.
+ */
+
+struct JNIInvokeInterface_;
+
+struct JavaVM_;
+
+#ifdef __cplusplus
+typedef JavaVM_ JavaVM;
+#else
+typedef const struct JNIInvokeInterface_ *JavaVM;
+#endif
+
+struct JNINativeInterface_ {
+ void *reserved0;
+ void *reserved1;
+ void *reserved2;
+
+ void *reserved3;
+ jint (JNICALL *GetVersion)(JNIEnv *env);
+
+ jclass (JNICALL *DefineClass)
+ (JNIEnv *env, const char *name, jobject loader, const jbyte *buf,
+ jsize len);
+ jclass (JNICALL *FindClass)
+ (JNIEnv *env, const char *name);
+
+ void *reserved4;
+ void *reserved5;
+ void *reserved6;
+
+ jclass (JNICALL *GetSuperclass)
+ (JNIEnv *env, jclass sub);
+ jboolean (JNICALL *IsAssignableFrom)
+ (JNIEnv *env, jclass sub, jclass sup);
+ void *reserved7;
+
+
+ jint (JNICALL *Throw)
+ (JNIEnv *env, jthrowable obj);
+ jint (JNICALL *ThrowNew)
+ (JNIEnv *env, jclass clazz, const char *msg);
+ jthrowable (JNICALL *ExceptionOccurred)
+ (JNIEnv *env);
+ void (JNICALL *ExceptionDescribe)
+ (JNIEnv *env);
+ void (JNICALL *ExceptionClear)
+ (JNIEnv *env);
+ void (JNICALL *FatalError)
+ (JNIEnv *env, const char *msg);
+ void *reserved8;
+ void *reserved9;
+
+ jobject (JNICALL *NewGlobalRef)
+ (JNIEnv *env, jobject lobj);
+ void (JNICALL *DeleteGlobalRef)
+ (JNIEnv *env, jobject gref);
+ void (JNICALL *DeleteLocalRef)
+ (JNIEnv *env, jobject obj);
+ jboolean (JNICALL *IsSameObject)
+ (JNIEnv *env, jobject obj1, jobject obj2);
+ void *reserved10;
+ void *reserved11;
+
+ jobject (JNICALL *AllocObject)
+ (JNIEnv *env, jclass clazz);
+ jobject (JNICALL *NewObject)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jobject (JNICALL *NewObjectV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jobject (JNICALL *NewObjectA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
+
+ jclass (JNICALL *GetObjectClass)
+ (JNIEnv *env, jobject obj);
+ jboolean (JNICALL *IsInstanceOf)
+ (JNIEnv *env, jobject obj, jclass clazz);
+
+ jmethodID (JNICALL *GetMethodID)
+ (JNIEnv *env, jclass clazz, const char *name, const char *sig);
+
+ jobject (JNICALL *CallObjectMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jobject (JNICALL *CallObjectMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jobject (JNICALL *CallObjectMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
+
+ jboolean (JNICALL *CallBooleanMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jboolean (JNICALL *CallBooleanMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jboolean (JNICALL *CallBooleanMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
+
+ jbyte (JNICALL *CallByteMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jbyte (JNICALL *CallByteMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jbyte (JNICALL *CallByteMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
+
+ jchar (JNICALL *CallCharMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jchar (JNICALL *CallCharMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jchar (JNICALL *CallCharMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
+
+ jshort (JNICALL *CallShortMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jshort (JNICALL *CallShortMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jshort (JNICALL *CallShortMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
+
+ jint (JNICALL *CallIntMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jint (JNICALL *CallIntMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jint (JNICALL *CallIntMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
+
+ jlong (JNICALL *CallLongMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jlong (JNICALL *CallLongMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jlong (JNICALL *CallLongMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
+
+ jfloat (JNICALL *CallFloatMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jfloat (JNICALL *CallFloatMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jfloat (JNICALL *CallFloatMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
+
+ jdouble (JNICALL *CallDoubleMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ jdouble (JNICALL *CallDoubleMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ jdouble (JNICALL *CallDoubleMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
+
+ void (JNICALL *CallVoidMethod)
+ (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+ void (JNICALL *CallVoidMethodV)
+ (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+ void (JNICALL *CallVoidMethodA)
+ (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
+
+ jobject (JNICALL *CallNonvirtualObjectMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jobject (JNICALL *CallNonvirtualObjectMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jobject (JNICALL *CallNonvirtualObjectMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ jvalue * args);
+
+ jboolean (JNICALL *CallNonvirtualBooleanMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jboolean (JNICALL *CallNonvirtualBooleanMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jboolean (JNICALL *CallNonvirtualBooleanMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ jvalue * args);
+
+ jbyte (JNICALL *CallNonvirtualByteMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jbyte (JNICALL *CallNonvirtualByteMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jbyte (JNICALL *CallNonvirtualByteMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ jvalue *args);
+
+ jchar (JNICALL *CallNonvirtualCharMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jchar (JNICALL *CallNonvirtualCharMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jchar (JNICALL *CallNonvirtualCharMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ jvalue *args);
+
+ jshort (JNICALL *CallNonvirtualShortMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jshort (JNICALL *CallNonvirtualShortMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jshort (JNICALL *CallNonvirtualShortMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ jvalue *args);
+
+ jint (JNICALL *CallNonvirtualIntMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jint (JNICALL *CallNonvirtualIntMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jint (JNICALL *CallNonvirtualIntMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ jvalue *args);
+
+ jlong (JNICALL *CallNonvirtualLongMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jlong (JNICALL *CallNonvirtualLongMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jlong (JNICALL *CallNonvirtualLongMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ jvalue *args);
+
+ jfloat (JNICALL *CallNonvirtualFloatMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jfloat (JNICALL *CallNonvirtualFloatMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jfloat (JNICALL *CallNonvirtualFloatMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ jvalue *args);
+
+ jdouble (JNICALL *CallNonvirtualDoubleMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ jdouble (JNICALL *CallNonvirtualDoubleMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ jdouble (JNICALL *CallNonvirtualDoubleMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ jvalue *args);
+
+ void (JNICALL *CallNonvirtualVoidMethod)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+ void (JNICALL *CallNonvirtualVoidMethodV)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ va_list args);
+ void (JNICALL *CallNonvirtualVoidMethodA)
+ (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+ jvalue * args);
+
+ jfieldID (JNICALL *GetFieldID)
+ (JNIEnv *env, jclass clazz, const char *name, const char *sig);
+
+ jobject (JNICALL *GetObjectField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jboolean (JNICALL *GetBooleanField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jbyte (JNICALL *GetByteField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jchar (JNICALL *GetCharField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jshort (JNICALL *GetShortField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jint (JNICALL *GetIntField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jlong (JNICALL *GetLongField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jfloat (JNICALL *GetFloatField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+ jdouble (JNICALL *GetDoubleField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID);
+
+ void (JNICALL *SetObjectField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
+ void (JNICALL *SetBooleanField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
+ void (JNICALL *SetByteField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
+ void (JNICALL *SetCharField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
+ void (JNICALL *SetShortField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
+ void (JNICALL *SetIntField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
+ void (JNICALL *SetLongField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
+ void (JNICALL *SetFloatField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
+ void (JNICALL *SetDoubleField)
+ (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
+
+ jmethodID (JNICALL *GetStaticMethodID)
+ (JNIEnv *env, jclass clazz, const char *name, const char *sig);
+
+ jobject (JNICALL *CallStaticObjectMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jobject (JNICALL *CallStaticObjectMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jobject (JNICALL *CallStaticObjectMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
+
+ jboolean (JNICALL *CallStaticBooleanMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jboolean (JNICALL *CallStaticBooleanMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jboolean (JNICALL *CallStaticBooleanMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
+
+ jbyte (JNICALL *CallStaticByteMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jbyte (JNICALL *CallStaticByteMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jbyte (JNICALL *CallStaticByteMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
+
+ jchar (JNICALL *CallStaticCharMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jchar (JNICALL *CallStaticCharMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jchar (JNICALL *CallStaticCharMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
+
+ jshort (JNICALL *CallStaticShortMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jshort (JNICALL *CallStaticShortMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jshort (JNICALL *CallStaticShortMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
+
+ jint (JNICALL *CallStaticIntMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jint (JNICALL *CallStaticIntMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jint (JNICALL *CallStaticIntMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
+
+ jlong (JNICALL *CallStaticLongMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jlong (JNICALL *CallStaticLongMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jlong (JNICALL *CallStaticLongMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
+
+ jfloat (JNICALL *CallStaticFloatMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jfloat (JNICALL *CallStaticFloatMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jfloat (JNICALL *CallStaticFloatMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
+
+ jdouble (JNICALL *CallStaticDoubleMethod)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+ jdouble (JNICALL *CallStaticDoubleMethodV)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+ jdouble (JNICALL *CallStaticDoubleMethodA)
+ (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
+
+ void (JNICALL *CallStaticVoidMethod)
+ (JNIEnv *env, jclass cls, jmethodID methodID, ...);
+ void (JNICALL *CallStaticVoidMethodV)
+ (JNIEnv *env, jclass cls, jmethodID methodID, va_list args);
+ void (JNICALL *CallStaticVoidMethodA)
+ (JNIEnv *env, jclass cls, jmethodID methodID, jvalue * args);
+
+ jfieldID (JNICALL *GetStaticFieldID)
+ (JNIEnv *env, jclass clazz, const char *name, const char *sig);
+ jobject (JNICALL *GetStaticObjectField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jboolean (JNICALL *GetStaticBooleanField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jbyte (JNICALL *GetStaticByteField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jchar (JNICALL *GetStaticCharField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jshort (JNICALL *GetStaticShortField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jint (JNICALL *GetStaticIntField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jlong (JNICALL *GetStaticLongField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jfloat (JNICALL *GetStaticFloatField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+ jdouble (JNICALL *GetStaticDoubleField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID);
+
+ void (JNICALL *SetStaticObjectField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);
+ void (JNICALL *SetStaticBooleanField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);
+ void (JNICALL *SetStaticByteField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);
+ void (JNICALL *SetStaticCharField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);
+ void (JNICALL *SetStaticShortField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);
+ void (JNICALL *SetStaticIntField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);
+ void (JNICALL *SetStaticLongField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);
+ void (JNICALL *SetStaticFloatField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);
+ void (JNICALL *SetStaticDoubleField)
+ (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);
+
+ jstring (JNICALL *NewString)
+ (JNIEnv *env, const jchar *unicode, jsize len);
+ jsize (JNICALL *GetStringLength)
+ (JNIEnv *env, jstring str);
+ const jchar *(JNICALL *GetStringChars)
+ (JNIEnv *env, jstring str, jboolean *isCopy);
+ void (JNICALL *ReleaseStringChars)
+ (JNIEnv *env, jstring str, const jchar *chars);
+
+ jstring (JNICALL *NewStringUTF)
+ (JNIEnv *env, const char *utf);
+ jsize (JNICALL *GetStringUTFLength)
+ (JNIEnv *env, jstring str);
+ const char* (JNICALL *GetStringUTFChars)
+ (JNIEnv *env, jstring str, jboolean *isCopy);
+ void (JNICALL *ReleaseStringUTFChars)
+ (JNIEnv *env, jstring str, const char* chars);
+
+
+ jsize (JNICALL *GetArrayLength)
+ (JNIEnv *env, jarray array);
+
+ jobjectArray (JNICALL *NewObjectArray)
+ (JNIEnv *env, jsize len, jclass clazz, jobject init);
+ jobject (JNICALL *GetObjectArrayElement)
+ (JNIEnv *env, jobjectArray array, jsize index);
+ void (JNICALL *SetObjectArrayElement)
+ (JNIEnv *env, jobjectArray array, jsize index, jobject val);
+
+ jbooleanArray (JNICALL *NewBooleanArray)
+ (JNIEnv *env, jsize len);
+ jbyteArray (JNICALL *NewByteArray)
+ (JNIEnv *env, jsize len);
+ jcharArray (JNICALL *NewCharArray)
+ (JNIEnv *env, jsize len);
+ jshortArray (JNICALL *NewShortArray)
+ (JNIEnv *env, jsize len);
+ jintArray (JNICALL *NewIntArray)
+ (JNIEnv *env, jsize len);
+ jlongArray (JNICALL *NewLongArray)
+ (JNIEnv *env, jsize len);
+ jfloatArray (JNICALL *NewFloatArray)
+ (JNIEnv *env, jsize len);
+ jdoubleArray (JNICALL *NewDoubleArray)
+ (JNIEnv *env, jsize len);
+
+ jboolean * (JNICALL *GetBooleanArrayElements)
+ (JNIEnv *env, jbooleanArray array, jboolean *isCopy);
+ jbyte * (JNICALL *GetByteArrayElements)
+ (JNIEnv *env, jbyteArray array, jboolean *isCopy);
+ jchar * (JNICALL *GetCharArrayElements)
+ (JNIEnv *env, jcharArray array, jboolean *isCopy);
+ jshort * (JNICALL *GetShortArrayElements)
+ (JNIEnv *env, jshortArray array, jboolean *isCopy);
+ jint * (JNICALL *GetIntArrayElements)
+ (JNIEnv *env, jintArray array, jboolean *isCopy);
+ jlong * (JNICALL *GetLongArrayElements)
+ (JNIEnv *env, jlongArray array, jboolean *isCopy);
+ jfloat * (JNICALL *GetFloatArrayElements)
+ (JNIEnv *env, jfloatArray array, jboolean *isCopy);
+ jdouble * (JNICALL *GetDoubleArrayElements)
+ (JNIEnv *env, jdoubleArray array, jboolean *isCopy);
+
+ void (JNICALL *ReleaseBooleanArrayElements)
+ (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);
+ void (JNICALL *ReleaseByteArrayElements)
+ (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);
+ void (JNICALL *ReleaseCharArrayElements)
+ (JNIEnv *env, jcharArray array, jchar *elems, jint mode);
+ void (JNICALL *ReleaseShortArrayElements)
+ (JNIEnv *env, jshortArray array, jshort *elems, jint mode);
+ void (JNICALL *ReleaseIntArrayElements)
+ (JNIEnv *env, jintArray array, jint *elems, jint mode);
+ void (JNICALL *ReleaseLongArrayElements)
+ (JNIEnv *env, jlongArray array, jlong *elems, jint mode);
+ void (JNICALL *ReleaseFloatArrayElements)
+ (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);
+ void (JNICALL *ReleaseDoubleArrayElements)
+ (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);
+
+ void (JNICALL *GetBooleanArrayRegion)
+ (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
+ void (JNICALL *GetByteArrayRegion)
+ (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
+ void (JNICALL *GetCharArrayRegion)
+ (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
+ void (JNICALL *GetShortArrayRegion)
+ (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
+ void (JNICALL *GetIntArrayRegion)
+ (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
+ void (JNICALL *GetLongArrayRegion)
+ (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
+ void (JNICALL *GetFloatArrayRegion)
+ (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
+ void (JNICALL *GetDoubleArrayRegion)
+ (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
+
+ void (JNICALL *SetBooleanArrayRegion)
+ (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
+ void (JNICALL *SetByteArrayRegion)
+ (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
+ void (JNICALL *SetCharArrayRegion)
+ (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
+ void (JNICALL *SetShortArrayRegion)
+ (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
+ void (JNICALL *SetIntArrayRegion)
+ (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
+ void (JNICALL *SetLongArrayRegion)
+ (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
+ void (JNICALL *SetFloatArrayRegion)
+ (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
+ void (JNICALL *SetDoubleArrayRegion)
+ (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
+
+ jint (JNICALL *RegisterNatives)
+ (JNIEnv *env, jclass clazz, const JNINativeMethod *methods,
+ jint nMethods);
+ jint (JNICALL *UnregisterNatives)
+ (JNIEnv *env, jclass clazz);
+
+ jint (JNICALL *MonitorEnter)
+ (JNIEnv *env, jobject obj);
+ jint (JNICALL *MonitorExit)
+ (JNIEnv *env, jobject obj);
+
+ jint (JNICALL *GetJavaVM)
+ (JNIEnv *env, JavaVM **vm);
+};
+
+/*
+ * We use inlined functions for C++ so that programmers can write:
+ *
+ * env->FindClass("java/lang/String")
+ *
+ * in C++ rather than:
+ *
+ * (*env)->FindClass(env, "java/lang/String")
+ *
+ * in C.
+ */
+
+struct JNIEnv_ {
+ const struct JNINativeInterface_ *functions;
+ void *reserved0;
+ void *reserved1[6];
+#ifdef __cplusplus
+
+ jint GetVersion() {
+ return functions->GetVersion(this);
+ }
+ jclass DefineClass(const char *name, jobject loader, const jbyte *buf,
+ jsize len) {
+ return functions->DefineClass(this, name, loader, buf, len);
+ }
+ jclass FindClass(const char *name) {
+ return functions->FindClass(this, name);
+ }
+ jclass GetSuperclass(jclass sub) {
+ return functions->GetSuperclass(this, sub);
+ }
+ jboolean IsAssignableFrom(jclass sub, jclass sup) {
+ return functions->IsAssignableFrom(this, sub, sup);
+ }
+
+ jint Throw(jthrowable obj) {
+ return functions->Throw(this, obj);
+ }
+ jint ThrowNew(jclass clazz, const char *msg) {
+ return functions->ThrowNew(this, clazz, msg);
+ }
+ jthrowable ExceptionOccurred() {
+ return functions->ExceptionOccurred(this);
+ }
+ void ExceptionDescribe() {
+ functions->ExceptionDescribe(this);
+ }
+ void ExceptionClear() {
+ functions->ExceptionClear(this);
+ }
+ void FatalError(const char *msg) {
+ functions->FatalError(this, msg);
+ }
+
+ jobject NewGlobalRef(jobject lobj) {
+ return functions->NewGlobalRef(this,lobj);
+ }
+ void DeleteGlobalRef(jobject gref) {
+ functions->DeleteGlobalRef(this,gref);
+ }
+ void DeleteLocalRef(jobject obj) {
+ functions->DeleteLocalRef(this, obj);
+ }
+
+ jboolean IsSameObject(jobject obj1, jobject obj2) {
+ return functions->IsSameObject(this,obj1,obj2);
+ }
+
+ jobject AllocObject(jclass clazz) {
+ return functions->AllocObject(this,clazz);
+ }
+ jobject NewObject(jclass clazz, jmethodID methodID, ...) {
+ va_list args;
+ jobject result;
+ va_start(args, methodID);
+ result = functions->NewObjectV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jobject NewObjectV(jclass clazz, jmethodID methodID,
+ va_list args) {
+ return functions->NewObjectV(this,clazz,methodID,args);
+ }
+ jobject NewObjectA(jclass clazz, jmethodID methodID,
+ jvalue *args) {
+ return functions->NewObjectA(this,clazz,methodID,args);
+ }
+
+ jclass GetObjectClass(jobject obj) {
+ return functions->GetObjectClass(this,obj);
+ }
+ jboolean IsInstanceOf(jobject obj, jclass clazz) {
+ return functions->IsInstanceOf(this,obj,clazz);
+ }
+
+ jmethodID GetMethodID(jclass clazz, const char *name,
+ const char *sig) {
+ return functions->GetMethodID(this,clazz,name,sig);
+ }
+
+ jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jobject result;
+ va_start(args,methodID);
+ result = functions->CallObjectMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jobject CallObjectMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallObjectMethodV(this,obj,methodID,args);
+ }
+ jobject CallObjectMethodA(jobject obj, jmethodID methodID,
+ jvalue * args) {
+ return functions->CallObjectMethodA(this,obj,methodID,args);
+ }
+
+ jboolean CallBooleanMethod(jobject obj,
+ jmethodID methodID, ...) {
+ va_list args;
+ jboolean result;
+ va_start(args,methodID);
+ result = functions->CallBooleanMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallBooleanMethodV(this,obj,methodID,args);
+ }
+ jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,
+ jvalue * args) {
+ return functions->CallBooleanMethodA(this,obj,methodID, args);
+ }
+
+ jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jbyte result;
+ va_start(args,methodID);
+ result = functions->CallByteMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jbyte CallByteMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallByteMethodV(this,obj,methodID,args);
+ }
+ jbyte CallByteMethodA(jobject obj, jmethodID methodID,
+ jvalue * args) {
+ return functions->CallByteMethodA(this,obj,methodID,args);
+ }
+
+ jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jchar result;
+ va_start(args,methodID);
+ result = functions->CallCharMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jchar CallCharMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallCharMethodV(this,obj,methodID,args);
+ }
+ jchar CallCharMethodA(jobject obj, jmethodID methodID,
+ jvalue * args) {
+ return functions->CallCharMethodA(this,obj,methodID,args);
+ }
+
+ jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jshort result;
+ va_start(args,methodID);
+ result = functions->CallShortMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jshort CallShortMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallShortMethodV(this,obj,methodID,args);
+ }
+ jshort CallShortMethodA(jobject obj, jmethodID methodID,
+ jvalue * args) {
+ return functions->CallShortMethodA(this,obj,methodID,args);
+ }
+
+ jint CallIntMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jint result;
+ va_start(args,methodID);
+ result = functions->CallIntMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jint CallIntMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallIntMethodV(this,obj,methodID,args);
+ }
+ jint CallIntMethodA(jobject obj, jmethodID methodID,
+ jvalue * args) {
+ return functions->CallIntMethodA(this,obj,methodID,args);
+ }
+
+ jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jlong result;
+ va_start(args,methodID);
+ result = functions->CallLongMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jlong CallLongMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallLongMethodV(this,obj,methodID,args);
+ }
+ jlong CallLongMethodA(jobject obj, jmethodID methodID,
+ jvalue * args) {
+ return functions->CallLongMethodA(this,obj,methodID,args);
+ }
+
+ jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jfloat result;
+ va_start(args,methodID);
+ result = functions->CallFloatMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jfloat CallFloatMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallFloatMethodV(this,obj,methodID,args);
+ }
+ jfloat CallFloatMethodA(jobject obj, jmethodID methodID,
+ jvalue * args) {
+ return functions->CallFloatMethodA(this,obj,methodID,args);
+ }
+
+ jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ jdouble result;
+ va_start(args,methodID);
+ result = functions->CallDoubleMethodV(this,obj,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ return functions->CallDoubleMethodV(this,obj,methodID,args);
+ }
+ jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,
+ jvalue * args) {
+ return functions->CallDoubleMethodA(this,obj,methodID,args);
+ }
+
+ void CallVoidMethod(jobject obj, jmethodID methodID, ...) {
+ va_list args;
+ va_start(args,methodID);
+ functions->CallVoidMethodV(this,obj,methodID,args);
+ va_end(args);
+ }
+ void CallVoidMethodV(jobject obj, jmethodID methodID,
+ va_list args) {
+ functions->CallVoidMethodV(this,obj,methodID,args);
+ }
+ void CallVoidMethodA(jobject obj, jmethodID methodID,
+ jvalue * args) {
+ functions->CallVoidMethodA(this,obj,methodID,args);
+ }
+
+ jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jobject result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualObjectMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, jvalue * args) {
+ return functions->CallNonvirtualObjectMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jboolean result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, jvalue * args) {
+ return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,
+ methodID, args);
+ }
+
+ jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jbyte result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualByteMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualByteMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, jvalue * args) {
+ return functions->CallNonvirtualByteMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jchar result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualCharMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualCharMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, jvalue * args) {
+ return functions->CallNonvirtualCharMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jshort result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualShortMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualShortMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, jvalue * args) {
+ return functions->CallNonvirtualShortMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jint CallNonvirtualIntMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jint result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualIntMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualIntMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, jvalue * args) {
+ return functions->CallNonvirtualIntMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jlong result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualLongMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallNonvirtualLongMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,
+ jmethodID methodID, jvalue * args) {
+ return functions->CallNonvirtualLongMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jfloat result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,
+ jmethodID methodID,
+ va_list args) {
+ return functions->CallNonvirtualFloatMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,
+ jmethodID methodID,
+ jvalue * args) {
+ return functions->CallNonvirtualFloatMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jdouble result;
+ va_start(args,methodID);
+ result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
+ methodID,args);
+ va_end(args);
+ return result;
+ }
+ jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,
+ jmethodID methodID,
+ va_list args) {
+ return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
+ methodID,args);
+ }
+ jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,
+ jmethodID methodID,
+ jvalue * args) {
+ return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,
+ methodID,args);
+ }
+
+ void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ va_start(args,methodID);
+ functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
+ va_end(args);
+ }
+ void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
+ jmethodID methodID,
+ va_list args) {
+ functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
+ }
+ void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
+ jmethodID methodID,
+ jvalue * args) {
+ functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);
+ }
+
+ jfieldID GetFieldID(jclass clazz, const char *name,
+ const char *sig) {
+ return functions->GetFieldID(this,clazz,name,sig);
+ }
+
+ jobject GetObjectField(jobject obj, jfieldID fieldID) {
+ return functions->GetObjectField(this,obj,fieldID);
+ }
+ jboolean GetBooleanField(jobject obj, jfieldID fieldID) {
+ return functions->GetBooleanField(this,obj,fieldID);
+ }
+ jbyte GetByteField(jobject obj, jfieldID fieldID) {
+ return functions->GetByteField(this,obj,fieldID);
+ }
+ jchar GetCharField(jobject obj, jfieldID fieldID) {
+ return functions->GetCharField(this,obj,fieldID);
+ }
+ jshort GetShortField(jobject obj, jfieldID fieldID) {
+ return functions->GetShortField(this,obj,fieldID);
+ }
+ jint GetIntField(jobject obj, jfieldID fieldID) {
+ return functions->GetIntField(this,obj,fieldID);
+ }
+ jlong GetLongField(jobject obj, jfieldID fieldID) {
+ return functions->GetLongField(this,obj,fieldID);
+ }
+ jfloat GetFloatField(jobject obj, jfieldID fieldID) {
+ return functions->GetFloatField(this,obj,fieldID);
+ }
+ jdouble GetDoubleField(jobject obj, jfieldID fieldID) {
+ return functions->GetDoubleField(this,obj,fieldID);
+ }
+
+ void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {
+ functions->SetObjectField(this,obj,fieldID,val);
+ }
+ void SetBooleanField(jobject obj, jfieldID fieldID,
+ jboolean val) {
+ functions->SetBooleanField(this,obj,fieldID,val);
+ }
+ void SetByteField(jobject obj, jfieldID fieldID,
+ jbyte val) {
+ functions->SetByteField(this,obj,fieldID,val);
+ }
+ void SetCharField(jobject obj, jfieldID fieldID,
+ jchar val) {
+ functions->SetCharField(this,obj,fieldID,val);
+ }
+ void SetShortField(jobject obj, jfieldID fieldID,
+ jshort val) {
+ functions->SetShortField(this,obj,fieldID,val);
+ }
+ void SetIntField(jobject obj, jfieldID fieldID,
+ jint val) {
+ functions->SetIntField(this,obj,fieldID,val);
+ }
+ void SetLongField(jobject obj, jfieldID fieldID,
+ jlong val) {
+ functions->SetLongField(this,obj,fieldID,val);
+ }
+ void SetFloatField(jobject obj, jfieldID fieldID,
+ jfloat val) {
+ functions->SetFloatField(this,obj,fieldID,val);
+ }
+ void SetDoubleField(jobject obj, jfieldID fieldID,
+ jdouble val) {
+ functions->SetDoubleField(this,obj,fieldID,val);
+ }
+
+ jmethodID GetStaticMethodID(jclass clazz, const char *name,
+ const char *sig) {
+ return functions->GetStaticMethodID(this,clazz,name,sig);
+ }
+
+ jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,
+ ...) {
+ va_list args;
+ jobject result;
+ va_start(args,methodID);
+ result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,
+ va_list args) {
+ return functions->CallStaticObjectMethodV(this,clazz,methodID,args);
+ }
+ jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,
+ jvalue *args) {
+ return functions->CallStaticObjectMethodA(this,clazz,methodID,args);
+ }
+
+ jboolean CallStaticBooleanMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jboolean result;
+ va_start(args,methodID);
+ result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jboolean CallStaticBooleanMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
+ }
+ jboolean CallStaticBooleanMethodA(jclass clazz,
+ jmethodID methodID, jvalue *args) {
+ return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);
+ }
+
+ jbyte CallStaticByteMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jbyte result;
+ va_start(args,methodID);
+ result = functions->CallStaticByteMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jbyte CallStaticByteMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticByteMethodV(this,clazz,methodID,args);
+ }
+ jbyte CallStaticByteMethodA(jclass clazz,
+ jmethodID methodID, jvalue *args) {
+ return functions->CallStaticByteMethodA(this,clazz,methodID,args);
+ }
+
+ jchar CallStaticCharMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jchar result;
+ va_start(args,methodID);
+ result = functions->CallStaticCharMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jchar CallStaticCharMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticCharMethodV(this,clazz,methodID,args);
+ }
+ jchar CallStaticCharMethodA(jclass clazz,
+ jmethodID methodID, jvalue *args) {
+ return functions->CallStaticCharMethodA(this,clazz,methodID,args);
+ }
+
+ jshort CallStaticShortMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jshort result;
+ va_start(args,methodID);
+ result = functions->CallStaticShortMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jshort CallStaticShortMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticShortMethodV(this,clazz,methodID,args);
+ }
+ jshort CallStaticShortMethodA(jclass clazz,
+ jmethodID methodID, jvalue *args) {
+ return functions->CallStaticShortMethodA(this,clazz,methodID,args);
+ }
+
+ jint CallStaticIntMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jint result;
+ va_start(args,methodID);
+ result = functions->CallStaticIntMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jint CallStaticIntMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticIntMethodV(this,clazz,methodID,args);
+ }
+ jint CallStaticIntMethodA(jclass clazz,
+ jmethodID methodID, jvalue *args) {
+ return functions->CallStaticIntMethodA(this,clazz,methodID,args);
+ }
+
+ jlong CallStaticLongMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jlong result;
+ va_start(args,methodID);
+ result = functions->CallStaticLongMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jlong CallStaticLongMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticLongMethodV(this,clazz,methodID,args);
+ }
+ jlong CallStaticLongMethodA(jclass clazz,
+ jmethodID methodID, jvalue *args) {
+ return functions->CallStaticLongMethodA(this,clazz,methodID,args);
+ }
+
+ jfloat CallStaticFloatMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jfloat result;
+ va_start(args,methodID);
+ result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jfloat CallStaticFloatMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticFloatMethodV(this,clazz,methodID,args);
+ }
+ jfloat CallStaticFloatMethodA(jclass clazz,
+ jmethodID methodID, jvalue *args) {
+ return functions->CallStaticFloatMethodA(this,clazz,methodID,args);
+ }
+
+ jdouble CallStaticDoubleMethod(jclass clazz,
+ jmethodID methodID, ...) {
+ va_list args;
+ jdouble result;
+ va_start(args,methodID);
+ result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
+ va_end(args);
+ return result;
+ }
+ jdouble CallStaticDoubleMethodV(jclass clazz,
+ jmethodID methodID, va_list args) {
+ return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
+ }
+ jdouble CallStaticDoubleMethodA(jclass clazz,
+ jmethodID methodID, jvalue *args) {
+ return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);
+ }
+
+ void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {
+ va_list args;
+ va_start(args,methodID);
+ functions->CallStaticVoidMethodV(this,cls,methodID,args);
+ va_end(args);
+ }
+ void CallStaticVoidMethodV(jclass cls, jmethodID methodID,
+ va_list args) {
+ functions->CallStaticVoidMethodV(this,cls,methodID,args);
+ }
+ void CallStaticVoidMethodA(jclass cls, jmethodID methodID,
+ jvalue * args) {
+ functions->CallStaticVoidMethodA(this,cls,methodID,args);
+ }
+
+ jfieldID GetStaticFieldID(jclass clazz, const char *name,
+ const char *sig) {
+ return functions->GetStaticFieldID(this,clazz,name,sig);
+ }
+ jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticObjectField(this,clazz,fieldID);
+ }
+ jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticBooleanField(this,clazz,fieldID);
+ }
+ jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticByteField(this,clazz,fieldID);
+ }
+ jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticCharField(this,clazz,fieldID);
+ }
+ jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticShortField(this,clazz,fieldID);
+ }
+ jint GetStaticIntField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticIntField(this,clazz,fieldID);
+ }
+ jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticLongField(this,clazz,fieldID);
+ }
+ jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticFloatField(this,clazz,fieldID);
+ }
+ jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {
+ return functions->GetStaticDoubleField(this,clazz,fieldID);
+ }
+
+ void SetStaticObjectField(jclass clazz, jfieldID fieldID,
+ jobject value) {
+ functions->SetStaticObjectField(this,clazz,fieldID,value);
+ }
+ void SetStaticBooleanField(jclass clazz, jfieldID fieldID,
+ jboolean value) {
+ functions->SetStaticBooleanField(this,clazz,fieldID,value);
+ }
+ void SetStaticByteField(jclass clazz, jfieldID fieldID,
+ jbyte value) {
+ functions->SetStaticByteField(this,clazz,fieldID,value);
+ }
+ void SetStaticCharField(jclass clazz, jfieldID fieldID,
+ jchar value) {
+ functions->SetStaticCharField(this,clazz,fieldID,value);
+ }
+ void SetStaticShortField(jclass clazz, jfieldID fieldID,
+ jshort value) {
+ functions->SetStaticShortField(this,clazz,fieldID,value);
+ }
+ void SetStaticIntField(jclass clazz, jfieldID fieldID,
+ jint value) {
+ functions->SetStaticIntField(this,clazz,fieldID,value);
+ }
+ void SetStaticLongField(jclass clazz, jfieldID fieldID,
+ jlong value) {
+ functions->SetStaticLongField(this,clazz,fieldID,value);
+ }
+ void SetStaticFloatField(jclass clazz, jfieldID fieldID,
+ jfloat value) {
+ functions->SetStaticFloatField(this,clazz,fieldID,value);
+ }
+ void SetStaticDoubleField(jclass clazz, jfieldID fieldID,
+ jdouble value) {
+ functions->SetStaticDoubleField(this,clazz,fieldID,value);
+ }
+
+ jstring NewString(const jchar *unicode, jsize len) {
+ return functions->NewString(this,unicode,len);
+ }
+ jsize GetStringLength(jstring str) {
+ return functions->GetStringLength(this,str);
+ }
+ const jchar *GetStringChars(jstring str, jboolean *isCopy) {
+ return functions->GetStringChars(this,str,isCopy);
+ }
+ void ReleaseStringChars(jstring str, const jchar *chars) {
+ functions->ReleaseStringChars(this,str,chars);
+ }
+
+ jstring NewStringUTF(const char *utf) {
+ return functions->NewStringUTF(this,utf);
+ }
+ jsize GetStringUTFLength(jstring str) {
+ return functions->GetStringUTFLength(this,str);
+ }
+ const char* GetStringUTFChars(jstring str, jboolean *isCopy) {
+ return functions->GetStringUTFChars(this,str,isCopy);
+ }
+ void ReleaseStringUTFChars(jstring str, const char* chars) {
+ functions->ReleaseStringUTFChars(this,str,chars);
+ }
+
+ jsize GetArrayLength(jarray array) {
+ return functions->GetArrayLength(this,array);
+ }
+
+ jobjectArray NewObjectArray(jsize len, jclass clazz,
+ jobject init) {
+ return functions->NewObjectArray(this,len,clazz,init);
+ }
+ jobject GetObjectArrayElement(jobjectArray array, jsize index) {
+ return functions->GetObjectArrayElement(this,array,index);
+ }
+ void SetObjectArrayElement(jobjectArray array, jsize index,
+ jobject val) {
+ functions->SetObjectArrayElement(this,array,index,val);
+ }
+
+ jbooleanArray NewBooleanArray(jsize len) {
+ return functions->NewBooleanArray(this,len);
+ }
+ jbyteArray NewByteArray(jsize len) {
+ return functions->NewByteArray(this,len);
+ }
+ jcharArray NewCharArray(jsize len) {
+ return functions->NewCharArray(this,len);
+ }
+ jshortArray NewShortArray(jsize len) {
+ return functions->NewShortArray(this,len);
+ }
+ jintArray NewIntArray(jsize len) {
+ return functions->NewIntArray(this,len);
+ }
+ jlongArray NewLongArray(jsize len) {
+ return functions->NewLongArray(this,len);
+ }
+ jfloatArray NewFloatArray(jsize len) {
+ return functions->NewFloatArray(this,len);
+ }
+ jdoubleArray NewDoubleArray(jsize len) {
+ return functions->NewDoubleArray(this,len);
+ }
+
+ jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {
+ return functions->GetBooleanArrayElements(this,array,isCopy);
+ }
+ jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {
+ return functions->GetByteArrayElements(this,array,isCopy);
+ }
+ jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {
+ return functions->GetCharArrayElements(this,array,isCopy);
+ }
+ jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {
+ return functions->GetShortArrayElements(this,array,isCopy);
+ }
+ jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {
+ return functions->GetIntArrayElements(this,array,isCopy);
+ }
+ jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {
+ return functions->GetLongArrayElements(this,array,isCopy);
+ }
+ jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {
+ return functions->GetFloatArrayElements(this,array,isCopy);
+ }
+ jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {
+ return functions->GetDoubleArrayElements(this,array,isCopy);
+ }
+
+ void ReleaseBooleanArrayElements(jbooleanArray array,
+ jboolean *elems,
+ jint mode) {
+ functions->ReleaseBooleanArrayElements(this,array,elems,mode);
+ }
+ void ReleaseByteArrayElements(jbyteArray array,
+ jbyte *elems,
+ jint mode) {
+ functions->ReleaseByteArrayElements(this,array,elems,mode);
+ }
+ void ReleaseCharArrayElements(jcharArray array,
+ jchar *elems,
+ jint mode) {
+ functions->ReleaseCharArrayElements(this,array,elems,mode);
+ }
+ void ReleaseShortArrayElements(jshortArray array,
+ jshort *elems,
+ jint mode) {
+ functions->ReleaseShortArrayElements(this,array,elems,mode);
+ }
+ void ReleaseIntArrayElements(jintArray array,
+ jint *elems,
+ jint mode) {
+ functions->ReleaseIntArrayElements(this,array,elems,mode);
+ }
+ void ReleaseLongArrayElements(jlongArray array,
+ jlong *elems,
+ jint mode) {
+ functions->ReleaseLongArrayElements(this,array,elems,mode);
+ }
+ void ReleaseFloatArrayElements(jfloatArray array,
+ jfloat *elems,
+ jint mode) {
+ functions->ReleaseFloatArrayElements(this,array,elems,mode);
+ }
+ void ReleaseDoubleArrayElements(jdoubleArray array,
+ jdouble *elems,
+ jint mode) {
+ functions->ReleaseDoubleArrayElements(this,array,elems,mode);
+ }
+
+ void GetBooleanArrayRegion(jbooleanArray array,
+ jsize start, jsize len, jboolean *buf) {
+ functions->GetBooleanArrayRegion(this,array,start,len,buf);
+ }
+ void GetByteArrayRegion(jbyteArray array,
+ jsize start, jsize len, jbyte *buf) {
+ functions->GetByteArrayRegion(this,array,start,len,buf);
+ }
+ void GetCharArrayRegion(jcharArray array,
+ jsize start, jsize len, jchar *buf) {
+ functions->GetCharArrayRegion(this,array,start,len,buf);
+ }
+ void GetShortArrayRegion(jshortArray array,
+ jsize start, jsize len, jshort *buf) {
+ functions->GetShortArrayRegion(this,array,start,len,buf);
+ }
+ void GetIntArrayRegion(jintArray array,
+ jsize start, jsize len, jint *buf) {
+ functions->GetIntArrayRegion(this,array,start,len,buf);
+ }
+ void GetLongArrayRegion(jlongArray array,
+ jsize start, jsize len, jlong *buf) {
+ functions->GetLongArrayRegion(this,array,start,len,buf);
+ }
+ void GetFloatArrayRegion(jfloatArray array,
+ jsize start, jsize len, jfloat *buf) {
+ functions->GetFloatArrayRegion(this,array,start,len,buf);
+ }
+ void GetDoubleArrayRegion(jdoubleArray array,
+ jsize start, jsize len, jdouble *buf) {
+ functions->GetDoubleArrayRegion(this,array,start,len,buf);
+ }
+
+ void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
+ jboolean *buf) {
+ functions->SetBooleanArrayRegion(this,array,start,len,buf);
+ }
+ void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
+ jbyte *buf) {
+ functions->SetByteArrayRegion(this,array,start,len,buf);
+ }
+ void SetCharArrayRegion(jcharArray array, jsize start, jsize len,
+ jchar *buf) {
+ functions->SetCharArrayRegion(this,array,start,len,buf);
+ }
+ void SetShortArrayRegion(jshortArray array, jsize start, jsize len,
+ jshort *buf) {
+ functions->SetShortArrayRegion(this,array,start,len,buf);
+ }
+ void SetIntArrayRegion(jintArray array, jsize start, jsize len,
+ jint *buf) {
+ functions->SetIntArrayRegion(this,array,start,len,buf);
+ }
+ void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
+ jlong *buf) {
+ functions->SetLongArrayRegion(this,array,start,len,buf);
+ }
+ void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
+ jfloat *buf) {
+ functions->SetFloatArrayRegion(this,array,start,len,buf);
+ }
+ void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
+ jdouble *buf) {
+ functions->SetDoubleArrayRegion(this,array,start,len,buf);
+ }
+
+ jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,
+ jint nMethods) {
+ return functions->RegisterNatives(this,clazz,methods,nMethods);
+ }
+ jint UnregisterNatives(jclass clazz) {
+ return functions->UnregisterNatives(this,clazz);
+ }
+
+ jint MonitorEnter(jobject obj) {
+ return functions->MonitorEnter(this,obj);
+ }
+ jint MonitorExit(jobject obj) {
+ return functions->MonitorExit(this,obj);
+ }
+
+ jint GetJavaVM(JavaVM **vm) {
+ return functions->GetJavaVM(this,vm);
+ }
+
+#endif /* __cplusplus */
+};
+
+/* These structures will be VM-specific. */
+
+typedef struct JDK1_1InitArgs {
+ jint version;
+
+ char **properties;
+ jint checkSource;
+ jint nativeStackSize;
+ jint javaStackSize;
+ jint minHeapSize;
+ jint maxHeapSize;
+ jint verifyMode;
+ char *classpath;
+
+ jint (JNICALL *vfprintf)(FILE *fp, const char *format, va_list args);
+ void (JNICALL *exit)(jint code);
+ void (JNICALL *abort)();
+
+ jint enableClassGC;
+ jint enableVerboseGC;
+ jint disableAsyncGC;
+ jint verbose;
+ jboolean debugging;
+ jint debugPort;
+} JDK1_1InitArgs;
+
+typedef struct JDK1_1AttachArgs {
+ void * __padding; /* C compilers don't allow empty structures. */
+} JDK1_1AttachArgs;
+
+/* End VM-specific. */
+
+struct JNIInvokeInterface_ {
+ void *reserved0;
+ void *reserved1;
+ void *reserved2;
+
+ jint (JNICALL *DestroyJavaVM)(JavaVM *vm);
+
+ jint (JNICALL *AttachCurrentThread)
+ (JavaVM *vm, JNIEnv **penv, void *args);
+
+ jint (JNICALL *DetachCurrentThread)(JavaVM *vm);
+};
+
+struct JavaVM_ {
+ const struct JNIInvokeInterface_ *functions;
+ void *reserved0;
+ void *reserved1;
+ void *reserved2;
+#ifdef __cplusplus
+
+ jint DestroyJavaVM() {
+ return functions->DestroyJavaVM(this);
+ }
+ jint AttachCurrentThread(JNIEnv **penv, void *args) {
+ return functions->AttachCurrentThread(this, penv, args);
+ }
+ jint DetachCurrentThread() {
+ return functions->DetachCurrentThread(this);
+ }
+
+#endif
+};
+
+JNI_PUBLIC_API(void) JNI_GetDefaultJavaVMInitArgs(void *);
+
+JNI_PUBLIC_API(jint) JNI_CreateJavaVM(JavaVM **, JNIEnv **, void *);
+
+JNI_PUBLIC_API(jint) JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
+JNI_PUBLIC_API(jref) JNI_MakeLocalRef(JNIEnv *pJNIEnv, void *pHObject);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* JNI_H */
+
+
diff --git a/src/moz-sdk/jni_md.h b/src/moz-sdk/jni_md.h
new file mode 100644
index 0000000..3c8c63d
--- /dev/null
+++ b/src/moz-sdk/jni_md.h
@@ -0,0 +1,199 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+ *
+ * ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK *****
+ *
+ *
+ * This Original Code has been modified by IBM Corporation.
+ * Modifications made by IBM described herein are
+ * Copyright (c) International Business Machines
+ * Corporation, 2000
+ *
+ * Modifications to Mozilla code or documentation
+ * identified per MPL Section 3.3
+ *
+ * Date Modified by Description of modification
+ * 03/27/2000 IBM Corp. Set JNICALL to Optlink for
+ * use in OS2
+ */
+
+/*******************************************************************************
+ * Netscape version of jni_md.h -- depends on jri_md.h
+ ******************************************************************************/
+
+#ifndef JNI_MD_H
+#define JNI_MD_H
+
+#include "prtypes.h" /* needed for _declspec */
+
+/*******************************************************************************
+ * WHAT'S UP WITH THIS FILE?
+ *
+ * This is where we define the mystical JNI_PUBLIC_API macro that works on all
+ * platforms. If you're running with Visual C++, Symantec C, or Borland's
+ * development environment on the PC, you're all set. Or if you're on the Mac
+ * with Metrowerks, Symantec or MPW with SC you're ok too. For UNIX it shouldn't
+ * matter.
+
+ * Changes by sailesh on 9/26
+
+ * There are two symbols used in the declaration of the JNI functions
+ * and native code that uses the JNI:
+ * JNICALL - specifies the calling convention
+ * JNIEXPORT - specifies export status of the function
+ *
+ * The syntax to specify calling conventions is different in Win16 and
+ * Win32 - the brains at Micro$oft at work here. JavaSoft in their
+ * infinite wisdom cares for no platform other than Win32, and so they
+ * just define these two symbols as:
+
+ #define JNIEXPORT __declspec(dllexport)
+ #define JNICALL __stdcall
+
+ * We deal with this, in the way JRI defines the JRI_PUBLIC_API, by
+ * defining a macro called JNI_PUBLIC_API. Any of our developers who
+ * wish to use code for Win16 and Win32, _must_ use JNI_PUBLIC_API to
+ * be able to export functions properly.
+
+ * Since we must also maintain compatibility with JavaSoft, we
+ * continue to define the symbol JNIEXPORT. However, use of this
+ * internally is deprecated, since it will cause a mess on Win16.
+
+ * We _do not_ need a new symbol called JNICALL. Instead we
+ * redefine JNICALL in the same way JRI_CALLBACK was defined.
+
+ ******************************************************************************/
+
+/* DLL Entry modifiers... */
+#if defined(XP_OS2)
+# ifdef XP_OS2_VACPP
+# define JNI_PUBLIC_API(ResultType) ResultType _System
+# define JNI_PUBLIC_VAR(VarType) VarType
+# define JNICALL _Optlink
+# define JNIEXPORT
+# else
+# define JNI_PUBLIC_API(ResultType) ResultType
+# define JNI_PUBLIC_VAR(VarType) VarType
+# define JNICALL
+# define JNIEXPORT
+# endif
+/* Win32 */
+#elif defined(XP_WIN) || defined(_WINDOWS) || defined(WIN32) || defined(_WIN32)
+# include <windows.h>
+# if defined(_MSC_VER) || defined(__GNUC__)
+# if defined(WIN32) || defined(_WIN32)
+# define JNI_PUBLIC_API(ResultType) _declspec(dllexport) ResultType __stdcall
+# define JNI_PUBLIC_VAR(VarType) VarType
+# define JNI_NATIVE_STUB(ResultType) _declspec(dllexport) ResultType
+# define JNICALL __stdcall
+# else /* !_WIN32 */
+# if defined(_WINDLL)
+# define JNI_PUBLIC_API(ResultType) ResultType __cdecl __export __loadds
+# define JNI_PUBLIC_VAR(VarType) VarType
+# define JNI_NATIVE_STUB(ResultType) ResultType __cdecl __loadds
+# define JNICALL __loadds
+# else /* !WINDLL */
+# define JNI_PUBLIC_API(ResultType) ResultType __cdecl __export
+# define JNI_PUBLIC_VAR(VarType) VarType
+# define JNI_NATIVE_STUB(ResultType) ResultType __cdecl __export
+# define JNICALL __export
+# endif /* !WINDLL */
+# endif /* !_WIN32 */
+# elif defined(__BORLANDC__)
+# if defined(WIN32) || defined(_WIN32)
+# define JNI_PUBLIC_API(ResultType) __export ResultType
+# define JNI_PUBLIC_VAR(VarType) VarType
+# define JNI_NATIVE_STUB(ResultType) __export ResultType
+# define JNICALL
+# else /* !_WIN32 */
+# define JNI_PUBLIC_API(ResultType) ResultType _cdecl _export _loadds
+# define JNI_PUBLIC_VAR(VarType) VarType
+# define JNI_NATIVE_STUB(ResultType) ResultType _cdecl _loadds
+# define JNICALL _loadds
+# endif
+# else
+# error Unsupported PC development environment.
+# endif
+# ifndef IS_LITTLE_ENDIAN
+# define IS_LITTLE_ENDIAN
+# endif
+ /* This is the stuff inherited from JavaSoft .. */
+# define JNIEXPORT __declspec(dllexport)
+
+
+/* Mac */
+#elif macintosh || Macintosh || THINK_C
+# if defined(__MWERKS__) /* Metrowerks */
+# if !__option(enumsalwaysint)
+# error You need to define 'Enums Always Int' for your project.
+# endif
+# if defined(TARGET_CPU_68K) && !TARGET_RT_MAC_CFM
+# if !__option(fourbyteints)
+# error You need to define 'Struct Alignment: 68k' for your project.
+# endif
+# endif /* !GENERATINGCFM */
+# define JNI_PUBLIC_API(ResultType) __declspec(export) ResultType
+# define JNI_PUBLIC_VAR(VarType) JNI_PUBLIC_API(VarType)
+# define JNI_NATIVE_STUB(ResultType) JNI_PUBLIC_API(ResultType)
+# elif defined(__SC__) /* Symantec */
+# error What are the Symantec defines? (warren@netscape.com)
+# elif macintosh && applec /* MPW */
+# error Please upgrade to the latest MPW compiler (SC).
+# else
+# error Unsupported Mac development environment.
+# endif
+# define JNICALL
+ /* This is the stuff inherited from JavaSoft .. */
+# define JNIEXPORT
+
+/* Unix or else */
+#else
+# define JNI_PUBLIC_API(ResultType) ResultType
+# define JNI_PUBLIC_VAR(VarType) VarType
+# define JNI_NATIVE_STUB(ResultType) ResultType
+# define JNICALL
+ /* This is the stuff inherited from JavaSoft .. */
+# define JNIEXPORT
+#endif
+
+#ifndef FAR /* for non-Win16 */
+#define FAR
+#endif
+
+/* Get the rest of the stuff from jri_md.h */
+#include "jri_md.h"
+
+#endif /* JNI_MD_H */
diff --git a/src/moz-sdk/jri.h b/src/moz-sdk/jri.h
new file mode 100644
index 0000000..866fc69
--- /dev/null
+++ b/src/moz-sdk/jri.h
@@ -0,0 +1,689 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*******************************************************************************
+ * Java Runtime Interface
+ ******************************************************************************/
+
+#ifndef JRI_H
+#define JRI_H
+
+#include "jritypes.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*******************************************************************************
+ * JRIEnv
+ ******************************************************************************/
+
+/* The type of the JRIEnv interface. */
+typedef struct JRIEnvInterface JRIEnvInterface;
+
+/* The type of a JRIEnv instance. */
+typedef const JRIEnvInterface* JRIEnv;
+
+/*******************************************************************************
+ * JRIEnv Operations
+ ******************************************************************************/
+
+#define JRI_DefineClass(env, classLoader, buf, bufLen) \
+ (((*(env))->DefineClass)(env, JRI_DefineClass_op, classLoader, buf, bufLen))
+
+#define JRI_FindClass(env, name) \
+ (((*(env))->FindClass)(env, JRI_FindClass_op, name))
+
+#define JRI_Throw(env, obj) \
+ (((*(env))->Throw)(env, JRI_Throw_op, obj))
+
+#define JRI_ThrowNew(env, clazz, message) \
+ (((*(env))->ThrowNew)(env, JRI_ThrowNew_op, clazz, message))
+
+#define JRI_ExceptionOccurred(env) \
+ (((*(env))->ExceptionOccurred)(env, JRI_ExceptionOccurred_op))
+
+#define JRI_ExceptionDescribe(env) \
+ (((*(env))->ExceptionDescribe)(env, JRI_ExceptionDescribe_op))
+
+#define JRI_ExceptionClear(env) \
+ (((*(env))->ExceptionClear)(env, JRI_ExceptionClear_op))
+
+#define JRI_NewGlobalRef(env, ref) \
+ (((*(env))->NewGlobalRef)(env, JRI_NewGlobalRef_op, ref))
+
+#define JRI_DisposeGlobalRef(env, gref) \
+ (((*(env))->DisposeGlobalRef)(env, JRI_DisposeGlobalRef_op, gref))
+
+#define JRI_GetGlobalRef(env, gref) \
+ (((*(env))->GetGlobalRef)(env, JRI_GetGlobalRef_op, gref))
+
+#define JRI_SetGlobalRef(env, gref, ref) \
+ (((*(env))->SetGlobalRef)(env, JRI_SetGlobalRef_op, gref, ref))
+
+#define JRI_IsSameObject(env, a, b) \
+ (((*(env))->IsSameObject)(env, JRI_IsSameObject_op, a, b))
+
+#define JRI_NewObject(env) ((*(env))->NewObject)
+#define JRI_NewObjectV(env, clazz, methodID, args) \
+ (((*(env))->NewObjectV)(env, JRI_NewObject_op_va_list, clazz, methodID, args))
+#define JRI_NewObjectA(env, clazz, method, args) \
+ (((*(env))->NewObjectA)(env, JRI_NewObject_op_array, clazz, methodID, args))
+
+#define JRI_GetObjectClass(env, obj) \
+ (((*(env))->GetObjectClass)(env, JRI_GetObjectClass_op, obj))
+
+#define JRI_IsInstanceOf(env, obj, clazz) \
+ (((*(env))->IsInstanceOf)(env, JRI_IsInstanceOf_op, obj, clazz))
+
+#define JRI_GetMethodID(env, clazz, name, sig) \
+ (((*(env))->GetMethodID)(env, JRI_GetMethodID_op, clazz, name, sig))
+
+#define JRI_CallMethod(env) ((*(env))->CallMethod)
+#define JRI_CallMethodV(env, obj, methodID, args) \
+ (((*(env))->CallMethodV)(env, JRI_CallMethod_op_va_list, obj, methodID, args))
+#define JRI_CallMethodA(env, obj, methodID, args) \
+ (((*(env))->CallMethodA)(env, JRI_CallMethod_op_array, obj, methodID, args))
+
+#define JRI_CallMethodBoolean(env) ((*(env))->CallMethodBoolean)
+#define JRI_CallMethodBooleanV(env, obj, methodID, args) \
+ (((*(env))->CallMethodBooleanV)(env, JRI_CallMethodBoolean_op_va_list, obj, methodID, args))
+#define JRI_CallMethodBooleanA(env, obj, methodID, args) \
+ (((*(env))->CallMethodBooleanA)(env, JRI_CallMethodBoolean_op_array, obj, methodID, args))
+
+#define JRI_CallMethodByte(env) ((*(env))->CallMethodByte)
+#define JRI_CallMethodByteV(env, obj, methodID, args) \
+ (((*(env))->CallMethodByteV)(env, JRI_CallMethodByte_op_va_list, obj, methodID, args))
+#define JRI_CallMethodByteA(env, obj, methodID, args) \
+ (((*(env))->CallMethodByteA)(env, JRI_CallMethodByte_op_array, obj, methodID, args))
+
+#define JRI_CallMethodChar(env) ((*(env))->CallMethodChar)
+#define JRI_CallMethodCharV(env, obj, methodID, args) \
+ (((*(env))->CallMethodCharV)(env, JRI_CallMethodChar_op_va_list, obj, methodID, args))
+#define JRI_CallMethodCharA(env, obj, methodID, args) \
+ (((*(env))->CallMethodCharA)(env, JRI_CallMethodChar_op_array, obj, methodID, args))
+
+#define JRI_CallMethodShort(env) ((*(env))->CallMethodShort)
+#define JRI_CallMethodShortV(env, obj, methodID, args) \
+ (((*(env))->CallMethodShortV)(env, JRI_CallMethodShort_op_va_list, obj, methodID, args))
+#define JRI_CallMethodShortA(env, obj, methodID, args) \
+ (((*(env))->CallMethodShortA)(env, JRI_CallMethodShort_op_array, obj, methodID, args))
+
+#define JRI_CallMethodInt(env) ((*(env))->CallMethodInt)
+#define JRI_CallMethodIntV(env, obj, methodID, args) \
+ (((*(env))->CallMethodIntV)(env, JRI_CallMethodInt_op_va_list, obj, methodID, args))
+#define JRI_CallMethodIntA(env, obj, methodID, args) \
+ (((*(env))->CallMethodIntA)(env, JRI_CallMethodInt_op_array, obj, methodID, args))
+
+#define JRI_CallMethodLong(env) ((*(env))->CallMethodLong)
+#define JRI_CallMethodLongV(env, obj, methodID, args) \
+ (((*(env))->CallMethodLongV)(env, JRI_CallMethodLong_op_va_list, obj, methodID, args))
+#define JRI_CallMethodLongA(env, obj, methodID, args) \
+ (((*(env))->CallMethodLongA)(env, JRI_CallMethodLong_op_array, obj, methodID, args))
+
+#define JRI_CallMethodFloat(env) ((*(env))->CallMethodFloat)
+#define JRI_CallMethodFloatV(env, obj, methodID, args) \
+ (((*(env))->CallMethodFloatV)(env, JRI_CallMethodFloat_op_va_list, obj, methodID, args))
+#define JRI_CallMethodFloatA(env, obj, methodID, args) \
+ (((*(env))->CallMethodFloatA)(env, JRI_CallMethodFloat_op_array, obj, methodID, args))
+
+#define JRI_CallMethodDouble(env) ((*(env))->CallMethodDouble)
+#define JRI_CallMethodDoubleV(env, obj, methodID, args) \
+ (((*(env))->CallMethodDoubleV)(env, JRI_CallMethodDouble_op_va_list, obj, methodID, args))
+#define JRI_CallMethodDoubleA(env, obj, methodID, args) \
+ (((*(env))->CallMethodDoubleA)(env, JRI_CallMethodDouble_op_array, obj, methodID, args))
+
+#define JRI_GetFieldID(env, clazz, name, sig) \
+ (((*(env))->GetFieldID)(env, JRI_GetFieldID_op, clazz, name, sig))
+
+#define JRI_GetField(env, obj, fieldID) \
+ (((*(env))->GetField)(env, JRI_GetField_op, obj, fieldID))
+
+#define JRI_GetFieldBoolean(env, obj, fieldID) \
+ (((*(env))->GetFieldBoolean)(env, JRI_GetFieldBoolean_op, obj, fieldID))
+
+#define JRI_GetFieldByte(env, obj, fieldID) \
+ (((*(env))->GetFieldByte)(env, JRI_GetFieldByte_op, obj, fieldID))
+
+#define JRI_GetFieldChar(env, obj, fieldID) \
+ (((*(env))->GetFieldChar)(env, JRI_GetFieldChar_op, obj, fieldID))
+
+#define JRI_GetFieldShort(env, obj, fieldID) \
+ (((*(env))->GetFieldShort)(env, JRI_GetFieldShort_op, obj, fieldID))
+
+#define JRI_GetFieldInt(env, obj, fieldID) \
+ (((*(env))->GetFieldInt)(env, JRI_GetFieldInt_op, obj, fieldID))
+
+#define JRI_GetFieldLong(env, obj, fieldID) \
+ (((*(env))->GetFieldLong)(env, JRI_GetFieldLong_op, obj, fieldID))
+
+#define JRI_GetFieldFloat(env, obj, fieldID) \
+ (((*(env))->GetFieldFloat)(env, JRI_GetFieldFloat_op, obj, fieldID))
+
+#define JRI_GetFieldDouble(env, obj, fieldID) \
+ (((*(env))->GetFieldDouble)(env, JRI_GetFieldDouble_op, obj, fieldID))
+
+#define JRI_SetField(env, obj, fieldID, value) \
+ (((*(env))->SetField)(env, JRI_SetField_op, obj, fieldID, value))
+
+#define JRI_SetFieldBoolean(env, obj, fieldID, value) \
+ (((*(env))->SetFieldBoolean)(env, JRI_SetFieldBoolean_op, obj, fieldID, value))
+
+#define JRI_SetFieldByte(env, obj, fieldID, value) \
+ (((*(env))->SetFieldByte)(env, JRI_SetFieldByte_op, obj, fieldID, value))
+
+#define JRI_SetFieldChar(env, obj, fieldID, value) \
+ (((*(env))->SetFieldChar)(env, JRI_SetFieldChar_op, obj, fieldID, value))
+
+#define JRI_SetFieldShort(env, obj, fieldID, value) \
+ (((*(env))->SetFieldShort)(env, JRI_SetFieldShort_op, obj, fieldID, value))
+
+#define JRI_SetFieldInt(env, obj, fieldID, value) \
+ (((*(env))->SetFieldInt)(env, JRI_SetFieldInt_op, obj, fieldID, value))
+
+#define JRI_SetFieldLong(env, obj, fieldID, value) \
+ (((*(env))->SetFieldLong)(env, JRI_SetFieldLong_op, obj, fieldID, value))
+
+#define JRI_SetFieldFloat(env, obj, fieldID, value) \
+ (((*(env))->SetFieldFloat)(env, JRI_SetFieldFloat_op, obj, fieldID, value))
+
+#define JRI_SetFieldDouble(env, obj, fieldID, value) \
+ (((*(env))->SetFieldDouble)(env, JRI_SetFieldDouble_op, obj, fieldID, value))
+
+#define JRI_IsSubclassOf(env, a, b) \
+ (((*(env))->IsSubclassOf)(env, JRI_IsSubclassOf_op, a, b))
+
+#define JRI_GetStaticMethodID(env, clazz, name, sig) \
+ (((*(env))->GetStaticMethodID)(env, JRI_GetStaticMethodID_op, clazz, name, sig))
+
+#define JRI_CallStaticMethod(env) ((*(env))->CallStaticMethod)
+#define JRI_CallStaticMethodV(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodV)(env, JRI_CallStaticMethod_op_va_list, clazz, methodID, args))
+#define JRI_CallStaticMethodA(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodA)(env, JRI_CallStaticMethod_op_array, clazz, methodID, args))
+
+#define JRI_CallStaticMethodBoolean(env) ((*(env))->CallStaticMethodBoolean)
+#define JRI_CallStaticMethodBooleanV(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodBooleanV)(env, JRI_CallStaticMethodBoolean_op_va_list, clazz, methodID, args))
+#define JRI_CallStaticMethodBooleanA(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodBooleanA)(env, JRI_CallStaticMethodBoolean_op_array, clazz, methodID, args))
+
+#define JRI_CallStaticMethodByte(env) ((*(env))->CallStaticMethodByte)
+#define JRI_CallStaticMethodByteV(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodByteV)(env, JRI_CallStaticMethodByte_op_va_list, clazz, methodID, args))
+#define JRI_CallStaticMethodByteA(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodByteA)(env, JRI_CallStaticMethodByte_op_array, clazz, methodID, args))
+
+#define JRI_CallStaticMethodChar(env) ((*(env))->CallStaticMethodChar)
+#define JRI_CallStaticMethodCharV(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodCharV)(env, JRI_CallStaticMethodChar_op_va_list, clazz, methodID, args))
+#define JRI_CallStaticMethodCharA(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodCharA)(env, JRI_CallStaticMethodChar_op_array, clazz, methodID, args))
+
+#define JRI_CallStaticMethodShort(env) ((*(env))->CallStaticMethodShort)
+#define JRI_CallStaticMethodShortV(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodShortV)(env, JRI_CallStaticMethodShort_op_va_list, clazz, methodID, args))
+#define JRI_CallStaticMethodShortA(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodShortA)(env, JRI_CallStaticMethodShort_op_array, clazz, methodID, args))
+
+#define JRI_CallStaticMethodInt(env) ((*(env))->CallStaticMethodInt)
+#define JRI_CallStaticMethodIntV(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodIntV)(env, JRI_CallStaticMethodInt_op_va_list, clazz, methodID, args))
+#define JRI_CallStaticMethodIntA(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodIntA)(env, JRI_CallStaticMethodInt_op_array, clazz, methodID, args))
+
+#define JRI_CallStaticMethodLong(env) ((*(env))->CallStaticMethodLong)
+#define JRI_CallStaticMethodLongV(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodLongV)(env, JRI_CallStaticMethodLong_op_va_list, clazz, methodID, args))
+#define JRI_CallStaticMethodLongA(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodLongA)(env, JRI_CallStaticMethodLong_op_array, clazz, methodID, args))
+
+#define JRI_CallStaticMethodFloat(env) ((*(env))->CallStaticMethodFloat)
+#define JRI_CallStaticMethodFloatV(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodFloatV)(env, JRI_CallStaticMethodFloat_op_va_list, clazz, methodID, args))
+#define JRI_CallStaticMethodFloatA(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodFloatA)(env, JRI_CallStaticMethodFloat_op_array, clazz, methodID, args))
+
+#define JRI_CallStaticMethodDouble(env) ((*(env))->CallStaticMethodDouble)
+#define JRI_CallStaticMethodDoubleV(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodDoubleV)(env, JRI_CallStaticMethodDouble_op_va_list, clazz, methodID, args))
+#define JRI_CallStaticMethodDoubleA(env, clazz, methodID, args) \
+ (((*(env))->CallStaticMethodDoubleA)(env, JRI_CallStaticMethodDouble_op_array, clazz, methodID, args))
+
+#define JRI_GetStaticFieldID(env, clazz, name, sig) \
+ (((*(env))->GetStaticFieldID)(env, JRI_GetStaticFieldID_op, clazz, name, sig))
+
+#define JRI_GetStaticField(env, clazz, fieldID) \
+ (((*(env))->GetStaticField)(env, JRI_GetStaticField_op, clazz, fieldID))
+
+#define JRI_GetStaticFieldBoolean(env, clazz, fieldID) \
+ (((*(env))->GetStaticFieldBoolean)(env, JRI_GetStaticFieldBoolean_op, clazz, fieldID))
+
+#define JRI_GetStaticFieldByte(env, clazz, fieldID) \
+ (((*(env))->GetStaticFieldByte)(env, JRI_GetStaticFieldByte_op, clazz, fieldID))
+
+#define JRI_GetStaticFieldChar(env, clazz, fieldID) \
+ (((*(env))->GetStaticFieldChar)(env, JRI_GetStaticFieldChar_op, clazz, fieldID))
+
+#define JRI_GetStaticFieldShort(env, clazz, fieldID) \
+ (((*(env))->GetStaticFieldShort)(env, JRI_GetStaticFieldShort_op, clazz, fieldID))
+
+#define JRI_GetStaticFieldInt(env, clazz, fieldID) \
+ (((*(env))->GetStaticFieldInt)(env, JRI_GetStaticFieldInt_op, clazz, fieldID))
+
+#define JRI_GetStaticFieldLong(env, clazz, fieldID) \
+ (((*(env))->GetStaticFieldLong)(env, JRI_GetStaticFieldLong_op, clazz, fieldID))
+
+#define JRI_GetStaticFieldFloat(env, clazz, fieldID) \
+ (((*(env))->GetStaticFieldFloat)(env, JRI_GetStaticFieldFloat_op, clazz, fieldID))
+
+#define JRI_GetStaticFieldDouble(env, clazz, fieldID) \
+ (((*(env))->GetStaticFieldDouble)(env, JRI_GetStaticFieldDouble_op, clazz, fieldID))
+
+#define JRI_SetStaticField(env, clazz, fieldID, value) \
+ (((*(env))->SetStaticField)(env, JRI_SetStaticField_op, clazz, fieldID, value))
+
+#define JRI_SetStaticFieldBoolean(env, clazz, fieldID, value) \
+ (((*(env))->SetStaticFieldBoolean)(env, JRI_SetStaticFieldBoolean_op, clazz, fieldID, value))
+
+#define JRI_SetStaticFieldByte(env, clazz, fieldID, value) \
+ (((*(env))->SetStaticFieldByte)(env, JRI_SetStaticFieldByte_op, clazz, fieldID, value))
+
+#define JRI_SetStaticFieldChar(env, clazz, fieldID, value) \
+ (((*(env))->SetStaticFieldChar)(env, JRI_SetStaticFieldChar_op, clazz, fieldID, value))
+
+#define JRI_SetStaticFieldShort(env, clazz, fieldID, value) \
+ (((*(env))->SetStaticFieldShort)(env, JRI_SetStaticFieldShort_op, clazz, fieldID, value))
+
+#define JRI_SetStaticFieldInt(env, clazz, fieldID, value) \
+ (((*(env))->SetStaticFieldInt)(env, JRI_SetStaticFieldInt_op, clazz, fieldID, value))
+
+#define JRI_SetStaticFieldLong(env, clazz, fieldID, value) \
+ (((*(env))->SetStaticFieldLong)(env, JRI_SetStaticFieldLong_op, clazz, fieldID, value))
+
+#define JRI_SetStaticFieldFloat(env, clazz, fieldID, value) \
+ (((*(env))->SetStaticFieldFloat)(env, JRI_SetStaticFieldFloat_op, clazz, fieldID, value))
+
+#define JRI_SetStaticFieldDouble(env, clazz, fieldID, value) \
+ (((*(env))->SetStaticFieldDouble)(env, JRI_SetStaticFieldDouble_op, clazz, fieldID, value))
+
+#define JRI_NewString(env, unicode, len) \
+ (((*(env))->NewString)(env, JRI_NewString_op, unicode, len))
+
+#define JRI_GetStringLength(env, string) \
+ (((*(env))->GetStringLength)(env, JRI_GetStringLength_op, string))
+
+#define JRI_GetStringChars(env, string) \
+ (((*(env))->GetStringChars)(env, JRI_GetStringChars_op, string))
+
+#define JRI_NewStringUTF(env, utf, len) \
+ (((*(env))->NewStringUTF)(env, JRI_NewStringUTF_op, utf, len))
+
+#define JRI_GetStringUTFLength(env, string) \
+ (((*(env))->GetStringUTFLength)(env, JRI_GetStringUTFLength_op, string))
+
+#define JRI_GetStringUTFChars(env, string) \
+ (((*(env))->GetStringUTFChars)(env, JRI_GetStringUTFChars_op, string))
+
+#define JRI_NewScalarArray(env, length, elementSig, initialElements) \
+ (((*(env))->NewScalarArray)(env, JRI_NewScalarArray_op, length, elementSig, initialElements))
+
+#define JRI_GetScalarArrayLength(env, array) \
+ (((*(env))->GetScalarArrayLength)(env, JRI_GetScalarArrayLength_op, array))
+
+#define JRI_GetScalarArrayElements(env, array) \
+ (((*(env))->GetScalarArrayElements)(env, JRI_GetScalarArrayElements_op, array))
+
+#define JRI_NewObjectArray(env, length, elementClass, initialElement) \
+ (((*(env))->NewObjectArray)(env, JRI_NewObjectArray_op, length, elementClass, initialElement))
+
+#define JRI_GetObjectArrayLength(env, array) \
+ (((*(env))->GetObjectArrayLength)(env, JRI_GetObjectArrayLength_op, array))
+
+#define JRI_GetObjectArrayElement(env, array, index) \
+ (((*(env))->GetObjectArrayElement)(env, JRI_GetObjectArrayElement_op, array, index))
+
+#define JRI_SetObjectArrayElement(env, array, index, value) \
+ (((*(env))->SetObjectArrayElement)(env, JRI_SetObjectArrayElement_op, array, index, value))
+
+#define JRI_RegisterNatives(env, clazz, nameAndSigArray, nativeProcArray) \
+ (((*(env))->RegisterNatives)(env, JRI_RegisterNatives_op, clazz, nameAndSigArray, nativeProcArray))
+
+#define JRI_UnregisterNatives(env, clazz) \
+ (((*(env))->UnregisterNatives)(env, JRI_UnregisterNatives_op, clazz))
+
+#define JRI_NewStringPlatform(env, string, len, encoding, encodingLength) \
+ (((*(env))->NewStringPlatform)(env, JRI_NewStringPlatform_op, string, len, encoding, encodingLength))
+
+#define JRI_GetStringPlatformChars(env, string, encoding, encodingLength) \
+ (((*(env))->GetStringPlatformChars)(env, JRI_GetStringPlatformChars_op, string, encoding, encodingLength))
+
+
+/*******************************************************************************
+ * JRIEnv Interface
+ ******************************************************************************/
+
+struct java_lang_ClassLoader;
+struct java_lang_Class;
+struct java_lang_Throwable;
+struct java_lang_Object;
+struct java_lang_String;
+
+struct JRIEnvInterface {
+ void* reserved0;
+ void* reserved1;
+ void* reserved2;
+ void* reserved3;
+ struct java_lang_Class* (*FindClass)(JRIEnv* env, jint op, const char* a);
+ void (*Throw)(JRIEnv* env, jint op, struct java_lang_Throwable* a);
+ void (*ThrowNew)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b);
+ struct java_lang_Throwable* (*ExceptionOccurred)(JRIEnv* env, jint op);
+ void (*ExceptionDescribe)(JRIEnv* env, jint op);
+ void (*ExceptionClear)(JRIEnv* env, jint op);
+ jglobal (*NewGlobalRef)(JRIEnv* env, jint op, void* a);
+ void (*DisposeGlobalRef)(JRIEnv* env, jint op, jglobal a);
+ void* (*GetGlobalRef)(JRIEnv* env, jint op, jglobal a);
+ void (*SetGlobalRef)(JRIEnv* env, jint op, jglobal a, void* b);
+ jbool (*IsSameObject)(JRIEnv* env, jint op, void* a, void* b);
+ void* (*NewObject)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
+ void* (*NewObjectV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
+ void* (*NewObjectA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
+ struct java_lang_Class* (*GetObjectClass)(JRIEnv* env, jint op, void* a);
+ jbool (*IsInstanceOf)(JRIEnv* env, jint op, void* a, struct java_lang_Class* b);
+ jint (*GetMethodID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
+ void* (*CallMethod)(JRIEnv* env, jint op, void* a, jint b, ...);
+ void* (*CallMethodV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
+ void* (*CallMethodA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
+ jbool (*CallMethodBoolean)(JRIEnv* env, jint op, void* a, jint b, ...);
+ jbool (*CallMethodBooleanV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
+ jbool (*CallMethodBooleanA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
+ jbyte (*CallMethodByte)(JRIEnv* env, jint op, void* a, jint b, ...);
+ jbyte (*CallMethodByteV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
+ jbyte (*CallMethodByteA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
+ jchar (*CallMethodChar)(JRIEnv* env, jint op, void* a, jint b, ...);
+ jchar (*CallMethodCharV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
+ jchar (*CallMethodCharA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
+ jshort (*CallMethodShort)(JRIEnv* env, jint op, void* a, jint b, ...);
+ jshort (*CallMethodShortV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
+ jshort (*CallMethodShortA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
+ jint (*CallMethodInt)(JRIEnv* env, jint op, void* a, jint b, ...);
+ jint (*CallMethodIntV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
+ jint (*CallMethodIntA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
+ jlong (*CallMethodLong)(JRIEnv* env, jint op, void* a, jint b, ...);
+ jlong (*CallMethodLongV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
+ jlong (*CallMethodLongA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
+ jfloat (*CallMethodFloat)(JRIEnv* env, jint op, void* a, jint b, ...);
+ jfloat (*CallMethodFloatV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
+ jfloat (*CallMethodFloatA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
+ jdouble (*CallMethodDouble)(JRIEnv* env, jint op, void* a, jint b, ...);
+ jdouble (*CallMethodDoubleV)(JRIEnv* env, jint op, void* a, jint b, va_list c);
+ jdouble (*CallMethodDoubleA)(JRIEnv* env, jint op, void* a, jint b, JRIValue* c);
+ jint (*GetFieldID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
+ void* (*GetField)(JRIEnv* env, jint op, void* a, jint b);
+ jbool (*GetFieldBoolean)(JRIEnv* env, jint op, void* a, jint b);
+ jbyte (*GetFieldByte)(JRIEnv* env, jint op, void* a, jint b);
+ jchar (*GetFieldChar)(JRIEnv* env, jint op, void* a, jint b);
+ jshort (*GetFieldShort)(JRIEnv* env, jint op, void* a, jint b);
+ jint (*GetFieldInt)(JRIEnv* env, jint op, void* a, jint b);
+ jlong (*GetFieldLong)(JRIEnv* env, jint op, void* a, jint b);
+ jfloat (*GetFieldFloat)(JRIEnv* env, jint op, void* a, jint b);
+ jdouble (*GetFieldDouble)(JRIEnv* env, jint op, void* a, jint b);
+ void (*SetField)(JRIEnv* env, jint op, void* a, jint b, void* c);
+ void (*SetFieldBoolean)(JRIEnv* env, jint op, void* a, jint b, jbool c);
+ void (*SetFieldByte)(JRIEnv* env, jint op, void* a, jint b, jbyte c);
+ void (*SetFieldChar)(JRIEnv* env, jint op, void* a, jint b, jchar c);
+ void (*SetFieldShort)(JRIEnv* env, jint op, void* a, jint b, jshort c);
+ void (*SetFieldInt)(JRIEnv* env, jint op, void* a, jint b, jint c);
+ void (*SetFieldLong)(JRIEnv* env, jint op, void* a, jint b, jlong c);
+ void (*SetFieldFloat)(JRIEnv* env, jint op, void* a, jint b, jfloat c);
+ void (*SetFieldDouble)(JRIEnv* env, jint op, void* a, jint b, jdouble c);
+ jbool (*IsSubclassOf)(JRIEnv* env, jint op, struct java_lang_Class* a, struct java_lang_Class* b);
+ jint (*GetStaticMethodID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
+ void* (*CallStaticMethod)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
+ void* (*CallStaticMethodV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
+ void* (*CallStaticMethodA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
+ jbool (*CallStaticMethodBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
+ jbool (*CallStaticMethodBooleanV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
+ jbool (*CallStaticMethodBooleanA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
+ jbyte (*CallStaticMethodByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
+ jbyte (*CallStaticMethodByteV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
+ jbyte (*CallStaticMethodByteA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
+ jchar (*CallStaticMethodChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
+ jchar (*CallStaticMethodCharV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
+ jchar (*CallStaticMethodCharA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
+ jshort (*CallStaticMethodShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
+ jshort (*CallStaticMethodShortV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
+ jshort (*CallStaticMethodShortA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
+ jint (*CallStaticMethodInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
+ jint (*CallStaticMethodIntV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
+ jint (*CallStaticMethodIntA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
+ jlong (*CallStaticMethodLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
+ jlong (*CallStaticMethodLongV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
+ jlong (*CallStaticMethodLongA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
+ jfloat (*CallStaticMethodFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
+ jfloat (*CallStaticMethodFloatV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
+ jfloat (*CallStaticMethodFloatA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
+ jdouble (*CallStaticMethodDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, ...);
+ jdouble (*CallStaticMethodDoubleV)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, va_list c);
+ jdouble (*CallStaticMethodDoubleA)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, JRIValue* c);
+ jint (*GetStaticFieldID)(JRIEnv* env, jint op, struct java_lang_Class* a, const char* b, const char* c);
+ void* (*GetStaticField)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
+ jbool (*GetStaticFieldBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
+ jbyte (*GetStaticFieldByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
+ jchar (*GetStaticFieldChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
+ jshort (*GetStaticFieldShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
+ jint (*GetStaticFieldInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
+ jlong (*GetStaticFieldLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
+ jfloat (*GetStaticFieldFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
+ jdouble (*GetStaticFieldDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b);
+ void (*SetStaticField)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, void* c);
+ void (*SetStaticFieldBoolean)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jbool c);
+ void (*SetStaticFieldByte)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jbyte c);
+ void (*SetStaticFieldChar)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jchar c);
+ void (*SetStaticFieldShort)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jshort c);
+ void (*SetStaticFieldInt)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jint c);
+ void (*SetStaticFieldLong)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jlong c);
+ void (*SetStaticFieldFloat)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jfloat c);
+ void (*SetStaticFieldDouble)(JRIEnv* env, jint op, struct java_lang_Class* a, jint b, jdouble c);
+ struct java_lang_String* (*NewString)(JRIEnv* env, jint op, const jchar* a, jint b);
+ jint (*GetStringLength)(JRIEnv* env, jint op, struct java_lang_String* a);
+ const jchar* (*GetStringChars)(JRIEnv* env, jint op, struct java_lang_String* a);
+ struct java_lang_String* (*NewStringUTF)(JRIEnv* env, jint op, const jbyte* a, jint b);
+ jint (*GetStringUTFLength)(JRIEnv* env, jint op, struct java_lang_String* a);
+ const jbyte* (*GetStringUTFChars)(JRIEnv* env, jint op, struct java_lang_String* a);
+ void* (*NewScalarArray)(JRIEnv* env, jint op, jint a, const char* b, const jbyte* c);
+ jint (*GetScalarArrayLength)(JRIEnv* env, jint op, void* a);
+ jbyte* (*GetScalarArrayElements)(JRIEnv* env, jint op, void* a);
+ void* (*NewObjectArray)(JRIEnv* env, jint op, jint a, struct java_lang_Class* b, void* c);
+ jint (*GetObjectArrayLength)(JRIEnv* env, jint op, void* a);
+ void* (*GetObjectArrayElement)(JRIEnv* env, jint op, void* a, jint b);
+ void (*SetObjectArrayElement)(JRIEnv* env, jint op, void* a, jint b, void* c);
+ void (*RegisterNatives)(JRIEnv* env, jint op, struct java_lang_Class* a, char** b, void** c);
+ void (*UnregisterNatives)(JRIEnv* env, jint op, struct java_lang_Class* a);
+ struct java_lang_Class* (*DefineClass)(JRIEnv* env, jint op, struct java_lang_ClassLoader* a, jbyte* b, jsize bLen);
+ struct java_lang_String* (*NewStringPlatform)(JRIEnv* env, jint op, const jbyte* a, jint b, const jbyte* c, jint d);
+ const jbyte* (*GetStringPlatformChars)(JRIEnv* env, jint op, struct java_lang_String* a, const jbyte* b, jint c);
+};
+
+/*
+** ****************************************************************************
+** JRIEnv Operation IDs
+** ***************************************************************************
+*/
+
+typedef enum JRIEnvOperations {
+ JRI_Reserved0_op,
+ JRI_Reserved1_op,
+ JRI_Reserved2_op,
+ JRI_Reserved3_op,
+ JRI_FindClass_op,
+ JRI_Throw_op,
+ JRI_ThrowNew_op,
+ JRI_ExceptionOccurred_op,
+ JRI_ExceptionDescribe_op,
+ JRI_ExceptionClear_op,
+ JRI_NewGlobalRef_op,
+ JRI_DisposeGlobalRef_op,
+ JRI_GetGlobalRef_op,
+ JRI_SetGlobalRef_op,
+ JRI_IsSameObject_op,
+ JRI_NewObject_op,
+ JRI_NewObject_op_va_list,
+ JRI_NewObject_op_array,
+ JRI_GetObjectClass_op,
+ JRI_IsInstanceOf_op,
+ JRI_GetMethodID_op,
+ JRI_CallMethod_op,
+ JRI_CallMethod_op_va_list,
+ JRI_CallMethod_op_array,
+ JRI_CallMethodBoolean_op,
+ JRI_CallMethodBoolean_op_va_list,
+ JRI_CallMethodBoolean_op_array,
+ JRI_CallMethodByte_op,
+ JRI_CallMethodByte_op_va_list,
+ JRI_CallMethodByte_op_array,
+ JRI_CallMethodChar_op,
+ JRI_CallMethodChar_op_va_list,
+ JRI_CallMethodChar_op_array,
+ JRI_CallMethodShort_op,
+ JRI_CallMethodShort_op_va_list,
+ JRI_CallMethodShort_op_array,
+ JRI_CallMethodInt_op,
+ JRI_CallMethodInt_op_va_list,
+ JRI_CallMethodInt_op_array,
+ JRI_CallMethodLong_op,
+ JRI_CallMethodLong_op_va_list,
+ JRI_CallMethodLong_op_array,
+ JRI_CallMethodFloat_op,
+ JRI_CallMethodFloat_op_va_list,
+ JRI_CallMethodFloat_op_array,
+ JRI_CallMethodDouble_op,
+ JRI_CallMethodDouble_op_va_list,
+ JRI_CallMethodDouble_op_array,
+ JRI_GetFieldID_op,
+ JRI_GetField_op,
+ JRI_GetFieldBoolean_op,
+ JRI_GetFieldByte_op,
+ JRI_GetFieldChar_op,
+ JRI_GetFieldShort_op,
+ JRI_GetFieldInt_op,
+ JRI_GetFieldLong_op,
+ JRI_GetFieldFloat_op,
+ JRI_GetFieldDouble_op,
+ JRI_SetField_op,
+ JRI_SetFieldBoolean_op,
+ JRI_SetFieldByte_op,
+ JRI_SetFieldChar_op,
+ JRI_SetFieldShort_op,
+ JRI_SetFieldInt_op,
+ JRI_SetFieldLong_op,
+ JRI_SetFieldFloat_op,
+ JRI_SetFieldDouble_op,
+ JRI_IsSubclassOf_op,
+ JRI_GetStaticMethodID_op,
+ JRI_CallStaticMethod_op,
+ JRI_CallStaticMethod_op_va_list,
+ JRI_CallStaticMethod_op_array,
+ JRI_CallStaticMethodBoolean_op,
+ JRI_CallStaticMethodBoolean_op_va_list,
+ JRI_CallStaticMethodBoolean_op_array,
+ JRI_CallStaticMethodByte_op,
+ JRI_CallStaticMethodByte_op_va_list,
+ JRI_CallStaticMethodByte_op_array,
+ JRI_CallStaticMethodChar_op,
+ JRI_CallStaticMethodChar_op_va_list,
+ JRI_CallStaticMethodChar_op_array,
+ JRI_CallStaticMethodShort_op,
+ JRI_CallStaticMethodShort_op_va_list,
+ JRI_CallStaticMethodShort_op_array,
+ JRI_CallStaticMethodInt_op,
+ JRI_CallStaticMethodInt_op_va_list,
+ JRI_CallStaticMethodInt_op_array,
+ JRI_CallStaticMethodLong_op,
+ JRI_CallStaticMethodLong_op_va_list,
+ JRI_CallStaticMethodLong_op_array,
+ JRI_CallStaticMethodFloat_op,
+ JRI_CallStaticMethodFloat_op_va_list,
+ JRI_CallStaticMethodFloat_op_array,
+ JRI_CallStaticMethodDouble_op,
+ JRI_CallStaticMethodDouble_op_va_list,
+ JRI_CallStaticMethodDouble_op_array,
+ JRI_GetStaticFieldID_op,
+ JRI_GetStaticField_op,
+ JRI_GetStaticFieldBoolean_op,
+ JRI_GetStaticFieldByte_op,
+ JRI_GetStaticFieldChar_op,
+ JRI_GetStaticFieldShort_op,
+ JRI_GetStaticFieldInt_op,
+ JRI_GetStaticFieldLong_op,
+ JRI_GetStaticFieldFloat_op,
+ JRI_GetStaticFieldDouble_op,
+ JRI_SetStaticField_op,
+ JRI_SetStaticFieldBoolean_op,
+ JRI_SetStaticFieldByte_op,
+ JRI_SetStaticFieldChar_op,
+ JRI_SetStaticFieldShort_op,
+ JRI_SetStaticFieldInt_op,
+ JRI_SetStaticFieldLong_op,
+ JRI_SetStaticFieldFloat_op,
+ JRI_SetStaticFieldDouble_op,
+ JRI_NewString_op,
+ JRI_GetStringLength_op,
+ JRI_GetStringChars_op,
+ JRI_NewStringUTF_op,
+ JRI_GetStringUTFLength_op,
+ JRI_GetStringUTFChars_op,
+ JRI_NewScalarArray_op,
+ JRI_GetScalarArrayLength_op,
+ JRI_GetScalarArrayElements_op,
+ JRI_NewObjectArray_op,
+ JRI_GetObjectArrayLength_op,
+ JRI_GetObjectArrayElement_op,
+ JRI_SetObjectArrayElement_op,
+ JRI_RegisterNatives_op,
+ JRI_UnregisterNatives_op,
+ JRI_DefineClass_op,
+ JRI_NewStringPlatform_op,
+ JRI_GetStringPlatformChars_op
+} JRIEnvOperations;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* JRI_H */
+/******************************************************************************/
diff --git a/src/moz-sdk/jri_md.h b/src/moz-sdk/jri_md.h
new file mode 100644
index 0000000..2514ec2
--- /dev/null
+++ b/src/moz-sdk/jri_md.h
@@ -0,0 +1,565 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*******************************************************************************
+ * Java Runtime Interface - Machine Dependent Types
+ ******************************************************************************/
+
+#ifndef JRI_MD_H
+#define JRI_MD_H
+
+#include <assert.h>
+#include "prtypes.h" /* Needed for HAS_LONG_LONG ifdefs */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+ * WHAT'S UP WITH THIS FILE?
+ *
+ * This is where we define the mystical JRI_PUBLIC_API macro that works on all
+ * platforms. If you're running with Visual C++, Symantec C, or Borland's
+ * development environment on the PC, you're all set. Or if you're on the Mac
+ * with Metrowerks, Symantec or MPW with SC you're ok too. For UNIX it shouldn't
+ * matter.
+ *
+ * On UNIX though you probably care about a couple of other symbols though:
+ * IS_LITTLE_ENDIAN must be defined for little-endian systems
+ * HAVE_LONG_LONG must be defined on systems that have 'long long' integers
+ * HAVE_ALIGNED_LONGLONGS must be defined if long-longs must be 8 byte aligned
+ * HAVE_ALIGNED_DOUBLES must be defined if doubles must be 8 byte aligned
+ * IS_64 must be defined on 64-bit machines (like Dec Alpha)
+ ******************************************************************************/
+
+/* DLL Entry modifiers... */
+
+/* PC */
+#if defined(XP_OS2)
+# ifdef XP_OS2_VACPP
+# define JRI_PUBLIC_API(ResultType) ResultType _Optlink
+# define JRI_PUBLIC_VAR(VarType) VarType
+# define JRI_CALLBACK
+# else
+# define JRI_PUBLIC_API(ResultType) ResultType
+# define JRI_PUBLIC_VAR(VarType) VarType
+# define JRI_CALLBACK
+# endif
+#elif defined(XP_WIN) || defined(_WINDOWS) || defined(WIN32) || defined(_WIN32)
+# include <windows.h>
+# if defined(_MSC_VER) || defined(__GNUC__)
+# if defined(WIN32) || defined(_WIN32)
+# define JRI_PUBLIC_API(ResultType) __declspec(dllexport) ResultType
+# define JRI_PUBLIC_VAR(VarType) VarType
+# define JRI_PUBLIC_VAR_EXP(VarType) __declspec(dllexport) VarType
+# define JRI_PUBLIC_VAR_IMP(VarType) __declspec(dllimport) VarType
+# define JRI_NATIVE_STUB(ResultType) __declspec(dllexport) ResultType
+# define JRI_CALLBACK
+# else /* !_WIN32 */
+# if defined(_WINDLL)
+# define JRI_PUBLIC_API(ResultType) ResultType __cdecl __export __loadds
+# define JRI_PUBLIC_VAR(VarType) VarType
+# define JRI_PUBLIC_VAR_EXP(VarType) JRI_PUBLIC_VAR(VarType)
+# define JRI_PUBLIC_VAR_IMP(VarType) JRI_PUBLIC_VAR(VarType)
+# define JRI_NATIVE_STUB(ResultType) ResultType __cdecl __loadds
+# define JRI_CALLBACK __loadds
+# else /* !WINDLL */
+# define JRI_PUBLIC_API(ResultType) ResultType __cdecl __export
+# define JRI_PUBLIC_VAR(VarType) VarType
+# define JRI_PUBLIC_VAR_EXP(VarType) JRI_PUBLIC_VAR(VarType)
+# define JRI_PUBLIC_VAR_IMP(VarType) JRI_PUBLIC_VAR(VarType)
+# define JRI_NATIVE_STUB(ResultType) ResultType __cdecl __export
+# define JRI_CALLBACK __export
+# endif /* !WINDLL */
+# endif /* !_WIN32 */
+# elif defined(__BORLANDC__)
+# if defined(WIN32) || defined(_WIN32)
+# define JRI_PUBLIC_API(ResultType) __export ResultType
+# define JRI_PUBLIC_VAR(VarType) VarType
+# define JRI_PUBLIC_VAR_EXP(VarType) __export VarType
+# define JRI_PUBLIC_VAR_IMP(VarType) __import VarType
+# define JRI_NATIVE_STUB(ResultType) __export ResultType
+# define JRI_CALLBACK
+# else /* !_WIN32 */
+# define JRI_PUBLIC_API(ResultType) ResultType _cdecl _export _loadds
+# define JRI_PUBLIC_VAR(VarType) VarType
+# define JRI_PUBLIC_VAR_EXP(VarType) __cdecl __export VarType
+# define JRI_PUBLIC_VAR_IMP(VarType) __cdecl __import VarType
+# define JRI_NATIVE_STUB(ResultType) ResultType _cdecl _loadds
+# define JRI_CALLBACK _loadds
+# endif
+# else
+# error Unsupported PC development environment.
+# endif
+# ifndef IS_LITTLE_ENDIAN
+# define IS_LITTLE_ENDIAN
+# endif
+
+/* Mac */
+#elif defined (macintosh) || Macintosh || THINK_C
+# if defined(__MWERKS__) /* Metrowerks */
+# if !__option(enumsalwaysint)
+# error You need to define 'Enums Always Int' for your project.
+# endif
+# if defined(TARGET_CPU_68K) && !TARGET_RT_MAC_CFM
+# if !__option(fourbyteints)
+# error You need to define 'Struct Alignment: 68k' for your project.
+# endif
+# endif /* !GENERATINGCFM */
+# define JRI_PUBLIC_API(ResultType) __declspec(export) ResultType
+# define JRI_PUBLIC_VAR(VarType) JRI_PUBLIC_API(VarType)
+# define JRI_PUBLIC_VAR_EXP(VarType) JRI_PUBLIC_API(VarType)
+# define JRI_PUBLIC_VAR_IMP(VarType) JRI_PUBLIC_API(VarType)
+# define JRI_NATIVE_STUB(ResultType) JRI_PUBLIC_API(ResultType)
+# elif defined(__SC__) /* Symantec */
+# error What are the Symantec defines? (warren@netscape.com)
+# elif macintosh && applec /* MPW */
+# error Please upgrade to the latest MPW compiler (SC).
+# else
+# error Unsupported Mac development environment.
+# endif
+# define JRI_CALLBACK
+
+/* Unix or else */
+#else
+# define JRI_PUBLIC_API(ResultType) ResultType
+# define JRI_PUBLIC_VAR(VarType) VarType
+# define JRI_PUBLIC_VAR_EXP(VarType) JRI_PUBLIC_VAR(VarType)
+# define JRI_PUBLIC_VAR_IMP(VarType) JRI_PUBLIC_VAR(VarType)
+# define JRI_NATIVE_STUB(ResultType) ResultType
+# define JRI_CALLBACK
+#endif
+
+#ifndef FAR /* for non-Win16 */
+#define FAR
+#endif
+
+/******************************************************************************/
+
+/* Java Scalar Types */
+
+#if 0 /* now in jni.h */
+typedef short jchar;
+typedef short jshort;
+typedef float jfloat;
+typedef double jdouble;
+typedef juint jsize;
+#endif
+
+/* moved from jni.h -- Sun's new jni.h doesn't have this anymore */
+#ifdef __cplusplus
+typedef class _jobject *jref;
+#else
+typedef struct _jobject *jref;
+#endif
+
+typedef unsigned char jbool;
+typedef signed char jbyte;
+#ifdef IS_64 /* XXX ok for alpha, but not right on all 64-bit architectures */
+typedef unsigned int juint;
+typedef int jint;
+#else
+typedef unsigned long juint;
+typedef long jint;
+#endif
+
+/*******************************************************************************
+ * jlong : long long (64-bit signed integer type) support.
+ ******************************************************************************/
+
+/*
+** Bit masking macros. (n must be <= 31 to be portable)
+*/
+#define JRI_BIT(n) ((juint)1 << (n))
+#define JRI_BITMASK(n) (JRI_BIT(n) - 1)
+
+#ifdef HAVE_LONG_LONG
+
+#ifdef OSF1
+
+/* long is default 64-bit on OSF1, -std1 does not allow long long */
+typedef long jlong;
+typedef unsigned long julong;
+#define jlong_MAXINT 0x7fffffffffffffffL
+#define jlong_MININT 0x8000000000000000L
+#define jlong_ZERO 0x0L
+
+#elif (defined(WIN32) || defined(_WIN32))
+
+typedef LONGLONG jlong;
+typedef DWORDLONG julong;
+#define jlong_MAXINT 0x7fffffffffffffffi64
+#define jlong_MININT 0x8000000000000000i64
+#define jlong_ZERO 0x0i64
+
+#else
+
+typedef long long jlong;
+typedef unsigned long long julong;
+#define jlong_MAXINT 0x7fffffffffffffffLL
+#define jlong_MININT 0x8000000000000000LL
+#define jlong_ZERO 0x0LL
+
+#endif
+
+#define jlong_IS_ZERO(a) ((a) == 0)
+#define jlong_EQ(a, b) ((a) == (b))
+#define jlong_NE(a, b) ((a) != (b))
+#define jlong_GE_ZERO(a) ((a) >= 0)
+#define jlong_CMP(a, op, b) ((a) op (b))
+
+#define jlong_AND(r, a, b) ((r) = (a) & (b))
+#define jlong_OR(r, a, b) ((r) = (a) | (b))
+#define jlong_XOR(r, a, b) ((r) = (a) ^ (b))
+#define jlong_OR2(r, a) ((r) = (r) | (a))
+#define jlong_NOT(r, a) ((r) = ~(a))
+
+#define jlong_NEG(r, a) ((r) = -(a))
+#define jlong_ADD(r, a, b) ((r) = (a) + (b))
+#define jlong_SUB(r, a, b) ((r) = (a) - (b))
+
+#define jlong_MUL(r, a, b) ((r) = (a) * (b))
+#define jlong_DIV(r, a, b) ((r) = (a) / (b))
+#define jlong_MOD(r, a, b) ((r) = (a) % (b))
+
+#define jlong_SHL(r, a, b) ((r) = (a) << (b))
+#define jlong_SHR(r, a, b) ((r) = (a) >> (b))
+#define jlong_USHR(r, a, b) ((r) = (julong)(a) >> (b))
+#define jlong_ISHL(r, a, b) ((r) = ((jlong)(a)) << (b))
+
+#define jlong_L2I(i, l) ((i) = (int)(l))
+#define jlong_L2UI(ui, l) ((ui) =(unsigned int)(l))
+#define jlong_L2F(f, l) ((f) = (l))
+#define jlong_L2D(d, l) ((d) = (l))
+
+#define jlong_I2L(l, i) ((l) = (i))
+#define jlong_UI2L(l, ui) ((l) = (ui))
+#define jlong_F2L(l, f) ((l) = (f))
+#define jlong_D2L(l, d) ((l) = (d))
+
+#define jlong_UDIVMOD(qp, rp, a, b) \
+ (*(qp) = ((julong)(a) / (b)), \
+ *(rp) = ((julong)(a) % (b)))
+
+#else /* !HAVE_LONG_LONG */
+
+typedef struct {
+#ifdef IS_LITTLE_ENDIAN
+ juint lo, hi;
+#else
+ juint hi, lo;
+#endif
+} jlong;
+typedef jlong julong;
+
+extern jlong jlong_MAXINT, jlong_MININT, jlong_ZERO;
+
+#define jlong_IS_ZERO(a) (((a).hi == 0) && ((a).lo == 0))
+#define jlong_EQ(a, b) (((a).hi == (b).hi) && ((a).lo == (b).lo))
+#define jlong_NE(a, b) (((a).hi != (b).hi) || ((a).lo != (b).lo))
+#define jlong_GE_ZERO(a) (((a).hi >> 31) == 0)
+
+/*
+ * NB: jlong_CMP and jlong_UCMP work only for strict relationals (<, >).
+ */
+#define jlong_CMP(a, op, b) (((int32)(a).hi op (int32)(b).hi) || \
+ (((a).hi == (b).hi) && ((a).lo op (b).lo)))
+#define jlong_UCMP(a, op, b) (((a).hi op (b).hi) || \
+ (((a).hi == (b).hi) && ((a).lo op (b).lo)))
+
+#define jlong_AND(r, a, b) ((r).lo = (a).lo & (b).lo, \
+ (r).hi = (a).hi & (b).hi)
+#define jlong_OR(r, a, b) ((r).lo = (a).lo | (b).lo, \
+ (r).hi = (a).hi | (b).hi)
+#define jlong_XOR(r, a, b) ((r).lo = (a).lo ^ (b).lo, \
+ (r).hi = (a).hi ^ (b).hi)
+#define jlong_OR2(r, a) ((r).lo = (r).lo | (a).lo, \
+ (r).hi = (r).hi | (a).hi)
+#define jlong_NOT(r, a) ((r).lo = ~(a).lo, \
+ (r).hi = ~(a).hi)
+
+#define jlong_NEG(r, a) ((r).lo = -(int32)(a).lo, \
+ (r).hi = -(int32)(a).hi - ((r).lo != 0))
+#define jlong_ADD(r, a, b) { \
+ jlong _a, _b; \
+ _a = a; _b = b; \
+ (r).lo = _a.lo + _b.lo; \
+ (r).hi = _a.hi + _b.hi + ((r).lo < _b.lo); \
+}
+
+#define jlong_SUB(r, a, b) { \
+ jlong _a, _b; \
+ _a = a; _b = b; \
+ (r).lo = _a.lo - _b.lo; \
+ (r).hi = _a.hi - _b.hi - (_a.lo < _b.lo); \
+} \
+
+/*
+ * Multiply 64-bit operands a and b to get 64-bit result r.
+ * First multiply the low 32 bits of a and b to get a 64-bit result in r.
+ * Then add the outer and inner products to r.hi.
+ */
+#define jlong_MUL(r, a, b) { \
+ jlong _a, _b; \
+ _a = a; _b = b; \
+ jlong_MUL32(r, _a.lo, _b.lo); \
+ (r).hi += _a.hi * _b.lo + _a.lo * _b.hi; \
+}
+
+/* XXX _jlong_lo16(a) = ((a) << 16 >> 16) is better on some archs (not on mips) */
+#define _jlong_lo16(a) ((a) & JRI_BITMASK(16))
+#define _jlong_hi16(a) ((a) >> 16)
+
+/*
+ * Multiply 32-bit operands a and b to get 64-bit result r.
+ * Use polynomial expansion based on primitive field element (1 << 16).
+ */
+#define jlong_MUL32(r, a, b) { \
+ juint _a1, _a0, _b1, _b0, _y0, _y1, _y2, _y3; \
+ _a1 = _jlong_hi16(a), _a0 = _jlong_lo16(a); \
+ _b1 = _jlong_hi16(b), _b0 = _jlong_lo16(b); \
+ _y0 = _a0 * _b0; \
+ _y1 = _a0 * _b1; \
+ _y2 = _a1 * _b0; \
+ _y3 = _a1 * _b1; \
+ _y1 += _jlong_hi16(_y0); /* can't carry */ \
+ _y1 += _y2; /* might carry */ \
+ if (_y1 < _y2) _y3 += 1 << 16; /* propagate */ \
+ (r).lo = (_jlong_lo16(_y1) << 16) + _jlong_lo16(_y0); \
+ (r).hi = _y3 + _jlong_hi16(_y1); \
+}
+
+/*
+ * Divide 64-bit unsigned operand a by 64-bit unsigned operand b, setting *qp
+ * to the 64-bit unsigned quotient, and *rp to the 64-bit unsigned remainder.
+ * Minimize effort if one of qp and rp is null.
+ */
+#define jlong_UDIVMOD(qp, rp, a, b) jlong_udivmod(qp, rp, a, b)
+
+extern JRI_PUBLIC_API(void)
+jlong_udivmod(julong *qp, julong *rp, julong a, julong b);
+
+#define jlong_DIV(r, a, b) { \
+ jlong _a, _b; \
+ juint _negative = (int32)(a).hi < 0; \
+ if (_negative) { \
+ jlong_NEG(_a, a); \
+ } else { \
+ _a = a; \
+ } \
+ if ((int32)(b).hi < 0) { \
+ _negative ^= 1; \
+ jlong_NEG(_b, b); \
+ } else { \
+ _b = b; \
+ } \
+ jlong_UDIVMOD(&(r), 0, _a, _b); \
+ if (_negative) \
+ jlong_NEG(r, r); \
+}
+
+#define jlong_MOD(r, a, b) { \
+ jlong _a, _b; \
+ juint _negative = (int32)(a).hi < 0; \
+ if (_negative) { \
+ jlong_NEG(_a, a); \
+ } else { \
+ _a = a; \
+ } \
+ if ((int32)(b).hi < 0) { \
+ jlong_NEG(_b, b); \
+ } else { \
+ _b = b; \
+ } \
+ jlong_UDIVMOD(0, &(r), _a, _b); \
+ if (_negative) \
+ jlong_NEG(r, r); \
+}
+
+/*
+ * NB: b is a juint, not jlong or julong, for the shift ops.
+ */
+#define jlong_SHL(r, a, b) { \
+ if (b) { \
+ jlong _a; \
+ _a = a; \
+ if ((b) < 32) { \
+ (r).lo = _a.lo << (b); \
+ (r).hi = (_a.hi << (b)) | (_a.lo >> (32 - (b))); \
+ } else { \
+ (r).lo = 0; \
+ (r).hi = _a.lo << ((b) & 31); \
+ } \
+ } else { \
+ (r) = (a); \
+ } \
+}
+
+/* a is an int32, b is int32, r is jlong */
+#define jlong_ISHL(r, a, b) { \
+ if (b) { \
+ jlong _a; \
+ _a.lo = (a); \
+ _a.hi = 0; \
+ if ((b) < 32) { \
+ (r).lo = (a) << (b); \
+ (r).hi = ((a) >> (32 - (b))); \
+ } else { \
+ (r).lo = 0; \
+ (r).hi = (a) << ((b) & 31); \
+ } \
+ } else { \
+ (r).lo = (a); \
+ (r).hi = 0; \
+ } \
+}
+
+#define jlong_SHR(r, a, b) { \
+ if (b) { \
+ jlong _a; \
+ _a = a; \
+ if ((b) < 32) { \
+ (r).lo = (_a.hi << (32 - (b))) | (_a.lo >> (b)); \
+ (r).hi = (int32)_a.hi >> (b); \
+ } else { \
+ (r).lo = (int32)_a.hi >> ((b) & 31); \
+ (r).hi = (int32)_a.hi >> 31; \
+ } \
+ } else { \
+ (r) = (a); \
+ } \
+}
+
+#define jlong_USHR(r, a, b) { \
+ if (b) { \
+ jlong _a; \
+ _a = a; \
+ if ((b) < 32) { \
+ (r).lo = (_a.hi << (32 - (b))) | (_a.lo >> (b)); \
+ (r).hi = _a.hi >> (b); \
+ } else { \
+ (r).lo = _a.hi >> ((b) & 31); \
+ (r).hi = 0; \
+ } \
+ } else { \
+ (r) = (a); \
+ } \
+}
+
+#define jlong_L2I(i, l) ((i) = (l).lo)
+#define jlong_L2UI(ui, l) ((ui) = (l).lo)
+#define jlong_L2F(f, l) { double _d; jlong_L2D(_d, l); (f) = (float) _d; }
+
+#define jlong_L2D(d, l) { \
+ int32 _negative; \
+ jlong _absval; \
+ \
+ _negative = (l).hi >> 31; \
+ if (_negative) { \
+ jlong_NEG(_absval, l); \
+ } else { \
+ _absval = l; \
+ } \
+ (d) = (double)_absval.hi * 4.294967296e9 + _absval.lo; \
+ if (_negative) \
+ (d) = -(d); \
+}
+
+#define jlong_I2L(l, i) ((l).hi = (i) >> 31, (l).lo = (i))
+#define jlong_UI2L(l, ui) ((l).hi = 0, (l).lo = (ui))
+#define jlong_F2L(l, f) { double _d = (double) f; jlong_D2L(l, _d); }
+
+#define jlong_D2L(l, d) { \
+ int _negative; \
+ double _absval, _d_hi; \
+ jlong _lo_d; \
+ \
+ _negative = ((d) < 0); \
+ _absval = _negative ? -(d) : (d); \
+ \
+ (l).hi = (juint)(_absval / 4.294967296e9); \
+ (l).lo = 0; \
+ jlong_L2D(_d_hi, l); \
+ _absval -= _d_hi; \
+ _lo_d.hi = 0; \
+ if (_absval < 0) { \
+ _lo_d.lo = (juint) -_absval; \
+ jlong_SUB(l, l, _lo_d); \
+ } else { \
+ _lo_d.lo = (juint) _absval; \
+ jlong_ADD(l, l, _lo_d); \
+ } \
+ \
+ if (_negative) \
+ jlong_NEG(l, l); \
+}
+
+#endif /* !HAVE_LONG_LONG */
+
+/******************************************************************************/
+
+#ifdef HAVE_ALIGNED_LONGLONGS
+#define JRI_GET_INT64(_t,_addr) ( ((_t).x[0] = ((jint*)(_addr))[0]), \
+ ((_t).x[1] = ((jint*)(_addr))[1]), \
+ (_t).l )
+#define JRI_SET_INT64(_t, _addr, _v) ( (_t).l = (_v), \
+ ((jint*)(_addr))[0] = (_t).x[0], \
+ ((jint*)(_addr))[1] = (_t).x[1] )
+#else
+#define JRI_GET_INT64(_t,_addr) (*(jlong*)(_addr))
+#define JRI_SET_INT64(_t, _addr, _v) (*(jlong*)(_addr) = (_v))
+#endif
+
+/* If double's must be aligned on doubleword boundaries then define this */
+#ifdef HAVE_ALIGNED_DOUBLES
+#define JRI_GET_DOUBLE(_t,_addr) ( ((_t).x[0] = ((jint*)(_addr))[0]), \
+ ((_t).x[1] = ((jint*)(_addr))[1]), \
+ (_t).d )
+#define JRI_SET_DOUBLE(_t, _addr, _v) ( (_t).d = (_v), \
+ ((jint*)(_addr))[0] = (_t).x[0], \
+ ((jint*)(_addr))[1] = (_t).x[1] )
+#else
+#define JRI_GET_DOUBLE(_t,_addr) (*(jdouble*)(_addr))
+#define JRI_SET_DOUBLE(_t, _addr, _v) (*(jdouble*)(_addr) = (_v))
+#endif
+
+/******************************************************************************/
+#ifdef __cplusplus
+}
+#endif
+#endif /* JRI_MD_H */
+/******************************************************************************/
diff --git a/src/moz-sdk/jritypes.h b/src/moz-sdk/jritypes.h
new file mode 100644
index 0000000..2ef14ae
--- /dev/null
+++ b/src/moz-sdk/jritypes.h
@@ -0,0 +1,243 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*******************************************************************************
+ * Java Runtime Interface
+ ******************************************************************************/
+
+#ifndef JRITYPES_H
+#define JRITYPES_H
+
+#include "jri_md.h"
+#include "jni.h"
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+ * Types
+ ******************************************************************************/
+
+struct JRIEnvInterface;
+
+typedef void* JRIRef;
+typedef void* JRIGlobalRef;
+
+typedef jint JRIFieldID;
+typedef jint JRIMethodID;
+
+/* synonyms: */
+typedef JRIGlobalRef jglobal;
+
+typedef union JRIValue {
+ jbool z;
+ jbyte b;
+ jchar c;
+ jshort s;
+ jint i;
+ jlong l;
+ jfloat f;
+ jdouble d;
+ jref r;
+} JRIValue;
+
+typedef enum JRIBoolean {
+ JRIFalse = 0,
+ JRITrue = 1
+} JRIBoolean;
+
+typedef enum JRIConstant {
+ JRIUninitialized = -1
+} JRIConstant;
+
+/* convenience types (these must be distinct struct types for c++ overloading): */
+#if 0 /* now in jni.h */
+typedef struct jbooleanArrayStruct* jbooleanArray;
+typedef struct jbyteArrayStruct* jbyteArray;
+typedef struct jcharArrayStruct* jcharArray;
+typedef struct jshortArrayStruct* jshortArray;
+typedef struct jintArrayStruct* jintArray;
+typedef struct jlongArrayStruct* jlongArray;
+typedef struct jfloatArrayStruct* jfloatArray;
+typedef struct jdoubleArrayStruct* jdoubleArray;
+typedef struct jobjectArrayStruct* jobjectArray;
+#endif
+typedef struct jstringArrayStruct* jstringArray;
+typedef struct jarrayArrayStruct* jarrayArray;
+
+#define JRIConstructorMethodName "<init>"
+
+/*******************************************************************************
+ * Signature Construction Macros
+ ******************************************************************************/
+
+/*
+** These macros can be used to construct signature strings. Hopefully their names
+** are a little easier to remember than the single character they correspond to.
+** For example, to specify the signature of the method:
+**
+** public int read(byte b[], int off, int len);
+**
+** you could write something like this in C:
+**
+** char* readSig = JRISigMethod(JRISigArray(JRISigByte)
+** JRISigInt
+** JRISigInt) JRISigInt;
+**
+** Of course, don't put commas between the types.
+*/
+#define JRISigArray(T) "[" T
+#define JRISigByte "B"
+#define JRISigChar "C"
+#define JRISigClass(name) "L" name ";"
+#define JRISigFloat "F"
+#define JRISigDouble "D"
+#define JRISigMethod(args) "(" args ")"
+#define JRISigNoArgs ""
+#define JRISigInt "I"
+#define JRISigLong "J"
+#define JRISigShort "S"
+#define JRISigVoid "V"
+#define JRISigBoolean "Z"
+
+/*******************************************************************************
+ * Environments
+ ******************************************************************************/
+
+extern JRI_PUBLIC_API(const struct JRIEnvInterface**)
+JRI_GetCurrentEnv(void);
+
+/*******************************************************************************
+ * Specific Scalar Array Types
+ ******************************************************************************/
+
+/*
+** The JRI Native Method Interface does not support boolean arrays. This
+** is to allow Java runtime implementations to optimize boolean array
+** storage. Using the ScalarArray operations on boolean arrays is bound
+** to fail, so convert any boolean arrays to byte arrays in Java before
+** passing them to a native method.
+*/
+
+#define JRI_NewByteArray(env, length, initialValues) \
+ JRI_NewScalarArray(env, length, JRISigByte, (jbyte*)(initialValues))
+#define JRI_GetByteArrayLength(env, array) \
+ JRI_GetScalarArrayLength(env, array)
+#define JRI_GetByteArrayElements(env, array) \
+ JRI_GetScalarArrayElements(env, array)
+
+#define JRI_NewCharArray(env, length, initialValues) \
+ JRI_NewScalarArray(env, ((length) * sizeof(jchar)), JRISigChar, (jbyte*)(initialValues))
+#define JRI_GetCharArrayLength(env, array) \
+ JRI_GetScalarArrayLength(env, array)
+#define JRI_GetCharArrayElements(env, array) \
+ ((jchar*)JRI_GetScalarArrayElements(env, array))
+
+#define JRI_NewShortArray(env, length, initialValues) \
+ JRI_NewScalarArray(env, ((length) * sizeof(jshort)), JRISigShort, (jbyte*)(initialValues))
+#define JRI_GetShortArrayLength(env, array) \
+ JRI_GetScalarArrayLength(env, array)
+#define JRI_GetShortArrayElements(env, array) \
+ ((jshort*)JRI_GetScalarArrayElements(env, array))
+
+#define JRI_NewIntArray(env, length, initialValues) \
+ JRI_NewScalarArray(env, ((length) * sizeof(jint)), JRISigInt, (jbyte*)(initialValues))
+#define JRI_GetIntArrayLength(env, array) \
+ JRI_GetScalarArrayLength(env, array)
+#define JRI_GetIntArrayElements(env, array) \
+ ((jint*)JRI_GetScalarArrayElements(env, array))
+
+#define JRI_NewLongArray(env, length, initialValues) \
+ JRI_NewScalarArray(env, ((length) * sizeof(jlong)), JRISigLong, (jbyte*)(initialValues))
+#define JRI_GetLongArrayLength(env, array) \
+ JRI_GetScalarArrayLength(env, array)
+#define JRI_GetLongArrayElements(env, array) \
+ ((jlong*)JRI_GetScalarArrayElements(env, array))
+
+#define JRI_NewFloatArray(env, length, initialValues) \
+ JRI_NewScalarArray(env, ((length) * sizeof(jfloat)), JRISigFloat, (jbyte*)(initialValues))
+#define JRI_GetFloatArrayLength(env, array) \
+ JRI_GetScalarArrayLength(env, array)
+#define JRI_GetFloatArrayElements(env, array) \
+ ((jfloat*)JRI_GetScalarArrayElements(env, array))
+
+#define JRI_NewDoubleArray(env, length, initialValues) \
+ JRI_NewScalarArray(env, ((length) * sizeof(jdouble)), JRISigDouble, (jbyte*)(initialValues))
+#define JRI_GetDoubleArrayLength(env, array) \
+ JRI_GetScalarArrayLength(env, array)
+#define JRI_GetDoubleArrayElements(env, array) \
+ ((jdouble*)JRI_GetScalarArrayElements(env, array))
+
+/******************************************************************************/
+/*
+** JDK Stuff -- This stuff is still needed while we're using the JDK
+** dynamic linking strategy to call native methods.
+*/
+
+typedef union JRI_JDK_stack_item {
+ /* Non pointer items */
+ jint i;
+ jfloat f;
+ jint o;
+ /* Pointer items */
+ void *h;
+ void *p;
+ unsigned char *addr;
+#ifdef IS_64
+ double d;
+ long l; /* == 64bits! */
+#endif
+} JRI_JDK_stack_item;
+
+typedef union JRI_JDK_Java8Str {
+ jint x[2];
+ jdouble d;
+ jlong l;
+ void *p;
+ float f;
+} JRI_JDK_Java8;
+
+/******************************************************************************/
+#ifdef __cplusplus
+}
+#endif
+#endif /* JRITYPES_H */
+/******************************************************************************/
diff --git a/src/moz-sdk/npapi.h b/src/moz-sdk/npapi.h
new file mode 100644
index 0000000..6092112
--- /dev/null
+++ b/src/moz-sdk/npapi.h
@@ -0,0 +1,726 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+/*
+ * npapi.h $Revision: 3.40.4.1 $
+ * Netscape client plug-in API spec
+ */
+
+#ifndef _NPAPI_H_
+#define _NPAPI_H_
+
+#ifdef __OS2__
+#pragma pack(1)
+#endif
+
+#include "prtypes.h"
+/* Copied from xp_core.h */
+/* removed #ifdef for hpux defined in /usr/include/model.h */
+#ifndef XP_MAC
+#ifndef _INT16
+#define _INT16
+#endif
+#ifndef _INT32
+#define _INT32
+#endif
+#ifndef _UINT16
+#define _UINT16
+#endif
+#ifndef _UINT32
+#define _UINT32
+#endif
+#endif
+
+/*
+ * NO_NSPR_10_SUPPORT disables the inclusion
+ * of obsolete/protypes.h, whose int16, uint16,
+ * int32, and uint32 typedefs conflict with those
+ * in this file.
+ */
+#ifndef NO_NSPR_10_SUPPORT
+#define NO_NSPR_10_SUPPORT
+#endif
+#ifdef OJI
+#include "jri.h" /* Java Runtime Interface */
+#endif
+
+#if defined (__OS2__ ) || defined (OS2)
+# ifndef XP_OS2
+# define XP_OS2 1
+# endif /* XP_OS2 */
+#endif /* __OS2__ */
+
+#ifdef _WINDOWS
+# include <windef.h>
+# ifndef XP_WIN
+# define XP_WIN 1
+# endif /* XP_WIN */
+#endif /* _WINDOWS */
+
+#ifdef __MWERKS__
+# define _declspec __declspec
+# ifdef macintosh
+# ifndef XP_MAC
+# define XP_MAC 1
+# endif /* XP_MAC */
+# endif /* macintosh */
+# ifdef __INTEL__
+# undef NULL
+# ifndef XP_WIN
+# define XP_WIN 1
+# endif /* XP_WIN */
+# endif /* __INTEL__ */
+#endif /* __MWERKS__ */
+
+#if defined(XP_MAC) || defined(XP_MACOSX)
+ #include <Quickdraw.h>
+ #include <Events.h>
+#endif
+
+#if defined(XP_UNIX)
+# include <stdio.h>
+# if defined(MOZ_X11)
+# include <X11/Xlib.h>
+# include <X11/Xutil.h>
+# endif
+#endif
+
+/*----------------------------------------------------------------------*/
+/* Plugin Version Constants */
+/*----------------------------------------------------------------------*/
+
+#define NP_VERSION_MAJOR 0
+#define NP_VERSION_MINOR 16
+
+
+/* The OS/2 version of Netscape uses RC_DATA to define the
+ mime types, file extensions, etc that are required.
+ Use a vertical bar to separate types, end types with \0.
+ FileVersion and ProductVersion are 32bit ints, all other
+ entries are strings the MUST be terminated wwith a \0.
+
+AN EXAMPLE:
+
+RCDATA NP_INFO_ProductVersion { 1,0,0,1,}
+
+RCDATA NP_INFO_MIMEType { "video/x-video|",
+ "video/x-flick\0" }
+RCDATA NP_INFO_FileExtents { "avi|",
+ "flc\0" }
+RCDATA NP_INFO_FileOpenName{ "MMOS2 video player(*.avi)|",
+ "MMOS2 Flc/Fli player(*.flc)\0" }
+
+RCDATA NP_INFO_FileVersion { 1,0,0,1 }
+RCDATA NP_INFO_CompanyName { "Netscape Communications\0" }
+RCDATA NP_INFO_FileDescription { "NPAVI32 Extension DLL\0"
+RCDATA NP_INFO_InternalName { "NPAVI32\0" )
+RCDATA NP_INFO_LegalCopyright { "Copyright Netscape Communications \251 1996\0"
+RCDATA NP_INFO_OriginalFilename { "NVAPI32.DLL" }
+RCDATA NP_INFO_ProductName { "NPAVI32 Dynamic Link Library\0" }
+
+*/
+
+
+/* RC_DATA types for version info - required */
+#define NP_INFO_ProductVersion 1
+#define NP_INFO_MIMEType 2
+#define NP_INFO_FileOpenName 3
+#define NP_INFO_FileExtents 4
+
+/* RC_DATA types for version info - used if found */
+#define NP_INFO_FileDescription 5
+#define NP_INFO_ProductName 6
+
+/* RC_DATA types for version info - optional */
+#define NP_INFO_CompanyName 7
+#define NP_INFO_FileVersion 8
+#define NP_INFO_InternalName 9
+#define NP_INFO_LegalCopyright 10
+#define NP_INFO_OriginalFilename 11
+
+#ifndef RC_INVOKED
+
+
+
+/*----------------------------------------------------------------------*/
+/* Definition of Basic Types */
+/*----------------------------------------------------------------------*/
+
+#ifndef _UINT16
+typedef unsigned short uint16;
+#endif
+
+#ifndef _UINT32
+# if defined(__alpha) || defined(__amd64__) || defined(__x86_64__)
+typedef unsigned int uint32;
+# else /* __alpha */
+typedef unsigned long uint32;
+# endif /* __alpha */
+#endif
+
+/*
+ * AIX defines these in sys/inttypes.h included from sys/types.h
+ */
+#ifndef AIX
+#ifndef _INT16
+typedef short int16;
+#endif
+
+#ifndef _INT32
+# if defined(__alpha) || defined(__amd64__) || defined(__x86_64__)
+typedef int int32;
+# else /* __alpha */
+typedef long int32;
+# endif /* __alpha */
+#endif
+#endif
+
+#ifndef FALSE
+#define FALSE (0)
+#endif
+#ifndef TRUE
+#define TRUE (1)
+#endif
+#ifndef NULL
+#define NULL (0L)
+#endif
+
+typedef unsigned char NPBool;
+typedef int16 NPError;
+typedef int16 NPReason;
+typedef char* NPMIMEType;
+
+
+
+/*----------------------------------------------------------------------*/
+/* Structures and definitions */
+/*----------------------------------------------------------------------*/
+
+#ifdef XP_MAC
+#pragma options align=mac68k
+#endif
+
+/*
+ * NPP is a plug-in's opaque instance handle
+ */
+typedef struct _NPP
+{
+ void* pdata; /* plug-in private data */
+ void* ndata; /* netscape private data */
+} NPP_t;
+
+typedef NPP_t* NPP;
+
+
+typedef struct _NPStream
+{
+ void* pdata; /* plug-in private data */
+ void* ndata; /* netscape private data */
+ const char* url;
+ uint32 end;
+ uint32 lastmodified;
+ void* notifyData;
+} NPStream;
+
+
+typedef struct _NPByteRange
+{
+ int32 offset; /* negative offset means from the end */
+ uint32 length;
+ struct _NPByteRange* next;
+} NPByteRange;
+
+
+typedef struct _NPSavedData
+{
+ int32 len;
+ void* buf;
+} NPSavedData;
+
+
+typedef struct _NPRect
+{
+ uint16 top;
+ uint16 left;
+ uint16 bottom;
+ uint16 right;
+} NPRect;
+
+typedef struct _NPSize
+{
+ int32 width;
+ int32 height;
+} NPSize;
+
+#ifdef XP_UNIX
+/*
+ * Unix specific structures and definitions
+ */
+
+/*
+ * Callback Structures.
+ *
+ * These are used to pass additional platform specific information.
+ */
+enum {
+ NP_SETWINDOW = 1,
+ NP_PRINT
+};
+
+typedef struct
+{
+ int32 type;
+} NPAnyCallbackStruct;
+
+typedef struct
+{
+ int32 type;
+#ifdef MOZ_X11
+ Display* display;
+ Visual* visual;
+ Colormap colormap;
+ unsigned int depth;
+#endif
+} NPSetWindowCallbackStruct;
+
+typedef struct
+{
+ int32 type;
+ FILE* fp;
+} NPPrintCallbackStruct;
+
+#endif /* XP_UNIX */
+
+
+/*
+ * The following masks are applied on certain platforms to NPNV and
+ * NPPV selectors that pass around pointers to COM interfaces. Newer
+ * compilers on some platforms may generate vtables that are not
+ * compatible with older compilers. To prevent older plugins from
+ * not understanding a new browser's ABI, these masks change the
+ * values of those selectors on those platforms. To remain backwards
+ * compatible with differenet versions of the browser, plugins can
+ * use these masks to dynamically determine and use the correct C++
+ * ABI that the browser is expecting. This does not apply to Windows
+ * as Microsoft's COM ABI will likely not change.
+ */
+
+#define NP_ABI_GCC3_MASK 0x10000000
+/*
+ * gcc 3.x generated vtables on UNIX and OSX are incompatible with
+ * previous compilers.
+ */
+#if (defined (XP_UNIX) && defined(__GNUC__) && (__GNUC__ >= 3))
+#define _NP_ABI_MIXIN_FOR_GCC3 NP_ABI_GCC3_MASK
+#else
+#define _NP_ABI_MIXIN_FOR_GCC3 0
+#endif
+
+
+#define NP_ABI_MACHO_MASK 0x01000000
+/*
+ * On OSX, the Mach-O executable format is significantly
+ * different than CFM. In addition to having a different
+ * C++ ABI, it also has has different C calling convention.
+ * You must use glue code when calling between CFM and
+ * Mach-O C functions.
+ */
+#if (defined(TARGET_RT_MAC_MACHO))
+#define _NP_ABI_MIXIN_FOR_MACHO NP_ABI_MACHO_MASK
+#else
+#define _NP_ABI_MIXIN_FOR_MACHO 0
+#endif
+
+
+#define NP_ABI_MASK (_NP_ABI_MIXIN_FOR_GCC3 | _NP_ABI_MIXIN_FOR_MACHO)
+
+/*
+ * List of variable names for which NPP_GetValue shall be implemented
+ */
+typedef enum {
+ NPPVpluginNameString = 1,
+ NPPVpluginDescriptionString,
+ NPPVpluginWindowBool,
+ NPPVpluginTransparentBool,
+ NPPVjavaClass, /* Not implemented in Mozilla 1.0 */
+ NPPVpluginWindowSize,
+ NPPVpluginTimerInterval,
+
+ NPPVpluginScriptableInstance = (10 | NP_ABI_MASK),
+ NPPVpluginScriptableIID = 11,
+
+ /* Introduced in Mozilla 0.9.9 */
+ NPPVjavascriptPushCallerBool = 12,
+
+ /* Introduced in Mozilla 1.0 */
+ NPPVpluginKeepLibraryInMemory = 13,
+ NPPVpluginNeedsXEmbed = 14,
+
+ /* Get the NPObject for scripting the plugin. Introduced in Firefox
+ * 1.0 (NPAPI minor version 14).
+ */
+ NPPVpluginScriptableNPObject = 15,
+
+ /* Get the plugin value (as \0-terminated UTF-8 string data) for
+ * form submission if the plugin is part of a form. Use
+ * NPN_MemAlloc() to allocate memory for the string data. Introduced
+ * in Mozilla 1.8b2 (NPAPI minor version 15).
+ */
+ NPPVformValue = 16
+} NPPVariable;
+
+/*
+ * List of variable names for which NPN_GetValue is implemented by Mozilla
+ */
+typedef enum {
+ NPNVxDisplay = 1,
+ NPNVxtAppContext,
+ NPNVnetscapeWindow,
+ NPNVjavascriptEnabledBool,
+ NPNVasdEnabledBool,
+ NPNVisOfflineBool,
+
+ /* 10 and over are available on Mozilla builds starting with 0.9.4 */
+ NPNVserviceManager = (10 | NP_ABI_MASK),
+ NPNVDOMElement = (11 | NP_ABI_MASK), /* available in Mozilla 1.2 */
+ NPNVDOMWindow = (12 | NP_ABI_MASK),
+ NPNVToolkit = (13 | NP_ABI_MASK),
+ NPNVSupportsXEmbedBool = 14,
+
+ /* Get the NPObject wrapper for the browser window. */
+ NPNVWindowNPObject = 15,
+
+ /* Get the NPObject wrapper for the plugins DOM element. */
+ NPNVPluginElementNPObject = 16
+} NPNVariable;
+
+/*
+ * The type of Tookkit the widgets use
+ */
+typedef enum {
+ NPNVGtk12 = 1,
+ NPNVGtk2
+} NPNToolkitType;
+
+/*
+ * The type of a NPWindow - it specifies the type of the data structure
+ * returned in the window field.
+ */
+typedef enum {
+ NPWindowTypeWindow = 1,
+ NPWindowTypeDrawable
+} NPWindowType;
+
+typedef struct _NPWindow
+{
+ void* window; /* Platform specific window handle */
+ /* OS/2: x - Position of bottom left corner */
+ /* OS/2: y - relative to visible netscape window */
+ int32 x; /* Position of top left corner relative */
+ int32 y; /* to a netscape page. */
+ uint32 width; /* Maximum window size */
+ uint32 height;
+ NPRect clipRect; /* Clipping rectangle in port coordinates */
+ /* Used by MAC only. */
+#if defined(XP_UNIX) && !defined(XP_MACOSX)
+ void * ws_info; /* Platform-dependent additonal data */
+#endif /* XP_UNIX */
+ NPWindowType type; /* Is this a window or a drawable? */
+} NPWindow;
+
+
+typedef struct _NPFullPrint
+{
+ NPBool pluginPrinted;/* Set TRUE if plugin handled fullscreen printing */
+ NPBool printOne; /* TRUE if plugin should print one copy to default printer */
+ void* platformPrint; /* Platform-specific printing info */
+} NPFullPrint;
+
+typedef struct _NPEmbedPrint
+{
+ NPWindow window;
+ void* platformPrint; /* Platform-specific printing info */
+} NPEmbedPrint;
+
+typedef struct _NPPrint
+{
+ uint16 mode; /* NP_FULL or NP_EMBED */
+ union
+ {
+ NPFullPrint fullPrint; /* if mode is NP_FULL */
+ NPEmbedPrint embedPrint; /* if mode is NP_EMBED */
+ } print;
+} NPPrint;
+
+#if defined(XP_MAC) || defined(XP_MACOSX)
+typedef EventRecord NPEvent;
+#elif defined(XP_WIN)
+typedef struct _NPEvent
+{
+ uint16 event;
+ uint32 wParam;
+ uint32 lParam;
+} NPEvent;
+#elif defined(XP_OS2)
+typedef struct _NPEvent
+{
+ uint32 event;
+ uint32 wParam;
+ uint32 lParam;
+} NPEvent;
+#elif defined (XP_UNIX) && defined(MOZ_X11)
+typedef XEvent NPEvent;
+#else
+typedef void* NPEvent;
+#endif /* XP_MAC */
+
+#if defined(XP_MAC) || defined(XP_MACOSX)
+typedef RgnHandle NPRegion;
+#elif defined(XP_WIN)
+typedef HRGN NPRegion;
+#elif defined(XP_UNIX) && defined(MOZ_X11)
+typedef Region NPRegion;
+#else
+typedef void *NPRegion;
+#endif /* XP_MAC */
+
+#if defined(XP_MAC) || defined(XP_MACOSX)
+/*
+ * Mac-specific structures and definitions.
+ */
+
+typedef struct NP_Port
+{
+ CGrafPtr port; /* Grafport */
+ int32 portx; /* position inside the topmost window */
+ int32 porty;
+} NP_Port;
+
+/*
+ * Non-standard event types that can be passed to HandleEvent
+ */
+
+enum NPEventType {
+ NPEventType_GetFocusEvent = (osEvt + 16),
+ NPEventType_LoseFocusEvent,
+ NPEventType_AdjustCursorEvent,
+ NPEventType_MenuCommandEvent,
+ NPEventType_ClippingChangedEvent,
+ NPEventType_ScrollingBeginsEvent = 1000,
+ NPEventType_ScrollingEndsEvent
+};
+
+#ifdef OBSOLETE
+#define getFocusEvent (osEvt + 16)
+#define loseFocusEvent (osEvt + 17)
+#define adjustCursorEvent (osEvt + 18)
+#endif
+#endif /* XP_MAC */
+
+/*
+ * Values for mode passed to NPP_New:
+ */
+#define NP_EMBED 1
+#define NP_FULL 2
+
+/*
+ * Values for stream type passed to NPP_NewStream:
+ */
+#define NP_NORMAL 1
+#define NP_SEEK 2
+#define NP_ASFILE 3
+#define NP_ASFILEONLY 4
+
+#define NP_MAXREADY (((unsigned)(~0)<<1)>>1)
+
+#ifdef XP_MAC
+#pragma options align=reset
+#endif
+
+
+/*----------------------------------------------------------------------*/
+/* Error and Reason Code definitions */
+/*----------------------------------------------------------------------*/
+
+/*
+ * Values of type NPError:
+ */
+#define NPERR_BASE 0
+#define NPERR_NO_ERROR (NPERR_BASE + 0)
+#define NPERR_GENERIC_ERROR (NPERR_BASE + 1)
+#define NPERR_INVALID_INSTANCE_ERROR (NPERR_BASE + 2)
+#define NPERR_INVALID_FUNCTABLE_ERROR (NPERR_BASE + 3)
+#define NPERR_MODULE_LOAD_FAILED_ERROR (NPERR_BASE + 4)
+#define NPERR_OUT_OF_MEMORY_ERROR (NPERR_BASE + 5)
+#define NPERR_INVALID_PLUGIN_ERROR (NPERR_BASE + 6)
+#define NPERR_INVALID_PLUGIN_DIR_ERROR (NPERR_BASE + 7)
+#define NPERR_INCOMPATIBLE_VERSION_ERROR (NPERR_BASE + 8)
+#define NPERR_INVALID_PARAM (NPERR_BASE + 9)
+#define NPERR_INVALID_URL (NPERR_BASE + 10)
+#define NPERR_FILE_NOT_FOUND (NPERR_BASE + 11)
+#define NPERR_NO_DATA (NPERR_BASE + 12)
+#define NPERR_STREAM_NOT_SEEKABLE (NPERR_BASE + 13)
+
+/*
+ * Values of type NPReason:
+ */
+#define NPRES_BASE 0
+#define NPRES_DONE (NPRES_BASE + 0)
+#define NPRES_NETWORK_ERR (NPRES_BASE + 1)
+#define NPRES_USER_BREAK (NPRES_BASE + 2)
+
+/*
+ * Don't use these obsolete error codes any more.
+ */
+#define NP_NOERR NP_NOERR_is_obsolete_use_NPERR_NO_ERROR
+#define NP_EINVAL NP_EINVAL_is_obsolete_use_NPERR_GENERIC_ERROR
+#define NP_EABORT NP_EABORT_is_obsolete_use_NPRES_USER_BREAK
+
+/*
+ * Version feature information
+ */
+#define NPVERS_HAS_STREAMOUTPUT 8
+#define NPVERS_HAS_NOTIFICATION 9
+#define NPVERS_HAS_LIVECONNECT 9
+#define NPVERS_WIN16_HAS_LIVECONNECT 9
+#define NPVERS_68K_HAS_LIVECONNECT 11
+#define NPVERS_HAS_WINDOWLESS 11
+#define NPVERS_HAS_XPCONNECT_SCRIPTING 13
+
+/*----------------------------------------------------------------------*/
+/* Function Prototypes */
+/*----------------------------------------------------------------------*/
+
+#if defined(_WINDOWS) && !defined(WIN32)
+#define NP_LOADDS _loadds
+#else
+#if defined(__OS2__)
+#define NP_LOADDS _System
+#else
+#define NP_LOADDS
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * NPP_* functions are provided by the plugin and called by the navigator.
+ */
+
+#ifdef XP_UNIX
+char* NPP_GetMIMEDescription(void);
+#endif /* XP_UNIX */
+
+NPError NP_LOADDS NPP_Initialize(void);
+void NP_LOADDS NPP_Shutdown(void);
+NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP instance,
+ uint16 mode, int16 argc, char* argn[],
+ char* argv[], NPSavedData* saved);
+NPError NP_LOADDS NPP_Destroy(NPP instance, NPSavedData** save);
+NPError NP_LOADDS NPP_SetWindow(NPP instance, NPWindow* window);
+NPError NP_LOADDS NPP_NewStream(NPP instance, NPMIMEType type,
+ NPStream* stream, NPBool seekable,
+ uint16* stype);
+NPError NP_LOADDS NPP_DestroyStream(NPP instance, NPStream* stream,
+ NPReason reason);
+int32 NP_LOADDS NPP_WriteReady(NPP instance, NPStream* stream);
+int32 NP_LOADDS NPP_Write(NPP instance, NPStream* stream, int32 offset,
+ int32 len, void* buffer);
+void NP_LOADDS NPP_StreamAsFile(NPP instance, NPStream* stream,
+ const char* fname);
+void NP_LOADDS NPP_Print(NPP instance, NPPrint* platformPrint);
+int16 NP_LOADDS NPP_HandleEvent(NPP instance, void* event);
+void NP_LOADDS NPP_URLNotify(NPP instance, const char* url,
+ NPReason reason, void* notifyData);
+#ifdef OJI
+jref NP_LOADDS NPP_GetJavaClass(void);
+#endif
+NPError NP_LOADDS NPP_GetValue(NPP instance, NPPVariable variable, void *value);
+NPError NP_LOADDS NPP_SetValue(NPP instance, NPNVariable variable, void *value);
+
+/*
+ * NPN_* functions are provided by the navigator and called by the plugin.
+ */
+void NP_LOADDS NPN_Version(int* plugin_major, int* plugin_minor,
+ int* netscape_major, int* netscape_minor);
+NPError NP_LOADDS NPN_GetURLNotify(NPP instance, const char* url,
+ const char* target, void* notifyData);
+NPError NP_LOADDS NPN_GetURL(NPP instance, const char* url,
+ const char* target);
+NPError NP_LOADDS NPN_PostURLNotify(NPP instance, const char* url,
+ const char* target, uint32 len,
+ const char* buf, NPBool file,
+ void* notifyData);
+NPError NP_LOADDS NPN_PostURL(NPP instance, const char* url,
+ const char* target, uint32 len,
+ const char* buf, NPBool file);
+NPError NP_LOADDS NPN_RequestRead(NPStream* stream, NPByteRange* rangeList);
+NPError NP_LOADDS NPN_NewStream(NPP instance, NPMIMEType type,
+ const char* target, NPStream** stream);
+int32 NP_LOADDS NPN_Write(NPP instance, NPStream* stream, int32 len, void* buffer);
+NPError NP_LOADDS NPN_DestroyStream(NPP instance, NPStream* stream, NPReason reason);
+void NP_LOADDS NPN_Status(NPP instance, const char* message);
+const char* NP_LOADDS NPN_UserAgent(NPP instance);
+void* NP_LOADDS NPN_MemAlloc(uint32 size);
+void NP_LOADDS NPN_MemFree(void* ptr);
+uint32 NP_LOADDS NPN_MemFlush(uint32 size);
+void NP_LOADDS NPN_ReloadPlugins(NPBool reloadPages);
+#ifdef OJI
+JRIEnv* NP_LOADDS NPN_GetJavaEnv(void);
+jref NP_LOADDS NPN_GetJavaPeer(NPP instance);
+#endif
+NPError NP_LOADDS NPN_GetValue(NPP instance, NPNVariable variable, void *value);
+NPError NP_LOADDS NPN_SetValue(NPP instance, NPPVariable variable, void *value);
+void NP_LOADDS NPN_InvalidateRect(NPP instance, NPRect *invalidRect);
+void NP_LOADDS NPN_InvalidateRegion(NPP instance, NPRegion invalidRegion);
+void NP_LOADDS NPN_ForceRedraw(NPP instance);
+void NP_LOADDS NPN_PushPopupsEnabledState(NPP instance, NPBool enabled);
+void NP_LOADDS NPN_PopPopupsEnabledState(NPP instance);
+
+#ifdef __cplusplus
+} /* end extern "C" */
+#endif
+
+#endif /* RC_INVOKED */
+#ifdef __OS2__
+#pragma pack()
+#endif
+
+#endif /* _NPAPI_H_ */
diff --git a/src/moz-sdk/npruntime.h b/src/moz-sdk/npruntime.h
new file mode 100644
index 0000000..2d1dc02
--- /dev/null
+++ b/src/moz-sdk/npruntime.h
@@ -0,0 +1,397 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Copyright 2004, Apple Computer, Inc. and The Mozilla Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the names of Apple Computer, Inc. ("Apple") or The Mozilla
+ * Foundation ("Mozilla") nor the names of their contributors may be used
+ * to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE, MOZILLA AND THEIR CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE, MOZILLA OR
+ * THEIR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Revision 1 (March 4, 2004):
+ * Initial proposal.
+ *
+ * Revision 2 (March 10, 2004):
+ * All calls into script were made asynchronous. Results are
+ * provided via the NPScriptResultFunctionPtr callback.
+ *
+ * Revision 3 (March 10, 2004):
+ * Corrected comments to not refer to class retain/release FunctionPtrs.
+ *
+ * Revision 4 (March 11, 2004):
+ * Added additional convenience NPN_SetExceptionWithUTF8().
+ * Changed NPHasPropertyFunctionPtr and NPHasMethodFunctionPtr to take NPClass
+ * pointers instead of NPObject pointers.
+ * Added NPIsValidIdentifier().
+ *
+ * Revision 5 (March 17, 2004):
+ * Added context parameter to result callbacks from ScriptObject functions.
+ *
+ * Revision 6 (March 29, 2004):
+ * Renamed functions implemented by user agent to NPN_*. Removed _ from
+ * type names.
+ * Renamed "JavaScript" types to "Script".
+ *
+ * Revision 7 (April 21, 2004):
+ * NPIdentifier becomes a void*, was int32_t
+ * Remove NP_IsValidIdentifier, renamed NP_IdentifierFromUTF8 to NP_GetIdentifier
+ * Added NPVariant and modified functions to use this new type.
+ *
+ * Revision 8 (July 9, 2004):
+ * Updated to joint Apple-Mozilla license.
+ *
+ */
+#ifndef _NP_RUNTIME_H_
+#define _NP_RUNTIME_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "nptypes.h"
+
+/*
+ This API is used to facilitate binding code written in C to script
+ objects. The API in this header does not assume the presence of a
+ user agent. That is, it can be used to bind C code to scripting
+ environments outside of the context of a user agent.
+
+ However, the normal use of the this API is in the context of a
+ scripting environment running in a browser or other user agent.
+ In particular it is used to support the extended Netscape
+ script-ability API for plugins (NP-SAP). NP-SAP is an extension
+ of the Netscape plugin API. As such we have adopted the use of
+ the "NP" prefix for this API.
+
+ The following NP{N|P}Variables were added to the Netscape plugin
+ API (in npapi.h):
+
+ NPNVWindowNPObject
+ NPNVPluginElementNPObject
+ NPPVpluginScriptableNPObject
+
+ These variables are exposed through NPN_GetValue() and
+ NPP_GetValue() (respectively) and are used to establish the
+ initial binding between the user agent and native code. The DOM
+ objects in the user agent can be examined and manipulated using
+ the NPN_ functions that operate on NPObjects described in this
+ header.
+
+ To the extent possible the assumptions about the scripting
+ language used by the scripting environment have been minimized.
+*/
+
+#define NP_BEGIN_MACRO do {
+#define NP_END_MACRO } while (0)
+
+/*
+ Objects (non-primitive data) passed between 'C' and script is
+ always wrapped in an NPObject. The 'interface' of an NPObject is
+ described by an NPClass.
+*/
+typedef struct NPObject NPObject;
+typedef struct NPClass NPClass;
+
+typedef char NPUTF8;
+typedef struct _NPString {
+ const NPUTF8 *utf8characters;
+ uint32_t utf8length;
+} NPString;
+
+typedef enum {
+ NPVariantType_Void,
+ NPVariantType_Null,
+ NPVariantType_Bool,
+ NPVariantType_Int32,
+ NPVariantType_Double,
+ NPVariantType_String,
+ NPVariantType_Object
+} NPVariantType;
+
+typedef struct _NPVariant {
+ NPVariantType type;
+ union {
+ bool boolValue;
+ uint32_t intValue;
+ double doubleValue;
+ NPString stringValue;
+ NPObject *objectValue;
+ } value;
+} NPVariant;
+
+/*
+ NPN_ReleaseVariantValue is called on all 'out' parameters
+ references. Specifically it is to be called on variants that own
+ their value, as is the case with all non-const NPVariant*
+ arguments after a successful call to any methods (except this one)
+ in this API.
+
+ After calling NPN_ReleaseVariantValue, the type of the variant
+ will be NPVariantType_Void.
+*/
+void NPN_ReleaseVariantValue(NPVariant *variant);
+
+#define NPVARIANT_IS_VOID(_v) ((_v).type == NPVariantType_Void)
+#define NPVARIANT_IS_NULL(_v) ((_v).type == NPVariantType_Null)
+#define NPVARIANT_IS_BOOLEAN(_v) ((_v).type == NPVariantType_Bool)
+#define NPVARIANT_IS_INT32(_v) ((_v).type == NPVariantType_Int32)
+#define NPVARIANT_IS_DOUBLE(_v) ((_v).type == NPVariantType_Double)
+#define NPVARIANT_IS_STRING(_v) ((_v).type == NPVariantType_String)
+#define NPVARIANT_IS_OBJECT(_v) ((_v).type == NPVariantType_Object)
+
+#define NPVARIANT_TO_BOOLEAN(_v) ((_v).value.boolValue)
+#define NPVARIANT_TO_INT32(_v) ((_v).value.intValue)
+#define NPVARIANT_TO_DOUBLE(_v) ((_v).value.doubleValue)
+#define NPVARIANT_TO_STRING(_v) ((_v).value.stringValue)
+#define NPVARIANT_TO_OBJECT(_v) ((_v).value.objectValue)
+
+#define VOID_TO_NPVARIANT(_v) \
+NP_BEGIN_MACRO \
+ (_v).type = NPVariantType_Void; \
+ (_v).value.objectValue = NULL; \
+NP_END_MACRO
+
+#define NULL_TO_NPVARIANT(_v) \
+NP_BEGIN_MACRO \
+ (_v).type = NPVariantType_Null; \
+ (_v).value.objectValue = NULL; \
+NP_END_MACRO
+
+#define BOOLEAN_TO_NPVARIANT(_val, _v) \
+NP_BEGIN_MACRO \
+ (_v).type = NPVariantType_Bool; \
+ (_v).value.boolValue = !!(_val); \
+NP_END_MACRO
+
+#define INT32_TO_NPVARIANT(_val, _v) \
+NP_BEGIN_MACRO \
+ (_v).type = NPVariantType_Int32; \
+ (_v).value.intValue = _val; \
+NP_END_MACRO
+
+#define DOUBLE_TO_NPVARIANT(_val, _v) \
+NP_BEGIN_MACRO \
+ (_v).type = NPVariantType_Double; \
+ (_v).value.doubleValue = _val; \
+NP_END_MACRO
+
+#define STRINGZ_TO_NPVARIANT(_val, _v) \
+NP_BEGIN_MACRO \
+ (_v).type = NPVariantType_String; \
+ NPString str = { _val, strlen(_val) }; \
+ (_v).value.stringValue = str; \
+NP_END_MACRO
+
+#define STRINGN_TO_NPVARIANT(_val, _len, _v) \
+NP_BEGIN_MACRO \
+ (_v).type = NPVariantType_String; \
+ NPString str = { _val, _len }; \
+ (_v).value.stringValue = str; \
+NP_END_MACRO
+
+#define OBJECT_TO_NPVARIANT(_val, _v) \
+NP_BEGIN_MACRO \
+ (_v).type = NPVariantType_Object; \
+ (_v).value.objectValue = _val; \
+NP_END_MACRO
+
+
+/*
+ Type mappings (JavaScript types have been used for illustration
+ purposes):
+
+ JavaScript to C (NPVariant with type:)
+ undefined NPVariantType_Void
+ null NPVariantType_Null
+ Boolean NPVariantType_Bool
+ Number NPVariantType_Double or NPVariantType_Int32
+ String NPVariantType_String
+ Object NPVariantType_Object
+
+ C (NPVariant with type:) to JavaScript
+ NPVariantType_Void undefined
+ NPVariantType_Null null
+ NPVariantType_Bool Boolean
+ NPVariantType_Int32 Number
+ NPVariantType_Double Number
+ NPVariantType_String String
+ NPVariantType_Object Object
+*/
+
+typedef void *NPIdentifier;
+
+/*
+ NPObjects have methods and properties. Methods and properties are
+ identified with NPIdentifiers. These identifiers may be reflected
+ in script. NPIdentifiers can be either strings or integers, IOW,
+ methods and properties can be identified by either strings or
+ integers (i.e. foo["bar"] vs foo[1]). NPIdentifiers can be
+ compared using ==. In case of any errors, the requested
+ NPIdentifier(s) will be NULL.
+*/
+NPIdentifier NPN_GetStringIdentifier(const NPUTF8 *name);
+void NPN_GetStringIdentifiers(const NPUTF8 **names, int32_t nameCount,
+ NPIdentifier *identifiers);
+NPIdentifier NPN_GetIntIdentifier(int32_t intid);
+bool NPN_IdentifierIsString(NPIdentifier identifier);
+
+/*
+ The NPUTF8 returned from NPN_UTF8FromIdentifier SHOULD be freed.
+*/
+NPUTF8 *NPN_UTF8FromIdentifier(NPIdentifier identifier);
+
+/*
+ Get the integer represented by identifier. If identifier is not an
+ integer identifier, the behaviour is undefined.
+*/
+int32_t NPN_IntFromIdentifier(NPIdentifier identifier);
+
+/*
+ NPObject behavior is implemented using the following set of
+ callback functions.
+
+ The NPVariant *result argument of these functions (where
+ applicable) should be released using NPN_ReleaseVariantValue().
+*/
+typedef NPObject *(*NPAllocateFunctionPtr)(NPP npp, NPClass *aClass);
+typedef void (*NPDeallocateFunctionPtr)(NPObject *npobj);
+typedef void (*NPInvalidateFunctionPtr)(NPObject *npobj);
+typedef bool (*NPHasMethodFunctionPtr)(NPObject *npobj, NPIdentifier name);
+typedef bool (*NPInvokeFunctionPtr)(NPObject *npobj, NPIdentifier name,
+ const NPVariant *args, uint32_t argCount,
+ NPVariant *result);
+typedef bool (*NPInvokeDefaultFunctionPtr)(NPObject *npobj,
+ const NPVariant *args,
+ uint32_t argCount,
+ NPVariant *result);
+typedef bool (*NPHasPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name);
+typedef bool (*NPGetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name,
+ NPVariant *result);
+typedef bool (*NPSetPropertyFunctionPtr)(NPObject *npobj, NPIdentifier name,
+ const NPVariant *value);
+typedef bool (*NPRemovePropertyFunctionPtr)(NPObject *npobj,
+ NPIdentifier name);
+
+/*
+ NPObjects returned by create, retain, invoke, and getProperty pass
+ a reference count to the caller. That is, the callee adds a
+ reference count which passes to the caller. It is the caller's
+ responsibility to release the returned object.
+
+ NPInvokeFunctionPtr function may return 0 to indicate a void
+ result.
+
+ NPInvalidateFunctionPtr is called by the scripting environment
+ when the native code is shutdown. Any attempt to message a
+ NPObject instance after the invalidate callback has been
+ called will result in undefined behavior, even if the native code
+ is still retaining those NPObject instances. (The runtime
+ will typically return immediately, with 0 or NULL, from an attempt
+ to dispatch to a NPObject, but this behavior should not be
+ depended upon.)
+*/
+struct NPClass
+{
+ uint32_t structVersion;
+ NPAllocateFunctionPtr allocate;
+ NPDeallocateFunctionPtr deallocate;
+ NPInvalidateFunctionPtr invalidate;
+ NPHasMethodFunctionPtr hasMethod;
+ NPInvokeFunctionPtr invoke;
+ NPInvokeDefaultFunctionPtr invokeDefault;
+ NPHasPropertyFunctionPtr hasProperty;
+ NPGetPropertyFunctionPtr getProperty;
+ NPSetPropertyFunctionPtr setProperty;
+ NPRemovePropertyFunctionPtr removeProperty;
+};
+
+#define NP_CLASS_STRUCT_VERSION 1
+
+struct NPObject {
+ NPClass *_class;
+ uint32_t referenceCount;
+ /*
+ * Additional space may be allocated here by types of NPObjects
+ */
+};
+
+/*
+ If the class has an allocate function, NPN_CreateObject invokes
+ that function, otherwise a NPObject is allocated and
+ returned. This method will initialize the referenceCount member of
+ the NPObject to 1.
+*/
+NPObject *NPN_CreateObject(NPP npp, NPClass *aClass);
+
+/*
+ Increment the NPObject's reference count.
+*/
+NPObject *NPN_RetainObject(NPObject *npobj);
+
+/*
+ Decremented the NPObject's reference count. If the reference
+ count goes to zero, the class's destroy function is invoke if
+ specified, otherwise the object is freed directly.
+*/
+void NPN_ReleaseObject(NPObject *npobj);
+
+/*
+ Functions to access script objects represented by NPObject.
+
+ Calls to script objects are synchronous. If a function returns a
+ value, it will be supplied via the result NPVariant
+ argument. Successful calls will return true, false will be
+ returned in case of an error.
+
+ Calls made from plugin code to script must be made from the thread
+ on which the plugin was initialized.
+*/
+
+bool NPN_Invoke(NPP npp, NPObject *npobj, NPIdentifier methodName,
+ const NPVariant *args, uint32_t argCount, NPVariant *result);
+bool NPN_InvokeDefault(NPP npp, NPObject *npobj, const NPVariant *args,
+ uint32_t argCount, NPVariant *result);
+bool NPN_Evaluate(NPP npp, NPObject *npobj, NPString *script,
+ NPVariant *result);
+bool NPN_GetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName,
+ NPVariant *result);
+bool NPN_SetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName,
+ const NPVariant *value);
+bool NPN_RemoveProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
+bool NPN_HasProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
+bool NPN_HasMethod(NPP npp, NPObject *npobj, NPIdentifier methodName);
+
+/*
+ NPN_SetException may be called to trigger a script exception upon
+ return from entry points into NPObjects. Typical usage:
+
+ NPN_SetException (npobj, message);
+*/
+void NPN_SetException(NPObject *npobj, const NPUTF8 *message);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/moz-sdk/nptypes.h b/src/moz-sdk/nptypes.h
new file mode 100644
index 0000000..a05d395
--- /dev/null
+++ b/src/moz-sdk/nptypes.h
@@ -0,0 +1,105 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * mozilla.org.
+ * Portions created by the Initial Developer are Copyright (C) 2004
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Johnny Stenback <jst@mozilla.org> (Original author)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ * Header file for ensuring that C99 types ([u]int32_t and bool) are
+ * available.
+ */
+
+#if defined(WIN32) || defined(OS2)
+ /*
+ * Win32 and OS/2 don't know C99, so define [u]int_32 here. The bool
+ * is predefined tho, both in C and C++.
+ */
+ typedef int int32_t;
+ typedef unsigned int uint32_t;
+#elif defined(_AIX) || defined(__sun) || defined(__osf__) || defined(IRIX) || defined(HPUX)
+ /*
+ * AIX and SunOS ship a inttypes.h header that defines [u]int32_t,
+ * but not bool for C.
+ */
+ #include <inttypes.h>
+
+ #ifndef __cplusplus
+ typedef int bool;
+ #endif
+#elif defined(bsdi) || defined(FREEBSD) || defined(OPENBSD)
+ /*
+ * BSD/OS, FreeBSD, and OpenBSD ship sys/types.h that define int32_t and
+ * u_int32_t.
+ */
+ #include <sys/types.h>
+
+ /*
+ * BSD/OS ships no header that defines uint32_t, nor bool (for C)
+ * OpenBSD ships no header that defines uint32_t and using its bool macro is
+ * unsafe.
+ */
+ #if defined(bsdi) || defined(OPENBSD)
+ typedef u_int32_t uint32_t;
+
+ #if !defined(__cplusplus)
+ typedef int bool;
+ #endif
+ #else
+ /*
+ * FreeBSD defines uint32_t and bool.
+ */
+ #include <inttypes.h>
+ #include <stdbool.h>
+ #endif
+#elif defined(BEOS)
+ #include <inttypes.h>
+#else
+ /*
+ * For those that ship a standard C99 stdint.h header file, include
+ * it. Can't do the same for stdbool.h tho, since some systems ship
+ * with a stdbool.h file that doesn't compile!
+ */
+ #include <stdint.h>
+
+ #if !defined(__GNUC__) || (__GNUC__ > 2 || __GNUC_MINOR__ > 95)
+ #include <stdbool.h>
+ #else
+ /*
+ * GCC 2.91 can't deal with a typedef for bool, but a #define
+ * works.
+ */
+ #define bool int
+ #endif
+#endif
diff --git a/src/moz-sdk/npupp.h b/src/moz-sdk/npupp.h
new file mode 100644
index 0000000..f7e8e5d
--- /dev/null
+++ b/src/moz-sdk/npupp.h
@@ -0,0 +1,1889 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is mozilla.org code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+
+/*
+ * npupp.h $Revision: 3.20 $
+ * function call mecahnics needed by platform specific glue code.
+ */
+
+
+#ifndef _NPUPP_H_
+#define _NPUPP_H_
+
+#if defined(__OS2__)
+#pragma pack(1)
+#endif
+
+#ifndef GENERATINGCFM
+#define GENERATINGCFM 0
+#endif
+
+#ifndef _NPAPI_H_
+#include "npapi.h"
+#endif
+
+#include "npruntime.h"
+
+#include "jri.h"
+
+/******************************************************************************************
+ plug-in function table macros
+ for each function in and out of the plugin API we define
+ typedef NPP_FooUPP
+ #define NewNPP_FooProc
+ #define CallNPP_FooProc
+ for mac, define the UPP magic for PPC/68K calling
+ *******************************************************************************************/
+
+
+/* NPP_Initialize */
+
+#define _NPUPP_USE_UPP_ (TARGET_RT_MAC_CFM && !TARGET_API_MAC_CARBON)
+
+#if _NPUPP_USE_UPP_
+typedef UniversalProcPtr NPP_InitializeUPP;
+
+enum {
+ uppNPP_InitializeProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(0))
+ | RESULT_SIZE(SIZE_CODE(0))
+};
+
+#define NewNPP_InitializeProc(FUNC) \
+ (NPP_InitializeUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_InitializeProcInfo, GetCurrentArchitecture())
+#define CallNPP_InitializeProc(FUNC) \
+ (void)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_InitializeProcInfo)
+
+#else
+
+typedef void (* NP_LOADDS NPP_InitializeUPP)(void);
+#define NewNPP_InitializeProc(FUNC) \
+ ((NPP_InitializeUPP) (FUNC))
+#define CallNPP_InitializeProc(FUNC) \
+ (*(FUNC))()
+
+#endif
+
+
+/* NPP_Shutdown */
+
+#if _NPUPP_USE_UPP_
+typedef UniversalProcPtr NPP_ShutdownUPP;
+
+enum {
+ uppNPP_ShutdownProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(0))
+ | RESULT_SIZE(SIZE_CODE(0))
+};
+
+#define NewNPP_ShutdownProc(FUNC) \
+ (NPP_ShutdownUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_ShutdownProcInfo, GetCurrentArchitecture())
+#define CallNPP_ShutdownProc(FUNC) \
+ (void)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_ShutdownProcInfo)
+
+#else
+
+typedef void (* NP_LOADDS NPP_ShutdownUPP)(void);
+#define NewNPP_ShutdownProc(FUNC) \
+ ((NPP_ShutdownUPP) (FUNC))
+#define CallNPP_ShutdownProc(FUNC) \
+ (*(FUNC))()
+
+#endif
+
+
+/* NPP_New */
+
+#if _NPUPP_USE_UPP_
+typedef UniversalProcPtr NPP_NewUPP;
+
+enum {
+ uppNPP_NewProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPMIMEType)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(uint16)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(int16)))
+ | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(char **)))
+ | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(char **)))
+ | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(NPSavedData *)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+
+#define NewNPP_NewProc(FUNC) \
+ (NPP_NewUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_NewProcInfo, GetCurrentArchitecture())
+#define CallNPP_NewProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_NewProcInfo, \
+ (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7))
+#else
+
+typedef NPError (* NP_LOADDS NPP_NewUPP)(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved);
+#define NewNPP_NewProc(FUNC) \
+ ((NPP_NewUPP) (FUNC))
+#define CallNPP_NewProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7))
+
+#endif
+
+
+/* NPP_Destroy */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPP_DestroyUPP;
+enum {
+ uppNPP_DestroyProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPSavedData **)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPP_DestroyProc(FUNC) \
+ (NPP_DestroyUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_DestroyProcInfo, GetCurrentArchitecture())
+#define CallNPP_DestroyProc(FUNC, ARG1, ARG2) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_DestroyProcInfo, (ARG1), (ARG2))
+#else
+
+typedef NPError (* NP_LOADDS NPP_DestroyUPP)(NPP instance, NPSavedData** save);
+#define NewNPP_DestroyProc(FUNC) \
+ ((NPP_DestroyUPP) (FUNC))
+#define CallNPP_DestroyProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+#endif
+
+
+/* NPP_SetWindow */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPP_SetWindowUPP;
+enum {
+ uppNPP_SetWindowProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPWindow *)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPP_SetWindowProc(FUNC) \
+ (NPP_SetWindowUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_SetWindowProcInfo, GetCurrentArchitecture())
+#define CallNPP_SetWindowProc(FUNC, ARG1, ARG2) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_SetWindowProcInfo, (ARG1), (ARG2))
+
+#else
+
+typedef NPError (* NP_LOADDS NPP_SetWindowUPP)(NPP instance, NPWindow* window);
+#define NewNPP_SetWindowProc(FUNC) \
+ ((NPP_SetWindowUPP) (FUNC))
+#define CallNPP_SetWindowProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+#endif
+
+
+/* NPP_NewStream */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPP_NewStreamUPP;
+enum {
+ uppNPP_NewStreamProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPMIMEType)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(NPStream *)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(NPBool)))
+ | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(uint16 *)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPP_NewStreamProc(FUNC) \
+ (NPP_NewStreamUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_NewStreamProcInfo, GetCurrentArchitecture())
+#define CallNPP_NewStreamProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_NewStreamProcInfo, (ARG1), (ARG2), (ARG3), (ARG4), (ARG5))
+#else
+
+typedef NPError (* NP_LOADDS NPP_NewStreamUPP)(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype);
+#define NewNPP_NewStreamProc(FUNC) \
+ ((NPP_NewStreamUPP) (FUNC))
+#define CallNPP_NewStreamProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5))
+#endif
+
+
+/* NPP_DestroyStream */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPP_DestroyStreamUPP;
+enum {
+ uppNPP_DestroyStreamProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPStream *)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(NPReason)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPP_DestroyStreamProc(FUNC) \
+ (NPP_DestroyStreamUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_DestroyStreamProcInfo, GetCurrentArchitecture())
+#define CallNPP_DestroyStreamProc(FUNC, NPParg, NPStreamPtr, NPReasonArg) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_DestroyStreamProcInfo, (NPParg), (NPStreamPtr), (NPReasonArg))
+
+#else
+
+typedef NPError (* NP_LOADDS NPP_DestroyStreamUPP)(NPP instance, NPStream* stream, NPReason reason);
+#define NewNPP_DestroyStreamProc(FUNC) \
+ ((NPP_DestroyStreamUPP) (FUNC))
+#define CallNPP_DestroyStreamProc(FUNC, NPParg, NPStreamPtr, NPReasonArg) \
+ (*(FUNC))((NPParg), (NPStreamPtr), (NPReasonArg))
+
+#endif
+
+
+/* NPP_WriteReady */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPP_WriteReadyUPP;
+enum {
+ uppNPP_WriteReadyProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPStream *)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(int32)))
+};
+#define NewNPP_WriteReadyProc(FUNC) \
+ (NPP_WriteReadyUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_WriteReadyProcInfo, GetCurrentArchitecture())
+#define CallNPP_WriteReadyProc(FUNC, NPParg, NPStreamPtr) \
+ (int32)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_WriteReadyProcInfo, (NPParg), (NPStreamPtr))
+
+#else
+
+typedef int32 (* NP_LOADDS NPP_WriteReadyUPP)(NPP instance, NPStream* stream);
+#define NewNPP_WriteReadyProc(FUNC) \
+ ((NPP_WriteReadyUPP) (FUNC))
+#define CallNPP_WriteReadyProc(FUNC, NPParg, NPStreamPtr) \
+ (*(FUNC))((NPParg), (NPStreamPtr))
+
+#endif
+
+
+/* NPP_Write */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPP_WriteUPP;
+enum {
+ uppNPP_WriteProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPStream *)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(int32)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(int32)))
+ | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(void*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(int32)))
+};
+#define NewNPP_WriteProc(FUNC) \
+ (NPP_WriteUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_WriteProcInfo, GetCurrentArchitecture())
+#define CallNPP_WriteProc(FUNC, NPParg, NPStreamPtr, offsetArg, lenArg, bufferPtr) \
+ (int32)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_WriteProcInfo, (NPParg), (NPStreamPtr), (offsetArg), (lenArg), (bufferPtr))
+
+#else
+
+typedef int32 (* NP_LOADDS NPP_WriteUPP)(NPP instance, NPStream* stream, int32 offset, int32 len, void* buffer);
+#define NewNPP_WriteProc(FUNC) \
+ ((NPP_WriteUPP) (FUNC))
+#define CallNPP_WriteProc(FUNC, NPParg, NPStreamPtr, offsetArg, lenArg, bufferPtr) \
+ (*(FUNC))((NPParg), (NPStreamPtr), (offsetArg), (lenArg), (bufferPtr))
+
+#endif
+
+
+/* NPP_StreamAsFile */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPP_StreamAsFileUPP;
+enum {
+ uppNPP_StreamAsFileProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPStream *)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(const char *)))
+ | RESULT_SIZE(SIZE_CODE(0))
+};
+#define NewNPP_StreamAsFileProc(FUNC) \
+ (NPP_StreamAsFileUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_StreamAsFileProcInfo, GetCurrentArchitecture())
+#define CallNPP_StreamAsFileProc(FUNC, ARG1, ARG2, ARG3) \
+ (void)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_StreamAsFileProcInfo, (ARG1), (ARG2), (ARG3))
+
+#else
+
+typedef void (* NP_LOADDS NPP_StreamAsFileUPP)(NPP instance, NPStream* stream, const char* fname);
+#define NewNPP_StreamAsFileProc(FUNC) \
+ ((NPP_StreamAsFileUPP) (FUNC))
+#define CallNPP_StreamAsFileProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+#endif
+
+
+/* NPP_Print */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPP_PrintUPP;
+enum {
+ uppNPP_PrintProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPPrint *)))
+ | RESULT_SIZE(SIZE_CODE(0))
+};
+#define NewNPP_PrintProc(FUNC) \
+ (NPP_PrintUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_PrintProcInfo, GetCurrentArchitecture())
+#define CallNPP_PrintProc(FUNC, NPParg, voidPtr) \
+ (void)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_PrintProcInfo, (NPParg), (voidPtr))
+
+#else
+
+typedef void (* NP_LOADDS NPP_PrintUPP)(NPP instance, NPPrint* platformPrint);
+#define NewNPP_PrintProc(FUNC) \
+ ((NPP_PrintUPP) (FUNC))
+#define CallNPP_PrintProc(FUNC, NPParg, NPPrintArg) \
+ (*(FUNC))((NPParg), (NPPrintArg))
+
+#endif
+
+
+/* NPP_HandleEvent */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPP_HandleEventUPP;
+enum {
+ uppNPP_HandleEventProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(void *)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(int16)))
+};
+#define NewNPP_HandleEventProc(FUNC) \
+ (NPP_HandleEventUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_HandleEventProcInfo, GetCurrentArchitecture())
+#define CallNPP_HandleEventProc(FUNC, NPParg, voidPtr) \
+ (int16)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_HandleEventProcInfo, (NPParg), (voidPtr))
+
+#else
+
+typedef int16 (* NP_LOADDS NPP_HandleEventUPP)(NPP instance, void* event);
+#define NewNPP_HandleEventProc(FUNC) \
+ ((NPP_HandleEventUPP) (FUNC))
+#define CallNPP_HandleEventProc(FUNC, NPParg, voidPtr) \
+ (*(FUNC))((NPParg), (voidPtr))
+
+#endif
+
+
+/* NPP_URLNotify */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPP_URLNotifyUPP;
+enum {
+ uppNPP_URLNotifyProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(const char*)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(NPReason)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(void*)))
+ | RESULT_SIZE(SIZE_CODE(SIZE_CODE(0)))
+};
+#define NewNPP_URLNotifyProc(FUNC) \
+ (NPP_URLNotifyUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_URLNotifyProcInfo, GetCurrentArchitecture())
+#define CallNPP_URLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (void)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_URLNotifyProcInfo, (ARG1), (ARG2), (ARG3), (ARG4))
+
+#else
+
+typedef void (* NP_LOADDS NPP_URLNotifyUPP)(NPP instance, const char* url, NPReason reason, void* notifyData);
+#define NewNPP_URLNotifyProc(FUNC) \
+ ((NPP_URLNotifyUPP) (FUNC))
+#define CallNPP_URLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
+
+#endif
+
+
+/* NPP_GetValue */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPP_GetValueUPP;
+enum {
+ uppNPP_GetValueProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPPVariable)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPP_GetValueProc(FUNC) \
+ (NPP_GetValueUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_GetValueProcInfo, GetCurrentArchitecture())
+#define CallNPP_GetValueProc(FUNC, ARG1, ARG2, ARG3) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_GetValueProcInfo, (ARG1), (ARG2), (ARG3))
+#else
+
+typedef NPError (* NP_LOADDS NPP_GetValueUPP)(NPP instance, NPPVariable variable, void *ret_alue);
+#define NewNPP_GetValueProc(FUNC) \
+ ((NPP_GetValueUPP) (FUNC))
+#define CallNPP_GetValueProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+#endif
+
+
+/* NPP_SetValue */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPP_SetValueUPP;
+enum {
+ uppNPP_SetValueProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPNVariable)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPP_SetValueProc(FUNC) \
+ (NPP_SetValueUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_SetValueProcInfo, GetCurrentArchitecture())
+#define CallNPP_SetValueProc(FUNC, ARG1, ARG2, ARG3) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPP_SetValueProcInfo, (ARG1), (ARG2), (ARG3))
+#else
+
+typedef NPError (* NP_LOADDS NPP_SetValueUPP)(NPP instance, NPNVariable variable, void *ret_alue);
+#define NewNPP_SetValueProc(FUNC) \
+ ((NPP_SetValueUPP) (FUNC))
+#define CallNPP_SetValueProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+#endif
+
+
+/*
+ * Netscape entry points
+ */
+
+
+/* NPN_GetValue */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_GetValueUPP;
+enum {
+ uppNPN_GetValueProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPNVariable)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPN_GetValueProc(FUNC) \
+ (NPN_GetValueUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_GetValueProcInfo, GetCurrentArchitecture())
+#define CallNPN_GetValueProc(FUNC, ARG1, ARG2, ARG3) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_GetValueProcInfo, (ARG1), (ARG2), (ARG3))
+#else
+
+typedef NPError (* NP_LOADDS NPN_GetValueUPP)(NPP instance, NPNVariable variable, void *ret_alue);
+#define NewNPN_GetValueProc(FUNC) \
+ ((NPN_GetValueUPP) (FUNC))
+#define CallNPN_GetValueProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+#endif
+
+
+/* NPN_SetValue */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_SetValueUPP;
+enum {
+ uppNPN_SetValueProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPPVariable)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(void *)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPN_SetValueProc(FUNC) \
+ (NPN_SetValueUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_SetValueProcInfo, GetCurrentArchitecture())
+#define CallNPN_SetValueProc(FUNC, ARG1, ARG2, ARG3) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_SetValueProcInfo, (ARG1), (ARG2), (ARG3))
+#else
+
+typedef NPError (* NP_LOADDS NPN_SetValueUPP)(NPP instance, NPPVariable variable, void *ret_alue);
+#define NewNPN_SetValueProc(FUNC) \
+ ((NPN_SetValueUPP) (FUNC))
+#define CallNPN_SetValueProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+#endif
+
+
+/* NPN_GetUrlNotify */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_GetURLNotifyUPP;
+enum {
+ uppNPN_GetURLNotifyProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(const char*)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(const char*)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(void*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPN_GetURLNotifyProc(FUNC) \
+ (NPN_GetURLNotifyUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_GetURLNotifyProcInfo, GetCurrentArchitecture())
+#define CallNPN_GetURLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_GetURLNotifyProcInfo, (ARG1), (ARG2), (ARG3), (ARG4))
+#else
+
+typedef NPError (* NP_LOADDS NPN_GetURLNotifyUPP)(NPP instance, const char* url, const char* window, void* notifyData);
+#define NewNPN_GetURLNotifyProc(FUNC) \
+ ((NPN_GetURLNotifyUPP) (FUNC))
+#define CallNPN_GetURLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
+#endif
+
+
+/* NPN_PostUrlNotify */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_PostURLNotifyUPP;
+enum {
+ uppNPN_PostURLNotifyProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(const char*)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(const char*)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(uint32)))
+ | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(const char*)))
+ | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(NPBool)))
+ | STACK_ROUTINE_PARAMETER(7, SIZE_CODE(sizeof(void*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPN_PostURLNotifyProc(FUNC) \
+ (NPN_PostURLNotifyUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_PostURLNotifyProcInfo, GetCurrentArchitecture())
+#define CallNPN_PostURLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_PostURLNotifyProcInfo, (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7))
+#else
+
+typedef NPError (* NP_LOADDS NPN_PostURLNotifyUPP)(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file, void* notifyData);
+#define NewNPN_PostURLNotifyProc(FUNC) \
+ ((NPN_PostURLNotifyUPP) (FUNC))
+#define CallNPN_PostURLNotifyProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7))
+#endif
+
+
+/* NPN_GetUrl */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_GetURLUPP;
+enum {
+ uppNPN_GetURLProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(const char*)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(const char*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPN_GetURLProc(FUNC) \
+ (NPN_GetURLUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_GetURLProcInfo, GetCurrentArchitecture())
+#define CallNPN_GetURLProc(FUNC, ARG1, ARG2, ARG3) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_GetURLProcInfo, (ARG1), (ARG2), (ARG3))
+#else
+
+typedef NPError (* NP_LOADDS NPN_GetURLUPP)(NPP instance, const char* url, const char* window);
+#define NewNPN_GetURLProc(FUNC) \
+ ((NPN_GetURLUPP) (FUNC))
+#define CallNPN_GetURLProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+#endif
+
+
+/* NPN_PostUrl */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_PostURLUPP;
+enum {
+ uppNPN_PostURLProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(const char*)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(const char*)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(uint32)))
+ | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(const char*)))
+ | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(NPBool)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPN_PostURLProc(FUNC) \
+ (NPN_PostURLUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_PostURLProcInfo, GetCurrentArchitecture())
+#define CallNPN_PostURLProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_PostURLProcInfo, (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
+#else
+
+typedef NPError (* NP_LOADDS NPN_PostURLUPP)(NPP instance, const char* url, const char* window, uint32 len, const char* buf, NPBool file);
+#define NewNPN_PostURLProc(FUNC) \
+ ((NPN_PostURLUPP) (FUNC))
+#define CallNPN_PostURLProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
+#endif
+
+
+/* NPN_RequestRead */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_RequestReadUPP;
+enum {
+ uppNPN_RequestReadProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPStream *)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPByteRange *)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPN_RequestReadProc(FUNC) \
+ (NPN_RequestReadUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_RequestReadProcInfo, GetCurrentArchitecture())
+#define CallNPN_RequestReadProc(FUNC, stream, range) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_RequestReadProcInfo, (stream), (range))
+
+#else
+
+typedef NPError (* NP_LOADDS NPN_RequestReadUPP)(NPStream* stream, NPByteRange* rangeList);
+#define NewNPN_RequestReadProc(FUNC) \
+ ((NPN_RequestReadUPP) (FUNC))
+#define CallNPN_RequestReadProc(FUNC, stream, range) \
+ (*(FUNC))((stream), (range))
+
+#endif
+
+
+/* NPN_NewStream */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_NewStreamUPP;
+enum {
+ uppNPN_NewStreamProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPMIMEType)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(const char *)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(NPStream **)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPN_NewStreamProc(FUNC) \
+ (NPN_NewStreamUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_NewStreamProcInfo, GetCurrentArchitecture())
+#define CallNPN_NewStreamProc(FUNC, npp, type, window, stream) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_NewStreamProcInfo, (npp), (type), (window), (stream))
+
+#else
+
+typedef NPError (* NP_LOADDS NPN_NewStreamUPP)(NPP instance, NPMIMEType type, const char* window, NPStream** stream);
+#define NewNPN_NewStreamProc(FUNC) \
+ ((NPN_NewStreamUPP) (FUNC))
+#define CallNPN_NewStreamProc(FUNC, npp, type, window, stream) \
+ (*(FUNC))((npp), (type), (window), (stream))
+
+#endif
+
+
+/* NPN_Write */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_WriteUPP;
+enum {
+ uppNPN_WriteProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPStream *)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(int32)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(void*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(int32)))
+};
+#define NewNPN_WriteProc(FUNC) \
+ (NPN_WriteUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_WriteProcInfo, GetCurrentArchitecture())
+#define CallNPN_WriteProc(FUNC, npp, stream, len, buffer) \
+ (int32)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_WriteProcInfo, (npp), (stream), (len), (buffer))
+
+#else
+
+typedef int32 (* NP_LOADDS NPN_WriteUPP)(NPP instance, NPStream* stream, int32 len, void* buffer);
+#define NewNPN_WriteProc(FUNC) \
+ ((NPN_WriteUPP) (FUNC))
+#define CallNPN_WriteProc(FUNC, npp, stream, len, buffer) \
+ (*(FUNC))((npp), (stream), (len), (buffer))
+
+#endif
+
+
+/* NPN_DestroyStream */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_DestroyStreamUPP;
+enum {
+ uppNPN_DestroyStreamProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP )))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPStream *)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(NPReason)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPN_DestroyStreamProc(FUNC) \
+ (NPN_DestroyStreamUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_DestroyStreamProcInfo, GetCurrentArchitecture())
+#define CallNPN_DestroyStreamProc(FUNC, npp, stream, reason) \
+ (NPError)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_DestroyStreamProcInfo, (npp), (stream), (reason))
+
+#else
+
+typedef NPError (* NP_LOADDS NPN_DestroyStreamUPP)(NPP instance, NPStream* stream, NPReason reason);
+#define NewNPN_DestroyStreamProc(FUNC) \
+ ((NPN_DestroyStreamUPP) (FUNC))
+#define CallNPN_DestroyStreamProc(FUNC, npp, stream, reason) \
+ (*(FUNC))((npp), (stream), (reason))
+
+#endif
+
+
+/* NPN_Status */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_StatusUPP;
+enum {
+ uppNPN_StatusProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(char *)))
+};
+
+#define NewNPN_StatusProc(FUNC) \
+ (NPN_StatusUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_StatusProcInfo, GetCurrentArchitecture())
+#define CallNPN_StatusProc(FUNC, npp, msg) \
+ (void)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_StatusProcInfo, (npp), (msg))
+
+#else
+
+typedef void (* NP_LOADDS NPN_StatusUPP)(NPP instance, const char* message);
+#define NewNPN_StatusProc(FUNC) \
+ ((NPN_StatusUPP) (FUNC))
+#define CallNPN_StatusProc(FUNC, npp, msg) \
+ (*(FUNC))((npp), (msg))
+
+#endif
+
+
+/* NPN_UserAgent */
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_UserAgentUPP;
+enum {
+ uppNPN_UserAgentProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(const char *)))
+};
+
+#define NewNPN_UserAgentProc(FUNC) \
+ (NPN_UserAgentUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_UserAgentProcInfo, GetCurrentArchitecture())
+#define CallNPN_UserAgentProc(FUNC, ARG1) \
+ (const char*)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_UserAgentProcInfo, (ARG1))
+
+#else
+
+typedef const char* (* NP_LOADDS NPN_UserAgentUPP)(NPP instance);
+#define NewNPN_UserAgentProc(FUNC) \
+ ((NPN_UserAgentUPP) (FUNC))
+#define CallNPN_UserAgentProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+
+/* NPN_MemAlloc */
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_MemAllocUPP;
+enum {
+ uppNPN_MemAllocProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(uint32)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(void *)))
+};
+
+#define NewNPN_MemAllocProc(FUNC) \
+ (NPN_MemAllocUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_MemAllocProcInfo, GetCurrentArchitecture())
+#define CallNPN_MemAllocProc(FUNC, ARG1) \
+ (void*)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_MemAllocProcInfo, (ARG1))
+
+#else
+
+typedef void* (* NP_LOADDS NPN_MemAllocUPP)(uint32 size);
+#define NewNPN_MemAllocProc(FUNC) \
+ ((NPN_MemAllocUPP) (FUNC))
+#define CallNPN_MemAllocProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+
+/* NPN__MemFree */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_MemFreeUPP;
+enum {
+ uppNPN_MemFreeProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(void *)))
+};
+
+#define NewNPN_MemFreeProc(FUNC) \
+ (NPN_MemFreeUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_MemFreeProcInfo, GetCurrentArchitecture())
+#define CallNPN_MemFreeProc(FUNC, ARG1) \
+ (void)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_MemFreeProcInfo, (ARG1))
+
+#else
+
+typedef void (* NP_LOADDS NPN_MemFreeUPP)(void* ptr);
+#define NewNPN_MemFreeProc(FUNC) \
+ ((NPN_MemFreeUPP) (FUNC))
+#define CallNPN_MemFreeProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+
+/* NPN_MemFlush */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_MemFlushUPP;
+enum {
+ uppNPN_MemFlushProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(uint32)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(uint32)))
+};
+
+#define NewNPN_MemFlushProc(FUNC) \
+ (NPN_MemFlushUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_MemFlushProcInfo, GetCurrentArchitecture())
+#define CallNPN_MemFlushProc(FUNC, ARG1) \
+ (uint32)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_MemFlushProcInfo, (ARG1))
+
+#else
+
+typedef uint32 (* NP_LOADDS NPN_MemFlushUPP)(uint32 size);
+#define NewNPN_MemFlushProc(FUNC) \
+ ((NPN_MemFlushUPP) (FUNC))
+#define CallNPN_MemFlushProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+
+
+/* NPN_ReloadPlugins */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_ReloadPluginsUPP;
+enum {
+ uppNPN_ReloadPluginsProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPBool)))
+ | RESULT_SIZE(SIZE_CODE(0))
+};
+
+#define NewNPN_ReloadPluginsProc(FUNC) \
+ (NPN_ReloadPluginsUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_ReloadPluginsProcInfo, GetCurrentArchitecture())
+#define CallNPN_ReloadPluginsProc(FUNC, ARG1) \
+ (void)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_ReloadPluginsProcInfo, (ARG1))
+
+#else
+
+typedef void (* NP_LOADDS NPN_ReloadPluginsUPP)(NPBool reloadPages);
+#define NewNPN_ReloadPluginsProc(FUNC) \
+ ((NPN_ReloadPluginsUPP) (FUNC))
+#define CallNPN_ReloadPluginsProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+/* NPN_GetJavaEnv */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_GetJavaEnvUPP;
+enum {
+ uppNPN_GetJavaEnvProcInfo = kThinkCStackBased
+ | RESULT_SIZE(SIZE_CODE(sizeof(JRIEnv*)))
+};
+
+#define NewNPN_GetJavaEnvProc(FUNC) \
+ (NPN_GetJavaEnvUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_GetJavaEnvProcInfo, GetCurrentArchitecture())
+#define CallNPN_GetJavaEnvProc(FUNC) \
+ (JRIEnv*)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_GetJavaEnvProcInfo)
+
+#else
+typedef JRIEnv* (* NP_LOADDS NPN_GetJavaEnvUPP)(void);
+#define NewNPN_GetJavaEnvProc(FUNC) \
+ ((NPN_GetJavaEnvUPP) (FUNC))
+#define CallNPN_GetJavaEnvProc(FUNC) \
+ (*(FUNC))()
+
+#endif
+
+
+/* NPN_GetJavaPeer */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_GetJavaPeerUPP;
+enum {
+ uppNPN_GetJavaPeerProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(jref)))
+};
+
+#define NewNPN_GetJavaPeerProc(FUNC) \
+ (NPN_GetJavaPeerUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_GetJavaPeerProcInfo, GetCurrentArchitecture())
+#define CallNPN_GetJavaPeerProc(FUNC, ARG1) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_GetJavaPeerProcInfo, (ARG1))
+
+#else
+
+typedef jref (* NP_LOADDS NPN_GetJavaPeerUPP)(NPP instance);
+#define NewNPN_GetJavaPeerProc(FUNC) \
+ ((NPN_GetJavaPeerUPP) (FUNC))
+#define CallNPN_GetJavaPeerProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+/* NPN_InvalidateRect */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_InvalidateRectUPP;
+enum {
+ uppNPN_InvalidateRectProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPRect *)))
+ | RESULT_SIZE(SIZE_CODE(0))
+};
+
+#define NewNPN_InvalidateRectProc(FUNC) \
+ (NPN_InvalidateRectUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_InvalidateRectProcInfo, GetCurrentArchitecture())
+#define CallNPN_InvalidateRectProc(FUNC, ARG1, ARG2) \
+ (void)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_InvalidateRectProcInfo, (ARG1), (ARG2))
+
+#else
+
+typedef void (* NP_LOADDS NPN_InvalidateRectUPP)(NPP instance, NPRect *rect);
+#define NewNPN_InvalidateRectProc(FUNC) \
+ ((NPN_InvalidateRectUPP) (FUNC))
+#define CallNPN_InvalidateRectProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+#endif
+
+
+/* NPN_InvalidateRegion */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_InvalidateRegionUPP;
+enum {
+ uppNPN_InvalidateRegionProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPRegion)))
+ | RESULT_SIZE(SIZE_CODE(0))
+};
+
+#define NewNPN_InvalidateRegionProc(FUNC) \
+ (NPN_InvalidateRegionUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_InvalidateRegionProcInfo, GetCurrentArchitecture())
+#define CallNPN_InvalidateRegionProc(FUNC, ARG1, ARG2) \
+ (void)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_InvalidateRegionProcInfo, (ARG1), (ARG2))
+
+#else
+
+typedef void (* NP_LOADDS NPN_InvalidateRegionUPP)(NPP instance, NPRegion region);
+#define NewNPN_InvalidateRegionProc(FUNC) \
+ ((NPN_InvalidateRegionUPP) (FUNC))
+#define CallNPN_InvalidateRegionProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+#endif
+
+/* NPN_ForceRedraw */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_ForceRedrawUPP;
+enum {
+ uppNPN_ForceRedrawProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(0)))
+};
+
+#define NewNPN_ForceRedrawProc(FUNC) \
+ (NPN_ForceRedrawUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_ForceRedrawProcInfo, GetCurrentArchitecture())
+#define CallNPN_ForceRedrawProc(FUNC, ARG1) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_ForceRedrawProcInfo, (ARG1))
+
+#else
+
+typedef void (* NP_LOADDS NPN_ForceRedrawUPP)(NPP instance);
+#define NewNPN_ForceRedrawProc(FUNC) \
+ ((NPN_ForceRedrawUPP) (FUNC))
+#define CallNPN_ForceRedrawProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+/* NPN_GetStringIdentifier */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_GetStringIdentifierUPP;
+enum {
+ uppNPN_GetStringIdentifierProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(const NPUTF8*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPIdentifier)))
+};
+
+#define NewNPN_GetStringIdentifierProc(FUNC) \
+ (NPN_GetStringIdentifierUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_GetStringIdentifierProcInfo, GetCurrentArchitecture())
+#define CallNPN_GetStringIdentifierProc(FUNC, ARG1) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_GetStringIdentifierProcInfo, (ARG1))
+
+#else
+
+typedef NPIdentifier (* NP_LOADDS NPN_GetStringIdentifierUPP)(const NPUTF8* name);
+#define NewNPN_GetStringIdentifierProc(FUNC) \
+ ((NPN_GetStringIdentifierUPP) (FUNC))
+#define CallNPN_GetStringIdentifierProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+/* NPN_GetStringIdentifiers */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_GetStringIdentifiersUPP;
+enum {
+ uppNPN_GetStringIdentifiersProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(const NPUTF8**)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(int32_t)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(NPIdentifier*)))
+ | RESULT_SIZE(SIZE_CODE(0))
+};
+
+#define NewNPN_GetStringIdentifiersProc(FUNC) \
+ (NPN_GetStringIdentifiersUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_GetStringIdentifiersProcInfo, GetCurrentArchitecture())
+#define CallNPN_GetStringIdentifiersProc(FUNC, ARG1, ARG2, ARG3) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_GetStringIdentifiersProcInfo, (ARG1), (ARG2), (ARG3))
+
+#else
+
+typedef void (* NP_LOADDS NPN_GetStringIdentifiersUPP)(const NPUTF8** names,
+ int32_t nameCount,
+ NPIdentifier* identifiers);
+#define NewNPN_GetStringIdentifiersProc(FUNC) \
+ ((NPN_GetStringIdentifiersUPP) (FUNC))
+#define CallNPN_GetStringIdentifiersProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+#endif
+
+/* NPN_GetIntIdentifier */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_GetIntIdentifierUPP;
+enum {
+ uppNPN_GetIntIdentifierProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(int32_t)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPIdentifier)))
+};
+
+#define NewNPN_GetIntIdentifierProc(FUNC) \
+ (NPN_GetIntIdentifierUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_GetIntIdentifierProcInfo, GetCurrentArchitecture())
+#define CallNPN_GetIntIdentifierProc(FUNC, ARG1) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_GetIntIdentifierProcInfo, (ARG1))
+
+#else
+
+typedef NPIdentifier (* NP_LOADDS NPN_GetIntIdentifierUPP)(int32_t intid);
+#define NewNPN_GetIntIdentifierProc(FUNC) \
+ ((NPN_GetIntIdentifierUPP) (FUNC))
+#define CallNPN_GetIntIdentifierProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+/* NPN_IdentifierIsString */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_IdentifierIsStringUPP;
+enum {
+ uppNPN_IdentifierIsStringProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPIdentifier identifier)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(bool)))
+};
+
+#define NewNPN_IdentifierIsStringProc(FUNC) \
+ (NPN_IdentifierIsStringUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_IdentifierIsStringProcInfo, GetCurrentArchitecture())
+#define CallNPN_IdentifierIsStringProc(FUNC, ARG1) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_IdentifierIsStringProcInfo, (ARG1))
+
+#else
+
+typedef bool (* NP_LOADDS NPN_IdentifierIsStringUPP)(NPIdentifier identifier);
+#define NewNPN_IdentifierIsStringProc(FUNC) \
+ ((NPN_IdentifierIsStringUPP) (FUNC))
+#define CallNPN_IdentifierIsStringProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+/* NPN_UTF8FromIdentifier */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_UTF8FromIdentifierUPP;
+enum {
+ uppNPN_UTF8FromIdentifierProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPIdentifier)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPUTF8*)))
+};
+
+#define NewNPN_UTF8FromIdentifierProc(FUNC) \
+ (NPN_UTF8FromIdentifierUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_UTF8FromIdentifierProcInfo, GetCurrentArchitecture())
+#define CallNPN_UTF8FromIdentifierProc(FUNC, ARG1) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_UTF8FromIdentifierProcInfo, (ARG1))
+
+#else
+
+typedef NPUTF8* (* NP_LOADDS NPN_UTF8FromIdentifierUPP)(NPIdentifier identifier);
+#define NewNPN_UTF8FromIdentifierProc(FUNC) \
+ ((NPN_UTF8FromIdentifierUPP) (FUNC))
+#define CallNPN_UTF8FromIdentifierProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+/* NPN_IntFromIdentifier */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_IntFromIdentifierUPP;
+enum {
+ uppNPN_IntFromIdentifierProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPIdentifier)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(int32_t)))
+};
+
+#define NewNPN_IntFromIdentifierProc(FUNC) \
+ (NPN_IntFromIdentifierUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_IntFromIdentifierProcInfo, GetCurrentArchitecture())
+#define CallNPN_IntFromIdentifierProc(FUNC, ARG1) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_IntFromIdentifierProcInfo, (ARG1))
+
+#else
+
+typedef int32_t (* NP_LOADDS NPN_IntFromIdentifierUPP)(NPIdentifier identifier);
+#define NewNPN_IntFromIdentifierProc(FUNC) \
+ ((NPN_IntFromIdentifierUPP) (FUNC))
+#define CallNPN_IntFromIdentifierProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+/* NPN_CreateObject */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_CreateObjectUPP;
+enum {
+ uppNPN_CreateObjectProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPClass*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPObject*)))
+};
+
+#define NewNPN_CreateObjectProc(FUNC) \
+ (NPN_CreateObjectUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_CreateObjectProcInfo, GetCurrentArchitecture())
+#define CallNPN_CreateObjectProc(FUNC, ARG1, ARG2) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_CreateObjectProcInfo, (ARG1), (ARG2))
+
+#else
+
+typedef NPObject* (* NP_LOADDS NPN_CreateObjectUPP)(NPP npp, NPClass *aClass);
+#define NewNPN_CreateObjectProc(FUNC) \
+ ((NPN_CreateObjectUPP) (FUNC))
+#define CallNPN_CreateObjectProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+#endif
+
+/* NPN_RetainObject */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_RetainObjectUPP;
+enum {
+ uppNPN_RetainObjectProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPObject*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPObject*)))
+};
+
+#define NewNPN_RetainObjectProc(FUNC) \
+ (NPN_RetainObjectUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_RetainObjectProcInfo, GetCurrentArchitecture())
+#define CallNPN_RetainObjectProc(FUNC, ARG1) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_RetainObjectProcInfo, (ARG1))
+
+#else
+
+typedef NPObject* (* NP_LOADDS NPN_RetainObjectUPP)(NPObject *obj);
+#define NewNPN_RetainObjectProc(FUNC) \
+ ((NPN_RetainObjectUPP) (FUNC))
+#define CallNPN_RetainObjectProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+/* NPN_ReleaseObject */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_ReleaseObjectUPP;
+enum {
+ uppNPN_ReleaseObjectProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPObject*)))
+ | RESULT_SIZE(SIZE_CODE(0))
+};
+
+#define NewNPN_ReleaseObjectProc(FUNC) \
+ (NPN_ReleaseObjectUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_ReleaseObjectProcInfo, GetCurrentArchitecture())
+#define CallNPN_ReleaseObjectProc(FUNC, ARG1) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_ReleaseObjectProcInfo, (ARG1))
+
+#else
+
+typedef void (* NP_LOADDS NPN_ReleaseObjectUPP)(NPObject *obj);
+#define NewNPN_ReleaseObjectProc(FUNC) \
+ ((NPN_ReleaseObjectUPP) (FUNC))
+#define CallNPN_ReleaseObjectProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+/* NPN_Invoke */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_InvokeUPP;
+enum {
+ uppNPN_InvokeProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPObject*)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(NPIdentifier)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(const NPVariant*)))
+ | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(uint32_t)))
+ | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(NPVariant*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(bool)))
+};
+
+#define NewNPN_InvokeProc(FUNC) \
+ (NPN_InvokeUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_InvokeProcInfo, GetCurrentArchitecture())
+#define CallNPN_InvokeProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_InvokeProcInfo, (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
+
+#else
+
+typedef bool (* NP_LOADDS NPN_InvokeUPP)(NPP npp, NPObject* obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result);
+#define NewNPN_InvokeProc(FUNC) \
+ ((NPN_InvokeUPP) (FUNC))
+#define CallNPN_InvokeProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
+
+#endif
+
+/* NPN_InvokeDefault */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_InvokeDefaultUPP;
+enum {
+ uppNPN_InvokeDefaultProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPObject*)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(const NPVariant*)))
+ | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(uint32_t)))
+ | STACK_ROUTINE_PARAMETER(6, SIZE_CODE(sizeof(NPVariant*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(bool)))
+};
+
+#define NewNPN_InvokeDefaultProc(FUNC) \
+ (NPN_InvokeDefaultUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_InvokeDefaultProcInfo, GetCurrentArchitecture())
+#define CallNPN_InvokeDefaultProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_InvokeDefaultProcInfo, (ARG1), (ARG2), (ARG3), (ARG4), (ARG5))
+
+#else
+
+typedef bool (* NP_LOADDS NPN_InvokeDefaultUPP)(NPP npp, NPObject* obj, const NPVariant *args, uint32_t argCount, NPVariant *result);
+#define NewNPN_InvokeDefaultProc(FUNC) \
+ ((NPN_InvokeDefaultUPP) (FUNC))
+#define CallNPN_InvokeDefaultProc(FUNC, ARG1, ARG2, ARG3, ARG4, ARG5) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4), (ARG5))
+
+#endif
+
+/* NPN_Evaluate */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_EvaluateUPP;
+enum {
+ uppNPN_EvaluateProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPObject*)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(NPString*)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(NPVariant*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(bool)))
+};
+
+#define NewNPN_EvaluateProc(FUNC) \
+ (NPN_EvaluateUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_EvaluateProcInfo, GetCurrentArchitecture())
+#define CallNPN_EvaluateProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_EvaluateProcInfo, (ARG1), (ARG2), (ARG3), (ARG4))
+
+#else
+
+typedef bool (* NP_LOADDS NPN_EvaluateUPP)(NPP npp, NPObject *obj, NPString *script, NPVariant *result);
+#define NewNPN_EvaluateProc(FUNC) \
+ ((NPN_EvaluateUPP) (FUNC))
+#define CallNPN_EvaluateProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
+
+#endif
+
+/* NPN_GetProperty */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_GetPropertyUPP;
+enum {
+ uppNPN_GetPropertyProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPObject*)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(NPIdentifier)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(NPVariant*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(bool)))
+};
+
+#define NewNPN_GetPropertyProc(FUNC) \
+ (NPN_GetPropertyUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_GetPropertyProcInfo, GetCurrentArchitecture())
+#define CallNPN_GetPropertyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_GetPropertyProcInfo, (ARG1), (ARG2), (ARG3), (ARG4))
+
+#else
+
+typedef bool (* NP_LOADDS NPN_GetPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName, NPVariant *result);
+#define NewNPN_GetPropertyProc(FUNC) \
+ ((NPN_GetPropertyUPP) (FUNC))
+#define CallNPN_GetPropertyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
+
+#endif
+
+/* NPN_SetProperty */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_SetPropertyUPP;
+enum {
+ uppNPN_SetPropertyProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPObject*)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(NPIdentifier)))
+ | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(const NPVariant*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(bool)))
+};
+
+#define NewNPN_SetPropertyProc(FUNC) \
+ (NPN_SetPropertyUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_SetPropertyProcInfo, GetCurrentArchitecture())
+#define CallNPN_SetPropertyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_SetPropertyProcInfo, (ARG1), (ARG2), (ARG3), (ARG4))
+
+#else
+
+typedef bool (* NP_LOADDS NPN_SetPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName, const NPVariant *value);
+#define NewNPN_SetPropertyProc(FUNC) \
+ ((NPN_SetPropertyUPP) (FUNC))
+#define CallNPN_SetPropertyProc(FUNC, ARG1, ARG2, ARG3, ARG4) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3), (ARG4))
+
+#endif
+
+/* NPN_RemoveProperty */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_RemovePropertyUPP;
+enum {
+ uppNPN_RemovePropertyProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPObject*)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(NPIdentifier)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(bool)))
+};
+
+#define NewNPN_RemovePropertyProc(FUNC) \
+ (NPN_RemovePropertyUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_RemovePropertyProcInfo, GetCurrentArchitecture())
+#define CallNPN_RemovePropertyProc(FUNC, ARG1, ARG2, ARG3) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_RemovePropertyProcInfo, (ARG1), (ARG2), (ARG3))
+
+#else
+
+typedef bool (* NP_LOADDS NPN_RemovePropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName);
+#define NewNPN_RemovePropertyProc(FUNC) \
+ ((NPN_RemovePropertyUPP) (FUNC))
+#define CallNPN_RemovePropertyProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+#endif
+
+/* NPN_HasProperty */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_HasPropertyUPP;
+enum {
+ uppNPN_HasPropertyProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPObject*)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(NPIdentifier)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(bool)))
+};
+
+#define NewNPN_HasPropertyProc(FUNC) \
+ (NPN_HasPropertyUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_HasPropertyProcInfo, GetCurrentArchitecture())
+#define CallNPN_HasPropertyProc(FUNC, ARG1, ARG2, ARG3) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_HasPropertyProcInfo, (ARG1), (ARG2), (ARG3))
+
+#else
+
+typedef bool (* NP_LOADDS NPN_HasPropertyUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName);
+#define NewNPN_HasPropertyProc(FUNC) \
+ ((NPN_HasPropertyUPP) (FUNC))
+#define CallNPN_HasPropertyProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+#endif
+
+/* NPN_HasMethod */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_HasMethodUPP;
+enum {
+ uppNPN_HasMethodProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPObject*)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(NPIdentifier)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(bool)))
+};
+
+#define NewNPN_HasMethodProc(FUNC) \
+ (NPN_HasMethodUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_HasMethodProcInfo, GetCurrentArchitecture())
+#define CallNPN_HasMethodProc(FUNC, ARG1, ARG2, ARG3) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_HasMethodProcInfo, (ARG1), (ARG2), (ARG3))
+
+#else
+
+typedef bool (* NP_LOADDS NPN_HasMethodUPP)(NPP npp, NPObject *obj, NPIdentifier propertyName);
+#define NewNPN_HasMethodProc(FUNC) \
+ ((NPN_HasMethodUPP) (FUNC))
+#define CallNPN_HasMethodProc(FUNC, ARG1, ARG2, ARG3) \
+ (*(FUNC))((ARG1), (ARG2), (ARG3))
+
+#endif
+
+/* NPN_ReleaseVariantValue */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_ReleaseVariantValue;
+enum {
+ uppNPN_ReleaseVariantValueProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPVariant*)))
+ | RESULT_SIZE(SIZE_CODE(0))
+};
+
+#define NewNPN_ReleaseVariantValueProc(FUNC) \
+ (NPN_ReleaseVariantValueUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_ReleaseVariantValueProcInfo, GetCurrentArchitecture())
+#define CallNPN_ReleaseVariantValueProc(FUNC, ARG1) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_ReleaseVariantValueProcInfo, (ARG1))
+
+#else
+
+typedef void (* NP_LOADDS NPN_ReleaseVariantValueUPP)(NPVariant *variant);
+#define NewNPN_ReleaseVariantValueProc(FUNC) \
+ ((NPN_ReleaseVariantValueUPP) (FUNC))
+#define CallNPN_ReleaseVariantValueProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+/* NPN_SetException */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_SetExceptionUPP;
+enum {
+ uppNPN_SetExceptionProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPObject*)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(const NPUTF8*)))
+ | RESULT_SIZE(SIZE_CODE(0))
+};
+
+#define NewNPN_SetExceptionProc(FUNC) \
+ (NPN_SetExceptionUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_SetExceptionProcInfo, GetCurrentArchitecture())
+#define CallNPN_SetExceptionProc(FUNC, ARG1, ARG2) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_SetExceptionProcInfo, (ARG1), (ARG2))
+
+#else
+
+typedef void (* NP_LOADDS NPN_SetExceptionUPP)(NPObject *obj, const NPUTF8 *message);
+#define NewNPN_SetExceptionProc(FUNC) \
+ ((NPN_SetExceptionUPP) (FUNC))
+#define CallNPN_SetExceptionProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+#endif
+
+/* NPN_PushPopupsEnabledStateUPP */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_PushPopupsEnabledStateUPP;
+enum {
+ uppNPN_PushPopupsEnabledStateProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPBool)))
+ | RESULT_SIZE(SIZE_CODE(0))
+};
+
+#define NewNPN_PushPopupsEnabledStateProc(FUNC) \
+ (NPN_PushPopupsEnabledStateUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_PushPopupsEnabledStateProcInfo, GetCurrentArchitecture())
+#define CallNPN_PushPopupsEnabledStateProc(FUNC, ARG1, ARG2) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_PushPopupsEnabledStateProcInfo, (ARG1), (ARG2))
+
+#else
+
+typedef bool (* NP_LOADDS NPN_PushPopupsEnabledStateUPP)(NPP npp, NPBool enabled);
+#define NewNPN_PushPopupsEnabledStateProc(FUNC) \
+ ((NPN_PushPopupsEnabledStateUPP) (FUNC))
+#define CallNPN_PushPopupsEnabledStateProc(FUNC, ARG1, ARG2) \
+ (*(FUNC))((ARG1), (ARG2))
+
+#endif
+
+/* NPN_PopPopupsEnabledState */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPN_PopPopupsEnabledStateUPP;
+enum {
+ uppNPN_PopPopupsEnabledStateProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPP)))
+ | RESULT_SIZE(SIZE_CODE(0))
+};
+
+#define NewNPN_PopPopupsEnabledStateProc(FUNC) \
+ (NPN_PopPopupsEnabledStateUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPN_PopPopupsEnabledStateProcInfo, GetCurrentArchitecture())
+#define CallNPN_PopPopupsEnabledStateProc(FUNC, ARG1) \
+ (jref)CallUniversalProc((UniversalProcPtr)(FUNC), uppNPN_PopPopupsEnabledStateProcInfo, (ARG1))
+
+#else
+
+typedef bool (* NP_LOADDS NPN_PopPopupsEnabledStateUPP)(NPP npp);
+#define NewNPN_PopPopupsEnabledStateProc(FUNC) \
+ ((NPN_PopPopupsEnabledStateUPP) (FUNC))
+#define CallNPN_PopPopupsEnabledStateProc(FUNC, ARG1) \
+ (*(FUNC))((ARG1))
+
+#endif
+
+
+
+/******************************************************************************************
+ * The actual plugin function table definitions
+ *******************************************************************************************/
+
+#ifdef XP_MAC
+#if PRAGMA_STRUCT_ALIGN
+#pragma options align=mac68k
+#endif
+#endif
+
+typedef struct _NPPluginFuncs {
+ uint16 size;
+ uint16 version;
+ NPP_NewUPP newp;
+ NPP_DestroyUPP destroy;
+ NPP_SetWindowUPP setwindow;
+ NPP_NewStreamUPP newstream;
+ NPP_DestroyStreamUPP destroystream;
+ NPP_StreamAsFileUPP asfile;
+ NPP_WriteReadyUPP writeready;
+ NPP_WriteUPP write;
+ NPP_PrintUPP print;
+ NPP_HandleEventUPP event;
+ NPP_URLNotifyUPP urlnotify;
+ JRIGlobalRef javaClass;
+ NPP_GetValueUPP getvalue;
+ NPP_SetValueUPP setvalue;
+} NPPluginFuncs;
+
+typedef struct _NPNetscapeFuncs {
+ uint16 size;
+ uint16 version;
+ NPN_GetURLUPP geturl;
+ NPN_PostURLUPP posturl;
+ NPN_RequestReadUPP requestread;
+ NPN_NewStreamUPP newstream;
+ NPN_WriteUPP write;
+ NPN_DestroyStreamUPP destroystream;
+ NPN_StatusUPP status;
+ NPN_UserAgentUPP uagent;
+ NPN_MemAllocUPP memalloc;
+ NPN_MemFreeUPP memfree;
+ NPN_MemFlushUPP memflush;
+ NPN_ReloadPluginsUPP reloadplugins;
+ NPN_GetJavaEnvUPP getJavaEnv;
+ NPN_GetJavaPeerUPP getJavaPeer;
+ NPN_GetURLNotifyUPP geturlnotify;
+ NPN_PostURLNotifyUPP posturlnotify;
+ NPN_GetValueUPP getvalue;
+ NPN_SetValueUPP setvalue;
+ NPN_InvalidateRectUPP invalidaterect;
+ NPN_InvalidateRegionUPP invalidateregion;
+ NPN_ForceRedrawUPP forceredraw;
+ NPN_GetStringIdentifierUPP getstringidentifier;
+ NPN_GetStringIdentifiersUPP getstringidentifiers;
+ NPN_GetIntIdentifierUPP getintidentifier;
+ NPN_IdentifierIsStringUPP identifierisstring;
+ NPN_UTF8FromIdentifierUPP utf8fromidentifier;
+ NPN_IntFromIdentifierUPP intfromidentifier;
+ NPN_CreateObjectUPP createobject;
+ NPN_RetainObjectUPP retainobject;
+ NPN_ReleaseObjectUPP releaseobject;
+ NPN_InvokeUPP invoke;
+ NPN_InvokeDefaultUPP invokeDefault;
+ NPN_EvaluateUPP evaluate;
+ NPN_GetPropertyUPP getproperty;
+ NPN_SetPropertyUPP setproperty;
+ NPN_RemovePropertyUPP removeproperty;
+ NPN_HasPropertyUPP hasproperty;
+ NPN_HasMethodUPP hasmethod;
+ NPN_ReleaseVariantValueUPP releasevariantvalue;
+ NPN_SetExceptionUPP setexception;
+ NPN_PushPopupsEnabledStateUPP pushpopupsenabledstate;
+ NPN_PopPopupsEnabledStateUPP poppopupsenabledstate;
+} NPNetscapeFuncs;
+
+#ifdef XP_MAC
+#if PRAGMA_STRUCT_ALIGN
+#pragma options align=reset
+#endif
+#endif
+
+
+#if defined(XP_MAC) || defined(XP_MACOSX)
+/******************************************************************************************
+ * Mac platform-specific plugin glue stuff
+ *******************************************************************************************/
+
+/*
+ * Main entry point of the plugin.
+ * This routine will be called when the plugin is loaded. The function
+ * tables are passed in and the plugin fills in the NPPluginFuncs table
+ * and NPPShutdownUPP for Netscape's use.
+ */
+
+#if _NPUPP_USE_UPP_
+
+typedef UniversalProcPtr NPP_MainEntryUPP;
+enum {
+ uppNPP_MainEntryProcInfo = kThinkCStackBased
+ | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(NPNetscapeFuncs*)))
+ | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(NPPluginFuncs*)))
+ | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(NPP_ShutdownUPP*)))
+ | RESULT_SIZE(SIZE_CODE(sizeof(NPError)))
+};
+#define NewNPP_MainEntryProc(FUNC) \
+ (NPP_MainEntryUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNPP_MainEntryProcInfo, GetCurrentArchitecture())
+#define CallNPP_MainEntryProc(FUNC, netscapeFunc, pluginFunc, shutdownUPP) \
+ CallUniversalProc((UniversalProcPtr)(FUNC), (ProcInfoType)uppNPP_MainEntryProcInfo, (netscapeFunc), (pluginFunc), (shutdownUPP))
+
+#else
+
+typedef NPError (* NP_LOADDS NPP_MainEntryUPP)(NPNetscapeFuncs*, NPPluginFuncs*, NPP_ShutdownUPP*);
+#define NewNPP_MainEntryProc(FUNC) \
+ ((NPP_MainEntryUPP) (FUNC))
+#define CallNPP_MainEntryProc(FUNC, netscapeFunc, pluginFunc, shutdownUPP) \
+ (*(FUNC))((netscapeFunc), (pluginFunc), (shutdownUPP))
+
+#endif
+
+
+/*
+ * Mac version(s) of NP_GetMIMEDescription(const char *)
+ * These can be called to retreive MIME information from the plugin dynamically
+ *
+ * Note: For compatibility with Quicktime, BPSupportedMIMEtypes is another way
+ * to get mime info from the plugin only on OSX and may not be supported
+ * in furture version--use NP_GetMIMEDescription instead
+ */
+
+enum
+{
+ kBPSupportedMIMETypesStructVers_1 = 1
+};
+
+typedef struct _BPSupportedMIMETypes
+{
+ SInt32 structVersion; /* struct version */
+ Handle typeStrings; /* STR# formated handle, allocated by plug-in */
+ Handle infoStrings; /* STR# formated handle, allocated by plug-in */
+} BPSupportedMIMETypes;
+OSErr BP_GetSupportedMIMETypes(BPSupportedMIMETypes *mimeInfo, UInt32 flags);
+
+#if _NPUPP_USE_UPP_
+
+#define NP_GETMIMEDESCRIPTION_NAME "NP_GetMIMEDescriptionRD"
+typedef UniversalProcPtr NP_GetMIMEDescriptionUPP;
+enum {
+ uppNP_GetMIMEDescEntryProc = kThinkCStackBased
+ | RESULT_SIZE(SIZE_CODE(sizeof(const char *)))
+};
+#define NewNP_GetMIMEDescEntryProc(FUNC) \
+ (NP_GetMIMEDescriptionUPP) NewRoutineDescriptor((ProcPtr)(FUNC), uppNP_GetMIMEDescEntryProc, GetCurrentArchitecture())
+#define CallNP_GetMIMEDescEntryProc(FUNC) \
+ (const char *)CallUniversalProc((UniversalProcPtr)(FUNC), (ProcInfoType)uppNP_GetMIMEDescEntryProc)
+
+
+#else /* !_NPUPP_USE_UPP_ */
+
+ /* NP_GetMIMEDescription */
+#define NP_GETMIMEDESCRIPTION_NAME "NP_GetMIMEDescription"
+typedef const char* (* NP_LOADDS NP_GetMIMEDescriptionUPP)();
+#define NewNP_GetMIMEDescEntryProc(FUNC) \
+ ((NP_GetMIMEDescriptionUPP) (FUNC))
+#define CallNP_GetMIMEDescEntryProc(FUNC) \
+ (*(FUNC))()
+/* BP_GetSupportedMIMETypes */
+typedef OSErr (* NP_LOADDS BP_GetSupportedMIMETypesUPP)(BPSupportedMIMETypes*, UInt32);
+#define NewBP_GetSupportedMIMETypesEntryProc(FUNC) \
+ ((BP_GetSupportedMIMETypesUPP) (FUNC))
+#define CallBP_GetMIMEDescEntryProc(FUNC, mimeInfo, flags) \
+ (*(FUNC))((mimeInfo), (flags))
+
+#endif
+#endif /* MAC */
+
+#if defined(_WINDOWS)
+#define OSCALL WINAPI
+#else
+#if defined(__OS2__)
+#define OSCALL _System
+#else
+#define OSCALL
+#endif
+#endif
+
+#if defined( _WINDOWS ) || defined (__OS2__)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* plugin meta member functions */
+#if defined(__OS2__)
+
+typedef struct _NPPluginData { /* Alternate OS2 Plugin interface */
+ char *pMimeTypes;
+ char *pFileExtents;
+ char *pFileOpenTemplate;
+ char *pProductName;
+ char *pProductDescription;
+ unsigned long dwProductVersionMS;
+ unsigned long dwProductVersionLS;
+} NPPluginData;
+
+NPError OSCALL NP_GetPluginData(NPPluginData * pPluginData);
+
+#endif
+
+NPError OSCALL NP_GetEntryPoints(NPPluginFuncs* pFuncs);
+
+NPError OSCALL NP_Initialize(NPNetscapeFuncs* pFuncs);
+
+NPError OSCALL NP_Shutdown();
+
+char* NP_GetMIMEDescription();
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINDOWS || __OS2__ */
+
+#if defined(__OS2__)
+#pragma pack()
+#endif
+
+#ifdef XP_UNIX
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* plugin meta member functions */
+
+char* NP_GetMIMEDescription(void);
+NPError NP_Initialize(NPNetscapeFuncs*, NPPluginFuncs*);
+NPError NP_Shutdown(void);
+NPError NP_GetValue(void *future, NPPVariable aVariable, void *aValue);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* XP_UNIX */
+
+#endif /* _NPUPP_H_ */
diff --git a/src/moz-sdk/obsolete/protypes.h b/src/moz-sdk/obsolete/protypes.h
new file mode 100644
index 0000000..4405bfc
--- /dev/null
+++ b/src/moz-sdk/obsolete/protypes.h
@@ -0,0 +1,252 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Netscape Portable Runtime (NSPR).
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998-2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ * This header typedefs the old 'native' types to the new PR<type>s.
+ * These definitions are scheduled to be eliminated at the earliest
+ * possible time. The NSPR API is implemented and documented using
+ * the new definitions.
+ */
+
+#if !defined(PROTYPES_H)
+#define PROTYPES_H
+
+typedef PRUintn uintn;
+#ifndef _XP_Core_
+typedef PRIntn intn;
+#endif
+
+/*
+ * It is trickier to define uint, int8, uint8, int16, uint16,
+ * int32, uint32, int64, and uint64 because some of these int
+ * types are defined by standard header files on some platforms.
+ * Our strategy here is to include all such standard headers
+ * first, and then define these int types only if they are not
+ * defined by those standard headers.
+ */
+
+/*
+ * BeOS defines all the int types below in its standard header
+ * file SupportDefs.h.
+ */
+#ifdef XP_BEOS
+#include <support/SupportDefs.h>
+#endif
+
+/*
+ * OpenVMS defines all the int types below in its standard
+ * header files ints.h and types.h.
+ */
+#ifdef VMS
+#include <ints.h>
+#include <types.h>
+#endif
+
+/*
+ * SVR4 typedef of uint is commonly found on UNIX machines.
+ *
+ * On AIX 4.3, sys/inttypes.h (which is included by sys/types.h)
+ * defines the types int8, int16, int32, and int64.
+ */
+#ifdef XP_UNIX
+#include <sys/types.h>
+#endif
+
+/* model.h on HP-UX defines int8, int16, and int32. */
+#ifdef HPUX
+#include <model.h>
+#endif
+
+/*
+ * uint
+ */
+
+#if !defined(XP_BEOS) && !defined(VMS) \
+ && !defined(XP_UNIX) || defined(NTO)
+typedef PRUintn uint;
+#endif
+
+/*
+ * uint64
+ */
+
+#if !defined(XP_BEOS) && !defined(VMS)
+typedef PRUint64 uint64;
+#endif
+
+/*
+ * uint32
+ */
+
+#if !defined(XP_BEOS) && !defined(VMS)
+#if !defined(XP_MAC) && !defined(_WIN32) && !defined(XP_OS2) && !defined(NTO)
+typedef PRUint32 uint32;
+#else
+typedef unsigned long uint32;
+#endif
+#endif
+
+/*
+ * uint16
+ */
+
+#if !defined(XP_BEOS) && !defined(VMS)
+typedef PRUint16 uint16;
+#endif
+
+/*
+ * uint8
+ */
+
+#if !defined(XP_BEOS) && !defined(VMS)
+typedef PRUint8 uint8;
+#endif
+
+/*
+ * int64
+ */
+
+#if !defined(XP_BEOS) && !defined(VMS) \
+ && !defined(_PR_AIX_HAVE_BSD_INT_TYPES)
+typedef PRInt64 int64;
+#endif
+
+/*
+ * int32
+ */
+
+#if !defined(XP_BEOS) && !defined(VMS) \
+ && !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \
+ && !defined(HPUX)
+#if !defined(XP_MAC) && !defined(_WIN32) && !defined(XP_OS2) && !defined(NTO)
+typedef PRInt32 int32;
+#else
+typedef long int32;
+#endif
+#endif
+
+/*
+ * int16
+ */
+
+#if !defined(XP_BEOS) && !defined(VMS) \
+ && !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \
+ && !defined(HPUX)
+typedef PRInt16 int16;
+#endif
+
+/*
+ * int8
+ */
+
+#if !defined(XP_BEOS) && !defined(VMS) \
+ && !defined(_PR_AIX_HAVE_BSD_INT_TYPES) \
+ && !defined(HPUX)
+typedef PRInt8 int8;
+#endif
+
+typedef PRFloat64 float64;
+typedef PRUptrdiff uptrdiff_t;
+typedef PRUword uprword_t;
+typedef PRWord prword_t;
+
+
+/* Re: prbit.h */
+#define TEST_BIT PR_TEST_BIT
+#define SET_BIT PR_SET_BIT
+#define CLEAR_BIT PR_CLEAR_BIT
+
+/* Re: prarena.h->plarena.h */
+#define PRArena PLArena
+#define PRArenaPool PLArenaPool
+#define PRArenaStats PLArenaStats
+#define PR_ARENA_ALIGN PL_ARENA_ALIGN
+#define PR_INIT_ARENA_POOL PL_INIT_ARENA_POOL
+#define PR_ARENA_ALLOCATE PL_ARENA_ALLOCATE
+#define PR_ARENA_GROW PL_ARENA_GROW
+#define PR_ARENA_MARK PL_ARENA_MARK
+#define PR_CLEAR_UNUSED PL_CLEAR_UNUSED
+#define PR_CLEAR_ARENA PL_CLEAR_ARENA
+#define PR_ARENA_RELEASE PL_ARENA_RELEASE
+#define PR_COUNT_ARENA PL_COUNT_ARENA
+#define PR_ARENA_DESTROY PL_ARENA_DESTROY
+#define PR_InitArenaPool PL_InitArenaPool
+#define PR_FreeArenaPool PL_FreeArenaPool
+#define PR_FinishArenaPool PL_FinishArenaPool
+#define PR_CompactArenaPool PL_CompactArenaPool
+#define PR_ArenaFinish PL_ArenaFinish
+#define PR_ArenaAllocate PL_ArenaAllocate
+#define PR_ArenaGrow PL_ArenaGrow
+#define PR_ArenaRelease PL_ArenaRelease
+#define PR_ArenaCountAllocation PL_ArenaCountAllocation
+#define PR_ArenaCountInplaceGrowth PL_ArenaCountInplaceGrowth
+#define PR_ArenaCountGrowth PL_ArenaCountGrowth
+#define PR_ArenaCountRelease PL_ArenaCountRelease
+#define PR_ArenaCountRetract PL_ArenaCountRetract
+
+/* Re: prhash.h->plhash.h */
+#define PRHashEntry PLHashEntry
+#define PRHashTable PLHashTable
+#define PRHashNumber PLHashNumber
+#define PRHashFunction PLHashFunction
+#define PRHashComparator PLHashComparator
+#define PRHashEnumerator PLHashEnumerator
+#define PRHashAllocOps PLHashAllocOps
+#define PR_NewHashTable PL_NewHashTable
+#define PR_HashTableDestroy PL_HashTableDestroy
+#define PR_HashTableRawLookup PL_HashTableRawLookup
+#define PR_HashTableRawAdd PL_HashTableRawAdd
+#define PR_HashTableRawRemove PL_HashTableRawRemove
+#define PR_HashTableAdd PL_HashTableAdd
+#define PR_HashTableRemove PL_HashTableRemove
+#define PR_HashTableEnumerateEntries PL_HashTableEnumerateEntries
+#define PR_HashTableLookup PL_HashTableLookup
+#define PR_HashTableDump PL_HashTableDump
+#define PR_HashString PL_HashString
+#define PR_CompareStrings PL_CompareStrings
+#define PR_CompareValues PL_CompareValues
+
+#if defined(XP_MAC)
+#ifndef TRUE /* Mac standard is lower case true */
+ #define TRUE 1
+#endif
+#ifndef FALSE /* Mac standard is lower case false */
+ #define FALSE 0
+#endif
+#endif
+
+#endif /* !defined(PROTYPES_H) */
diff --git a/src/moz-sdk/prcpucfg.h b/src/moz-sdk/prcpucfg.h
new file mode 100644
index 0000000..7c5472f
--- /dev/null
+++ b/src/moz-sdk/prcpucfg.h
@@ -0,0 +1,716 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Netscape Portable Runtime (NSPR).
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998-2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ * This file is used by not only Linux but also other glibc systems
+ * such as GNU/Hurd and GNU/k*BSD.
+ */
+
+#ifndef nspr_cpucfg___
+#define nspr_cpucfg___
+
+#ifndef XP_UNIX
+#define XP_UNIX
+#endif
+
+#if !defined(LINUX) && defined(__linux__)
+#define LINUX
+#endif
+
+#ifdef __FreeBSD_kernel__
+#define PR_AF_INET6 28 /* same as AF_INET6 */
+#else
+#define PR_AF_INET6 10 /* same as AF_INET6 */
+#endif
+
+#ifdef __powerpc64__
+
+#undef IS_LITTLE_ENDIAN
+#define IS_BIG_ENDIAN 1
+#define IS_64
+
+#define PR_BYTES_PER_BYTE 1
+#define PR_BYTES_PER_SHORT 2
+#define PR_BYTES_PER_INT 4
+#define PR_BYTES_PER_INT64 8
+#define PR_BYTES_PER_LONG 8
+#define PR_BYTES_PER_FLOAT 4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD 8
+#define PR_BYTES_PER_DWORD 8
+
+#define PR_BITS_PER_BYTE 8
+#define PR_BITS_PER_SHORT 16
+#define PR_BITS_PER_INT 32
+#define PR_BITS_PER_INT64 64
+#define PR_BITS_PER_LONG 64
+#define PR_BITS_PER_FLOAT 32
+#define PR_BITS_PER_DOUBLE 64
+#define PR_BITS_PER_WORD 64
+
+#define PR_BITS_PER_BYTE_LOG2 3
+#define PR_BITS_PER_SHORT_LOG2 4
+#define PR_BITS_PER_INT_LOG2 5
+#define PR_BITS_PER_INT64_LOG2 6
+#define PR_BITS_PER_LONG_LOG2 6
+#define PR_BITS_PER_FLOAT_LOG2 5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2 6
+
+#define PR_ALIGN_OF_SHORT 2
+#define PR_ALIGN_OF_INT 4
+#define PR_ALIGN_OF_LONG 8
+#define PR_ALIGN_OF_INT64 8
+#define PR_ALIGN_OF_FLOAT 4
+#define PR_ALIGN_OF_DOUBLE 8
+#define PR_ALIGN_OF_POINTER 8
+#define PR_ALIGN_OF_WORD 8
+
+#define PR_BYTES_PER_WORD_LOG2 3
+#define PR_BYTES_PER_DWORD_LOG2 3
+
+#elif defined(__powerpc__)
+
+#undef IS_LITTLE_ENDIAN
+#define IS_BIG_ENDIAN 1
+
+#define PR_BYTES_PER_BYTE 1
+#define PR_BYTES_PER_SHORT 2
+#define PR_BYTES_PER_INT 4
+#define PR_BYTES_PER_INT64 8
+#define PR_BYTES_PER_LONG 4
+#define PR_BYTES_PER_FLOAT 4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD 4
+#define PR_BYTES_PER_DWORD 8
+
+#define PR_BITS_PER_BYTE 8
+#define PR_BITS_PER_SHORT 16
+#define PR_BITS_PER_INT 32
+#define PR_BITS_PER_INT64 64
+#define PR_BITS_PER_LONG 32
+#define PR_BITS_PER_FLOAT 32
+#define PR_BITS_PER_DOUBLE 64
+#define PR_BITS_PER_WORD 32
+
+#define PR_BITS_PER_BYTE_LOG2 3
+#define PR_BITS_PER_SHORT_LOG2 4
+#define PR_BITS_PER_INT_LOG2 5
+#define PR_BITS_PER_INT64_LOG2 6
+#define PR_BITS_PER_LONG_LOG2 5
+#define PR_BITS_PER_FLOAT_LOG2 5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2 5
+
+#define PR_ALIGN_OF_SHORT 2
+#define PR_ALIGN_OF_INT 4
+#define PR_ALIGN_OF_LONG 4
+#define PR_ALIGN_OF_INT64 8
+#define PR_ALIGN_OF_FLOAT 4
+#define PR_ALIGN_OF_DOUBLE 8
+#define PR_ALIGN_OF_POINTER 4
+#define PR_ALIGN_OF_WORD 4
+
+#define PR_BYTES_PER_WORD_LOG2 2
+#define PR_BYTES_PER_DWORD_LOG2 3
+
+#elif defined(__alpha)
+
+#define IS_LITTLE_ENDIAN 1
+#undef IS_BIG_ENDIAN
+#define IS_64
+
+#define PR_BYTES_PER_BYTE 1
+#define PR_BYTES_PER_SHORT 2
+#define PR_BYTES_PER_INT 4
+#define PR_BYTES_PER_INT64 8
+#define PR_BYTES_PER_LONG 8
+#define PR_BYTES_PER_FLOAT 4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD 8
+#define PR_BYTES_PER_DWORD 8
+
+#define PR_BITS_PER_BYTE 8
+#define PR_BITS_PER_SHORT 16
+#define PR_BITS_PER_INT 32
+#define PR_BITS_PER_INT64 64
+#define PR_BITS_PER_LONG 64
+#define PR_BITS_PER_FLOAT 32
+#define PR_BITS_PER_DOUBLE 64
+#define PR_BITS_PER_WORD 64
+
+#define PR_BITS_PER_BYTE_LOG2 3
+#define PR_BITS_PER_SHORT_LOG2 4
+#define PR_BITS_PER_INT_LOG2 5
+#define PR_BITS_PER_INT64_LOG2 6
+#define PR_BITS_PER_LONG_LOG2 6
+#define PR_BITS_PER_FLOAT_LOG2 5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2 6
+
+#define PR_ALIGN_OF_SHORT 2
+#define PR_ALIGN_OF_INT 4
+#define PR_ALIGN_OF_LONG 8
+#define PR_ALIGN_OF_INT64 8
+#define PR_ALIGN_OF_FLOAT 4
+#define PR_ALIGN_OF_DOUBLE 8
+#define PR_ALIGN_OF_POINTER 8
+#define PR_ALIGN_OF_WORD 8
+
+#define PR_BYTES_PER_WORD_LOG2 3
+#define PR_BYTES_PER_DWORD_LOG2 3
+
+#elif defined(__ia64__)
+
+#define IS_LITTLE_ENDIAN 1
+#undef IS_BIG_ENDIAN
+#define IS_64
+
+#define PR_BYTES_PER_BYTE 1
+#define PR_BYTES_PER_SHORT 2
+#define PR_BYTES_PER_INT 4
+#define PR_BYTES_PER_INT64 8
+#define PR_BYTES_PER_LONG 8
+#define PR_BYTES_PER_FLOAT 4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD 8
+#define PR_BYTES_PER_DWORD 8
+
+#define PR_BITS_PER_BYTE 8
+#define PR_BITS_PER_SHORT 16
+#define PR_BITS_PER_INT 32
+#define PR_BITS_PER_INT64 64
+#define PR_BITS_PER_LONG 64
+#define PR_BITS_PER_FLOAT 32
+#define PR_BITS_PER_DOUBLE 64
+#define PR_BITS_PER_WORD 64
+
+#define PR_BITS_PER_BYTE_LOG2 3
+#define PR_BITS_PER_SHORT_LOG2 4
+#define PR_BITS_PER_INT_LOG2 5
+#define PR_BITS_PER_INT64_LOG2 6
+#define PR_BITS_PER_LONG_LOG2 6
+#define PR_BITS_PER_FLOAT_LOG2 5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2 6
+
+#define PR_ALIGN_OF_SHORT 2
+#define PR_ALIGN_OF_INT 4
+#define PR_ALIGN_OF_LONG 8
+#define PR_ALIGN_OF_INT64 8
+#define PR_ALIGN_OF_FLOAT 4
+#define PR_ALIGN_OF_DOUBLE 8
+#define PR_ALIGN_OF_POINTER 8
+#define PR_ALIGN_OF_WORD 8
+
+#define PR_BYTES_PER_WORD_LOG2 3
+#define PR_BYTES_PER_DWORD_LOG2 3
+
+#elif defined(__x86_64__)
+
+#define IS_LITTLE_ENDIAN 1
+#undef IS_BIG_ENDIAN
+#define IS_64
+
+#define PR_BYTES_PER_BYTE 1
+#define PR_BYTES_PER_SHORT 2
+#define PR_BYTES_PER_INT 4
+#define PR_BYTES_PER_INT64 8
+#define PR_BYTES_PER_LONG 8
+#define PR_BYTES_PER_FLOAT 4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD 8
+#define PR_BYTES_PER_DWORD 8
+
+#define PR_BITS_PER_BYTE 8
+#define PR_BITS_PER_SHORT 16
+#define PR_BITS_PER_INT 32
+#define PR_BITS_PER_INT64 64
+#define PR_BITS_PER_LONG 64
+#define PR_BITS_PER_FLOAT 32
+#define PR_BITS_PER_DOUBLE 64
+#define PR_BITS_PER_WORD 64
+
+#define PR_BITS_PER_BYTE_LOG2 3
+#define PR_BITS_PER_SHORT_LOG2 4
+#define PR_BITS_PER_INT_LOG2 5
+#define PR_BITS_PER_INT64_LOG2 6
+#define PR_BITS_PER_LONG_LOG2 6
+#define PR_BITS_PER_FLOAT_LOG2 5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2 6
+
+#define PR_ALIGN_OF_SHORT 2
+#define PR_ALIGN_OF_INT 4
+#define PR_ALIGN_OF_LONG 8
+#define PR_ALIGN_OF_INT64 8
+#define PR_ALIGN_OF_FLOAT 4
+#define PR_ALIGN_OF_DOUBLE 8
+#define PR_ALIGN_OF_POINTER 8
+#define PR_ALIGN_OF_WORD 8
+
+#define PR_BYTES_PER_WORD_LOG2 3
+#define PR_BYTES_PER_DWORD_LOG2 3
+
+#elif defined(__mc68000__)
+
+#undef IS_LITTLE_ENDIAN
+#define IS_BIG_ENDIAN 1
+
+#define PR_BYTES_PER_BYTE 1
+#define PR_BYTES_PER_SHORT 2
+#define PR_BYTES_PER_INT 4
+#define PR_BYTES_PER_INT64 8
+#define PR_BYTES_PER_LONG 4
+#define PR_BYTES_PER_FLOAT 4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD 4
+#define PR_BYTES_PER_DWORD 8
+
+#define PR_BITS_PER_BYTE 8
+#define PR_BITS_PER_SHORT 16
+#define PR_BITS_PER_INT 32
+#define PR_BITS_PER_INT64 64
+#define PR_BITS_PER_LONG 32
+#define PR_BITS_PER_FLOAT 32
+#define PR_BITS_PER_DOUBLE 64
+#define PR_BITS_PER_WORD 32
+
+#define PR_BITS_PER_BYTE_LOG2 3
+#define PR_BITS_PER_SHORT_LOG2 4
+#define PR_BITS_PER_INT_LOG2 5
+#define PR_BITS_PER_INT64_LOG2 6
+#define PR_BITS_PER_LONG_LOG2 5
+#define PR_BITS_PER_FLOAT_LOG2 5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2 5
+
+#define PR_ALIGN_OF_SHORT 2
+#define PR_ALIGN_OF_INT 2
+#define PR_ALIGN_OF_LONG 2
+#define PR_ALIGN_OF_INT64 2
+#define PR_ALIGN_OF_FLOAT 2
+#define PR_ALIGN_OF_DOUBLE 2
+#define PR_ALIGN_OF_POINTER 2
+#define PR_ALIGN_OF_WORD 2
+
+#define PR_BYTES_PER_WORD_LOG2 2
+#define PR_BYTES_PER_DWORD_LOG2 3
+
+#elif defined(__sparc__)
+
+#undef IS_LITTLE_ENDIAN
+#define IS_BIG_ENDIAN 1
+
+#define PR_BYTES_PER_BYTE 1
+#define PR_BYTES_PER_SHORT 2
+#define PR_BYTES_PER_INT 4
+#define PR_BYTES_PER_INT64 8
+#define PR_BYTES_PER_LONG 4
+#define PR_BYTES_PER_FLOAT 4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD 4
+#define PR_BYTES_PER_DWORD 8
+
+#define PR_BITS_PER_BYTE 8
+#define PR_BITS_PER_SHORT 16
+#define PR_BITS_PER_INT 32
+#define PR_BITS_PER_INT64 64
+#define PR_BITS_PER_LONG 32
+#define PR_BITS_PER_FLOAT 32
+#define PR_BITS_PER_DOUBLE 64
+#define PR_BITS_PER_WORD 32
+
+#define PR_BITS_PER_BYTE_LOG2 3
+#define PR_BITS_PER_SHORT_LOG2 4
+#define PR_BITS_PER_INT_LOG2 5
+#define PR_BITS_PER_INT64_LOG2 6
+#define PR_BITS_PER_LONG_LOG2 5
+#define PR_BITS_PER_FLOAT_LOG2 5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2 5
+
+#define PR_ALIGN_OF_SHORT 2
+#define PR_ALIGN_OF_INT 4
+#define PR_ALIGN_OF_LONG 4
+#define PR_ALIGN_OF_INT64 8
+#define PR_ALIGN_OF_FLOAT 4
+#define PR_ALIGN_OF_DOUBLE 8
+#define PR_ALIGN_OF_POINTER 4
+#define PR_ALIGN_OF_WORD 4
+
+#define PR_BYTES_PER_WORD_LOG2 2
+#define PR_BYTES_PER_DWORD_LOG2 3
+
+#elif defined(__i386__)
+
+#define IS_LITTLE_ENDIAN 1
+#undef IS_BIG_ENDIAN
+
+#define PR_BYTES_PER_BYTE 1
+#define PR_BYTES_PER_SHORT 2
+#define PR_BYTES_PER_INT 4
+#define PR_BYTES_PER_INT64 8
+#define PR_BYTES_PER_LONG 4
+#define PR_BYTES_PER_FLOAT 4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD 4
+#define PR_BYTES_PER_DWORD 8
+
+#define PR_BITS_PER_BYTE 8
+#define PR_BITS_PER_SHORT 16
+#define PR_BITS_PER_INT 32
+#define PR_BITS_PER_INT64 64
+#define PR_BITS_PER_LONG 32
+#define PR_BITS_PER_FLOAT 32
+#define PR_BITS_PER_DOUBLE 64
+#define PR_BITS_PER_WORD 32
+
+#define PR_BITS_PER_BYTE_LOG2 3
+#define PR_BITS_PER_SHORT_LOG2 4
+#define PR_BITS_PER_INT_LOG2 5
+#define PR_BITS_PER_INT64_LOG2 6
+#define PR_BITS_PER_LONG_LOG2 5
+#define PR_BITS_PER_FLOAT_LOG2 5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2 5
+
+#define PR_ALIGN_OF_SHORT 2
+#define PR_ALIGN_OF_INT 4
+#define PR_ALIGN_OF_LONG 4
+#define PR_ALIGN_OF_INT64 4
+#define PR_ALIGN_OF_FLOAT 4
+#define PR_ALIGN_OF_DOUBLE 4
+#define PR_ALIGN_OF_POINTER 4
+#define PR_ALIGN_OF_WORD 4
+
+#define PR_BYTES_PER_WORD_LOG2 2
+#define PR_BYTES_PER_DWORD_LOG2 3
+
+#elif defined(__mips__)
+
+#ifdef __MIPSEB__
+#define IS_BIG_ENDIAN 1
+#undef IS_LITTLE_ENDIAN
+#elif defined(__MIPSEL__)
+#define IS_LITTLE_ENDIAN 1
+#undef IS_BIG_ENDIAN
+#else
+#error "Unknown MIPS endianness."
+#endif
+
+#define PR_BYTES_PER_BYTE 1
+#define PR_BYTES_PER_SHORT 2
+#define PR_BYTES_PER_INT 4
+#define PR_BYTES_PER_INT64 8
+#define PR_BYTES_PER_LONG 4
+#define PR_BYTES_PER_FLOAT 4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD 4
+#define PR_BYTES_PER_DWORD 8
+
+#define PR_BITS_PER_BYTE 8
+#define PR_BITS_PER_SHORT 16
+#define PR_BITS_PER_INT 32
+#define PR_BITS_PER_INT64 64
+#define PR_BITS_PER_LONG 32
+#define PR_BITS_PER_FLOAT 32
+#define PR_BITS_PER_DOUBLE 64
+#define PR_BITS_PER_WORD 32
+
+#define PR_BITS_PER_BYTE_LOG2 3
+#define PR_BITS_PER_SHORT_LOG2 4
+#define PR_BITS_PER_INT_LOG2 5
+#define PR_BITS_PER_INT64_LOG2 6
+#define PR_BITS_PER_LONG_LOG2 5
+#define PR_BITS_PER_FLOAT_LOG2 5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2 5
+
+#define PR_ALIGN_OF_SHORT 2
+#define PR_ALIGN_OF_INT 4
+#define PR_ALIGN_OF_LONG 4
+#define PR_ALIGN_OF_INT64 8
+#define PR_ALIGN_OF_FLOAT 4
+#define PR_ALIGN_OF_DOUBLE 8
+#define PR_ALIGN_OF_POINTER 4
+#define PR_ALIGN_OF_WORD 4
+
+#define PR_BYTES_PER_WORD_LOG2 2
+#define PR_BYTES_PER_DWORD_LOG2 3
+
+#elif defined(__arm__)
+
+#define IS_LITTLE_ENDIAN 1
+#undef IS_BIG_ENDIAN
+
+#define PR_BYTES_PER_BYTE 1
+#define PR_BYTES_PER_SHORT 2
+#define PR_BYTES_PER_INT 4
+#define PR_BYTES_PER_INT64 8
+#define PR_BYTES_PER_LONG 4
+#define PR_BYTES_PER_FLOAT 4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD 4
+#define PR_BYTES_PER_DWORD 8
+
+#define PR_BITS_PER_BYTE 8
+#define PR_BITS_PER_SHORT 16
+#define PR_BITS_PER_INT 32
+#define PR_BITS_PER_INT64 64
+#define PR_BITS_PER_LONG 32
+#define PR_BITS_PER_FLOAT 32
+#define PR_BITS_PER_DOUBLE 64
+#define PR_BITS_PER_WORD 32
+
+#define PR_BITS_PER_BYTE_LOG2 3
+#define PR_BITS_PER_SHORT_LOG2 4
+#define PR_BITS_PER_INT_LOG2 5
+#define PR_BITS_PER_INT64_LOG2 6
+#define PR_BITS_PER_LONG_LOG2 5
+#define PR_BITS_PER_FLOAT_LOG2 5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2 5
+
+#define PR_ALIGN_OF_SHORT 2
+#define PR_ALIGN_OF_INT 4
+#define PR_ALIGN_OF_LONG 4
+#define PR_ALIGN_OF_INT64 4
+#define PR_ALIGN_OF_FLOAT 4
+#define PR_ALIGN_OF_DOUBLE 4
+#define PR_ALIGN_OF_POINTER 4
+#define PR_ALIGN_OF_WORD 4
+
+#define PR_BYTES_PER_WORD_LOG2 2
+#define PR_BYTES_PER_DWORD_LOG2 3
+
+#elif defined(__hppa__)
+
+#undef IS_LITTLE_ENDIAN
+#define IS_BIG_ENDIAN 1
+
+#define PR_BYTES_PER_BYTE 1
+#define PR_BYTES_PER_SHORT 2
+#define PR_BYTES_PER_INT 4
+#define PR_BYTES_PER_INT64 8
+#define PR_BYTES_PER_LONG 4
+#define PR_BYTES_PER_FLOAT 4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD 4
+#define PR_BYTES_PER_DWORD 8
+
+#define PR_BITS_PER_BYTE 8
+#define PR_BITS_PER_SHORT 16
+#define PR_BITS_PER_INT 32
+#define PR_BITS_PER_INT64 64
+#define PR_BITS_PER_LONG 32
+#define PR_BITS_PER_FLOAT 32
+#define PR_BITS_PER_DOUBLE 64
+#define PR_BITS_PER_WORD 32
+
+#define PR_BITS_PER_BYTE_LOG2 3
+#define PR_BITS_PER_SHORT_LOG2 4
+#define PR_BITS_PER_INT_LOG2 5
+#define PR_BITS_PER_INT64_LOG2 6
+#define PR_BITS_PER_LONG_LOG2 5
+#define PR_BITS_PER_FLOAT_LOG2 5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2 5
+
+#define PR_ALIGN_OF_SHORT 2
+#define PR_ALIGN_OF_INT 4
+#define PR_ALIGN_OF_LONG 4
+#define PR_ALIGN_OF_INT64 8
+#define PR_ALIGN_OF_FLOAT 4
+#define PR_ALIGN_OF_DOUBLE 8
+#define PR_ALIGN_OF_POINTER 4
+#define PR_ALIGN_OF_WORD 4
+
+#define PR_BYTES_PER_WORD_LOG2 2
+#define PR_BYTES_PER_DWORD_LOG2 3
+
+#elif defined(__s390x__)
+
+#define IS_BIG_ENDIAN 1
+#undef IS_LITTLE_ENDIAN
+#define IS_64
+
+#define PR_BYTES_PER_BYTE 1
+#define PR_BYTES_PER_SHORT 2
+#define PR_BYTES_PER_INT 4
+#define PR_BYTES_PER_INT64 8
+#define PR_BYTES_PER_LONG 8
+#define PR_BYTES_PER_FLOAT 4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD 8
+#define PR_BYTES_PER_DWORD 8
+
+#define PR_BITS_PER_BYTE 8
+#define PR_BITS_PER_SHORT 16
+#define PR_BITS_PER_INT 32
+#define PR_BITS_PER_INT64 64
+#define PR_BITS_PER_LONG 64
+#define PR_BITS_PER_FLOAT 32
+#define PR_BITS_PER_DOUBLE 64
+#define PR_BITS_PER_WORD 64
+
+#define PR_BITS_PER_BYTE_LOG2 3
+#define PR_BITS_PER_SHORT_LOG2 4
+#define PR_BITS_PER_INT_LOG2 5
+#define PR_BITS_PER_INT64_LOG2 6
+#define PR_BITS_PER_LONG_LOG2 6
+#define PR_BITS_PER_FLOAT_LOG2 5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2 6
+
+#define PR_ALIGN_OF_SHORT 2
+#define PR_ALIGN_OF_INT 4
+#define PR_ALIGN_OF_LONG 8
+#define PR_ALIGN_OF_INT64 8
+#define PR_ALIGN_OF_FLOAT 4
+#define PR_ALIGN_OF_DOUBLE 8
+#define PR_ALIGN_OF_POINTER 8
+#define PR_ALIGN_OF_WORD 8
+
+#define PR_BYTES_PER_WORD_LOG2 3
+#define PR_BYTES_PER_DWORD_LOG2 3
+
+#elif defined(__s390__)
+
+#define IS_BIG_ENDIAN 1
+#undef IS_LITTLE_ENDIAN
+
+#define PR_BYTES_PER_BYTE 1
+#define PR_BYTES_PER_SHORT 2
+#define PR_BYTES_PER_INT 4
+#define PR_BYTES_PER_INT64 8
+#define PR_BYTES_PER_LONG 4
+#define PR_BYTES_PER_FLOAT 4
+#define PR_BYTES_PER_DOUBLE 8
+#define PR_BYTES_PER_WORD 4
+#define PR_BYTES_PER_DWORD 8
+
+#define PR_BITS_PER_BYTE 8
+#define PR_BITS_PER_SHORT 16
+#define PR_BITS_PER_INT 32
+#define PR_BITS_PER_INT64 64
+#define PR_BITS_PER_LONG 32
+#define PR_BITS_PER_FLOAT 32
+#define PR_BITS_PER_DOUBLE 64
+#define PR_BITS_PER_WORD 32
+
+#define PR_BITS_PER_BYTE_LOG2 3
+#define PR_BITS_PER_SHORT_LOG2 4
+#define PR_BITS_PER_INT_LOG2 5
+#define PR_BITS_PER_INT64_LOG2 6
+#define PR_BITS_PER_LONG_LOG2 5
+#define PR_BITS_PER_FLOAT_LOG2 5
+#define PR_BITS_PER_DOUBLE_LOG2 6
+#define PR_BITS_PER_WORD_LOG2 5
+
+#define PR_ALIGN_OF_SHORT 2
+#define PR_ALIGN_OF_INT 4
+#define PR_ALIGN_OF_LONG 4
+#define PR_ALIGN_OF_INT64 4
+#define PR_ALIGN_OF_FLOAT 4
+#define PR_ALIGN_OF_DOUBLE 4
+#define PR_ALIGN_OF_POINTER 4
+#define PR_ALIGN_OF_WORD 4
+
+#define PR_BYTES_PER_WORD_LOG2 2
+#define PR_BYTES_PER_DWORD_LOG2 3
+
+#else
+
+#error "Unknown CPU architecture"
+
+#endif
+
+#define HAVE_LONG_LONG
+#if PR_ALIGN_OF_DOUBLE == 8
+#define HAVE_ALIGNED_DOUBLES
+#endif
+#if PR_ALIGN_OF_INT64 == 8
+#define HAVE_ALIGNED_LONGLONGS
+#endif
+
+#ifndef NO_NSPR_10_SUPPORT
+
+#define BYTES_PER_BYTE PR_BYTES_PER_BYTE
+#define BYTES_PER_SHORT PR_BYTES_PER_SHORT
+#define BYTES_PER_INT PR_BYTES_PER_INT
+#define BYTES_PER_INT64 PR_BYTES_PER_INT64
+#define BYTES_PER_LONG PR_BYTES_PER_LONG
+#define BYTES_PER_FLOAT PR_BYTES_PER_FLOAT
+#define BYTES_PER_DOUBLE PR_BYTES_PER_DOUBLE
+#define BYTES_PER_WORD PR_BYTES_PER_WORD
+#define BYTES_PER_DWORD PR_BYTES_PER_DWORD
+
+#define BITS_PER_BYTE PR_BITS_PER_BYTE
+#define BITS_PER_SHORT PR_BITS_PER_SHORT
+#define BITS_PER_INT PR_BITS_PER_INT
+#define BITS_PER_INT64 PR_BITS_PER_INT64
+#define BITS_PER_LONG PR_BITS_PER_LONG
+#define BITS_PER_FLOAT PR_BITS_PER_FLOAT
+#define BITS_PER_DOUBLE PR_BITS_PER_DOUBLE
+#define BITS_PER_WORD PR_BITS_PER_WORD
+
+#define BITS_PER_BYTE_LOG2 PR_BITS_PER_BYTE_LOG2
+#define BITS_PER_SHORT_LOG2 PR_BITS_PER_SHORT_LOG2
+#define BITS_PER_INT_LOG2 PR_BITS_PER_INT_LOG2
+#define BITS_PER_INT64_LOG2 PR_BITS_PER_INT64_LOG2
+#define BITS_PER_LONG_LOG2 PR_BITS_PER_LONG_LOG2
+#define BITS_PER_FLOAT_LOG2 PR_BITS_PER_FLOAT_LOG2
+#define BITS_PER_DOUBLE_LOG2 PR_BITS_PER_DOUBLE_LOG2
+#define BITS_PER_WORD_LOG2 PR_BITS_PER_WORD_LOG2
+
+#define ALIGN_OF_SHORT PR_ALIGN_OF_SHORT
+#define ALIGN_OF_INT PR_ALIGN_OF_INT
+#define ALIGN_OF_LONG PR_ALIGN_OF_LONG
+#define ALIGN_OF_INT64 PR_ALIGN_OF_INT64
+#define ALIGN_OF_FLOAT PR_ALIGN_OF_FLOAT
+#define ALIGN_OF_DOUBLE PR_ALIGN_OF_DOUBLE
+#define ALIGN_OF_POINTER PR_ALIGN_OF_POINTER
+#define ALIGN_OF_WORD PR_ALIGN_OF_WORD
+
+#define BYTES_PER_WORD_LOG2 PR_BYTES_PER_WORD_LOG2
+#define BYTES_PER_DWORD_LOG2 PR_BYTES_PER_DWORD_LOG2
+#define WORDS_PER_DWORD_LOG2 PR_WORDS_PER_DWORD_LOG2
+
+#endif /* NO_NSPR_10_SUPPORT */
+
+#endif /* nspr_cpucfg___ */
diff --git a/src/moz-sdk/prtypes.h b/src/moz-sdk/prtypes.h
new file mode 100644
index 0000000..09fe032
--- /dev/null
+++ b/src/moz-sdk/prtypes.h
@@ -0,0 +1,544 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Netscape Portable Runtime (NSPR).
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998-2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+** File: prtypes.h
+** Description: Definitions of NSPR's basic types
+**
+** Prototypes and macros used to make up for deficiencies that we have found
+** in ANSI environments.
+**
+** Since we do not wrap <stdlib.h> and all the other standard headers, authors
+** of portable code will not know in general that they need these definitions.
+** Instead of requiring these authors to find the dependent uses in their code
+** and take the following steps only in those C files, we take steps once here
+** for all C files.
+**/
+
+#ifndef prtypes_h___
+#define prtypes_h___
+
+#ifdef MDCPUCFG
+#include MDCPUCFG
+#else
+#include "prcpucfg.h"
+#endif
+
+#include <stddef.h>
+
+/***********************************************************************
+** MACROS: PR_EXTERN
+** PR_IMPLEMENT
+** DESCRIPTION:
+** These are only for externally visible routines and globals. For
+** internal routines, just use "extern" for type checking and that
+** will not export internal cross-file or forward-declared symbols.
+** Define a macro for declaring procedures return types. We use this to
+** deal with windoze specific type hackery for DLL definitions. Use
+** PR_EXTERN when the prototype for the method is declared. Use
+** PR_IMPLEMENT for the implementation of the method.
+**
+** Example:
+** in dowhim.h
+** PR_EXTERN( void ) DoWhatIMean( void );
+** in dowhim.c
+** PR_IMPLEMENT( void ) DoWhatIMean( void ) { return; }
+**
+**
+***********************************************************************/
+#if defined(WIN32)
+
+#define PR_EXPORT(__type) extern __declspec(dllexport) __type
+#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
+#define PR_IMPORT(__type) __declspec(dllimport) __type
+#define PR_IMPORT_DATA(__type) __declspec(dllimport) __type
+
+#define PR_EXTERN(__type) extern __declspec(dllexport) __type
+#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
+#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
+#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
+
+#define PR_CALLBACK
+#define PR_CALLBACK_DECL
+#define PR_STATIC_CALLBACK(__x) static __x
+
+#elif defined(XP_BEOS)
+
+#define PR_EXPORT(__type) extern __declspec(dllexport) __type
+#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
+#define PR_IMPORT(__type) extern __declspec(dllexport) __type
+#define PR_IMPORT_DATA(__type) extern __declspec(dllexport) __type
+
+#define PR_EXTERN(__type) extern __declspec(dllexport) __type
+#define PR_IMPLEMENT(__type) __declspec(dllexport) __type
+#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
+#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
+
+#define PR_CALLBACK
+#define PR_CALLBACK_DECL
+#define PR_STATIC_CALLBACK(__x) static __x
+
+#elif defined(WIN16)
+
+#define PR_CALLBACK_DECL __cdecl
+
+#if defined(_WINDLL)
+#define PR_EXPORT(__type) extern __type _cdecl _export _loadds
+#define PR_IMPORT(__type) extern __type _cdecl _export _loadds
+#define PR_EXPORT_DATA(__type) extern __type _export
+#define PR_IMPORT_DATA(__type) extern __type _export
+
+#define PR_EXTERN(__type) extern __type _cdecl _export _loadds
+#define PR_IMPLEMENT(__type) __type _cdecl _export _loadds
+#define PR_EXTERN_DATA(__type) extern __type _export
+#define PR_IMPLEMENT_DATA(__type) __type _export
+
+#define PR_CALLBACK __cdecl __loadds
+#define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK
+
+#else /* this must be .EXE */
+#define PR_EXPORT(__type) extern __type _cdecl _export
+#define PR_IMPORT(__type) extern __type _cdecl _export
+#define PR_EXPORT_DATA(__type) extern __type _export
+#define PR_IMPORT_DATA(__type) extern __type _export
+
+#define PR_EXTERN(__type) extern __type _cdecl _export
+#define PR_IMPLEMENT(__type) __type _cdecl _export
+#define PR_EXTERN_DATA(__type) extern __type _export
+#define PR_IMPLEMENT_DATA(__type) __type _export
+
+#define PR_CALLBACK __cdecl __loadds
+#define PR_STATIC_CALLBACK(__x) __x PR_CALLBACK
+#endif /* _WINDLL */
+
+#elif defined(XP_MAC)
+
+#define PR_EXPORT(__type) extern __declspec(export) __type
+#define PR_EXPORT_DATA(__type) extern __declspec(export) __type
+#define PR_IMPORT(__type) extern __declspec(export) __type
+#define PR_IMPORT_DATA(__type) extern __declspec(export) __type
+
+#define PR_EXTERN(__type) extern __declspec(export) __type
+#define PR_IMPLEMENT(__type) __declspec(export) __type
+#define PR_EXTERN_DATA(__type) extern __declspec(export) __type
+#define PR_IMPLEMENT_DATA(__type) __declspec(export) __type
+
+#define PR_CALLBACK
+#define PR_CALLBACK_DECL
+#define PR_STATIC_CALLBACK(__x) static __x
+
+#elif defined(XP_OS2_VACPP)
+
+#define PR_EXPORT(__type) extern __type
+#define PR_EXPORT_DATA(__type) extern __type
+#define PR_IMPORT(__type) extern __type
+#define PR_IMPORT_DATA(__type) extern __type
+
+#define PR_EXTERN(__type) extern __type
+#define PR_IMPLEMENT(__type) __type
+#define PR_EXTERN_DATA(__type) extern __type
+#define PR_IMPLEMENT_DATA(__type) __type
+#define PR_CALLBACK _Optlink
+#define PR_CALLBACK_DECL
+#define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK
+
+#else /* Unix */
+
+/* GCC 3.3 and later support the visibility attribute. */
+#if (__GNUC__ >= 4) || \
+ (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
+#define PR_VISIBILITY_DEFAULT __attribute__((visibility("default")))
+#else
+#define PR_VISIBILITY_DEFAULT
+#endif
+
+#define PR_EXPORT(__type) extern PR_VISIBILITY_DEFAULT __type
+#define PR_EXPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
+#define PR_IMPORT(__type) extern PR_VISIBILITY_DEFAULT __type
+#define PR_IMPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
+
+#define PR_EXTERN(__type) extern PR_VISIBILITY_DEFAULT __type
+#define PR_IMPLEMENT(__type) PR_VISIBILITY_DEFAULT __type
+#define PR_EXTERN_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
+#define PR_IMPLEMENT_DATA(__type) PR_VISIBILITY_DEFAULT __type
+#define PR_CALLBACK
+#define PR_CALLBACK_DECL
+#define PR_STATIC_CALLBACK(__x) static __x
+
+#endif
+
+#if defined(_NSPR_BUILD_)
+#define NSPR_API(__type) PR_EXPORT(__type)
+#define NSPR_DATA_API(__type) PR_EXPORT_DATA(__type)
+#else
+#define NSPR_API(__type) PR_IMPORT(__type)
+#define NSPR_DATA_API(__type) PR_IMPORT_DATA(__type)
+#endif
+
+/***********************************************************************
+** MACROS: PR_BEGIN_MACRO
+** PR_END_MACRO
+** DESCRIPTION:
+** Macro body brackets so that macros with compound statement definitions
+** behave syntactically more like functions when called.
+***********************************************************************/
+#define PR_BEGIN_MACRO do {
+#define PR_END_MACRO } while (0)
+
+/***********************************************************************
+** MACROS: PR_BEGIN_EXTERN_C
+** PR_END_EXTERN_C
+** DESCRIPTION:
+** Macro shorthands for conditional C++ extern block delimiters.
+***********************************************************************/
+#ifdef __cplusplus
+#define PR_BEGIN_EXTERN_C extern "C" {
+#define PR_END_EXTERN_C }
+#else
+#define PR_BEGIN_EXTERN_C
+#define PR_END_EXTERN_C
+#endif
+
+/***********************************************************************
+** MACROS: PR_BIT
+** PR_BITMASK
+** DESCRIPTION:
+** Bit masking macros. XXX n must be <= 31 to be portable
+***********************************************************************/
+#define PR_BIT(n) ((PRUint32)1 << (n))
+#define PR_BITMASK(n) (PR_BIT(n) - 1)
+
+/***********************************************************************
+** MACROS: PR_ROUNDUP
+** PR_MIN
+** PR_MAX
+** PR_ABS
+** DESCRIPTION:
+** Commonly used macros for operations on compatible types.
+***********************************************************************/
+#define PR_ROUNDUP(x,y) ((((x)+((y)-1))/(y))*(y))
+#define PR_MIN(x,y) ((x)<(y)?(x):(y))
+#define PR_MAX(x,y) ((x)>(y)?(x):(y))
+#define PR_ABS(x) ((x)<0?-(x):(x))
+
+PR_BEGIN_EXTERN_C
+
+/************************************************************************
+** TYPES: PRUint8
+** PRInt8
+** DESCRIPTION:
+** The int8 types are known to be 8 bits each. There is no type that
+** is equivalent to a plain "char".
+************************************************************************/
+#if PR_BYTES_PER_BYTE == 1
+typedef unsigned char PRUint8;
+/*
+** Some cfront-based C++ compilers do not like 'signed char' and
+** issue the warning message:
+** warning: "signed" not implemented (ignored)
+** For these compilers, we have to define PRInt8 as plain 'char'.
+** Make sure that plain 'char' is indeed signed under these compilers.
+*/
+#if (defined(HPUX) && defined(__cplusplus) \
+ && !defined(__GNUC__) && __cplusplus < 199707L) \
+ || (defined(SCO) && defined(__cplusplus) \
+ && !defined(__GNUC__) && __cplusplus == 1L)
+typedef char PRInt8;
+#else
+typedef signed char PRInt8;
+#endif
+#else
+#error No suitable type for PRInt8/PRUint8
+#endif
+
+/************************************************************************
+ * MACROS: PR_INT8_MAX
+ * PR_INT8_MIN
+ * PR_UINT8_MAX
+ * DESCRIPTION:
+ * The maximum and minimum values of a PRInt8 or PRUint8.
+************************************************************************/
+
+#define PR_INT8_MAX 127
+#define PR_INT8_MIN (-128)
+#define PR_UINT8_MAX 255U
+
+/************************************************************************
+** TYPES: PRUint16
+** PRInt16
+** DESCRIPTION:
+** The int16 types are known to be 16 bits each.
+************************************************************************/
+#if PR_BYTES_PER_SHORT == 2
+typedef unsigned short PRUint16;
+typedef short PRInt16;
+#else
+#error No suitable type for PRInt16/PRUint16
+#endif
+
+/************************************************************************
+ * MACROS: PR_INT16_MAX
+ * PR_INT16_MIN
+ * PR_UINT16_MAX
+ * DESCRIPTION:
+ * The maximum and minimum values of a PRInt16 or PRUint16.
+************************************************************************/
+
+#define PR_INT16_MAX 32767
+#define PR_INT16_MIN (-32768)
+#define PR_UINT16_MAX 65535U
+
+/************************************************************************
+** TYPES: PRUint32
+** PRInt32
+** DESCRIPTION:
+** The int32 types are known to be 32 bits each.
+************************************************************************/
+#if PR_BYTES_PER_INT == 4
+typedef unsigned int PRUint32;
+typedef int PRInt32;
+#define PR_INT32(x) x
+#define PR_UINT32(x) x ## U
+#elif PR_BYTES_PER_LONG == 4
+typedef unsigned long PRUint32;
+typedef long PRInt32;
+#define PR_INT32(x) x ## L
+#define PR_UINT32(x) x ## UL
+#else
+#error No suitable type for PRInt32/PRUint32
+#endif
+
+/************************************************************************
+ * MACROS: PR_INT32_MAX
+ * PR_INT32_MIN
+ * PR_UINT32_MAX
+ * DESCRIPTION:
+ * The maximum and minimum values of a PRInt32 or PRUint32.
+************************************************************************/
+
+#define PR_INT32_MAX PR_INT32(2147483647)
+#define PR_INT32_MIN (-PR_INT32_MAX - 1)
+#define PR_UINT32_MAX PR_UINT32(4294967295)
+
+/************************************************************************
+** TYPES: PRUint64
+** PRInt64
+** DESCRIPTION:
+** The int64 types are known to be 64 bits each. Care must be used when
+** declaring variables of type PRUint64 or PRInt64. Different hardware
+** architectures and even different compilers have varying support for
+** 64 bit values. The only guaranteed portability requires the use of
+** the LL_ macros (see prlong.h).
+************************************************************************/
+#ifdef HAVE_LONG_LONG
+#if PR_BYTES_PER_LONG == 8
+typedef long PRInt64;
+typedef unsigned long PRUint64;
+#elif defined(WIN16)
+typedef __int64 PRInt64;
+typedef unsigned __int64 PRUint64;
+#elif defined(WIN32) && !defined(__GNUC__)
+typedef __int64 PRInt64;
+typedef unsigned __int64 PRUint64;
+#else
+typedef long long PRInt64;
+typedef unsigned long long PRUint64;
+#endif /* PR_BYTES_PER_LONG == 8 */
+#else /* !HAVE_LONG_LONG */
+typedef struct {
+#ifdef IS_LITTLE_ENDIAN
+ PRUint32 lo, hi;
+#else
+ PRUint32 hi, lo;
+#endif
+} PRInt64;
+typedef PRInt64 PRUint64;
+#endif /* !HAVE_LONG_LONG */
+
+/************************************************************************
+** TYPES: PRUintn
+** PRIntn
+** DESCRIPTION:
+** The PRIntn types are most appropriate for automatic variables. They are
+** guaranteed to be at least 16 bits, though various architectures may
+** define them to be wider (e.g., 32 or even 64 bits). These types are
+** never valid for fields of a structure.
+************************************************************************/
+#if PR_BYTES_PER_INT >= 2
+typedef int PRIntn;
+typedef unsigned int PRUintn;
+#else
+#error 'sizeof(int)' not sufficient for platform use
+#endif
+
+/************************************************************************
+** TYPES: PRFloat64
+** DESCRIPTION:
+** NSPR's floating point type is always 64 bits.
+************************************************************************/
+typedef double PRFloat64;
+
+/************************************************************************
+** TYPES: PRSize
+** DESCRIPTION:
+** A type for representing the size of objects.
+************************************************************************/
+typedef size_t PRSize;
+
+
+/************************************************************************
+** TYPES: PROffset32, PROffset64
+** DESCRIPTION:
+** A type for representing byte offsets from some location.
+************************************************************************/
+typedef PRInt32 PROffset32;
+typedef PRInt64 PROffset64;
+
+/************************************************************************
+** TYPES: PRPtrDiff
+** DESCRIPTION:
+** A type for pointer difference. Variables of this type are suitable
+** for storing a pointer or pointer subtraction.
+************************************************************************/
+typedef ptrdiff_t PRPtrdiff;
+
+/************************************************************************
+** TYPES: PRUptrdiff
+** DESCRIPTION:
+** A type for pointer difference. Variables of this type are suitable
+** for storing a pointer or pointer sutraction.
+************************************************************************/
+typedef unsigned long PRUptrdiff;
+
+/************************************************************************
+** TYPES: PRBool
+** DESCRIPTION:
+** Use PRBool for variables and parameter types. Use PR_FALSE and PR_TRUE
+** for clarity of target type in assignments and actual arguments. Use
+** 'if (bool)', 'while (!bool)', '(bool) ? x : y' etc., to test booleans
+** just as you would C int-valued conditions.
+************************************************************************/
+typedef PRIntn PRBool;
+#define PR_TRUE 1
+#define PR_FALSE 0
+
+/************************************************************************
+** TYPES: PRPackedBool
+** DESCRIPTION:
+** Use PRPackedBool within structs where bitfields are not desirable
+** but minimum and consistant overhead matters.
+************************************************************************/
+typedef PRUint8 PRPackedBool;
+
+/*
+** Status code used by some routines that have a single point of failure or
+** special status return.
+*/
+typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
+
+#ifndef __PRUNICHAR__
+#define __PRUNICHAR__
+#if defined(WIN32) || defined(XP_MAC)
+typedef wchar_t PRUnichar;
+#else
+typedef PRUint16 PRUnichar;
+#endif
+#endif
+
+/*
+** WARNING: The undocumented data types PRWord and PRUword are
+** only used in the garbage collection and arena code. Do not
+** use PRWord and PRUword in new code.
+**
+** A PRWord is an integer that is the same size as a void*.
+** It implements the notion of a "word" in the Java Virtual
+** Machine. (See Sec. 3.4 "Words", The Java Virtual Machine
+** Specification, Addison-Wesley, September 1996.
+** http://java.sun.com/docs/books/vmspec/index.html.)
+*/
+typedef long PRWord;
+typedef unsigned long PRUword;
+
+#if defined(NO_NSPR_10_SUPPORT)
+#else
+/********* ???????????????? FIX ME ??????????????????????????? *****/
+/********************** Some old definitions until pr=>ds transition is done ***/
+/********************** Also, we are still using NSPR 1.0. GC ******************/
+/*
+** Fundamental NSPR macros, used nearly everywhere.
+*/
+
+#define PR_PUBLIC_API PR_IMPLEMENT
+
+/*
+** Macro body brackets so that macros with compound statement definitions
+** behave syntactically more like functions when called.
+*/
+#define NSPR_BEGIN_MACRO do {
+#define NSPR_END_MACRO } while (0)
+
+/*
+** Macro shorthands for conditional C++ extern block delimiters.
+*/
+#ifdef NSPR_BEGIN_EXTERN_C
+#undef NSPR_BEGIN_EXTERN_C
+#endif
+#ifdef NSPR_END_EXTERN_C
+#undef NSPR_END_EXTERN_C
+#endif
+
+#ifdef __cplusplus
+#define NSPR_BEGIN_EXTERN_C extern "C" {
+#define NSPR_END_EXTERN_C }
+#else
+#define NSPR_BEGIN_EXTERN_C
+#define NSPR_END_EXTERN_C
+#endif
+
+#ifdef XP_MAC
+#include "protypes.h"
+#else
+#include "obsolete/protypes.h"
+#endif
+
+/********* ????????????? End Fix me ?????????????????????????????? *****/
+#endif /* NO_NSPR_10_SUPPORT */
+
+PR_END_EXTERN_C
+
+#endif /* prtypes_h___ */
+
diff --git a/src/noise.gif b/src/noise.gif
new file mode 100644
index 0000000..55bf6ae
--- /dev/null
+++ b/src/noise.gif
Binary files differ
diff --git a/src/npplayer.c b/src/npplayer.c
new file mode 100644
index 0000000..e7f67bb
--- /dev/null
+++ b/src/npplayer.c
@@ -0,0 +1,1545 @@
+/*
+* Copyright (C) 2007 Koos Vriezen <koos.vriezen@gmail.com>
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation; either
+* version 2 of the License, or (at your option) any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+/* gcc -o knpplayer `pkg-config --libs --cflags gtk+-x11-2.0` `pkg-config --libs --cflags dbus-glib-1` `pkg-config --libs gthread-2.0` npplayer.c
+
+http://devedge-temp.mozilla.org/library/manuals/2002/plugin/1.0/
+http://dbus.freedesktop.org/doc/dbus/libdbus-tutorial.html
+*/
+
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <fcntl.h>
+
+#include <glib/gprintf.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+
+#define DBUS_API_SUBJECT_TO_CHANGE
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib.h>
+
+#define XP_UNIX
+#define MOZ_X11
+#include "moz-sdk/npupp.h"
+
+typedef const char* (* NP_LOADDS NP_GetMIMEDescriptionUPP)();
+typedef NPError (* NP_GetValueUPP)(void *inst, NPPVariable var, void *value);
+typedef NPError (* NP_InitializeUPP)(NPNetscapeFuncs*, NPPluginFuncs*);
+typedef NPError (* NP_ShutdownUPP)(void);
+
+static gchar *plugin;
+static gchar *object_url;
+static gchar *mimetype;
+
+static DBusConnection *dbus_connection;
+static char *service_name;
+static gchar *callback_service;
+static gchar *callback_path;
+static GModule *library;
+static GtkWidget *xembed;
+static Window socket_id;
+static Window parent_id;
+static int top_w, top_h;
+static int update_dimension_timer;
+static int stdin_read_watch;
+
+static NPPluginFuncs np_funcs; /* plugin functions */
+static NPP npp; /* single instance of the plugin */
+static NPWindow np_window;
+static NPObject *js_window;
+static NPObject *scriptable_peer;
+static NPSavedData *saved_data;
+static NPClass js_class;
+static GTree *stream_list;
+static gpointer current_stream_id;
+static uint32_t stream_chunk_size;
+static char stream_buf[32 * 1024];
+static unsigned int stream_buf_pos;
+static int stream_id_counter;
+static GTree *identifiers;
+static int js_obj_counter;
+typedef struct _StreamInfo {
+ NPStream np_stream;
+ /*unsigned int stream_buf_pos;*/
+ unsigned int stream_pos;
+ unsigned int total;
+ unsigned int reason;
+ char *url;
+ char *mimetype;
+ char *target;
+ bool notify;
+ bool called_plugin;
+ bool destroyed;
+} StreamInfo;
+struct JsObject;
+typedef struct _JsObject {
+ NPObject npobject;
+ struct _JsObject * parent;
+ char * name;
+} JsObject;
+
+static NP_GetMIMEDescriptionUPP npGetMIMEDescription;
+static NP_GetValueUPP npGetValue;
+static NP_InitializeUPP npInitialize;
+static NP_ShutdownUPP npShutdown;
+
+static void callFunction(int stream, const char *func, int first_arg_type, ...);
+static void readStdin (gpointer d, gint src, GdkInputCondition cond);
+static char * evaluate (const char *script);
+
+/*----------------%<---------------------------------------------------------*/
+
+static void print (const char * format, ...) {
+ va_list vl;
+ va_start (vl, format);
+ vprintf (format, vl);
+ va_end (vl);
+ fflush (stdout);
+}
+
+/*----------------%<---------------------------------------------------------*/
+
+static gint streamCompare (gconstpointer a, gconstpointer b) {
+ return (long)a - (long)b;
+}
+
+static void freeStream (StreamInfo *si) {
+ if (!g_tree_remove (stream_list, si->np_stream.ndata))
+ print ("WARNING freeStream not in tree\n");
+ g_free (si->url);
+ if (si->mimetype)
+ g_free (si->mimetype);
+ if (si->target)
+ g_free (si->target);
+ free (si);
+}
+
+static gboolean requestStream (void * p) {
+ StreamInfo *si = (StreamInfo *) g_tree_lookup (stream_list, p);
+ if (si) {
+ if (!callback_service)
+ current_stream_id = p;
+ if (!stdin_read_watch)
+ stdin_read_watch = gdk_input_add (0, GDK_INPUT_READ,readStdin,NULL);
+ if (si->target)
+ callFunction ((int)(long)p, "getUrl",
+ DBUS_TYPE_STRING, &si->url,
+ DBUS_TYPE_STRING, &si->target, DBUS_TYPE_INVALID);
+ else
+ callFunction ((int)(long)p, "getUrl",
+ DBUS_TYPE_STRING, &si->url, DBUS_TYPE_INVALID);
+ } else {
+ print ("requestStream %d not found", (long) p);
+ }
+ return 0; /* single shot */
+}
+
+static gboolean destroyStream (void * p) {
+ StreamInfo *si = (StreamInfo *) g_tree_lookup (stream_list, p);
+ print ("FIXME destroyStream\n");
+ if (si)
+ callFunction ((int)(long)p, "destroy", DBUS_TYPE_INVALID);
+ return 0; /* single shot */
+}
+
+static void removeStream (void * p) {
+ StreamInfo *si = (StreamInfo *) g_tree_lookup (stream_list, p);
+
+ if (si) {
+ print ("removeStream %d rec:%d reason %d\n", (long) p, si->stream_pos, si->reason);
+ if (!si->destroyed) {
+ if (si->called_plugin && !si->target) {
+ si->np_stream.end = si->total;
+ np_funcs.destroystream (npp, &si->np_stream, si->reason);
+ }
+ if (si->notify)
+ np_funcs.urlnotify (npp,
+ si->url, si->reason, si->np_stream.notifyData);
+ }
+ freeStream (si);
+ }
+}
+
+static int32_t writeStream (gpointer p, char *buf, uint32_t count) {
+ int32_t sz = -1;
+ StreamInfo *si = (StreamInfo *) g_tree_lookup (stream_list, p);
+ /*print ("writeStream found %d count %d\n", !!si, count);*/
+ if (si) {
+ if (si->reason > NPERR_NO_ERROR) {
+ sz = count; /* stream closed, skip remainings */
+ } else {
+ if (!si->called_plugin) {
+ uint16 stype = NP_NORMAL;
+ NPError err = np_funcs.newstream (npp, si->mimetype
+ ? si->mimetype
+ : "text/plain",
+ &si->np_stream, 0, &stype);
+ if (err != NPERR_NO_ERROR) {
+ g_printerr ("newstream error %d\n", err);
+ destroyStream (p);
+ return count; /* stream not accepted, skip remainings */
+ }
+ print ("newStream %d type:%d\n", (long) p, stype);
+ si->called_plugin = true;
+ }
+ if (count) /* urls with a target returns zero bytes */
+ sz = np_funcs.writeready (npp, &si->np_stream);
+ if (sz > 0) {
+ sz = np_funcs.write (npp, &si->np_stream, si->stream_pos,
+ (int32_t) count > sz ? sz : (int32_t) count, buf);
+ if (sz < 0) /*FIXME plugin destroys stream here*/
+ g_timeout_add (0, destroyStream, p);
+ } else {
+ sz = 0;
+ }
+ si->stream_pos += sz;
+ if (si->stream_pos == si->total) {
+ if (si->stream_pos || !count)
+ removeStream (p);
+ else
+ g_timeout_add (0, destroyStream, p);
+ }
+ }
+ }
+ return sz;
+}
+
+static StreamInfo *addStream (const char *url, const char *mime, const char *target, void *notify_data, bool notify) {
+ StreamInfo *si = (StreamInfo *) malloc (sizeof (StreamInfo));
+
+ memset (si, 0, sizeof (StreamInfo));
+ si->url = g_strdup (url);
+ si->np_stream.url = si->url;
+ if (mime)
+ si->mimetype = g_strdup (mime);
+ if (target)
+ si->target = g_strdup (target);
+ si->np_stream.notifyData = notify_data;
+ si->notify = notify;
+ si->np_stream.ndata = (void *) (long) (stream_id_counter++);
+ print ("add stream %d\n", (long) si->np_stream.ndata);
+ g_tree_insert (stream_list, si->np_stream.ndata, si);
+
+ g_timeout_add (0, requestStream, si->np_stream.ndata);
+
+ return si;
+}
+
+/*----------------%<---------------------------------------------------------*/
+
+static void createJsName (JsObject * obj, char **name, uint32_t * len) {
+ int slen = strlen (obj->name);
+ if (obj->parent) {
+ *len += slen + 1;
+ createJsName (obj->parent, name, len);
+ } else {
+ *name = (char *) malloc (*len + slen + 1);
+ *(*name + *len + slen) = 0;
+ *len = 0;
+ }
+ if (obj->parent) {
+ *(*name + *len) = '.';
+ *len += 1;
+ }
+ memcpy (*name + *len, obj->name, slen);
+ *len += slen;
+}
+
+static char *nsVariant2Str (const NPVariant *value) {
+ char *str;
+ switch (value->type) {
+ case NPVariantType_String:
+ str = (char *) malloc (value->value.stringValue.utf8length + 3);
+ sprintf (str, "'%s'", value->value.stringValue.utf8characters);
+ break;
+ case NPVariantType_Int32:
+ str = (char *) malloc (16);
+ snprintf (str, 15, "%d", value->value.intValue);
+ break;
+ case NPVariantType_Double:
+ str = (char *) malloc (64);
+ snprintf (str, 63, "%f", value->value.doubleValue);
+ break;
+ case NPVariantType_Bool:
+ str = strdup (value->value.boolValue ? "true" : "false");
+ break;
+ case NPVariantType_Null:
+ str = strdup ("null");
+ break;
+ case NPVariantType_Object:
+ if (&js_class == value->value.objectValue->_class) {
+ JsObject *jv = (JsObject *) value->value.objectValue;
+ char *val;
+ uint32_t vlen = 0;
+ createJsName (jv, &val, &vlen);
+ str = strdup (val);
+ free (val);
+ }
+ break;
+ default:
+ str = strdup ("");
+ break;
+ }
+ return str;
+}
+
+/*----------------%<---------------------------------------------------------*/
+
+static NPObject * nsCreateObject (NPP instance, NPClass *aClass) {
+ NPObject *obj;
+ if (aClass && aClass->allocate) {
+ obj = aClass->allocate (instance, aClass);
+ } else {
+ obj = (NPObject *) malloc (sizeof (NPObject));
+ memset (obj, 0, sizeof (NPObject));
+ obj->_class = aClass;
+ /*obj = js_class.allocate (instance, &js_class);/ *add null class*/
+ print ("NPN_CreateObject\n");
+ }
+ obj->referenceCount = 1;
+ return obj;
+}
+
+static NPObject *nsRetainObject (NPObject *npobj) {
+ /*print( "nsRetainObject %p\n", npobj);*/
+ npobj->referenceCount++;
+ return npobj;
+}
+
+static void nsReleaseObject (NPObject *obj) {
+ /*print ("NPN_ReleaseObject\n");*/
+ if (! (--obj->referenceCount))
+ obj->_class->deallocate (obj);
+}
+
+static NPError nsGetURL (NPP instance, const char* url, const char* target) {
+ (void)instance;
+ print ("nsGetURL %s %s\n", url, target ? target : "");
+ addStream (url, 0L, target, 0L, false);
+ return NPERR_NO_ERROR;
+}
+
+static NPError nsPostURL (NPP instance, const char *url,
+ const char *target, uint32 len, const char *buf, NPBool file) {
+ (void)instance; (void)len; (void)buf; (void)file;
+ print ("nsPostURL %s %s\n", url, target ? target : "");
+ addStream (url, 0L, target, 0L, false);
+ return NPERR_NO_ERROR;
+}
+
+static NPError nsRequestRead (NPStream *stream, NPByteRange *rangeList) {
+ (void)stream; (void)rangeList;
+ print ("nsRequestRead\n");
+ return NPERR_NO_ERROR;
+}
+
+static NPError nsNewStream (NPP instance, NPMIMEType type,
+ const char *target, NPStream **stream) {
+ (void)instance; (void)type; (void)stream; (void)target;
+ print ("nsNewStream\n");
+ return NPERR_NO_ERROR;
+}
+
+static int32 nsWrite (NPP instance, NPStream* stream, int32 len, void *buf) {
+ (void)instance; (void)len; (void)buf; (void)stream;
+ print ("nsWrite\n");
+ return 0;
+}
+
+static NPError nsDestroyStream (NPP instance, NPStream *stream, NPError reason) {
+ StreamInfo *si = (StreamInfo *) g_tree_lookup (stream_list, stream->ndata);
+ (void)instance;
+ print ("nsDestroyStream\n");
+ if (si) {
+ si->reason = reason;
+ si->destroyed = true;
+ g_timeout_add (0, destroyStream, stream->ndata);
+ return NPERR_NO_ERROR;
+ }
+ return NPERR_NO_DATA;
+}
+
+static void nsStatus (NPP instance, const char* message) {
+ (void)instance;
+ print ("NPN_Status %s\n", message ? message : "-");
+}
+
+static const char* nsUserAgent (NPP instance) {
+ (void)instance;
+ print ("NPN_UserAgent\n");
+ return "";
+}
+
+static void *nsAlloc (uint32 size) {
+ return malloc (size);
+}
+
+static void nsMemFree (void* ptr) {
+ free (ptr);
+}
+
+static uint32 nsMemFlush (uint32 size) {
+ (void)size;
+ print ("NPN_MemFlush\n");
+ return 0;
+}
+
+static void nsReloadPlugins (NPBool reloadPages) {
+ (void)reloadPages;
+ print ("NPN_ReloadPlugins\n");
+}
+
+static JRIEnv* nsGetJavaEnv () {
+ print ("NPN_GetJavaEnv\n");
+ return NULL;
+}
+
+static jref nsGetJavaPeer (NPP instance) {
+ (void)instance;
+ print ("NPN_GetJavaPeer\n");
+ return NULL;
+}
+
+static NPError nsGetURLNotify (NPP instance, const char* url, const char* target, void *notify) {
+ (void)instance;
+ print ("NPN_GetURLNotify %s %s\n", url, target ? target : "");
+ addStream (url, 0L, target, notify, true);
+ return NPERR_NO_ERROR;
+}
+
+static NPError nsPostURLNotify (NPP instance, const char* url, const char* target, uint32 len, const char* buf, NPBool file, void *notify) {
+ (void)instance; (void)len; (void)buf; (void)file;
+ print ("NPN_PostURLNotify\n");
+ addStream (url, 0L, target, notify, true);
+ return NPERR_NO_ERROR;
+}
+
+static NPError nsGetValue (NPP instance, NPNVariable variable, void *value) {
+ print ("NPN_GetValue %d\n", variable & ~NP_ABI_MASK);
+ switch (variable) {
+ case NPNVxDisplay:
+ *(void**)value = (void*)(long) gdk_x11_get_default_xdisplay ();
+ break;
+ case NPNVxtAppContext:
+ *(void**)value = NULL;
+ break;
+ case NPNVnetscapeWindow:
+ print ("NPNVnetscapeWindow\n");
+ break;
+ case NPNVjavascriptEnabledBool:
+ *(int*)value = 1;
+ break;
+ case NPNVasdEnabledBool:
+ *(int*)value = 0;
+ break;
+ case NPNVisOfflineBool:
+ *(int*)value = 0;
+ break;
+ case NPNVserviceManager:
+ *(int*)value = 0;
+ break;
+ case NPNVToolkit:
+ *(int*)value = NPNVGtk2;
+ break;
+ case NPNVSupportsXEmbedBool:
+ *(int*)value = 1;
+ break;
+ case NPNVWindowNPObject:
+ if (!js_window) {
+ JsObject *jo = (JsObject*) nsCreateObject (instance, &js_class);
+ jo->name = g_strdup ("window");
+ js_window = (NPObject *) jo;
+ }
+ *(NPObject**)value = nsRetainObject (js_window);
+ break;
+ case NPNVPluginElementNPObject: {
+ JsObject * obj = (JsObject *) nsCreateObject (instance, &js_class);
+ obj->name = g_strdup ("this");
+ *(NPObject**)value = (NPObject *) obj;
+ break;
+ }
+ default:
+ *(int*)value = 0;
+ print ("unknown value\n");
+ return NPERR_GENERIC_ERROR;
+ }
+ return NPERR_NO_ERROR;
+}
+
+static NPError nsSetValue (NPP instance, NPPVariable variable, void *value) {
+ /* NPPVpluginWindowBool */
+ (void)instance; (void)value;
+ print ("NPN_SetValue %d\n", variable & ~NP_ABI_MASK);
+ return NPERR_NO_ERROR;
+}
+
+static void nsInvalidateRect (NPP instance, NPRect *invalidRect) {
+ (void)instance; (void)invalidRect;
+ print ("NPN_InvalidateRect\n");
+}
+
+static void nsInvalidateRegion (NPP instance, NPRegion invalidRegion) {
+ (void)instance; (void)invalidRegion;
+ print ("NPN_InvalidateRegion\n");
+}
+
+static void nsForceRedraw (NPP instance) {
+ (void)instance;
+ print ("NPN_ForceRedraw\n");
+}
+
+static NPIdentifier nsGetStringIdentifier (const NPUTF8* name) {
+ /*print ("NPN_GetStringIdentifier %s\n", name);*/
+ gpointer id = g_tree_lookup (identifiers, name);
+ if (!id) {
+ id = strdup (name);
+ g_tree_insert (identifiers, id, id);
+ }
+ return id;
+}
+
+static void nsGetStringIdentifiers (const NPUTF8** names, int32_t nameCount,
+ NPIdentifier* ids) {
+ (void)names; (void)nameCount; (void)ids;
+ print ("NPN_GetStringIdentifiers\n");
+}
+
+static NPIdentifier nsGetIntIdentifier (int32_t intid) {
+ print ("NPN_GetIntIdentifier %d\n", intid);
+ return (NPIdentifier) (long) intid;
+}
+
+static bool nsIdentifierIsString (NPIdentifier name) {
+ print ("NPN_IdentifierIsString\n");
+ return !!g_tree_lookup (identifiers, name);
+}
+
+static NPUTF8 * nsUTF8FromIdentifier (NPIdentifier name) {
+ print ("NPN_UTF8FromIdentifier\n");
+ char *str = g_tree_lookup (identifiers, name);
+ if (str)
+ return strdup (str);
+ return NULL;
+}
+
+static int32_t nsIntFromIdentifier (NPIdentifier identifier) {
+ print ("NPN_IntFromIdentifier\n");
+ return (int32_t) (long) identifier;
+}
+
+static bool nsInvoke (NPP instance, NPObject * npobj, NPIdentifier method,
+ const NPVariant *args, uint32_t arg_count, NPVariant *result) {
+ (void)instance;
+ /*print ("NPN_Invoke %s\n", id);*/
+ return npobj->_class->invoke (npobj, method, args, arg_count, result);
+}
+
+static bool nsInvokeDefault (NPP instance, NPObject * npobj,
+ const NPVariant * args, uint32_t arg_count, NPVariant * result) {
+ (void)instance;
+ return npobj->_class->invokeDefault (npobj,args, arg_count, result);
+}
+
+static bool nsEvaluate (NPP instance, NPObject * npobj, NPString * script,
+ NPVariant * result) {
+ char * this_var;
+ char * this_var_type;
+ char * this_var_string;
+ char * jsscript;
+ (void) npobj; /*FIXME scope, search npobj window*/
+ print ("NPN_Evaluate:");
+
+ /* assign to a js variable */
+ this_var = (char *) malloc (64);
+ sprintf (this_var, "this.__kmplayer__obj_%d", js_obj_counter);
+
+ jsscript = (char *) malloc (strlen (this_var) + script->utf8length + 3);
+ sprintf (jsscript, "%s=%s;", this_var, script->utf8characters);
+ this_var_string = evaluate (jsscript);
+ free (jsscript);
+
+ if (this_var_string) {
+ /* get type of js this_var */
+ jsscript = (char *) malloc (strlen (this_var) + 9);
+ sprintf (jsscript, "typeof %s;", this_var);
+ this_var_type = evaluate (jsscript);
+ free (jsscript);
+
+ if (this_var_type) {
+ if (!strcasecmp (this_var_type, "undefined")) {
+ result->type = NPVariantType_Null;
+ } else if (!strcasecmp (this_var_type, "object")) {
+ JsObject *jo = (JsObject *)nsCreateObject (instance, &js_class);
+ js_obj_counter++;
+ result->type = NPVariantType_Object;
+ jo->name = g_strdup (this_var);
+ result->value.objectValue = (NPObject *)jo;
+ } else { /* FIXME numbers/void/undefined*/
+ result->type = NPVariantType_String;
+ result->value.stringValue.utf8characters =
+ g_strdup (this_var_string);
+ result->value.stringValue.utf8length=strlen (this_var_string)+1;
+ }
+ g_free (this_var_type);
+ }
+ g_free (this_var_string);
+ } else {
+ print (" => error\n");
+ return false;
+ }
+ free (this_var);
+
+ return true;
+}
+
+static bool nsGetProperty (NPP instance, NPObject * npobj,
+ NPIdentifier property, NPVariant * result) {
+ (void)instance;
+ return npobj->_class->getProperty (npobj, property, result);
+}
+
+static bool nsSetProperty (NPP instance, NPObject * npobj,
+ NPIdentifier property, const NPVariant *value) {
+ (void)instance;
+ return npobj->_class->setProperty (npobj, property, value);
+}
+
+static bool nsRemoveProperty (NPP inst, NPObject * npobj, NPIdentifier prop) {
+ (void)inst;
+ return npobj->_class->removeProperty (npobj, prop);
+}
+
+static bool nsHasProperty (NPP instance, NPObject * npobj, NPIdentifier prop) {
+ (void)instance;
+ return npobj->_class->hasProperty (npobj, prop);
+}
+
+static bool nsHasMethod (NPP instance, NPObject * npobj, NPIdentifier method) {
+ (void)instance;
+ return npobj->_class->hasMethod (npobj, method);
+}
+
+static void nsReleaseVariantValue (NPVariant * variant) {
+ /*print ("NPN_ReleaseVariantValue\n");*/
+ switch (variant->type) {
+ case NPVariantType_String:
+ if (variant->value.stringValue.utf8characters)
+ g_free ((char *) variant->value.stringValue.utf8characters);
+ break;
+ case NPVariantType_Object:
+ if (variant->value.objectValue)
+ nsReleaseObject (variant->value.objectValue);
+ break;
+ default:
+ break;
+ }
+ variant->type = NPVariantType_Null;
+}
+
+static void nsSetException (NPObject *npobj, const NPUTF8 *message) {
+ (void)npobj;
+ print ("NPN_SetException %s\n", message ? message : "-");
+}
+
+static bool nsPushPopupsEnabledState (NPP instance, NPBool enabled) {
+ (void)instance;
+ print ("NPN_PushPopupsEnabledState %d\n", enabled);
+ return false;
+}
+
+static bool nsPopPopupsEnabledState (NPP instance) {
+ (void)instance;
+ print ("NPN_PopPopupsEnabledState\n");
+ return false;
+}
+
+/*----------------%<---------------------------------------------------------*/
+
+static NPObject * windowClassAllocate (NPP instance, NPClass *aClass) {
+ (void)instance;
+ /*print ("windowClassAllocate\n");*/
+ JsObject * jo = (JsObject *) malloc (sizeof (JsObject));
+ memset (jo, 0, sizeof (JsObject));
+ jo->npobject._class = aClass;
+ return (NPObject *) jo;
+}
+
+static void windowClassDeallocate (NPObject *npobj) {
+ JsObject *jo = (JsObject *) npobj;
+ /*print ("windowClassDeallocate\n");*/
+ if (jo->parent) {
+ nsReleaseObject ((NPObject *) jo->parent);
+ } else if (jo->name && !strncmp (jo->name, "this.__kmplayer__obj_", 21)) {
+ char *script = (char *) malloc (strlen (jo->name) + 7);
+ char *result;
+ char *counter = strrchr (jo->name, '_');
+ sprintf (script, "%s=null;", jo->name);
+ result = evaluate (script);
+ free (script);
+ g_free (result);
+ if (counter) {
+ int c = strtol (counter +1, NULL, 10);
+ if (c == js_obj_counter -1)
+ js_obj_counter--; /*poor man's variable name reuse */
+ }
+ }
+ if (jo->name)
+ g_free (jo->name);
+ if (npobj == js_window) {
+ print ("WARNING deleting window object\n");
+ js_window = NULL;
+ }
+ free (npobj);
+}
+
+static void windowClassInvalidate (NPObject *npobj) {
+ (void)npobj;
+ print ("windowClassInvalidate\n");
+}
+
+static bool windowClassHasMethod (NPObject *npobj, NPIdentifier name) {
+ (void)npobj; (void)name;
+ print ("windowClassHasMehtod\n");
+ return false;
+}
+
+static bool windowClassInvoke (NPObject *npobj, NPIdentifier method,
+ const NPVariant *args, uint32_t arg_count, NPVariant *result) {
+ JsObject * jo = (JsObject *) npobj;
+ NPString str = { NULL, 0 };
+ char buf[512];
+ int pos, i;
+ bool res;
+ char * id = (char *) g_tree_lookup (identifiers, method);
+ /*print ("windowClassInvoke\n");*/
+
+ result->type = NPVariantType_Null;
+ result->value.objectValue = NULL;
+
+ if (!id) {
+ print ("Invoke invalid id\n");
+ return false;
+ }
+ print ("Invoke %s\n", id);
+ createJsName (jo, (char **)&str.utf8characters, &str.utf8length);
+ pos = snprintf (buf, sizeof (buf), "%s.%s(", str.utf8characters, id);
+ free ((char *) str.utf8characters);
+ for (i = 0; i < arg_count; i++) {
+ char *arg = nsVariant2Str (args + i);
+ pos += snprintf (buf + pos, sizeof (buf) - pos, i ? ",%s" : "%s", arg);
+ free (arg);
+ }
+ pos += snprintf (buf + pos, sizeof (buf) - pos, ")");
+
+ str.utf8characters = buf;
+ str.utf8length = pos;
+ res = nsEvaluate (npp, npobj, &str, result);
+
+ return true;
+}
+
+static bool windowClassInvokeDefault (NPObject *npobj,
+ const NPVariant *args, uint32_t arg_count, NPVariant *result) {
+ (void)npobj; (void)args; (void)arg_count; (void)result;
+ print ("windowClassInvokeDefault\n");
+ return false;
+}
+
+static bool windowClassHasProperty (NPObject *npobj, NPIdentifier name) {
+ (void)npobj; (void)name;
+ print ("windowClassHasProperty\n");
+ return false;
+}
+
+static bool windowClassGetProperty (NPObject *npobj, NPIdentifier property,
+ NPVariant *result) {
+ char * id = (char *) g_tree_lookup (identifiers, property);
+ JsObject jo;
+ NPString fullname = { NULL, 0 };
+ bool res;
+
+ print ("GetProperty %s\n", id);
+ result->type = NPVariantType_Null;
+ result->value.objectValue = NULL;
+
+ if (!id)
+ return false;
+
+ if (!strcmp (((JsObject *) npobj)->name, "window") &&
+ !strcmp (id, "top")) {
+ result->type = NPVariantType_Object;
+ result->value.objectValue = nsRetainObject (js_window);
+ return true;
+ }
+
+ jo.name = id;
+ jo.parent = (JsObject *) npobj;
+ createJsName (&jo, (char **)&fullname.utf8characters, &fullname.utf8length);
+
+ res = nsEvaluate (npp, npobj, &fullname, result);
+
+ free ((char *) fullname.utf8characters);
+
+ return res;
+}
+
+static bool windowClassSetProperty (NPObject *npobj, NPIdentifier property,
+ const NPVariant *value) {
+ char *id = (char *) g_tree_lookup (identifiers, property);
+ char *script, *var_name, *var_val, *res;
+ JsObject jo;
+ uint32_t len = 0;
+
+ if (!id)
+ return false;
+
+ jo.name = id;
+ jo.parent = (JsObject *) npobj;
+ createJsName (&jo, &var_name, &len);
+
+ var_val = nsVariant2Str (value);
+ script = (char *) malloc (len + strlen (var_val) + 3);
+ sprintf (script, "%s=%s;", var_name, var_val);
+ free (var_name);
+ free (var_val);
+ print ("SetProperty %s\n", script);
+
+ res = evaluate (script);
+ if (res)
+ g_free (res);
+ free (script);
+
+
+ return true;
+}
+
+static bool windowClassRemoveProperty (NPObject *npobj, NPIdentifier name) {
+ (void)npobj; (void)name;
+ print ("windowClassRemoveProperty\n");
+ return false;
+}
+
+
+/*----------------%<---------------------------------------------------------*/
+
+static void shutDownPlugin() {
+ if (scriptable_peer) {
+ nsReleaseObject (scriptable_peer);
+ scriptable_peer = NULL;
+ }
+ if (npShutdown) {
+ if (npp) {
+ np_funcs.destroy (npp, &saved_data);
+ free (npp);
+ npp = 0L;
+ }
+ npShutdown();
+ npShutdown = 0;
+ }
+}
+
+static void readStdin (gpointer p, gint src, GdkInputCondition cond) {
+ char *buf_ptr = stream_buf;
+ gsize bytes_read = read (src,
+ stream_buf + stream_buf_pos,
+ sizeof (stream_buf) - stream_buf_pos);
+ (void)cond; (void)p;
+ if (bytes_read > 0)
+ stream_buf_pos += bytes_read;
+
+ /*print ("readStdin %d\n", bytes_read);*/
+ while (buf_ptr < stream_buf + stream_buf_pos) {
+ uint32_t write_len;
+ int32_t bytes_written;
+
+ if (callback_service && !stream_chunk_size) {
+ /* read header info */
+ if (stream_buf + stream_buf_pos < buf_ptr + 2 * sizeof (uint32_t))
+ break; /* need more data */
+ current_stream_id = (gpointer)(long)*(uint32_t*)(buf_ptr);
+ stream_chunk_size = *((uint32_t *)(buf_ptr + sizeof (uint32_t)));
+ /*print ("header %d %d\n",(long)current_stream_id, stream_chunk_size);*/
+ buf_ptr += 2 * sizeof (uint32_t);
+ if (stream_chunk_size && stream_buf + stream_buf_pos == buf_ptr) {
+ stream_buf_pos = 0;
+ break; /* only read the header for chunk with data */
+ }
+ }
+ /* feed it to the stream */
+ write_len = stream_buf + stream_buf_pos - buf_ptr;
+ if (callback_service && write_len > stream_chunk_size)
+ write_len = stream_chunk_size;
+ bytes_written = writeStream (current_stream_id, buf_ptr, write_len);
+ if (bytes_written < 0) {
+ print ("couldn't write to stream %d\n", (long)current_stream_id);
+ bytes_written = write_len; /* assume stream destroyed, skip */
+ }
+
+ /* update chunk status */
+ if (bytes_written > 0) {
+ buf_ptr += bytes_written;
+ /*print ("update chunk %d %d\n", bytes_written, stream_chunk_size);*/
+ stream_chunk_size -= bytes_written;
+ } else {
+ /* FIXME if plugin didn't accept the data retry later, suspend stdin reading */
+ break;
+ }
+
+ }
+ /* update buffer */
+ /*print ("buffer written:%d bufpos:%d\n", buf_ptr-stream_buf, stream_buf_pos);*/
+ if (stream_buf + stream_buf_pos == buf_ptr) {
+ stream_buf_pos = 0;
+ } else {
+ g_assert (buf_ptr < stream_buf + stream_buf_pos);
+ stream_buf_pos -= (stream_buf + stream_buf_pos - buf_ptr);
+ memmove (stream_buf, buf_ptr, stream_buf_pos);
+ }
+ if (bytes_read <= 0) { /* eof of stdin, only for 'cat foo | knpplayer' */
+ StreamInfo*si=(StreamInfo*)g_tree_lookup(stream_list,current_stream_id);
+ si->reason = NPRES_DONE;
+ removeStream (current_stream_id);
+ if (stdin_read_watch) {
+ gdk_input_remove (stdin_read_watch);
+ stdin_read_watch = 0;
+ }
+ }
+}
+
+static int initPlugin (const char *plugin_lib) {
+ NPNetscapeFuncs ns_funcs;
+ NPError np_err;
+ char *pname;
+
+ print ("starting %s with %s\n", plugin_lib, object_url);
+ library = g_module_open (plugin_lib, G_MODULE_BIND_LAZY);
+ if (!library) {
+ print ("failed to load %s\n", plugin_lib);
+ return -1;
+ }
+ if (!g_module_symbol (library,
+ "NP_GetMIMEDescription", (gpointer *)&npGetMIMEDescription)) {
+ print ("undefined reference to load NP_GetMIMEDescription\n");
+ return -1;
+ }
+ if (!g_module_symbol (library,
+ "NP_GetValue", (gpointer *)&npGetValue)) {
+ print ("undefined reference to load NP_GetValue\n");
+ }
+ if (!g_module_symbol (library,
+ "NP_Initialize", (gpointer *)&npInitialize)) {
+ print ("undefined reference to load NP_Initialize\n");
+ return -1;
+ }
+ if (!g_module_symbol (library,
+ "NP_Shutdown", (gpointer *)&npShutdown)) {
+ print ("undefined reference to load NP_Shutdown\n");
+ return -1;
+ }
+ print ("startup succeeded %s\n", npGetMIMEDescription ());
+ memset (&ns_funcs, 0, sizeof (NPNetscapeFuncs));
+ ns_funcs.size = sizeof (NPNetscapeFuncs);
+ ns_funcs.version = (NP_VERSION_MAJOR << 8) + NP_VERSION_MINOR;
+ ns_funcs.geturl = nsGetURL;
+ ns_funcs.posturl = nsPostURL;
+ ns_funcs.requestread = nsRequestRead;
+ ns_funcs.newstream = nsNewStream;
+ ns_funcs.write = nsWrite;
+ ns_funcs.destroystream = nsDestroyStream;
+ ns_funcs.status = nsStatus;
+ ns_funcs.uagent = nsUserAgent;
+ ns_funcs.memalloc = nsAlloc;
+ ns_funcs.memfree = nsMemFree;
+ ns_funcs.memflush = nsMemFlush;
+ ns_funcs.reloadplugins = nsReloadPlugins;
+ ns_funcs.getJavaEnv = nsGetJavaEnv;
+ ns_funcs.getJavaPeer = nsGetJavaPeer;
+ ns_funcs.geturlnotify = nsGetURLNotify;
+ ns_funcs.posturlnotify = nsPostURLNotify;
+ ns_funcs.getvalue = nsGetValue;
+ ns_funcs.setvalue = nsSetValue;
+ ns_funcs.invalidaterect = nsInvalidateRect;
+ ns_funcs.invalidateregion = nsInvalidateRegion;
+ ns_funcs.forceredraw = nsForceRedraw;
+ ns_funcs.getstringidentifier = nsGetStringIdentifier;
+ ns_funcs.getstringidentifiers = nsGetStringIdentifiers;
+ ns_funcs.getintidentifier = nsGetIntIdentifier;
+ ns_funcs.identifierisstring = nsIdentifierIsString;
+ ns_funcs.utf8fromidentifier = nsUTF8FromIdentifier;
+ ns_funcs.intfromidentifier = nsIntFromIdentifier;
+ ns_funcs.createobject = nsCreateObject;
+ ns_funcs.retainobject = nsRetainObject;
+ ns_funcs.releaseobject = nsReleaseObject;
+ ns_funcs.invoke = nsInvoke;
+ ns_funcs.invokeDefault = nsInvokeDefault;
+ ns_funcs.evaluate = nsEvaluate;
+ ns_funcs.getproperty = nsGetProperty;
+ ns_funcs.setproperty = nsSetProperty;
+ ns_funcs.removeproperty = nsRemoveProperty;
+ ns_funcs.hasproperty = nsHasProperty;
+ ns_funcs.hasmethod = nsHasMethod;
+ ns_funcs.releasevariantvalue = nsReleaseVariantValue;
+ ns_funcs.setexception = nsSetException;
+ ns_funcs.pushpopupsenabledstate = nsPushPopupsEnabledState;
+ ns_funcs.poppopupsenabledstate = nsPopPopupsEnabledState;
+
+ js_class.structVersion = NP_CLASS_STRUCT_VERSION;
+ js_class.allocate = windowClassAllocate;
+ js_class.deallocate = windowClassDeallocate;
+ js_class.invalidate = windowClassInvalidate;
+ js_class.hasMethod = windowClassHasMethod;
+ js_class.invoke = windowClassInvoke;
+ js_class.invokeDefault = windowClassInvokeDefault;
+ js_class.hasProperty = windowClassHasProperty;
+ js_class.getProperty = windowClassGetProperty;
+ js_class.setProperty = windowClassSetProperty;
+ js_class.removeProperty = windowClassRemoveProperty;
+
+ np_funcs.size = sizeof (NPPluginFuncs);
+
+ np_err = npInitialize (&ns_funcs, &np_funcs);
+ if (np_err != NPERR_NO_ERROR) {
+ print ("NP_Initialize failure %d\n", np_err);
+ npShutdown = 0;
+ return -1;
+ }
+ np_err = npGetValue (NULL, NPPVpluginNameString, &pname);
+ if (np_err == NPERR_NO_ERROR)
+ print ("NP_GetValue Name %s\n", pname);
+ np_err = npGetValue (NULL, NPPVpluginDescriptionString, &pname);
+ if (np_err == NPERR_NO_ERROR)
+ print ("NP_GetValue Description %s\n", pname);
+ return 0;
+}
+
+static int newPlugin (NPMIMEType mime, int16 argc, char *argn[], char *argv[]) {
+ NPSetWindowCallbackStruct ws_info;
+ NPError np_err;
+ Display *display;
+ int screen;
+ int i;
+ int needs_xembed;
+ uint32_t width = 0, height = 0;
+
+ for (i = 0; i < argc; i++) {
+ if (!strcasecmp (argn[i], "width"))
+ width = strtol (argv[i], 0L, 10);
+ else if (!strcasecmp (argn[i], "height"))
+ height = strtol (argv[i], 0L, 10);
+ }
+ if (width > 0 && height > 0)
+ callFunction (-1, "dimension",
+ DBUS_TYPE_UINT32, &width, DBUS_TYPE_UINT32, &height,
+ DBUS_TYPE_INVALID);
+
+ npp = (NPP_t*)malloc (sizeof (NPP_t));
+ memset (npp, 0, sizeof (NPP_t));
+ np_err = np_funcs.newp (mime, npp, NP_EMBED, argc, argn, argv, saved_data);
+ if (np_err != NPERR_NO_ERROR) {
+ print ("NPP_New failure %d %p %p\n", np_err, np_funcs, np_funcs.newp);
+ return -1;
+ }
+ if (np_funcs.getvalue) {
+ char *pname;
+ void *iid;
+ np_err = np_funcs.getvalue ((void*)npp,
+ NPPVpluginNameString, (void*)&pname);
+ if (np_err == NPERR_NO_ERROR)
+ print ("plugin name %s\n", pname);
+ np_err = np_funcs.getvalue ((void*)npp,
+ NPPVpluginNeedsXEmbed, (void*)&needs_xembed);
+ if (np_err != NPERR_NO_ERROR || !needs_xembed) {
+ print ("NPP_GetValue NPPVpluginNeedsXEmbed failure %d\n", np_err);
+ shutDownPlugin();
+ return -1;
+ }
+ np_err = np_funcs.getvalue ((void*)npp,
+ NPPVpluginScriptableIID, (void*)&iid);
+ np_err = np_funcs.getvalue ((void*)npp,
+ NPPVpluginScriptableNPObject, (void*)&scriptable_peer);
+ if (np_err != NPERR_NO_ERROR || !scriptable_peer)
+ print ("NPP_GetValue no NPPVpluginScriptableNPObject %d\n", np_err);
+ }
+ memset (&np_window, 0, sizeof (NPWindow));
+ display = gdk_x11_get_default_xdisplay ();
+ np_window.x = 0;
+ np_window.y = 0;
+ np_window.width = 1920;
+ np_window.height = 1200;
+ np_window.window = (void*)socket_id;
+ np_window.type = NPWindowTypeWindow;
+ ws_info.type = NP_SETWINDOW;
+ screen = DefaultScreen (display);
+ ws_info.display = (void*)(long)display;
+ ws_info.visual = (void*)(long)DefaultVisual (display, screen);
+ ws_info.colormap = DefaultColormap (display, screen);
+ ws_info.depth = DefaultDepth (display, screen);
+ print ("display %u %dx%d\n", socket_id, width, height);
+ np_window.ws_info = (void*)&ws_info;
+
+ GtkAllocation allocation;
+ allocation.x = 0;
+ allocation.y = 0;
+ allocation.width = np_window.width;
+ allocation.height = np_window.height;
+ gtk_widget_size_allocate (xembed, &allocation);
+
+ np_err = np_funcs.setwindow (npp, &np_window);
+
+ return 0;
+}
+
+static gpointer startPlugin (const char *url, const char *mime,
+ int argc, char *argn[], char *argv[]) {
+ StreamInfo *si;
+ if (!npp && (initPlugin (plugin) || newPlugin (mimetype, argc, argn, argv)))
+ return 0L;
+ si = addStream (url, mime, 0L, 0L, false);
+ return si;
+}
+
+/*----------------%<---------------------------------------------------------*/
+
+static StreamInfo *getStreamInfo (const char *path, gpointer *stream_id) {
+ const char *p = strrchr (path, '_');
+ *stream_id = p ? (gpointer) strtol (p+1, NULL, 10) : NULL;
+ return (StreamInfo *) g_tree_lookup (stream_list, *stream_id);
+}
+
+static DBusHandlerResult dbusFilter (DBusConnection * connection,
+ DBusMessage *msg, void * user_data) {
+ DBusMessageIter args;
+ const char *sender = dbus_message_get_sender (msg);
+ const char *iface = "org.kde.kmplayer.backend";
+ (void)user_data; (void)connection;
+ if (!dbus_message_has_destination (msg, service_name))
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ print ("dbusFilter %s %s\n", sender,dbus_message_get_interface (msg));
+ if (dbus_message_is_method_call (msg, iface, "play")) {
+ DBusMessageIter ait;
+ char *param = 0;
+ unsigned int params;
+ char **argn = NULL;
+ char **argv = NULL;
+ int i;
+ if (!dbus_message_iter_init (msg, &args) ||
+ DBUS_TYPE_STRING != dbus_message_iter_get_arg_type (&args)) {
+ g_printerr ("missing url arg");
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+ dbus_message_iter_get_basic (&args, &param);
+ object_url = g_strdup (param);
+ if (!dbus_message_iter_next (&args) ||
+ DBUS_TYPE_STRING != dbus_message_iter_get_arg_type (&args)) {
+ g_printerr ("missing mimetype arg");
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+ dbus_message_iter_get_basic (&args, &param);
+ mimetype = g_strdup (param);
+ if (!dbus_message_iter_next (&args) ||
+ DBUS_TYPE_STRING != dbus_message_iter_get_arg_type (&args)) {
+ g_printerr ("missing plugin arg");
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+ dbus_message_iter_get_basic (&args, &param);
+ plugin = g_strdup (param);
+ if (!dbus_message_iter_next (&args) ||
+ DBUS_TYPE_UINT32 != dbus_message_iter_get_arg_type (&args)) {
+ g_printerr ("missing param count arg");
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+ dbus_message_iter_get_basic (&args, &params);
+ if (params > 0 && params < 100) {
+ argn = (char**) malloc (params * sizeof (char *));
+ argv = (char**) malloc (params * sizeof (char *));
+ }
+ if (!dbus_message_iter_next (&args) ||
+ DBUS_TYPE_ARRAY != dbus_message_iter_get_arg_type (&args)) {
+ g_printerr ("missing params array");
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+ dbus_message_iter_recurse (&args, &ait);
+ for (i = 0; i < params; i++) {
+ char *key, *value;
+ DBusMessageIter di;
+ if (dbus_message_iter_get_arg_type (&ait) != DBUS_TYPE_DICT_ENTRY)
+ break;
+ dbus_message_iter_recurse (&ait, &di);
+ if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type (&di))
+ break;
+ dbus_message_iter_get_basic (&di, &key);
+ if (!dbus_message_iter_next (&di) ||
+ DBUS_TYPE_STRING != dbus_message_iter_get_arg_type (&di))
+ break;
+ dbus_message_iter_get_basic (&di, &value);
+ argn[i] = g_strdup (key);
+ argv[i] = g_strdup (value);
+ print ("param %d:%s='%s'\n", i + 1, argn[i], value);
+ if (!dbus_message_iter_next (&ait))
+ params = i + 1;
+ }
+ print ("play %s %s %s params:%d\n", object_url,
+ mimetype ? mimetype : "", plugin, i);
+ startPlugin (object_url, mimetype, i, argn, argv);
+ } else if (dbus_message_is_method_call (msg, iface, "redirected")) {
+ char *url = 0;
+ gpointer stream_id;
+ StreamInfo *si = getStreamInfo(dbus_message_get_path (msg), &stream_id);
+ if (si && dbus_message_iter_init (msg, &args) &&
+ DBUS_TYPE_STRING == dbus_message_iter_get_arg_type (&args)) {
+ dbus_message_iter_get_basic (&args, &url);
+ free (si->url);
+ si->url = g_strdup (url);
+ si->np_stream.url = si->url;
+ print ("redirect %d (had data %d) to %s\n", (long)stream_id, si->called_plugin, url);
+ }
+ } else if (dbus_message_is_method_call (msg, iface, "eof")) {
+ gpointer stream_id;
+ StreamInfo *si = getStreamInfo(dbus_message_get_path (msg), &stream_id);
+ if (si && dbus_message_iter_init (msg, &args) &&
+ DBUS_TYPE_UINT32 == dbus_message_iter_get_arg_type (&args)) {
+ dbus_message_iter_get_basic (&args, &si->total);
+ if (dbus_message_iter_next (&args) &&
+ DBUS_TYPE_UINT32 == dbus_message_iter_get_arg_type (&args)) {
+ dbus_message_iter_get_basic (&args, &si->reason);
+ print ("eof %d bytes:%d reason:%d\n", (long)stream_id, si->total, si->reason);
+ if (si->stream_pos == si->total || si->destroyed)
+ removeStream (stream_id);
+ }
+ }
+ } else if (dbus_message_is_method_call (msg, iface, "quit")) {
+ print ("quit\n");
+ shutDownPlugin();
+ gtk_main_quit();
+ } else if (dbus_message_is_method_call (msg, iface, "streamInfo")) {
+ gpointer stream_id;
+ StreamInfo *si = getStreamInfo(dbus_message_get_path (msg), &stream_id);
+ const char *mime;
+ uint32_t length;
+ if (si && dbus_message_iter_init (msg, &args) &&
+ DBUS_TYPE_STRING == dbus_message_iter_get_arg_type (&args)) {
+ dbus_message_iter_get_basic (&args, &mime);
+ if (*mime) {
+ if (si->mimetype)
+ g_free (si->mimetype);
+ si->mimetype = g_strdup (mime);
+ }
+ if (dbus_message_iter_next (&args) &&
+ DBUS_TYPE_UINT32 == dbus_message_iter_get_arg_type (&args)) {
+ dbus_message_iter_get_basic (&args, &length);
+ si->np_stream.end = length;
+ }
+ print ("streamInfo %d size:%d mime:%s\n", (long)stream_id, length,
+ mime ? mime : "");
+ }
+ } else {
+ print ("unknown message\n");
+ }
+ return DBUS_HANDLER_RESULT_HANDLED;
+}
+
+static void callFunction(int stream,const char *func, int first_arg_type, ...) {
+ char path[64];
+ strncpy (path, callback_path, sizeof (path) -1);
+ if (stream > -1) {
+ int len = strlen (path);
+ snprintf (path + len, sizeof (path) - len, "/stream_%d", stream);
+ }
+ print ("call %s.%s()\n", path, func);
+ if (callback_service) {
+ va_list var_args;
+ DBusMessage *msg = dbus_message_new_method_call (
+ callback_service,
+ path,
+ "org.kde.kmplayer.callback",
+ func);
+ if (first_arg_type != DBUS_TYPE_INVALID) {
+ va_start (var_args, first_arg_type);
+ dbus_message_append_args_valist (msg, first_arg_type, var_args);
+ va_end (var_args);
+ }
+ dbus_message_set_no_reply (msg, TRUE);
+ dbus_connection_send (dbus_connection, msg, NULL);
+ dbus_message_unref (msg);
+ dbus_connection_flush (dbus_connection);
+ }
+}
+
+static char * evaluate (const char *script) {
+ char * ret = NULL;
+ print ("evaluate %s", script);
+ if (callback_service) {
+ DBusMessage *rmsg;
+ DBusMessage *msg = dbus_message_new_method_call (
+ callback_service,
+ callback_path,
+ "org.kde.kmplayer.callback",
+ "evaluate");
+ dbus_message_append_args (
+ msg, DBUS_TYPE_STRING, &script, DBUS_TYPE_INVALID);
+ rmsg = dbus_connection_send_with_reply_and_block (dbus_connection,
+ msg, 2000, NULL);
+ if (rmsg) {
+ DBusMessageIter it;
+ if (dbus_message_iter_init (rmsg, &it) &&
+ DBUS_TYPE_STRING == dbus_message_iter_get_arg_type (&it)) {
+ char * param;
+ dbus_message_iter_get_basic (&it, &param);
+ ret = g_strdup (param);
+ }
+ dbus_message_unref (rmsg);
+ print (" => %s\n", ret);
+ }
+ dbus_message_unref (msg);
+ } else {
+ print (" => NA\n");
+ }
+ return ret;
+}
+
+/*----------------%<---------------------------------------------------------*/
+
+static void pluginAdded (GtkSocket *socket, gpointer d) {
+ /*(void)socket;*/ (void)d;
+ print ("pluginAdded\n");
+ if (socket->plug_window) {
+ gpointer user_data = NULL;
+ gdk_window_get_user_data (socket->plug_window, &user_data);
+ if (!user_data) {
+ /**
+ * GtkSocket resets plugins XSelectInput in
+ * _gtk_socket_add_window
+ * _gtk_socket_windowing_select_plug_window_input
+ **/
+ XSelectInput (gdk_x11_get_default_xdisplay (),
+ gdk_x11_drawable_get_xid (socket->plug_window),
+ KeyPressMask | KeyReleaseMask |
+ ButtonPressMask | ButtonReleaseMask |
+ KeymapStateMask |
+ ButtonMotionMask |
+ PointerMotionMask |
+ EnterWindowMask | LeaveWindowMask |
+ FocusChangeMask |
+ ExposureMask |
+ StructureNotifyMask |
+ SubstructureRedirectMask |
+ PropertyChangeMask
+ );
+ }
+ }
+ callFunction (-1, "plugged", DBUS_TYPE_INVALID);
+}
+
+static void windowCreatedEvent (GtkWidget *w, gpointer d) {
+ (void)d;
+ print ("windowCreatedEvent\n");
+ socket_id = gtk_socket_get_id (GTK_SOCKET (xembed));
+ if (parent_id) {
+ print ("windowCreatedEvent %p\n", GTK_PLUG (w)->socket_window);
+ if (!GTK_PLUG (w)->socket_window)
+ gtk_plug_construct (GTK_PLUG (w), parent_id);
+ gdk_window_reparent( w->window,
+ GTK_PLUG (w)->socket_window
+ ? GTK_PLUG (w)->socket_window
+ : gdk_window_foreign_new (parent_id),
+ 0, 0);
+ gtk_widget_show_all (w);
+ /*XReparentWindow (gdk_x11_drawable_get_xdisplay (w->window),
+ gdk_x11_drawable_get_xid (w->window),
+ parent_id,
+ 0, 0);*/
+ }
+ if (!callback_service) {
+ char *argn[] = { "WIDTH", "HEIGHT", "debug", "SRC" };
+ char *argv[] = { "440", "330", g_strdup("yes"), g_strdup(object_url) };
+ startPlugin (object_url, mimetype, 4, argn, argv);
+ }
+}
+
+static void embeddedEvent (GtkPlug *plug, gpointer d) {
+ (void)plug; (void)d;
+ print ("embeddedEvent\n");
+}
+
+static gboolean updateDimension (void * p) {
+ (void)p;
+ if (np_window.window) {
+ if (np_window.width != top_w || np_window.height != top_h) {
+ np_window.width = top_w;
+ np_window.height = top_h;
+ np_funcs.setwindow (npp, &np_window);
+ }
+ update_dimension_timer = 0;
+ return 0; /* single shot */
+ } else {
+ return 1;
+ }
+}
+
+static gboolean configureEvent(GtkWidget *w, GdkEventConfigure *e, gpointer d) {
+ (void)w; (void)d;
+ if (e->width != top_w || e->height != top_h) {
+ top_w = e->width;
+ top_h = e->height;
+ if (!update_dimension_timer)
+ update_dimension_timer = g_timeout_add (100, updateDimension, NULL);
+ }
+ return FALSE;
+}
+
+static gboolean windowCloseEvent (GtkWidget *w, GdkEvent *e, gpointer d) {
+ (void)w; (void)e; (void)d;
+ shutDownPlugin();
+ return FALSE;
+}
+
+static void windowDestroyEvent (GtkWidget *w, gpointer d) {
+ (void)w; (void)d;
+ gtk_main_quit();
+}
+
+static gboolean initPlayer (void * p) {
+ GtkWidget *window;
+ GdkColormap *color_map;
+ GdkColor bg_color;
+ (void)p;
+
+ window = callback_service
+ ? gtk_plug_new (parent_id)
+ : gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ g_signal_connect (G_OBJECT (window), "delete_event",
+ G_CALLBACK (windowCloseEvent), NULL);
+ g_signal_connect (G_OBJECT (window), "destroy",
+ G_CALLBACK (windowDestroyEvent), NULL);
+ g_signal_connect_after (G_OBJECT (window), "realize",
+ GTK_SIGNAL_FUNC (windowCreatedEvent), NULL);
+ g_signal_connect (G_OBJECT (window), "configure-event",
+ GTK_SIGNAL_FUNC (configureEvent), NULL);
+
+ xembed = gtk_socket_new();
+ g_signal_connect (G_OBJECT (xembed), "plug-added",
+ GTK_SIGNAL_FUNC (pluginAdded), NULL);
+
+ color_map = gdk_colormap_get_system();
+ gdk_colormap_query_color (color_map, 0, &bg_color);
+ gtk_widget_modify_bg (xembed, GTK_STATE_NORMAL, &bg_color);
+
+ gtk_container_add (GTK_CONTAINER (window), xembed);
+
+ if (!parent_id) {
+ gtk_widget_set_size_request (window, 440, 330);
+ gtk_widget_show_all (window);
+ } else {
+ g_signal_connect (G_OBJECT (window), "embedded",
+ GTK_SIGNAL_FUNC (embeddedEvent), NULL);
+ gtk_widget_set_size_request (window, 1920, 1200);
+ gtk_widget_realize (window);
+ }
+
+ if (callback_service && callback_path) {
+ DBusError dberr;
+ const char *serv = "type='method_call',interface='org.kde.kmplayer.backend'";
+ char myname[64];
+
+ dbus_error_init (&dberr);
+ dbus_connection = dbus_bus_get (DBUS_BUS_SESSION, &dberr);
+ if (!dbus_connection) {
+ g_printerr ("Failed to open connection to bus: %s\n",
+ dberr.message);
+ exit (1);
+ }
+ g_sprintf (myname, "org.kde.kmplayer.npplayer-%d", getpid ());
+ service_name = g_strdup (myname);
+ print ("using service %s was '%s'\n", service_name, dbus_bus_get_unique_name (dbus_connection));
+ dbus_connection_setup_with_g_main (dbus_connection, 0L);
+ dbus_bus_request_name (dbus_connection, service_name,
+ DBUS_NAME_FLAG_REPLACE_EXISTING, &dberr);
+ if (dbus_error_is_set (&dberr)) {
+ g_printerr ("Failed to register name: %s\n", dberr.message);
+ dbus_connection_unref (dbus_connection);
+ return -1;
+ }
+ dbus_bus_add_match (dbus_connection, serv, &dberr);
+ if (dbus_error_is_set (&dberr)) {
+ g_printerr ("dbus_bus_add_match error: %s\n", dberr.message);
+ dbus_connection_unref (dbus_connection);
+ return -1;
+ }
+ dbus_connection_add_filter (dbus_connection, dbusFilter, 0L, 0L);
+
+ /* TODO: remove DBUS_BUS_SESSION and create a private connection */
+ callFunction (-1, "running",
+ DBUS_TYPE_STRING, &service_name, DBUS_TYPE_INVALID);
+
+ dbus_connection_flush (dbus_connection);
+ }
+ return 0; /* single shot */
+}
+
+int main (int argc, char **argv) {
+ int i;
+
+ XInitThreads ();
+ g_thread_init (NULL);
+ gtk_init (&argc, &argv);
+
+ for (i = 1; i < argc; i++) {
+ if (!strcmp (argv[i], "-p") && ++i < argc) {
+ plugin = g_strdup (argv[i]);
+ } else if (!strcmp (argv[i], "-cb") && ++i < argc) {
+ gchar *cb = g_strdup (argv[i]);
+ gchar *path = strchr(cb, '/');
+ if (path) {
+ callback_path = g_strdup (path);
+ *path = 0;
+ }
+ callback_service = g_strdup (cb);
+ g_free (cb);
+ } else if (!strcmp (argv[i], "-m") && ++i < argc) {
+ mimetype = g_strdup (argv[i]);
+ } else if (!strcmp (argv [i], "-wid") && ++i < argc) {
+ parent_id = strtol (argv[i], 0L, 10);
+ } else
+ object_url = g_strdup (argv[i]);
+ }
+ if (!callback_service && !(object_url && mimetype && plugin)) {
+ g_fprintf(stderr, "Usage: %s <-m mimetype -p plugin url|-cb service -wid id>\n", argv[0]);
+ return 1;
+ }
+
+ identifiers = g_tree_new (strcmp);
+ stream_list = g_tree_new (streamCompare);
+
+ g_timeout_add (0, initPlayer, NULL);
+
+ fcntl (0, F_SETFL, fcntl (0, F_GETFL) | O_NONBLOCK);
+
+ print ("entering gtk_main\n");
+
+ gtk_main();
+
+ if (dbus_connection)
+ dbus_connection_unref (dbus_connection);
+
+ return 0;
+}
diff --git a/src/playlistview.cpp b/src/playlistview.cpp
new file mode 100644
index 0000000..a7d5503
--- /dev/null
+++ b/src/playlistview.cpp
@@ -0,0 +1,720 @@
+/**
+ * Copyright (C) 2006 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#include <stdio.h>
+
+#include <config.h>
+// include files for Qt
+#include <qapplication.h>
+#include <qclipboard.h>
+#include <qpopupmenu.h>
+#include <qdrawutil.h>
+#include <qpainter.h>
+#include <qiconset.h>
+#include <qpixmap.h>
+#include <qheader.h>
+#include <qstyle.h>
+#include <qtimer.h>
+
+#include <kiconloader.h>
+#include <kfinddialog.h>
+#include <kurldrag.h>
+#include <kaction.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include "playlistview.h"
+#include "kmplayerview.h"
+#include "kmplayercontrolpanel.h"
+
+using namespace KMPlayer;
+
+//-------------------------------------------------------------------------
+
+namespace KMPlayer {
+
+ KDE_NO_EXPORT bool isDragValid (QDropEvent * de) {
+ if (KURLDrag::canDecode (de))
+ return true;
+ if (QTextDrag::canDecode (de)) {
+ QString text;
+ if (QTextDrag::decode (de, text) && KURL (text).isValid ())
+ return true;
+ }
+ return false;
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT PlayListItem::PlayListItem (QListViewItem *p, const NodePtr & e, PlayListView * lv) : QListViewItem (p), node (e), listview (lv) {}
+
+KDE_NO_CDTOR_EXPORT PlayListItem::PlayListItem (QListViewItem *p, const AttributePtr & a, PlayListView * lv) : QListViewItem (p), m_attr (a), listview (lv) {}
+
+KDE_NO_CDTOR_EXPORT
+PlayListItem::PlayListItem (PlayListView *v, const NodePtr &e, QListViewItem *b)
+ : QListViewItem (v, b), node (e), listview (v) {}
+
+KDE_NO_CDTOR_EXPORT void PlayListItem::paintCell (QPainter * p, const QColorGroup & cg, int column, int width, int align) {
+ if (node && node->state == Node::state_began) {
+ QColorGroup mycg (cg);
+ mycg.setColor (QColorGroup::Foreground, listview->activeColor ());
+ mycg.setColor (QColorGroup::Text, listview->activeColor ());
+ QListViewItem::paintCell (p, mycg, column, width, align);
+ } else
+ QListViewItem::paintCell (p, cg, column, width, align);
+}
+
+KDE_NO_CDTOR_EXPORT void PlayListItem::paintBranches (QPainter * p, const QColorGroup &, int w, int, int h) {
+ p->fillRect (0, 0, w, h, listview->paletteBackgroundColor());
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT
+RootPlayListItem::RootPlayListItem (int _id, PlayListView *v, const NodePtr & e, QListViewItem * before, int flgs)
+ : PlayListItem (v, e, before),
+ id (_id),
+ flags (flgs),
+ show_all_nodes (false),
+ have_dark_nodes (false) {}
+
+KDE_NO_CDTOR_EXPORT void RootPlayListItem::paintCell (QPainter * p, const QColorGroup & cg, int column, int width, int align) {
+ QColorGroup mycg (cg);
+ mycg.setColor (QColorGroup::Base, listview->topLevelWidget()->paletteBackgroundColor());
+ mycg.setColor (QColorGroup::Highlight, mycg.base ());
+ mycg.setColor (QColorGroup::Text, listview->topLevelWidget()->paletteForegroundColor());
+ mycg.setColor (QColorGroup::HighlightedText, mycg.text ());
+ QListViewItem::paintCell (p, mycg, column, width, align);
+ qDrawShadeRect (p, 0, 0, width -1, height () -1, mycg, !isOpen ());
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT PlayListView::PlayListView (QWidget * parent, View * view, KActionCollection * ac)
+ : KListView (parent, "kde_kmplayer_playlist"),
+ m_view (view),
+ m_find_dialog (0L),
+ m_active_color (30, 0, 255),
+ last_id (0),
+ last_drag_tree_id (0),
+ m_ignore_expanded (false) {
+ addColumn (QString ());
+ header()->hide ();
+ //setRootIsDecorated (true);
+ setSorting (-1);
+ setAcceptDrops (true);
+ setDropVisualizer (true);
+ setItemsRenameable (true);
+ setItemMargin (2);
+ setPaletteBackgroundColor (QColor (0, 0, 0));
+ setPaletteForegroundColor (QColor (0xB2, 0xB2, 0xB2));
+ m_itemmenu = new QPopupMenu (this);
+ folder_pix = KGlobal::iconLoader ()->loadIcon (QString ("folder"), KIcon::Small);
+ auxiliary_pix = KGlobal::iconLoader ()->loadIcon (QString ("folder_grey"), KIcon::Small);
+ video_pix = KGlobal::iconLoader ()->loadIcon (QString ("video"), KIcon::Small);
+ info_pix = KGlobal::iconLoader ()->loadIcon (QString ("messagebox_info"), KIcon::Small);
+ img_pix = KGlobal::iconLoader ()->loadIcon (QString ("colorize"), KIcon::Small);
+ unknown_pix = KGlobal::iconLoader ()->loadIcon (QString ("unknown"), KIcon::Small);
+ menu_pix = KGlobal::iconLoader ()->loadIcon (QString ("player_playlist"), KIcon::Small);
+ config_pix = KGlobal::iconLoader ()->loadIcon (QString ("configure"), KIcon::Small);
+ url_pix = KGlobal::iconLoader ()->loadIcon (QString ("www"), KIcon::Small);
+ m_find = KStdAction::find (this, SLOT (slotFind ()), ac, "find");
+ m_find_next = KStdAction::findNext (this, SLOT(slotFindNext()), ac, "next");
+ m_find_next->setEnabled (false);
+ connect (this, SIGNAL (contextMenuRequested (QListViewItem *, const QPoint &, int)), this, SLOT (contextMenuItem (QListViewItem *, const QPoint &, int)));
+ connect (this, SIGNAL (expanded (QListViewItem *)),
+ this, SLOT (itemExpanded (QListViewItem *)));
+ connect (this, SIGNAL (dropped (QDropEvent *, QListViewItem *)),
+ this, SLOT (itemDropped (QDropEvent *, QListViewItem *)));
+ connect (this, SIGNAL (itemRenamed (QListViewItem *)),
+ this, SLOT (itemIsRenamed (QListViewItem *)));
+ connect (this, SIGNAL (selectionChanged (QListViewItem *)),
+ this, SLOT (itemIsSelected (QListViewItem *)));
+}
+
+KDE_NO_CDTOR_EXPORT PlayListView::~PlayListView () {
+}
+
+int PlayListView::addTree (NodePtr root, const QString & source, const QString & icon, int flags) {
+ //kdDebug () << "addTree " << source << " " << root->mrl()->src << endl;
+ RootPlayListItem * ritem = new RootPlayListItem (++last_id, this, root, lastChild(), flags);
+ ritem->source = source;
+ ritem->icon = icon;
+ ritem->setPixmap (0, !ritem->icon.isEmpty ()
+ ? KGlobal::iconLoader ()->loadIcon (ritem->icon, KIcon::Small)
+ : url_pix);
+ updateTree (ritem, 0L, false);
+ return last_id;
+}
+
+KDE_NO_EXPORT PlayListItem * PlayListView::populate
+(NodePtr e, NodePtr focus, RootPlayListItem *root, PlayListItem * pitem, PlayListItem ** curitem) {
+ root->have_dark_nodes |= !e->expose ();
+ if (pitem && !root->show_all_nodes && !e->expose ()) {
+ for (NodePtr c = e->lastChild (); c; c = c->previousSibling ())
+ populate (c, focus, root, pitem, curitem);
+ return pitem;
+ }
+ PlayListItem * item = pitem ? new PlayListItem (pitem, e, this) : root;
+ Mrl * mrl = e->mrl ();
+ QString text (e->nodeName());
+ if (mrl && !root->show_all_nodes) {
+ if (mrl->pretty_name.isEmpty ()) {
+ if (!mrl->src.isEmpty())
+ text = KURL(mrl->src).prettyURL (0, KURL::StripFileProtocol);
+ else if (e->isDocument ())
+ text = e->hasChildNodes () ? i18n ("unnamed") : i18n ("none");
+ } else
+ text = mrl->pretty_name;
+ } else if (e->id == id_node_text)
+ text = e->nodeValue ();
+ item->setText(0, text);
+ if (focus == e)
+ *curitem = item;
+ if (e->active ())
+ ensureItemVisible (item);
+ for (NodePtr c = e->lastChild (); c; c = c->previousSibling ())
+ populate (c, focus, root, item, curitem);
+ if (e->isElementNode ()) {
+ AttributePtr a = convertNode<Element> (e)->attributes ()->first ();
+ if (a) {
+ root->have_dark_nodes = true;
+ if (root->show_all_nodes) {
+ PlayListItem * as = new PlayListItem (item, e, this);
+ as->setText (0, i18n ("[attributes]"));
+ as->setPixmap (0, menu_pix);
+ for (; a; a = a->nextSibling ()) {
+ PlayListItem * ai = new PlayListItem (as, a, this);
+ ai->setText (0, QString ("%1=%2").arg (
+ a->name ().toString ()).arg (a->value ()));
+ ai->setPixmap (0, config_pix);
+ }
+ }
+ }
+ }
+ if (item != root) {
+ Node::PlayType pt = e->playType ();
+ QPixmap * pix;
+ switch (pt) {
+ case Node::play_type_image:
+ pix = &img_pix;
+ break;
+ case Node::play_type_info:
+ pix = &info_pix;
+ break;
+ default:
+ if (pt > Node::play_type_none)
+ pix = &video_pix;
+ else
+ pix = item->firstChild ()
+ ? e->auxiliaryNode ()
+ ? &auxiliary_pix : &folder_pix
+ : &unknown_pix;
+ }
+ item->setPixmap (0, *pix);
+ if (root->flags & PlayListView::AllowDrag)
+ item->setDragEnabled (true);
+ }
+ return item;
+}
+
+void PlayListView::updateTree (int id, NodePtr root, NodePtr active,
+ bool select, bool open) {
+ // TODO, if root is same as rootitems->node and treeversion is the same
+ // and show all nodes is unchanged then only update the cells
+ QWidget * w = focusWidget ();
+ if (w && w != this)
+ w->clearFocus ();
+ //setSelected (firstChild (), true);
+ RootPlayListItem * ritem = static_cast <RootPlayListItem *> (firstChild ());
+ RootPlayListItem * before = 0L;
+ for (; ritem; ritem =static_cast<RootPlayListItem*>(ritem->nextSibling())) {
+ if (ritem->id == id) {
+ if (!root)
+ root = ritem->node;
+ break; // found based on id
+ }
+ if (id == -1) { // wildcard id
+ for (NodePtr n = root; n; n = n->parentNode ())
+ if (n == ritem->node) {
+ root = n;
+ break;
+ }
+ if (root == ritem->node) {
+ id = ritem->id;
+ break; // found based on matching (ancestor) node
+ }
+ }
+ if (ritem->id < id)
+ before = ritem;
+ }
+ if (!root) {
+ delete ritem;
+ return;
+ }
+ if (!ritem) {
+ ritem =new RootPlayListItem(id, this, root, before,AllowDrops|TreeEdit);
+ ritem->setPixmap (0, url_pix);
+ } else
+ ritem->node = root;
+ m_find_next->setEnabled (!!m_current_find_elm);
+ bool need_timer = !tree_update;
+ tree_update = new TreeUpdate (ritem, active, select, open, tree_update);
+ if (need_timer)
+ QTimer::singleShot (0, this, SLOT (updateTrees ()));
+}
+
+KDE_NO_EXPORT void PlayListView::updateTrees () {
+ for (; tree_update; tree_update = tree_update->next) {
+ updateTree (tree_update->root_item, tree_update->node, tree_update->select);
+ if (tree_update->open) // FIXME for non-root nodes lazy loading
+ setOpen (tree_update->root_item, true);
+ }
+}
+
+void PlayListView::updateTree (RootPlayListItem * ritem, NodePtr active, bool select) {
+ bool set_open = ritem->id == 0 || (ritem ? ritem->isOpen () : false);
+ m_ignore_expanded = true;
+ PlayListItem * curitem = 0L;
+ while (ritem->firstChild ())
+ delete ritem->firstChild ();
+ if (!ritem->node)
+ return;
+ populate (ritem->node, active, ritem, 0L, &curitem);
+ if (set_open && ritem->firstChild () && !ritem->isOpen ())
+ setOpen (ritem, true);
+ if (curitem && select) {
+ setSelected (curitem, true);
+ ensureItemVisible (curitem);
+ }
+ if (!ritem->have_dark_nodes && ritem->show_all_nodes && !m_view->editMode())
+ toggleShowAllNodes (); // redo, because the user can't change it anymore
+ m_ignore_expanded = false;
+}
+
+void PlayListView::selectItem (const QString & txt) {
+ QListViewItem * item = selectedItem ();
+ if (item && item->text (0) == txt)
+ return;
+ item = findItem (txt, 0);
+ if (item) {
+ setSelected (item, true);
+ ensureItemVisible (item);
+ }
+}
+
+KDE_NO_EXPORT QDragObject * PlayListView::dragObject () {
+ PlayListItem * item = static_cast <PlayListItem *> (selectedItem ());
+ if (item && item->node) {
+ QString txt = item->node->isPlayable ()
+ ? item->node->mrl ()->src : item->node->outerXML ();
+ QTextDrag * drag = new QTextDrag (txt, this);
+ last_drag_tree_id = rootItem (item)->id;
+ m_last_drag = item->node;
+ drag->setPixmap (*item->pixmap (0));
+ if (!item->node->isPlayable ())
+ drag->setSubtype ("xml");
+ return drag;
+ }
+ return 0;
+}
+
+KDE_NO_EXPORT void PlayListView::setFont (const QFont & fnt) {
+ setTreeStepSize (QFontMetrics (fnt).boundingRect ('m').width ());
+ KListView::setFont (fnt);
+}
+
+KDE_NO_EXPORT void PlayListView::contextMenuItem (QListViewItem * vi, const QPoint & p, int) {
+ if (vi) {
+ PlayListItem * item = static_cast <PlayListItem *> (vi);
+ if (item->node || item->m_attr) {
+ RootPlayListItem * ritem = rootItem (vi);
+ if (m_itemmenu->count () > 0) {
+ m_find->unplug (m_itemmenu);
+ m_find_next->unplug (m_itemmenu);
+ m_itemmenu->clear ();
+ }
+ m_itemmenu->insertItem (KGlobal::iconLoader ()->loadIconSet
+ (QString ("editcopy"), KIcon::Small, 0, true),
+ i18n ("&Copy to Clipboard"),
+ this, SLOT (copyToClipboard ()), 0, 0);
+ if (item->m_attr ||
+ (item->node && (item->node->isPlayable () ||
+ item->node->isDocument ()) &&
+ item->node->mrl ()->bookmarkable))
+ m_itemmenu->insertItem (KGlobal::iconLoader ()->loadIconSet
+ (QString ("bookmark_add"), KIcon::Small, 0, true),
+ i18n ("&Add Bookmark"),
+ this, SLOT (addBookMark ()), 0, 1);
+ if (ritem->have_dark_nodes) {
+ m_itemmenu->insertItem (i18n ("&Show all"),
+ this, SLOT (toggleShowAllNodes ()), 0, 2);
+ m_itemmenu->setItemChecked (2, ritem->show_all_nodes);
+ }
+ m_itemmenu->insertSeparator ();
+ m_find->plug (m_itemmenu);
+ m_find_next->plug (m_itemmenu);
+ emit prepareMenu (item, m_itemmenu);
+ m_itemmenu->exec (p);
+ }
+ } else
+ m_view->controlPanel ()->popupMenu ()->exec (p);
+}
+
+void PlayListView::itemExpanded (QListViewItem * item) {
+ if (!m_ignore_expanded && item->childCount () == 1) {
+ PlayListItem * child_item = static_cast<PlayListItem*>(item->firstChild ());
+ child_item->setOpen (rootItem (item)->show_all_nodes ||
+ (child_item->node && child_item->node->expose ()));
+ }
+}
+
+RootPlayListItem * PlayListView::rootItem (QListViewItem * item) const {
+ if (!item)
+ return 0L;
+ while (item->parent ())
+ item = item->parent ();
+ return static_cast <RootPlayListItem *> (item);
+}
+
+RootPlayListItem * PlayListView::rootItem (int id) const {
+ RootPlayListItem * ri = static_cast <RootPlayListItem *> (firstChild ());
+ for (; ri; ri = static_cast <RootPlayListItem *> (ri->nextSibling ())) {
+ if (ri->id == id)
+ return ri;
+ }
+ return 0L;
+}
+
+void PlayListView::copyToClipboard () {
+ PlayListItem * item = currentPlayListItem ();
+ QString text = item->text (0);
+ if (item->node) {
+ Mrl * mrl = item->node->mrl ();
+ if (mrl && !mrl->src.isEmpty ())
+ text = mrl->src;
+ }
+ QApplication::clipboard()->setText (text);
+}
+
+void PlayListView::addBookMark () {
+ PlayListItem * item = currentPlayListItem ();
+ if (item->node) {
+ Mrl * mrl = item->node->mrl ();
+ KURL url (mrl ? mrl->src : QString (item->node->nodeName ()));
+ emit addBookMark (mrl->pretty_name.isEmpty () ? url.prettyURL () : mrl->pretty_name, url.url ());
+ }
+}
+
+void PlayListView::toggleShowAllNodes () {
+ PlayListItem * cur_item = currentPlayListItem ();
+ if (cur_item) {
+ RootPlayListItem * ritem = rootItem (cur_item);
+ showAllNodes (rootItem (cur_item), !ritem->show_all_nodes);
+ }
+}
+
+KDE_NO_EXPORT void PlayListView::showAllNodes(RootPlayListItem *ri, bool show) {
+ if (ri && ri->show_all_nodes != show) {
+ PlayListItem * cur_item = currentPlayListItem ();
+ ri->show_all_nodes = show;
+ updateTree (ri->id, ri->node, cur_item->node, true, false);
+ if (m_current_find_elm &&
+ ri->node->document() == m_current_find_elm->document() &&
+ !ri->show_all_nodes) {
+ if (!m_current_find_elm->expose ())
+ m_current_find_elm = 0L;
+ m_current_find_attr = 0L;
+ }
+ }
+}
+
+KDE_NO_EXPORT bool PlayListView::acceptDrag (QDropEvent * de) const {
+ QListViewItem * item = itemAt (contentsToViewport (de->pos ()));
+ if (item && (de->source () == this || isDragValid (de))) {
+ RootPlayListItem * ritem = rootItem (item);
+ return ritem->flags & AllowDrops;
+ }
+ return false;
+}
+
+KDE_NO_EXPORT void PlayListView::itemDropped (QDropEvent * de, QListViewItem *after) {
+ if (!after) { // could still be a descendent
+ after = itemAt (contentsToViewport (de->pos ()));
+ if (after)
+ after = after->parent ();
+ }
+ if (after) {
+ RootPlayListItem * ritem = rootItem (after);
+ if (ritem->id > 0)
+ return;
+ NodePtr n = static_cast <PlayListItem *> (after)->node;
+ bool valid = n && (!n->isDocument () || n->hasChildNodes ());
+ KURL::List sl;
+ if (KURLDrag::canDecode (de)) {
+ KURLDrag::decode (de, sl);
+ } else if (QTextDrag::canDecode (de)) {
+ QString text;
+ QTextDrag::decode (de, text);
+ sl.push_back (KURL (text));
+ }
+ if (valid && sl.size () > 0) {
+ bool as_child = n->isDocument () || n->hasChildNodes ();
+ NodePtr d = n->document ();
+ for (int i = sl.size (); i > 0; i--) {
+ Node * ni = new KMPlayer::GenericURL (d, sl[i-1].url ());
+ if (as_child)
+ n->insertBefore (ni, n->firstChild ());
+ else
+ n->parentNode ()->insertBefore (ni, n->nextSibling ());
+ }
+ PlayListItem * citem = currentPlayListItem ();
+ NodePtr cn;
+ if (citem)
+ cn = citem->node;
+ updateTree (ritem, cn, true);
+ }
+ } else
+ m_view->dropEvent (de);
+}
+
+KDE_NO_EXPORT void PlayListView::itemIsRenamed (QListViewItem * qitem) {
+ PlayListItem * item = static_cast <PlayListItem *> (qitem);
+ if (item->node) {
+ RootPlayListItem * ri = rootItem (qitem);
+ if (!ri->show_all_nodes && item->node->isEditable ()) {
+ item->node->setNodeName (item->text (0));
+ if (item->node->mrl ()->pretty_name.isEmpty ())
+ item->setText (0, KURL (item->node->mrl ()->src).prettyURL (0, KURL::StripFileProtocol));
+ } else // restore damage ..
+ updateTree (ri, item->node, true);
+ } else if (item->m_attr) {
+ QString txt = item->text (0);
+ int pos = txt.find (QChar ('='));
+ if (pos > -1) {
+ item->m_attr->setName (txt.left (pos));
+ item->m_attr->setValue (txt.mid (pos + 1));
+ } else {
+ item->m_attr->setName (txt);
+ item->m_attr->setValue (QString (""));
+ }
+ PlayListItem * pi = static_cast <PlayListItem *> (item->parent ());
+ if (pi && pi->node)
+ pi->node->document ()->m_tree_version++;
+ }
+}
+
+KDE_NO_EXPORT void PlayListView::itemIsSelected (QListViewItem * qitem) {
+ RootPlayListItem * ri = rootItem (qitem);
+ setItemsRenameable (ri && (ri->flags & TreeEdit) && ri != qitem);
+}
+
+KDE_NO_EXPORT void PlayListView::rename (QListViewItem * qitem, int c) {
+ PlayListItem * item = static_cast <PlayListItem *> (qitem);
+ if (rootItem (qitem)->show_all_nodes && item && item->m_attr) {
+ PlayListItem * pi = static_cast <PlayListItem *> (qitem->parent ());
+ if (pi && pi->node && pi->node->isEditable ())
+ KListView::rename (item, c);
+ } else if (item && item->node && item->node->isEditable ()) {
+ if (!rootItem (qitem)->show_all_nodes &&
+ item->node->isPlayable () &&
+ item->node->mrl ()->pretty_name.isEmpty ())
+ // populate() has crippled src, restore for editing
+ item->setText (0, item->node->mrl ()->src);
+ KListView::rename (item, c);
+ }
+}
+
+KDE_NO_EXPORT void PlayListView::editCurrent () {
+ QListViewItem * qitem = selectedItem ();
+ if (qitem) {
+ RootPlayListItem * ri = rootItem (qitem);
+ if (ri && (ri->flags & TreeEdit) && ri != qitem)
+ rename (qitem, 0);
+ }
+}
+
+KDE_NO_EXPORT void PlayListView::slotFind () {
+ m_current_find_elm = 0L;
+ if (!m_find_dialog) {
+ m_find_dialog = new KFindDialog (false, this, "kde_kmplayer_find", KFindDialog::CaseSensitive);
+ m_find_dialog->setHasSelection (false);
+ connect(m_find_dialog, SIGNAL(okClicked ()), this, SLOT(slotFindOk ()));
+ } else
+ m_find_dialog->setPattern (QString ());
+ m_find_dialog->show ();
+}
+
+static QListViewItem * findNodeInTree (NodePtr n, QListViewItem * item) {
+ //kdDebug () << "item:" << item->text (0) << " n:" << (n ? n->nodeName () : "null" ) <<endl;
+ PlayListItem * pi = static_cast <PlayListItem *> (item);
+ if (!n || !pi->node)
+ return 0L;
+ if (n == pi->node)
+ return item;
+ for (QListViewItem * ci = item->firstChild(); ci; ci = ci->nextSibling ()) {
+ //kdDebug () << "ci:" << ci->text (0) << " n:" << n->nodeName () <<endl;
+ QListViewItem * vi = findNodeInTree (n, ci);
+ if (vi)
+ return vi;
+ }
+ return 0L;
+
+}
+
+KDE_NO_EXPORT void PlayListView::slotFindOk () {
+ if (!m_find_dialog)
+ return;
+ m_find_dialog->hide ();
+ long opt = m_find_dialog->options ();
+ current_find_tree_id = 0;
+ if (opt & KFindDialog::FromCursor && currentItem ()) {
+ PlayListItem * lvi = currentPlayListItem ();
+ if (lvi && lvi->node) {
+ m_current_find_elm = lvi->node;
+ current_find_tree_id = rootItem (lvi)->id;
+ } else if (lvi && lvi->m_attr) {
+ PlayListItem*pi=static_cast<PlayListItem*>(currentItem()->parent());
+ if (pi) {
+ m_current_find_attr = lvi->m_attr;
+ m_current_find_elm = pi->node;
+ }
+ }
+ } else if (!(opt & KFindDialog::FindIncremental))
+ m_current_find_elm = 0L;
+ if (!m_current_find_elm) {
+ PlayListItem * lvi = static_cast <PlayListItem *> (firstChild ());
+ if (lvi)
+ m_current_find_elm = lvi->node;
+ }
+ if (m_current_find_elm)
+ slotFindNext ();
+}
+
+/* A bit tricky, but between the find's PlayListItems might be gone, so
+ * try to match on the generated tree following the source's document tree
+ */
+KDE_NO_EXPORT void PlayListView::slotFindNext () {
+ if (!m_find_dialog)
+ return;
+ QString str = m_find_dialog->pattern();
+ if (!m_current_find_elm || str.isEmpty ())
+ return;
+ long opt = m_find_dialog->options ();
+ QRegExp regexp;
+ if (opt & KFindDialog::RegularExpression)
+ regexp = str;
+ bool cs = (opt & KFindDialog::CaseSensitive);
+ bool found = false;
+ NodePtr node, n = m_current_find_elm;
+ RootPlayListItem * ri = rootItem (current_find_tree_id);
+ while (!found && n) {
+ if (ri->show_all_nodes || n->expose ()) {
+ bool elm = n->isElementNode ();
+ QString val = n->nodeName ();
+ if (elm && !ri->show_all_nodes) {
+ Mrl * mrl = n->mrl ();
+ if (mrl) {
+ if (mrl->pretty_name.isEmpty ()) {
+ if (!mrl->src.isEmpty())
+ val = KURL(mrl->src).prettyURL();
+ } else
+ val = mrl->pretty_name;
+ }
+ } else if (!elm)
+ val = n->nodeValue ();
+ if (((opt & KFindDialog::RegularExpression) &&
+ val.find (regexp, 0) > -1) ||
+ (!(opt & KFindDialog::RegularExpression) &&
+ val.find (str, 0, cs) > -1)) {
+ node = n;
+ m_current_find_attr = 0L;
+ found = true;
+ } else if (elm && ri->show_all_nodes) {
+ for (AttributePtr a = convertNode <Element> (n)->attributes ()->first (); a; a = a->nextSibling ()) {
+ QString attr = a->name ().toString ();
+ if (((opt & KFindDialog::RegularExpression) &&
+ (attr.find (regexp, 0) || a->value ().find (regexp, 0) > -1)) ||
+ (!(opt & KFindDialog::RegularExpression) &&
+ (attr.find (str, 0, cs) > -1 || a->value ().find (str, 0, cs) > -1))) {
+ node = n;
+ m_current_find_attr = a;
+ found = true;
+ break;
+ }
+ }
+ }
+ }
+ if (n) { //set pointer to next
+ if (opt & KFindDialog::FindBackwards) {
+ if (n->lastChild ()) {
+ n = n->lastChild ();
+ } else if (n->previousSibling ()) {
+ n = n->previousSibling ();
+ } else {
+ for (n = n->parentNode (); n; n = n->parentNode ())
+ if (n->previousSibling ()) {
+ n = n->previousSibling ();
+ break;
+ }
+ while (!n && current_find_tree_id > 0) {
+ ri = rootItem (--current_find_tree_id);
+ if (ri)
+ n = ri->node;
+ }
+ }
+ } else {
+ if (n->firstChild ()) {
+ n = n->firstChild ();
+ } else if (n->nextSibling ()) {
+ n = n->nextSibling ();
+ } else {
+ for (n = n->parentNode (); n; n = n->parentNode ())
+ if (n->nextSibling ()) {
+ n = n->nextSibling ();
+ break;
+ }
+ while (!n) {
+ ri = rootItem (++current_find_tree_id);
+ if (!ri)
+ break;
+ n = ri->node;
+ }
+ }
+ }
+ }
+ }
+ m_current_find_elm = n;
+ kdDebug () << " search for " << str << "=" << (node ? node->nodeName () : "not found") << " next:" << (n ? n->nodeName () : " not found") << endl;
+ if (found) {
+ QListViewItem * fc = findNodeInTree (node, ri);
+ if (!fc) {
+ m_current_find_elm = 0L;
+ kdDebug () << "node not found in tree tree:" << ri->id << endl;
+ } else {
+ setSelected (fc, true);
+ if (m_current_find_attr && fc->firstChild () && fc->firstChild ()->firstChild ())
+ ensureItemVisible (fc->firstChild ()->firstChild ());
+ ensureItemVisible (fc);
+ }
+ }
+ m_find_next->setEnabled (!!m_current_find_elm);
+}
+
+#include "playlistview.moc"
diff --git a/src/playlistview.h b/src/playlistview.h
new file mode 100644
index 0000000..c7dbcd8
--- /dev/null
+++ b/src/playlistview.h
@@ -0,0 +1,174 @@
+/**
+ * Copyright (C) 2006 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#ifndef PLAYLISTVIEW_H
+#define PLAYLISTVIEW_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <klistview.h>
+
+#include "kmplayerplaylist.h"
+
+class QFont;
+class QPixmap;
+class QPainter;
+class QPopupMenu;
+class QDropEvent;
+
+namespace KMPlayer {
+
+class View;
+class PlayListView;
+
+bool isDragValid (QDropEvent * de) KMPLAYER_NO_MBR_EXPORT;
+
+/*
+ * An item in the playlist
+ */
+class KMPLAYER_NO_EXPORT PlayListItem : public QListViewItem {
+public:
+ PlayListItem (QListViewItem *p, const NodePtr & e, PlayListView * lv);
+ PlayListItem (QListViewItem *p, const AttributePtr & e, PlayListView * lv);
+ PlayListItem (PlayListView *v, const NodePtr & d, QListViewItem * b);
+ KDE_NO_CDTOR_EXPORT ~PlayListItem () {}
+ void paintCell (QPainter * p, const QColorGroup & cg, int column, int width, int align);
+ void paintBranches(QPainter *p, const QColorGroup &cg, int w, int y, int h);
+ PlayListView * playListView () const;
+ NodePtrW node;
+ AttributePtrW m_attr;
+ PlayListView * listview;
+protected:
+ PlayListItem (PlayListView *v, const NodePtr & e);
+};
+
+class KMPLAYER_NO_EXPORT RootPlayListItem : public PlayListItem {
+public:
+ RootPlayListItem (int id, PlayListView *v, const NodePtr & d, QListViewItem * b, int flags);
+ KDE_NO_CDTOR_EXPORT ~RootPlayListItem () {}
+ void paintCell (QPainter * p, const QColorGroup & cg, int column, int width, int align);
+ QString source;
+ QString icon;
+ int id;
+ int flags;
+ bool show_all_nodes;
+ bool have_dark_nodes;
+};
+
+/*
+ * The playlist GUI
+ */
+class KMPLAYER_EXPORT PlayListView : public KListView {
+ Q_OBJECT
+public:
+ enum Flags {
+ AllowDrops = 0x01, AllowDrag = 0x02,
+ InPlaceEdit = 0x04, TreeEdit = 0x08,
+ Moveable = 0x10, Deleteable = 0x20
+ };
+ PlayListView (QWidget * parent, View * view, KActionCollection * ac);
+ ~PlayListView ();
+ void selectItem (const QString & txt);
+ void showAllNodes (RootPlayListItem *, bool show=true);
+ void setActiveForegroundColor (const QColor & c) { m_active_color = c; }
+ const QColor & activeColor () const { return m_active_color; }
+ int addTree (NodePtr r, const QString & src, const QString & ico, int flgs);
+ RootPlayListItem * rootItem (QListViewItem * item) const;
+ RootPlayListItem * rootItem (int id) const;
+ void setFont (const QFont &);
+ PlayListItem * currentPlayListItem () const;
+ PlayListItem * selectedPlayListItem () const;
+ NodePtr lastDragNode () const { return m_last_drag; }
+ int lastDragTreeId () const { return last_drag_tree_id; }
+signals:
+ void addBookMark (const QString & title, const QString & url);
+ void prepareMenu (KMPlayer::PlayListItem * item, QPopupMenu * menu);
+protected:
+ bool acceptDrag (QDropEvent* event) const;
+ QDragObject * dragObject ();
+public slots:
+ void editCurrent ();
+ void rename (QListViewItem * item, int c);
+ void updateTree (int id, NodePtr root, NodePtr active, bool sel, bool open);
+private slots:
+ void contextMenuItem (QListViewItem *, const QPoint &, int);
+ void itemExpanded (QListViewItem *);
+ void copyToClipboard ();
+ void addBookMark ();
+ void toggleShowAllNodes ();
+ void itemDropped (QDropEvent * e, QListViewItem * after);
+ void itemIsRenamed (QListViewItem * item);
+ void itemIsSelected (QListViewItem * item);
+ void updateTrees ();
+ void slotFind ();
+ void slotFindOk ();
+ void slotFindNext ();
+private:
+ void updateTree (RootPlayListItem * ritem, NodePtr active, bool select);
+ PlayListItem * populate (NodePtr e, NodePtr focus, RootPlayListItem *root, PlayListItem * item, PlayListItem ** curitem);
+ struct KMPLAYER_NO_EXPORT TreeUpdate {
+ KDE_NO_CDTOR_EXPORT TreeUpdate (RootPlayListItem *ri, NodePtr n, bool s, bool o, SharedPtr <TreeUpdate> &nx) : root_item (ri), node (n), select (s), open (o), next (nx) {}
+ KDE_NO_CDTOR_EXPORT ~TreeUpdate () {}
+ RootPlayListItem * root_item;
+ NodePtrW node;
+ bool select;
+ bool open;
+ SharedPtr <TreeUpdate> next;
+ };
+ SharedPtr <TreeUpdate> tree_update;
+ View * m_view;
+ QPopupMenu * m_itemmenu;
+ KAction * m_find;
+ KAction * m_find_next;
+ KFindDialog * m_find_dialog;
+ QPixmap folder_pix;
+ QPixmap auxiliary_pix;
+ QPixmap video_pix;
+ QPixmap unknown_pix;
+ QPixmap menu_pix;
+ QPixmap config_pix;
+ QPixmap url_pix;
+ QPixmap info_pix;
+ QPixmap img_pix;
+ QColor m_active_color;
+ NodePtrW m_current_find_elm;
+ NodePtrW m_last_drag;
+ AttributePtrW m_current_find_attr;
+ int last_id;
+ int last_drag_tree_id;
+ int current_find_tree_id;
+ bool m_ignore_expanded;
+};
+
+KDE_NO_EXPORT inline PlayListView * PlayListItem::playListView () const {
+ return static_cast <PlayListView *> (listView ());
+}
+
+KDE_NO_EXPORT inline PlayListItem * PlayListView::currentPlayListItem () const {
+ return static_cast <PlayListItem *> (currentItem ());
+}
+
+KDE_NO_EXPORT inline PlayListItem * PlayListView::selectedPlayListItem() const {
+ return static_cast <PlayListItem *> (selectedItem ());
+}
+
+} // namespace
+
+#endif // PLAYLISTVIEW_H
diff --git a/src/pluginsinfo b/src/pluginsinfo
new file mode 100644
index 0000000..0cc3d74
--- /dev/null
+++ b/src/pluginsinfo
@@ -0,0 +1,31 @@
+number=5
+
+[0]
+description=RealPlayer LiveConnect-Enabled Plug-In G2
+file=libkmplayerpart.so
+mime=audio/x-pn-realaudio:rm:Real Audio Stream;audio/x-pn-realaudio-plugin:rpm,rm,ram:RealPlayer Plug-in
+name=RealPlayer
+
+[1]
+description=Windows Media Player Plug-in
+file=libkmplayerpart.so
+mime=application/x-mplayer2:wmp:Windows Media Player;audio/x-ms-wma:wma:Windows Media Audio;video/x-ms-asf:asx,asf:Media Files;video/x-ms-asf-plugin:*:Media Files;video/x-ms-wmv:wmv:Windows Media Video;video/msvideo:avi,*:AVI;video/x-ms-wmp:wmp,*:Windows Media;video/x-ms-wvx:wvx,*:Windows Media;audio/x-ms-wax:wax,*:Windows Media;application/x-drm-v2:asx,*:Windows Media;audio/wav:wav,*:Microsoft wave file;audio/x-wav:wav,*:Microsoft wave file;video/x-ms-wm:wm,*:Media Files
+name=Windows Media Player Plugin
+
+[2]
+description=QuickTime Movie
+file=libkmplayerpart.so
+mime=video/quicktime:mov,qt:QuickTime
+name=QuickTime Plug-in
+
+[3]
+description=Shockwave Flash 9.0 r64
+file=libkmplayerpart.so
+mime=application/x-shockwave-flash:swf:Shockwave Flash
+name=Shockwave Flash
+
+[4]
+description=FutureSplash Player 9.0 r64
+file=libkmplayerpart.so
+mime=application/futuresplash:spl:FutureSplash Player
+name=FutureSplash Player
diff --git a/src/pref.cpp b/src/pref.cpp
new file mode 100644
index 0000000..ff39751
--- /dev/null
+++ b/src/pref.cpp
@@ -0,0 +1,866 @@
+/**
+ * Copyright (C) 2003 Joonas Koivunen <rzei@mbnet.fi>
+ * Copyright (C) 2003 Koos Vriezen <koos.vriezen@xs4all.nl>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#undef Always
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qcheckbox.h>
+#include <qstringlist.h>
+#include <qcombobox.h>
+#include <qlineedit.h>
+#include <qgroupbox.h>
+#include <qwhatsthis.h>
+#include <qtabwidget.h>
+#include <qslider.h>
+#include <qbuttongroup.h>
+#include <qspinbox.h>
+#include <qmessagebox.h>
+#include <qmap.h>
+#include <qtimer.h>
+#include <qfont.h>
+
+#include <klocale.h>
+#include <kdebug.h>
+#include <kfiledialog.h>
+#include <kmessagebox.h>
+#include <klineedit.h>
+#include <kiconloader.h>
+#include <kdeversion.h>
+#include <kcombobox.h>
+#include <kcolorbutton.h>
+#include <kurlrequester.h>
+#include <kfontdialog.h>
+
+#include "pref.h"
+#include "kmplayerpartbase.h"
+#include "kmplayerprocess.h"
+#include "kmplayerconfig.h"
+
+
+using namespace KMPlayer;
+
+KDE_NO_CDTOR_EXPORT Preferences::Preferences(PartBase * player, Settings * settings)
+: KDialogBase (IconList, i18n ("Preferences"),
+ Help|Default|Ok|Apply|Cancel, Ok, player->view (), 0, false)
+{
+ QFrame *frame;
+ QTabWidget * tab;
+ QStringList hierarchy; // typo? :)
+ QVBoxLayout *vlay;
+
+ frame = addPage(i18n("General Options"), QString(), KGlobal::iconLoader()->loadIcon (QString ("kmplayer"), KIcon::NoGroup, 32));
+ vlay = new QVBoxLayout(frame, marginHint(), spacingHint());
+ tab = new QTabWidget (frame);
+ vlay->addWidget (tab);
+ m_GeneralPageGeneral = new PrefGeneralPageGeneral (tab, settings);
+ tab->insertTab (m_GeneralPageGeneral, i18n("General"));
+ m_GeneralPageLooks = new PrefGeneralPageLooks (tab, settings);
+ tab->insertTab (m_GeneralPageLooks, i18n("Looks"));
+ m_GeneralPageOutput = new PrefGeneralPageOutput
+ (tab, settings->audiodrivers, settings->videodrivers);
+ tab->insertTab (m_GeneralPageOutput, i18n("Output"));
+ entries.insert (i18n("General Options"), tab);
+
+ frame = addPage (i18n ("Source"), QString(), KGlobal::iconLoader()->loadIcon (QString ("source"), KIcon::NoGroup, 32));
+ vlay = new QVBoxLayout (frame, marginHint(), spacingHint());
+ tab = new QTabWidget (frame);
+ vlay->addWidget (tab);
+ m_SourcePageURL = new PrefSourcePageURL (tab);
+ tab->insertTab (m_SourcePageURL, i18n ("URL"));
+ entries.insert (i18n("Source"), tab);
+
+ frame = addPage (i18n ("Recording"), QString(), KGlobal::iconLoader()->loadIcon (QString ("video"), KIcon::NoGroup, 32));
+ vlay = new QVBoxLayout (frame, marginHint(), spacingHint());
+ tab = new QTabWidget (frame);
+ vlay->addWidget (tab);
+
+ int recorders_count = 3;
+ m_MEncoderPage = new PrefMEncoderPage (tab, player);
+ tab->insertTab (m_MEncoderPage, i18n ("MEncoder"));
+ recorders = m_MEncoderPage;
+
+ m_FFMpegPage = new PrefFFMpegPage (tab, player);
+ tab->insertTab (m_FFMpegPage, i18n ("FFMpeg"));
+ m_MEncoderPage->next = m_FFMpegPage;
+
+ m_MPlayerDumpstreamPage = new PrefMPlayerDumpstreamPage (tab, player);
+ // tab->insertTab (m_MPlayerDumpstreamPage, i18n ("MPlayer -dumpstream"));
+ m_FFMpegPage->next = m_MPlayerDumpstreamPage;
+#ifdef HAVE_XINE
+ recorders_count = 4;
+ m_XinePage = new PrefXinePage (tab, player);
+ // tab->insertTab (m_XinePage, i18n ("Xine"));
+ m_MPlayerDumpstreamPage->next = m_XinePage;
+#endif
+ m_RecordPage = new PrefRecordPage (tab, player, recorders, recorders_count);
+ tab->insertTab (m_RecordPage, i18n ("General"), 0);
+ tab->setCurrentPage (0);
+ entries.insert (i18n("Recording"), tab);
+
+ frame = addPage (i18n ("Output Plugins"), QString(), KGlobal::iconLoader()->loadIcon (QString ("image"), KIcon::NoGroup, 32));
+ vlay = new QVBoxLayout(frame, marginHint(), spacingHint());
+ tab = new QTabWidget (frame);
+ vlay->addWidget (tab);
+ m_OPPagePostproc = new PrefOPPagePostProc (tab);
+ tab->insertTab (m_OPPagePostproc, i18n ("Postprocessing"));
+ entries.insert (i18n("Postprocessing"), tab);
+
+ for (PreferencesPage * p = settings->pagelist; p; p = p->next)
+ addPrefPage (p);
+
+
+ connect (this, SIGNAL (defaultClicked ()), SLOT (confirmDefaults ()));
+}
+
+KDE_NO_EXPORT void Preferences::setPage (const char * name) {
+ QObject * o = child (name, "QFrame");
+ if (!o) return;
+ QFrame * page = static_cast <QFrame *> (o);
+ QWidget * w = page->parentWidget ();
+ while (w && !w->inherits ("QTabWidget"))
+ w = w->parentWidget ();
+ if (!w) return;
+ QTabWidget * t = static_cast <QTabWidget*> (w);
+ t->setCurrentPage (t->indexOf(page));
+ if (!t->parentWidget() || !t->parentWidget()->inherits ("QFrame"))
+ return;
+ showPage (pageIndex (t->parentWidget ()));
+}
+
+KDE_NO_EXPORT void Preferences::addPrefPage (PreferencesPage * page) {
+ QString item, subitem, icon;
+ QFrame * frame;
+ QTabWidget * tab;
+ QVBoxLayout *vlay;
+ page->prefLocation (item, icon, subitem);
+ if (item.isEmpty ())
+ return;
+ QMap<QString, QTabWidget *>::iterator en_it = entries.find (item);
+ if (en_it == entries.end ()) {
+ frame = addPage (item, QString(), KGlobal::iconLoader()->loadIcon ((icon), KIcon::NoGroup, 32));
+ vlay = new QVBoxLayout (frame, marginHint(), spacingHint());
+ tab = new QTabWidget (frame);
+ vlay->addWidget (tab);
+ entries.insert (item, tab);
+ } else
+ tab = en_it.data ();
+ frame = page->prefPage (tab);
+ tab->insertTab (frame, subitem);
+}
+
+KDE_NO_EXPORT void Preferences::removePrefPage(PreferencesPage * page) {
+ QString item, subitem, icon;
+ page->prefLocation (item, icon, subitem);
+ if (item.isEmpty ())
+ return;
+ QMap<QString, QTabWidget *>::iterator en_it = entries.find (item);
+ if (en_it == entries.end ())
+ return;
+ QTabWidget * tab = en_it.data ();
+ for (int i = 0; i < tab->count (); i++)
+ if (tab->label (i) == subitem) {
+ QWidget * w = tab->page (i);
+ tab->removePage (w);
+ delete w;
+ break;
+ }
+ if (!tab->count ()) {
+ QWidget * w = tab->parentWidget ();
+ while (w && !w->inherits ("QFrame"))
+ w = w->parentWidget ();
+ delete w;
+ entries.erase (en_it);
+ }
+}
+
+KDE_NO_CDTOR_EXPORT Preferences::~Preferences() {
+}
+
+KDE_NO_CDTOR_EXPORT PrefGeneralPageGeneral::PrefGeneralPageGeneral(QWidget *parent, Settings *)
+: QFrame (parent, "GeneralPage")
+{
+ QVBoxLayout *layout = new QVBoxLayout(this, 5, 2);
+
+ QGroupBox *windowbox = new QGroupBox(1, Qt::Vertical, i18n("Window"), this);
+ QWidget * wbox = new QWidget (windowbox);
+ QWidget * bbox = new QWidget (wbox);
+ QGridLayout * gridlayout = new QGridLayout (bbox, 2, 2);
+ keepSizeRatio = new QCheckBox (i18n ("Keep size ratio"), bbox, 0);
+ QWhatsThis::add(keepSizeRatio, i18n("When checked, movie will keep its aspect ratio\nwhen window is resized"));
+ dockSysTray = new QCheckBox (i18n ("Dock in system tray"), bbox, 0);
+ QWhatsThis::add (dockSysTray, i18n ("When checked, an icon of KMPlayer will be added to the system tray.\nWhen clicked it will hide KMPlayer's main window and removing KMPlayer's taskbar button."));
+ autoResize = new QCheckBox (i18n ("Auto resize to video sizes"), bbox);
+ QWhatsThis::add (autoResize, i18n("When checked, KMPlayer will resize to movie sizes\nwhen video starts"));
+ gridlayout->addWidget (keepSizeRatio, 0, 0);
+ gridlayout->addWidget (dockSysTray, 1, 0);
+ gridlayout->addWidget (autoResize, 0, 1);
+ sizesChoice = new QButtonGroup (2, Qt::Vertical, wbox);
+ new QRadioButton (i18n("Remember window size on exit"), sizesChoice);
+ new QRadioButton (i18n("Always start with fixed size"), sizesChoice);
+ QVBoxLayout * vbox = new QVBoxLayout (wbox, 2, 2);
+ vbox->addWidget (bbox);
+ vbox->addWidget (sizesChoice);
+
+ QGroupBox *playbox =new QGroupBox(4, Qt::Vertical,i18n("Playing"),this);
+ loop = new QCheckBox (i18n("Loop"), playbox);
+ QWhatsThis::add(loop, i18n("Makes current movie loop"));
+ framedrop = new QCheckBox (i18n ("Allow framedrops"), playbox);
+ QWhatsThis::add (framedrop, i18n ("Allow dropping frames for better audio and video synchronization"));
+ adjustvolume = new QCheckBox(i18n("Auto set volume on start"), playbox);
+ QWhatsThis::add (adjustvolume, i18n ("When a new source is selected, the volume will be set according the volume control"));
+ adjustcolors = new QCheckBox(i18n("Auto set colors on start"), playbox);
+ QWhatsThis::add (adjustcolors, i18n ("When a movie starts, the colors will be set according the sliders for colors"));
+
+ QGroupBox * gbox =new QGroupBox (1, Qt::Vertical, i18n("Control Panel"), this);
+ bbox =new QWidget (gbox);
+ //QGroupBox * bbox = gbox;
+ gridlayout = new QGridLayout (bbox, 3, 2);
+ showConfigButton = new QCheckBox(i18n("Show config button"), bbox);
+ QWhatsThis::add (showConfigButton, i18n ("Add a button that will popup a config menu"));
+ showPlaylistButton = new QCheckBox(i18n("Show playlist button"), bbox);
+ QWhatsThis::add (showPlaylistButton, i18n ("Add a playlist button to the control buttons"));
+ showRecordButton = new QCheckBox(i18n("Show record button"), bbox);
+ QWhatsThis::add (showRecordButton, i18n ("Add a record button to the control buttons"));
+ showBroadcastButton = new QCheckBox (i18n ("Show broadcast button"), bbox);
+ QWhatsThis::add (showBroadcastButton, i18n ("Add a broadcast button to the control buttons"));
+ gridlayout->addWidget (showConfigButton, 0, 0);
+ gridlayout->addWidget (showPlaylistButton, 0, 1);
+ gridlayout->addWidget (showRecordButton, 1, 0);
+ gridlayout->addWidget (showBroadcastButton, 1, 1);
+ //QWidget *seekingWidget = new QWidget (bbox);
+ QHBoxLayout *seekLayout = new QHBoxLayout (bbox);
+ seekLayout->addWidget(new QLabel(i18n("Forward/backward seek time:"),bbox));
+ seekLayout->addItem(new QSpacerItem(0,0,QSizePolicy::Minimum, QSizePolicy::Minimum));
+ seekTime = new QSpinBox(1, 600, 1, bbox);
+ seekLayout->addWidget(seekTime);
+ seekLayout->addItem(new QSpacerItem(0,0,QSizePolicy::Minimum, QSizePolicy::Minimum));
+ gridlayout->addMultiCellLayout (seekLayout, 2, 2, 0, 1);
+
+ layout->addWidget (windowbox);
+ layout->addWidget (playbox);
+ layout->addWidget (gbox);
+ //layout->addWidget(autoHideSlider);
+ layout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+}
+
+KDE_NO_CDTOR_EXPORT PrefGeneralPageLooks::PrefGeneralPageLooks (QWidget *parent, Settings * settings)
+ : QFrame (parent, "LooksPage"),
+ colors (settings->colors),
+ fonts (settings->fonts) {
+ QVBoxLayout *layout = new QVBoxLayout(this, 5, 2);
+
+ QGroupBox *colorbox= new QGroupBox(2, Qt::Horizontal, i18n("Colors"), this);
+ colorscombo = new QComboBox (colorbox);
+ for (int i = 0; i < int (ColorSetting::last_target); i++)
+ colorscombo->insertItem (colors[i].title);
+ colorscombo->setCurrentItem (0);
+ connect (colorscombo, SIGNAL (activated (int)),
+ this, SLOT (colorItemChanged(int)));
+ colorbutton = new KColorButton (colorbox);
+ colorbutton->setColor (colors[0].color);
+ connect (colorbutton, SIGNAL (changed (const QColor &)),
+ this, SLOT (colorCanged (const QColor &)));
+
+ QGroupBox *fontbox = new QGroupBox (2,Qt::Horizontal, i18n ("Fonts"), this);
+ fontscombo = new QComboBox (fontbox);
+ for (int i = 0; i < int (FontSetting::last_target); i++)
+ fontscombo->insertItem (fonts[i].title);
+ fontscombo->setCurrentItem (0);
+ connect (fontscombo, SIGNAL (activated (int)),
+ this, SLOT (fontItemChanged(int)));
+ fontbutton = new QPushButton (i18n ("AaBbCc"), fontbox);
+ fontbutton->setFlat (true);
+ fontbutton->setFont (fonts[0].font);
+ connect (fontbutton, SIGNAL (clicked ()), this, SLOT (fontClicked ()));
+
+ layout->addWidget (colorbox);
+ layout->addWidget (fontbox);
+ layout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+}
+
+KDE_NO_EXPORT void PrefGeneralPageLooks::colorItemChanged (int c) {
+ if (c < int (ColorSetting::last_target))
+ colorbutton->setColor (colors[c].newcolor);
+}
+
+KDE_NO_EXPORT void PrefGeneralPageLooks::colorCanged (const QColor & c) {
+ if (colorscombo->currentItem () < int (ColorSetting::last_target))
+ colors[colorscombo->currentItem ()].newcolor = c;
+}
+
+KDE_NO_EXPORT void PrefGeneralPageLooks::fontItemChanged (int f) {
+ if (f < int (FontSetting::last_target))
+ fontbutton->setFont (fonts[f].newfont);
+}
+
+KDE_NO_EXPORT void PrefGeneralPageLooks::fontClicked () {
+ if (fontscombo->currentItem () < int (FontSetting::last_target)) {
+ QFont myfont = fonts [fontscombo->currentItem ()].newfont;
+ int res = KFontDialog::getFont (myfont, false, this);
+ if (res == KFontDialog::Accepted) {
+ fonts [fontscombo->currentItem ()].newfont = myfont;
+ fontbutton->setFont (myfont);
+ }
+ }
+}
+
+KDE_NO_CDTOR_EXPORT PrefSourcePageURL::PrefSourcePageURL (QWidget *parent)
+: QFrame (parent, "URLPage")
+{
+ QVBoxLayout *layout = new QVBoxLayout (this, 5, 5);
+ QHBoxLayout * urllayout = new QHBoxLayout ();
+ QHBoxLayout * sub_urllayout = new QHBoxLayout ();
+ QLabel *urlLabel = new QLabel (i18n ("Location:"), this, 0);
+ urllist = new KComboBox (true, this);
+ urllist->setMaxCount (20);
+ urllist->setDuplicatesEnabled (false); // not that it helps much :(
+ url = new KURLRequester (urllist, this);
+ QWhatsThis::add (url, i18n ("Location of the playable item"));
+ //url->setShowLocalProtocol (true);
+ url->setSizePolicy (QSizePolicy (QSizePolicy::Expanding, QSizePolicy::Preferred));
+ QLabel *sub_urlLabel = new QLabel (i18n ("Sub title:"), this, 0);
+ sub_urllist = new KComboBox (true, this);
+ sub_urllist->setMaxCount (20);
+ sub_urllist->setDuplicatesEnabled (false); // not that it helps much :(
+ sub_url = new KURLRequester (sub_urllist, this);
+ QWhatsThis::add (sub_url, i18n ("Optional location of a file containing the subtitles of the URL above"));
+ sub_url->setSizePolicy (QSizePolicy (QSizePolicy::Expanding, QSizePolicy::Preferred));
+ backend = new QListBox (this);
+ allowhref = new QCheckBox (i18n ("Enable 'Click to Play' support"), this);
+ QWhatsThis::add (allowhref, i18n ("Support for WEB pages having a start image"));
+ layout->addWidget (allowhref);
+ urllayout->addWidget (urlLabel);
+ urllayout->addWidget (url);
+ layout->addLayout (urllayout);
+ sub_urllayout->addWidget (sub_urlLabel);
+ sub_urllayout->addWidget (sub_url);
+ layout->addLayout (sub_urllayout);
+ layout->addItem (new QSpacerItem (0, 10, QSizePolicy::Minimum, QSizePolicy::Minimum));
+ QGridLayout * gridlayout = new QGridLayout (2, 2);
+ QLabel *backendLabel = new QLabel (i18n ("Use movie player:"), this, 0);
+ //QWhatsThis::add (allowhref, i18n ("Explain this in a few lines"));
+ gridlayout->addWidget (backendLabel, 0, 0);
+ gridlayout->addWidget (backend, 1, 0);
+ gridlayout->addMultiCell (new QSpacerItem (0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 1, 1, 1);
+ QGroupBox *cbox = new QGroupBox(1, Qt::Vertical, i18n("Network bandwidth"), this);
+ QWidget * wbox = new QWidget (cbox);
+ QGridLayout * bitratelayout = new QGridLayout (wbox, 2, 3, 5);
+ prefBitRate = new QLineEdit (wbox);
+ QWhatsThis::add (prefBitRate, i18n("Sometimes it is possible to choose between various streams given a particular bitrate.\nThis option sets how much bandwidth you would prefer to allocate to video."));
+ maxBitRate = new QLineEdit (wbox);
+ QWhatsThis::add (maxBitRate, i18n("Sometimes it is possible to choose between various streams given a particular bitrate.\nThis option sets the maximum bandwidth you have available for video."));
+ bitratelayout->addWidget(new QLabel(i18n("Preferred bitrate:"), wbox), 0, 0);
+ bitratelayout->addWidget (prefBitRate, 0, 1);
+ bitratelayout->addWidget (new QLabel (i18n ("kbit/s"), wbox), 0, 2);
+ bitratelayout->addWidget (new QLabel(i18n("Maximum bitrate:"), wbox), 1, 0);
+ bitratelayout->addWidget (maxBitRate, 1, 1);
+ bitratelayout->addWidget (new QLabel (i18n ("kbit/s"), wbox), 1, 2);
+ layout->addLayout (gridlayout);
+ layout->addWidget (cbox);
+ layout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+ connect (urllist, SIGNAL(textChanged (const QString &)),
+ this, SLOT (slotTextChanged (const QString &)));
+ connect (sub_urllist, SIGNAL(textChanged (const QString &)),
+ this, SLOT (slotTextChanged (const QString &)));
+}
+
+KDE_NO_EXPORT void PrefSourcePageURL::slotBrowse () {
+}
+
+KDE_NO_EXPORT void PrefSourcePageURL::slotTextChanged (const QString &) {
+ changed = true;
+}
+
+KDE_NO_CDTOR_EXPORT PrefRecordPage::PrefRecordPage (QWidget *parent, PartBase * player, RecorderPage * rl, int rec_len) : QFrame (parent, "RecordPage"), m_player (player), m_recorders (rl), m_recorders_length (rec_len) {
+ QVBoxLayout *layout = new QVBoxLayout (this, 5, 5);
+ QHBoxLayout * urllayout = new QHBoxLayout ();
+ QLabel *urlLabel = new QLabel (i18n ("Output file:"), this);
+ url = new KURLRequester ("", this);
+ url->setShowLocalProtocol (true);
+ urllayout->addWidget (urlLabel);
+ urllayout->addWidget (url);
+ recordButton = new QPushButton (i18n ("Start &Recording"), this);
+ connect (recordButton, SIGNAL (clicked ()), this, SLOT (slotRecord ()));
+ QHBoxLayout *buttonlayout = new QHBoxLayout;
+ buttonlayout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum));
+ buttonlayout->addWidget (recordButton);
+ source = new QLabel (i18n ("Current source: ") + m_player->source ()->prettyName (), this);
+ recorder = new QButtonGroup (m_recorders_length, Qt::Vertical, i18n ("Recorder"), this);
+ for (RecorderPage * p = m_recorders; p; p = p->next)
+ new QRadioButton (p->name (), recorder);
+ if (m_player->source ())
+ sourceChanged (0L, m_player->source ());
+ recorder->setButton(0); // for now
+ replay = new QButtonGroup (4, Qt::Vertical, i18n ("Auto Playback"), this);
+ new QRadioButton (i18n ("&No"), replay);
+ new QRadioButton (i18n ("&When recording finished"), replay);
+ new QRadioButton (i18n ("A&fter"), replay);
+ QWidget * customreplay = new QWidget (replay);
+ replaytime = new QLineEdit (customreplay);
+ QHBoxLayout *replaylayout = new QHBoxLayout (customreplay);
+ replaylayout->addWidget (new QLabel (i18n("Time (seconds):"), customreplay));
+ replaylayout->addWidget (replaytime);
+ replaylayout->addItem (new QSpacerItem (0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
+ layout->addWidget (source);
+ layout->addItem (new QSpacerItem (5, 0, QSizePolicy::Minimum, QSizePolicy::Minimum));
+ layout->addLayout (urllayout);
+ layout->addItem (new QSpacerItem (5, 0, QSizePolicy::Minimum, QSizePolicy::Minimum));
+ layout->addWidget (recorder);
+ layout->addItem (new QSpacerItem (5, 0, QSizePolicy::Minimum, QSizePolicy::Minimum));
+ layout->addWidget (replay);
+ layout->addItem (new QSpacerItem (5, 0, QSizePolicy::Minimum, QSizePolicy::Minimum));
+ layout->addLayout (buttonlayout);
+ layout->addItem (new QSpacerItem (5, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+ connect (m_player, SIGNAL (sourceChanged(KMPlayer::Source*,KMPlayer::Source*)), this, SLOT (sourceChanged(KMPlayer::Source*,KMPlayer::Source*)));
+#ifdef HAVE_XINE
+ connect (recorder, SIGNAL (clicked(int)), this, SLOT(recorderClicked(int)));
+#endif
+ connect (replay, SIGNAL (clicked (int)), this, SLOT (replayClicked (int)));
+}
+
+KDE_NO_EXPORT void PrefRecordPage::recordingStarted () {
+ recordButton->setText (i18n ("Stop Recording"));
+ url->setEnabled (false);
+ topLevelWidget ()->hide ();
+}
+
+KDE_NO_EXPORT void PrefRecordPage::recordingFinished () {
+ recordButton->setText (i18n ("Start Recording"));
+ url->setEnabled (true);
+ QTimer::singleShot (0, m_player, SLOT(recordingStopped())); // removed from PartBase::setSource because PartBase::recordingStopped calls openURL and that will call PartBase::setSource and Qt doesn't like disconnecting/connecting a signal that is current
+}
+
+KDE_NO_EXPORT void PrefRecordPage::sourceChanged (Source * olds, Source * nws) {
+ int id = 0;
+ int nr_recs = 0;
+ if (olds) {
+ disconnect(nws,SIGNAL(startRecording()),this, SLOT(recordingStarted()));
+ disconnect(nws,SIGNAL(stopRecording()),this, SLOT(recordingFinished()));
+ }
+ if (nws) {
+ for (RecorderPage * p = m_recorders; p; p = p->next, ++id) {
+ QButton * radio = recorder->find (id);
+ bool b = m_player->recorders () [p->recorderName ()]->supports (nws->name ());
+ radio->setEnabled (b);
+ if (b) nr_recs++;
+ }
+ source->setText (i18n ("Current Source: ") + nws->prettyName ());
+ connect (nws, SIGNAL(startRecording()), this, SLOT(recordingStarted()));
+ connect (nws, SIGNAL(stopRecording()), this, SLOT(recordingFinished()));
+ }
+ recordButton->setEnabled (nr_recs > 0);
+}
+
+KDE_NO_EXPORT void PrefRecordPage::recorderClicked (int id) {
+ bool b = recorder->find(id)->text().find (QString::fromLatin1("Xine")) > -1;
+ replay->setEnabled (!b);
+ if (b)
+ replay->setButton (Settings::ReplayNo);
+
+}
+
+KDE_NO_EXPORT void PrefRecordPage::replayClicked (int id) {
+ replaytime->setEnabled (id == Settings::ReplayAfter);
+}
+
+KDE_NO_EXPORT void PrefRecordPage::slotRecord () {
+ connect (m_player->source (), SIGNAL (stopPlaying ()),
+ this, SLOT (playingStopped ()));
+ if (m_player->process () && m_player->process ()->playing ())
+ m_player->process ()->quit ();
+ else
+ playingStopped ();
+}
+
+KDE_NO_EXPORT void PrefRecordPage::playingStopped () {
+ disconnect (m_player->source (), SIGNAL (stopPlaying ()),
+ this, SLOT (playingStopped ()));
+ if (!url->lineEdit()->text().isEmpty()) {
+ m_player->settings ()->recordfile = url->lineEdit()->text();
+ m_player->settings ()->replaytime = replaytime->text ().toInt ();
+#if KDE_IS_VERSION(3,1,90)
+ int id = recorder->selectedId ();
+ int replayid = replay->selectedId ();
+#else
+ int id = recorder->id (recorder->selected ());
+ int replayid = replay->id (replay->selectedId ());
+#endif
+ m_player->settings ()->recorder = Settings::Recorder (id);
+ m_player->settings ()->replayoption = Settings::ReplayOption (replayid);
+ for (RecorderPage * p = m_recorders; p; p = p->next)
+ if (id-- == 0) {
+ p->record ();
+ break;
+ }
+ }
+}
+
+KDE_NO_CDTOR_EXPORT RecorderPage::RecorderPage (QWidget *parent, PartBase * player)
+ : QFrame (parent), next (0L), m_player (player) {}
+
+KDE_NO_EXPORT void RecorderPage::record () {
+ Process * proc = m_player->recorders () [recorderName ()];
+ m_player->setRecorder (recorderName ());
+ Recorder * rec = dynamic_cast <Recorder *> (proc);
+ if (!proc->playing ()) {
+ if (m_player->process ())
+ m_player->process ()->quit ();
+ rec->setURL (KURL (m_player->settings ()->recordfile));
+ proc->setSource (m_player->source ());
+ proc->ready (0L);
+ } else {
+ rec->setURL (KURL ());
+ proc->stop ();
+ }
+}
+
+KDE_NO_CDTOR_EXPORT PrefMEncoderPage::PrefMEncoderPage (QWidget *parent, PartBase * player) : RecorderPage (parent, player) {
+ QVBoxLayout *layout = new QVBoxLayout (this, 5, 5);
+ format = new QButtonGroup (3, Qt::Vertical, i18n ("Format"), this);
+ new QRadioButton (i18n ("Same as source"), format);
+ new QRadioButton (i18n ("Custom"), format);
+ QWidget * customopts = new QWidget (format);
+ QGridLayout *gridlayout = new QGridLayout (customopts, 1, 2, 2);
+ QLabel *argLabel = new QLabel (i18n("Mencoder arguments:"), customopts, 0);
+ arguments = new QLineEdit ("", customopts);
+ gridlayout->addWidget (argLabel, 0, 0);
+ gridlayout->addWidget (arguments, 0, 1);
+ layout->addWidget (format);
+ layout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+ connect (format, SIGNAL (clicked (int)), this, SLOT (formatClicked (int)));
+}
+
+KDE_NO_EXPORT void PrefMEncoderPage::formatClicked (int id) {
+ arguments->setEnabled (!!id);
+}
+
+KDE_NO_EXPORT void PrefMEncoderPage::record () {
+#if KDE_IS_VERSION(3,1,90)
+ m_player->settings ()->recordcopy = !format->selectedId ();
+#else
+ m_player->settings ()->recordcopy = !format->id (format->selected ());
+#endif
+ m_player->settings ()->mencoderarguments = arguments->text ();
+ RecorderPage::record ();
+}
+
+KDE_NO_EXPORT QString PrefMEncoderPage::name () {
+ return i18n ("&MEncoder");
+}
+
+KDE_NO_CDTOR_EXPORT PrefMPlayerDumpstreamPage::PrefMPlayerDumpstreamPage (QWidget *parent, PartBase * player) : RecorderPage (parent, player) {
+ hide();
+}
+
+KDE_NO_EXPORT QString PrefMPlayerDumpstreamPage::name () {
+ return i18n ("MPlayer -&dumpstream");
+}
+
+KDE_NO_CDTOR_EXPORT PrefFFMpegPage::PrefFFMpegPage (QWidget *parent, PartBase * player) : RecorderPage (parent, player) {
+ QVBoxLayout *layout = new QVBoxLayout (this, 5, 5);
+ QGridLayout *gridlayout = new QGridLayout (1, 2, 2);
+ QLabel *argLabel = new QLabel (i18n("FFMpeg arguments:"), this);
+ arguments = new QLineEdit ("", this);
+ gridlayout->addWidget (argLabel, 0, 0);
+ gridlayout->addWidget (arguments, 0, 1);
+ layout->addLayout (gridlayout);
+ layout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+}
+
+KDE_NO_EXPORT void PrefFFMpegPage::record () {
+ m_player->settings ()->ffmpegarguments = arguments->text ();
+ RecorderPage::record ();
+}
+
+KDE_NO_EXPORT QString PrefFFMpegPage::name () {
+ return i18n ("&FFMpeg");
+}
+
+#ifdef HAVE_XINE
+KDE_NO_CDTOR_EXPORT PrefXinePage::PrefXinePage (QWidget *parent, PartBase * player) : RecorderPage (parent, player) {
+ hide();
+}
+
+KDE_NO_EXPORT QString PrefXinePage::name () {
+ return i18n ("&Xine");
+}
+#endif
+
+KDE_NO_CDTOR_EXPORT PrefGeneralPageOutput::PrefGeneralPageOutput(QWidget *parent, OutputDriver * ad, OutputDriver * vd)
+ : QFrame (parent) {
+ QGridLayout *layout = new QGridLayout (this, 2, 2, 5);
+
+ videoDriver = new QListBox (this);
+ for (int i = 0; vd[i].driver; i++)
+ videoDriver->insertItem (vd[i].description, i);
+ QWhatsThis::add(videoDriver, i18n("Sets video driver. Recommended is XVideo, or, if it is not supported, X11, which is slower."));
+ layout->addWidget (new QLabel (i18n ("Video driver:"), this), 0, 0);
+ layout->addWidget (videoDriver, 1, 0);
+
+ audioDriver = new QListBox (this);
+ for (int i = 0; ad[i].driver; i++)
+ audioDriver->insertItem (ad[i].description, i);
+ layout->addWidget (new QLabel (i18n ("Audio driver:"), this), 0, 1);
+ layout->addWidget (audioDriver, 1, 1);
+ layout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
+}
+
+KDE_NO_CDTOR_EXPORT PrefOPPageGeneral::PrefOPPageGeneral(QWidget *parent)
+: QFrame(parent)
+{
+ QVBoxLayout *layout = new QVBoxLayout (this, 5);
+ layout->setAutoAdd (true);
+}
+
+KDE_NO_CDTOR_EXPORT PrefOPPagePostProc::PrefOPPagePostProc(QWidget *parent) : QFrame(parent)
+{
+ QVBoxLayout *tabLayout = new QVBoxLayout (this, 5);
+ postProcessing = new QCheckBox (i18n ("Enable use of postprocessing filters"), this);
+ postProcessing->setEnabled( true );
+ disablePPauto = new QCheckBox (i18n ("Disable use of postprocessing when watching TV/DVD"), this);
+
+ tabLayout->addWidget( postProcessing );
+ tabLayout->addWidget( disablePPauto );
+ tabLayout->addItem ( new QSpacerItem( 5, 5, QSizePolicy::Minimum, QSizePolicy::Minimum ) );
+
+ PostprocessingOptions = new QTabWidget( this, "PostprocessingOptions" );
+ PostprocessingOptions->setEnabled (true);
+ PostprocessingOptions->setAutoMask (false);
+ PostprocessingOptions->setTabPosition( QTabWidget::Top );
+ PostprocessingOptions->setTabShape( QTabWidget::Rounded );
+ PostprocessingOptions->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)1, PostprocessingOptions->sizePolicy().hasHeightForWidth() ) );
+
+ QWidget *presetSelectionWidget = new QWidget( PostprocessingOptions, "presetSelectionWidget" );
+ QGridLayout *presetSelectionWidgetLayout = new QGridLayout( presetSelectionWidget, 1, 1, 1);
+
+ QButtonGroup *presetSelection = new QButtonGroup(3, Qt::Vertical, presetSelectionWidget);
+ presetSelection->setInsideSpacing(KDialog::spacingHint());
+
+ defaultPreset = new QRadioButton (i18n ("Default"), presetSelection);
+ defaultPreset->setChecked( true );
+ presetSelection->insert (defaultPreset);
+
+ customPreset = new QRadioButton (i18n ("Custom"), presetSelection);
+ presetSelection->insert (customPreset);
+
+ fastPreset = new QRadioButton (i18n ("Fast"), presetSelection);
+ presetSelection->insert (fastPreset);
+ presetSelection->setRadioButtonExclusive ( true);
+ presetSelectionWidgetLayout->addWidget( presetSelection, 0, 0 );
+ PostprocessingOptions->insertTab( presetSelectionWidget, "" );
+
+ //
+ // SECOND!!!
+ //
+ /* I JUST WASN'T ABLE TO GET THIS WORKING WITH QGridLayouts */
+
+ QWidget *customFiltersWidget = new QWidget( PostprocessingOptions, "customFiltersWidget" );
+ QVBoxLayout *customFiltersWidgetLayout = new QVBoxLayout( customFiltersWidget );
+
+ QGroupBox *customFilters = new QGroupBox(0, Qt::Vertical, customFiltersWidget, "customFilters" );
+ customFilters->setSizePolicy(QSizePolicy((QSizePolicy::SizeType)1, (QSizePolicy::SizeType)2));
+ customFilters->setFlat(false);
+ customFilters->setEnabled( false );
+ customFilters->setInsideSpacing(7);
+
+ QLayout *customFiltersLayout = customFilters->layout();
+ QHBoxLayout *customFiltersLayout1 = new QHBoxLayout ( customFilters->layout() );
+
+ HzDeblockFilter = new QCheckBox (i18n ("Horizontal deblocking"), customFilters);
+ HzDeblockAQuality = new QCheckBox (i18n ("Auto quality"), customFilters);
+ HzDeblockAQuality->setEnabled (false);
+ HzDeblockCFiltering = new QCheckBox (i18n ("Chrominance filtering"), customFilters);
+ HzDeblockCFiltering->setEnabled (false);
+
+ customFiltersLayout1->addWidget( HzDeblockFilter );
+ customFiltersLayout1->addItem( new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum ) );
+ customFiltersLayout1->addWidget( HzDeblockAQuality );
+ customFiltersLayout1->addWidget( HzDeblockCFiltering );
+
+ QFrame *line1 = new QFrame( customFilters, "line1" );
+ line1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)2 ) );
+ line1->setFrameShape( QFrame::HLine );
+ line1->setFrameShadow( QFrame::Sunken );
+ customFiltersLayout->add(line1);
+
+ QHBoxLayout *customFiltersLayout2 = new QHBoxLayout ( customFilters->layout() );
+
+ VtDeblockFilter = new QCheckBox(i18n("Vertical deblocking"), customFilters);
+ VtDeblockAQuality = new QCheckBox (i18n ("Auto quality"), customFilters);
+ VtDeblockAQuality->setEnabled (false);
+ VtDeblockCFiltering = new QCheckBox (i18n ("Chrominance filtering"), customFilters);
+ VtDeblockCFiltering->setEnabled (false);
+
+ customFiltersLayout2->addWidget( VtDeblockFilter );
+ customFiltersLayout2->addItem( new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum ) );
+ customFiltersLayout2->addWidget( VtDeblockAQuality );
+ customFiltersLayout2->addWidget( VtDeblockCFiltering );
+
+ QFrame *line2 = new QFrame( customFilters, "line2" );
+
+ line2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)2 ) );
+ line2->setFrameShape( QFrame::HLine );
+ line2->setFrameShadow( QFrame::Sunken );
+ customFiltersLayout->add(line2);
+
+ QHBoxLayout *customFiltersLayout3 = new QHBoxLayout ( customFilters->layout() );
+
+ DeringFilter = new QCheckBox (i18n ("Dering filter"), customFilters);
+ DeringAQuality = new QCheckBox (i18n ("Auto quality"), customFilters);
+ DeringAQuality->setEnabled (false);
+ DeringCFiltering=new QCheckBox(i18n("Chrominance filtering"),customFilters);
+ DeringCFiltering->setEnabled (false);
+
+ customFiltersLayout3->addWidget( DeringFilter );
+ customFiltersLayout3->addItem( new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum ) );
+ customFiltersLayout3->addWidget( DeringAQuality );
+ customFiltersLayout3->addWidget( DeringCFiltering );
+
+ QFrame *line3 = new QFrame( customFilters, "line3" );
+ line3->setFrameShape( QFrame::HLine );
+ line3->setFrameShadow( QFrame::Sunken );
+ line3->setFrameShape( QFrame::HLine );
+
+ customFiltersLayout->add(line3);
+
+ QHBoxLayout *customFiltersLayout4 =new QHBoxLayout(customFilters->layout());
+
+ AutolevelsFilter = new QCheckBox (i18n ("Auto brightness/contrast"), customFilters);
+ AutolevelsFullrange = new QCheckBox (i18n ("Stretch luminance to full range"), customFilters);
+ AutolevelsFullrange->setEnabled (false);
+
+ customFiltersLayout4->addWidget(AutolevelsFilter);
+ customFiltersLayout4->addItem(new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum ));
+ customFiltersLayout4->addWidget(AutolevelsFullrange);
+
+ QHBoxLayout *customFiltersLayout5 = new QHBoxLayout (customFilters->layout());
+
+ TmpNoiseFilter =new QCheckBox(i18n("Temporal noise reducer"),customFilters);
+ /* Note: Change TmpNoiseFilter text back to "Label:" if this slider gets reactivated
+ TmpNoiseSlider = new QSlider( customFilters, "TmpNoiseSlider" );
+ TmpNoiseSlider->setEnabled( false );
+ TmpNoiseSlider->setMinValue( 1 );
+ TmpNoiseSlider->setMaxValue( 3 );
+ TmpNoiseSlider->setValue( 1 );
+ TmpNoiseSlider->setOrientation( QSlider::Horizontal );
+ TmpNoiseSlider->setTickmarks( QSlider::Left );
+ TmpNoiseSlider->setTickInterval( 1 );
+ TmpNoiseSlider->setSizePolicy(QSizePolicy( (QSizePolicy::SizeType)1, (QSizePolicy::SizeType)1));*/
+
+ /*customFiltersLayout->addWidget(TmpNoiseFilter,7,0);
+ customFiltersLayout->addWidget(TmpNoiseSlider,7,2);*/
+ customFiltersLayout5->addWidget(TmpNoiseFilter);
+ customFiltersLayout5->addItem(new QSpacerItem( 0, 0, QSizePolicy::Minimum, QSizePolicy::Minimum ));
+ //customFiltersLayout5->addWidget(TmpNoiseSlider);
+ customFiltersWidgetLayout->addWidget( customFilters );
+ PostprocessingOptions->insertTab( customFiltersWidget, "" );
+ //
+ //THIRD!!!
+ //
+ QWidget *deintSelectionWidget = new QWidget( PostprocessingOptions, "deintSelectionWidget" );
+ QVBoxLayout *deintSelectionWidgetLayout = new QVBoxLayout( deintSelectionWidget);
+ QButtonGroup *deinterlacingGroup = new QButtonGroup(5, Qt::Vertical, deintSelectionWidget, "deinterlacingGroup" );
+
+ LinBlendDeinterlacer = new QCheckBox (i18n ("Linear blend deinterlacer"), deinterlacingGroup);
+ LinIntDeinterlacer = new QCheckBox (i18n ("Linear interpolating deinterlacer"), deinterlacingGroup);
+ CubicIntDeinterlacer = new QCheckBox (i18n ("Cubic interpolating deinterlacer"), deinterlacingGroup);
+ MedianDeinterlacer = new QCheckBox (i18n ("Median deinterlacer"), deinterlacingGroup);
+ FfmpegDeinterlacer = new QCheckBox (i18n ("FFmpeg deinterlacer"), deinterlacingGroup);
+
+ deinterlacingGroup->insert( LinBlendDeinterlacer );
+ deinterlacingGroup->insert( LinIntDeinterlacer );
+ deinterlacingGroup->insert( CubicIntDeinterlacer );
+ deinterlacingGroup->insert( MedianDeinterlacer );
+ deinterlacingGroup->insert( FfmpegDeinterlacer );
+
+ deintSelectionWidgetLayout->addWidget( deinterlacingGroup, 0, 0 );
+
+ PostprocessingOptions->insertTab( deintSelectionWidget, "" );
+
+ tabLayout->addWidget( PostprocessingOptions/*, 1, 0*/ );
+
+ PostprocessingOptions->setEnabled(false);
+ connect( customPreset, SIGNAL (toggled(bool) ), customFilters, SLOT(setEnabled(bool)));
+ connect( postProcessing, SIGNAL( toggled(bool) ), PostprocessingOptions, SLOT( setEnabled(bool) ) );
+ connect( HzDeblockFilter, SIGNAL( toggled(bool) ), HzDeblockAQuality, SLOT( setEnabled(bool) ) );
+ connect( HzDeblockFilter, SIGNAL( toggled(bool) ), HzDeblockCFiltering, SLOT( setEnabled(bool) ) );
+ connect( VtDeblockFilter, SIGNAL( toggled(bool) ), VtDeblockCFiltering, SLOT( setEnabled(bool) ) );
+ connect( VtDeblockFilter, SIGNAL( toggled(bool) ), VtDeblockAQuality, SLOT( setEnabled(bool) ) );
+ connect( DeringFilter, SIGNAL( toggled(bool) ), DeringAQuality, SLOT( setEnabled(bool) ) );
+ connect( DeringFilter, SIGNAL( toggled(bool) ), DeringCFiltering, SLOT( setEnabled(bool) ) );
+ //connect( TmpNoiseFilter, SIGNAL( toggled(bool) ), TmpNoiseSlider, SLOT( setEnabled(bool) ) );
+
+ connect( AutolevelsFilter, SIGNAL( toggled(bool) ), AutolevelsFullrange, SLOT( setEnabled(bool) ) );
+
+ QWhatsThis::add( defaultPreset, i18n( "Enable mplayer's default postprocessing filters" ) );
+ QWhatsThis::add( customPreset, i18n( "Enable custom postprocessing filters (See: Custom preset -tab)" ) );
+ QWhatsThis::add( fastPreset, i18n( "Enable mplayer's fast postprocessing filters" ) );
+ PostprocessingOptions->changeTab( presetSelectionWidget, i18n( "General" ) );
+ customFilters->setTitle (QString ());
+ QWhatsThis::add( HzDeblockAQuality, i18n( "Filter is used if there is enough CPU" ) );
+ QWhatsThis::add( VtDeblockAQuality, i18n( "Filter is used if there is enough CPU" ) );
+ QWhatsThis::add( DeringAQuality, i18n( "Filter is used if there is enough CPU" ) );
+ //QWhatsThis::add( TmpNoiseSlider, i18n( "Strength of the noise reducer" ) );
+ QWhatsThis::add( AutolevelsFullrange, i18n( "Stretches luminance to full range (0..255)" ) );
+ PostprocessingOptions->changeTab( customFiltersWidget, i18n( "Custom Preset" ) );
+ deinterlacingGroup->setTitle (QString ());
+ PostprocessingOptions->changeTab( deintSelectionWidget, i18n( "Deinterlacing" ) );
+ PostprocessingOptions->adjustSize();
+}
+
+KDE_NO_EXPORT void Preferences::confirmDefaults() {
+ // TODO: Switch to KMessageBox
+ switch( QMessageBox::warning( this, i18n("Reset Settings?"),
+ i18n("You are about to have all your settings overwritten with defaults.\nPlease confirm.\n"),
+ i18n ("&OK"), i18n ("&Cancel"), QString (), 0, 1)) {
+ case 0: Preferences::setDefaults();
+ break;
+ case 1: break;
+ }
+
+}
+
+KDE_NO_EXPORT void Preferences::setDefaults() {
+ m_GeneralPageGeneral->keepSizeRatio->setChecked(true);
+ m_GeneralPageGeneral->loop->setChecked(false);
+ m_GeneralPageGeneral->seekTime->setValue(10);
+
+ m_GeneralPageOutput->videoDriver->setCurrentItem (0);
+ m_GeneralPageOutput->audioDriver->setCurrentItem(0);
+
+ m_OPPagePostproc->postProcessing->setChecked(false);
+ m_OPPagePostproc->disablePPauto->setChecked(true);
+
+ m_OPPagePostproc->defaultPreset->setChecked(true);
+
+ m_OPPagePostproc->LinBlendDeinterlacer->setChecked(false);
+ m_OPPagePostproc->LinIntDeinterlacer->setChecked(false);
+ m_OPPagePostproc->CubicIntDeinterlacer->setChecked(false);
+ m_OPPagePostproc->MedianDeinterlacer->setChecked(false);
+ m_OPPagePostproc->FfmpegDeinterlacer->setChecked(false);
+
+}
+#include "pref.moc"
diff --git a/src/pref.h b/src/pref.h
new file mode 100644
index 0000000..c7d6166
--- /dev/null
+++ b/src/pref.h
@@ -0,0 +1,320 @@
+/**
+ * Copyright (C) 2003 Joonas Koivunen <rzei@mbnet.fi>
+ * Copyright (C) 2003 Koos Vriezen <koos.vriezen@xs4all.nl>
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _KMPlayerPREF_H_
+#define _KMPlayerPREF_H_
+
+#include "kmplayer_def.h"
+
+#include <kdialogbase.h>
+#include <qframe.h>
+#include <qmap.h>
+
+class QTabWidget;
+class QTable;
+class QGroupBox;
+class QCheckBox;
+class QComboBox;
+class QLineEdit;
+class QRadioButton;
+class QSlider;
+class QSpinBox;
+class QColor;
+class QButtonGroup;
+class KHistoryCombo;
+class KComboBox;
+class KURLRequester;
+class KColorButton;
+
+namespace KMPlayer {
+
+class PrefGeneralPageGeneral; // general, general
+class PrefSourcePageURL; // source, url
+class PrefRecordPage; // recording
+class RecorderPage; // base recorder
+class PrefMEncoderPage; // mencoder
+class PrefMPlayerDumpstreamPage; // mplayer -dumpstream
+class PrefFFMpegPage; // ffmpeg
+class PrefXinePage; // xine url:record
+class PrefGeneralPageLooks; // general, looks
+class PrefGeneralPageOutput; // general, output
+class PrefOPPageGeneral; // OP = outputplugins, general
+class PrefOPPagePostProc; // outputplugins, postproc
+class PartBase;
+class Source;
+class Settings;
+class PreferencesPage;
+class OutputDriver;
+class ColorSetting;
+class FontSetting;
+
+class KMPLAYER_NO_EXPORT Preferences : public KDialogBase
+{
+ Q_OBJECT
+public:
+
+ Preferences(PartBase *, Settings *);
+ ~Preferences();
+
+ PrefGeneralPageGeneral *m_GeneralPageGeneral;
+ PrefSourcePageURL *m_SourcePageURL;
+ PrefRecordPage *m_RecordPage;
+ PrefMEncoderPage *m_MEncoderPage;
+ PrefMPlayerDumpstreamPage *m_MPlayerDumpstreamPage;
+#ifdef HAVE_XINE
+ PrefXinePage *m_XinePage;
+#endif
+ PrefFFMpegPage *m_FFMpegPage;
+ PrefGeneralPageLooks *m_GeneralPageLooks;
+ PrefGeneralPageOutput *m_GeneralPageOutput;
+ PrefOPPageGeneral *m_OPPageGeneral;
+ PrefOPPagePostProc *m_OPPagePostproc;
+ void setDefaults();
+ void setPage (const char *);
+ void addPrefPage (PreferencesPage *);
+ void removePrefPage (PreferencesPage *);
+
+ RecorderPage * recorders;
+ QMap<QString, QTabWidget *> entries;
+public slots:
+ void confirmDefaults();
+};
+
+class KMPLAYER_NO_EXPORT PrefGeneralPageGeneral : public QFrame
+{
+ Q_OBJECT
+public:
+ PrefGeneralPageGeneral(QWidget *parent, Settings *);
+ ~PrefGeneralPageGeneral() {}
+
+ QCheckBox *keepSizeRatio;
+ QCheckBox * autoResize;
+ QButtonGroup *sizesChoice;
+ QCheckBox *dockSysTray;
+ QCheckBox *loop;
+ QCheckBox *showConfigButton;
+ QCheckBox *showPlaylistButton;
+ QCheckBox *showRecordButton;
+ QCheckBox *showBroadcastButton;
+ QCheckBox *framedrop;
+ QCheckBox *adjustvolume;
+ QCheckBox *adjustcolors;
+
+ QSpinBox *seekTime;
+};
+
+class KMPLAYER_NO_EXPORT PrefGeneralPageLooks : public QFrame {
+ Q_OBJECT
+public:
+ PrefGeneralPageLooks (QWidget *parent, Settings *);
+ ~PrefGeneralPageLooks () {}
+ QComboBox *colorscombo;
+ KColorButton *colorbutton;
+ QComboBox *fontscombo;
+ QPushButton *fontbutton;
+public slots:
+ void colorItemChanged (int);
+ void colorCanged (const QColor &);
+ void fontItemChanged (int);
+ void fontClicked ();
+private:
+ ColorSetting * colors;
+ FontSetting * fonts;
+};
+
+class KMPLAYER_NO_EXPORT PrefSourcePageURL : public QFrame
+{
+ Q_OBJECT
+public:
+ PrefSourcePageURL (QWidget *parent);
+ ~PrefSourcePageURL () {}
+
+ KURLRequester * url;
+ //KHistoryCombo * url;
+ KComboBox * urllist;
+ KURLRequester * sub_url;
+ KComboBox * sub_urllist;
+ QListBox * backend;
+ QCheckBox * allowhref;
+ QLineEdit * prefBitRate;
+ QLineEdit * maxBitRate;
+ bool changed;
+private slots:
+ void slotBrowse ();
+ void slotTextChanged (const QString &);
+};
+
+
+class KMPLAYER_NO_EXPORT PrefRecordPage : public QFrame
+{
+ Q_OBJECT
+public:
+ PrefRecordPage (QWidget *parent, PartBase *, RecorderPage *, int len);
+ ~PrefRecordPage () {}
+
+ KURLRequester * url;
+ QButtonGroup * recorder;
+ QButtonGroup * replay;
+ QLineEdit * replaytime;
+ QLabel * source;
+public slots:
+ void replayClicked (int id);
+ void recorderClicked (int id);
+private slots:
+ void slotRecord ();
+ void playingStopped ();
+ void sourceChanged (KMPlayer::Source *, KMPlayer::Source *);
+ void recordingStarted ();
+ void recordingFinished ();
+private:
+ PartBase * m_player;
+ RecorderPage * m_recorders;
+ QPushButton * recordButton;
+ int m_recorders_length;
+};
+
+class KMPLAYER_NO_EXPORT RecorderPage : public QFrame
+{
+ Q_OBJECT
+public:
+ RecorderPage (QWidget *parent, PartBase *);
+ virtual ~RecorderPage () {};
+ virtual void record ();
+ virtual QString name () = 0;
+ virtual const char * recorderName () = 0;
+ RecorderPage * next;
+protected:
+ PartBase * m_player;
+};
+
+class KMPLAYER_NO_EXPORT PrefMEncoderPage : public RecorderPage
+{
+ Q_OBJECT
+public:
+ PrefMEncoderPage (QWidget *parent, PartBase *);
+ ~PrefMEncoderPage () {}
+
+ void record ();
+ QString name ();
+ const char * recorderName () { return "mencoder"; }
+
+ QLineEdit * arguments;
+ QButtonGroup * format;
+public slots:
+ void formatClicked (int id);
+private:
+};
+
+class KMPLAYER_NO_EXPORT PrefMPlayerDumpstreamPage : public RecorderPage {
+public:
+ PrefMPlayerDumpstreamPage (QWidget *parent, PartBase *);
+ ~PrefMPlayerDumpstreamPage () {}
+
+ QString name ();
+ const char * recorderName () { return "mplayerdumpstream"; }
+};
+
+#ifdef HAVE_XINE
+class KMPLAYER_NO_EXPORT PrefXinePage : public RecorderPage {
+public:
+ PrefXinePage (QWidget *parent, PartBase *);
+ ~PrefXinePage () {}
+
+ QString name ();
+ const char * recorderName () { return "xine"; }
+};
+#endif
+
+class KMPLAYER_NO_EXPORT PrefFFMpegPage : public RecorderPage
+{
+ Q_OBJECT
+public:
+ PrefFFMpegPage (QWidget *parent, PartBase *);
+ ~PrefFFMpegPage () {}
+
+ void record ();
+ QString name ();
+ const char * recorderName () { return "ffmpeg"; }
+
+ QLineEdit * arguments;
+ QButtonGroup * format;
+private:
+};
+
+
+class KMPLAYER_NO_EXPORT PrefGeneralPageOutput : public QFrame
+{
+ Q_OBJECT
+public:
+ PrefGeneralPageOutput (QWidget *parent, OutputDriver * ad, OutputDriver * vd);
+ ~PrefGeneralPageOutput() {}
+
+ QListBox *videoDriver;
+ QListBox *audioDriver;
+};
+
+class KMPLAYER_NO_EXPORT PrefOPPageGeneral : public QFrame
+{
+ Q_OBJECT
+public:
+ PrefOPPageGeneral(QWidget *parent = 0);
+ ~PrefOPPageGeneral() {}
+};
+
+class KMPLAYER_NO_EXPORT PrefOPPagePostProc : public QFrame
+{
+ Q_OBJECT
+public:
+ PrefOPPagePostProc(QWidget *parent = 0);
+ ~PrefOPPagePostProc() {}
+
+ QCheckBox* postProcessing;
+ QCheckBox* disablePPauto;
+ QTabWidget* PostprocessingOptions;
+
+ QRadioButton* defaultPreset;
+ QRadioButton* customPreset;
+ QRadioButton* fastPreset;
+
+ QCheckBox* HzDeblockFilter;
+ QCheckBox* VtDeblockFilter;
+ QCheckBox* DeringFilter;
+ QCheckBox* HzDeblockAQuality;
+ QCheckBox* VtDeblockAQuality;
+ QCheckBox* DeringAQuality;
+
+ QCheckBox* AutolevelsFilter;
+ QCheckBox* AutolevelsFullrange;
+ QCheckBox* HzDeblockCFiltering;
+ QCheckBox* VtDeblockCFiltering;
+ QCheckBox* DeringCFiltering;
+ QCheckBox* TmpNoiseFilter;
+ QSlider* TmpNoiseSlider;
+
+ QCheckBox* LinBlendDeinterlacer;
+ QCheckBox* CubicIntDeinterlacer;
+ QCheckBox* LinIntDeinterlacer;
+ QCheckBox* MedianDeinterlacer;
+ QCheckBox* FfmpegDeinterlacer;
+};
+
+} // namespace
+
+#endif // _KMPlayerPREF_H_
diff --git a/src/subtrans.txt b/src/subtrans.txt
new file mode 100644
index 0000000..5845890
--- /dev/null
+++ b/src/subtrans.txt
@@ -0,0 +1,19 @@
+{ "circle", SMIL::Transition::SubCircle },
+{ "clockwiseNine", SMIL::Transition::SubClockwiseNine },
+{ "clockwiseSix", SMIL::Transition::SubClockwiseSix },
+{ "clockwiseThree", SMIL::Transition::SubClockwiseThree },
+{ "clockwiseTwelve",SMIL::Transition::SubClockwiseTwelve },
+{ "crossfade", SMIL::Transition::SubCrossfade },
+{ "diamond", SMIL::Transition::SubDiamond },
+{ "fadeFromColor", SMIL::Transition::SubFadeFromColor },
+{ "fadeToColor", SMIL::Transition::SubFadeToColor },
+{ "fromBottom", SMIL::Transition::SubFromBottom },
+{ "fromLeft", SMIL::Transition::SubFromLeft },
+{ "fromRight", SMIL::Transition::SubFromRight },
+{ "fromTop", SMIL::Transition::SubFromTop },
+{ "horizontal", SMIL::Transition::SubHorizontal },
+{ "leftToRight", SMIL::Transition::SubLeftToRight },
+{ "rectangle", SMIL::Transition::SubRectangle },
+{ "topToBottom", SMIL::Transition::SubTopToBottom },
+{ "vertical", SMIL::Transition::SubVertical },
+{ NULL, SMIL::Transition::SubTransLast }
diff --git a/src/transitions.txt b/src/transitions.txt
new file mode 100644
index 0000000..d23712f
--- /dev/null
+++ b/src/transitions.txt
@@ -0,0 +1,29 @@
+/*http://www.w3.org/TR/2005/REC-SMIL2-20050107/smil-transitions.html#Table%201:%20Taxonomy%20Table*/
+{ "barWipe", SMIL::Transition::BarWipe, 2, {
+ SMIL::Transition::SubLeftToRight,
+ SMIL::Transition::SubTopToBottom } },
+{ "bowTieWipe", SMIL::Transition::BowTieWipe, 2, {
+ SMIL::Transition::SubVertical,
+ SMIL::Transition::SubHorizontal } },
+{ "clockWipe", SMIL::Transition::ClockWipe, 4, {
+ SMIL::Transition::SubClockwiseTwelve,
+ SMIL::Transition::SubClockwiseThree,
+ SMIL::Transition::SubClockwiseSix,
+ SMIL::Transition::SubClockwiseNine } },
+{ "ellipseWipe",SMIL::Transition::EllipseWipe,3, {
+ SMIL::Transition::SubCircle,
+ SMIL::Transition::SubVertical,
+ SMIL::Transition::SubHorizontal } },
+{ "fade", SMIL::Transition::Fade, 3, {
+ SMIL::Transition::SubCrossfade,
+ SMIL::Transition::SubFadeToColor,
+ SMIL::Transition::SubFadeFromColor } },
+{ "irisWipe", SMIL::Transition::IrisWipe, 2, {
+ SMIL::Transition::SubRectangle, SMIL::Transition::SubDiamond } },
+{ "pushWipe", SMIL::Transition::PushWipe, 4, {
+ SMIL::Transition::SubFromLeft,
+ SMIL::Transition::SubFromTop,
+ SMIL::Transition::SubFromRight,
+ SMIL::Transition::SubFromBottom } },
+{ NULL, SMIL::Transition::TransTypeNone, 0, {
+ } }
diff --git a/src/triestring.cpp b/src/triestring.cpp
new file mode 100644
index 0000000..bf41506
--- /dev/null
+++ b/src/triestring.cpp
@@ -0,0 +1,516 @@
+/**
+ This file belong to the KMPlayer project, a movie player plugin for Konqueror
+ Copyright (C) 2007 Koos Vriezen <koos.vriezen@gmail.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+**/
+
+#ifdef TEST_TRIE
+# define KMPLAYER_NO_EXPORT
+# define KMPLAYER_EXPORT
+# define KDE_NO_EXPORT
+# define KDE_NO_CDTOR_EXPORT
+#else
+# include <config.h>
+# include "kmplayer_def.h"
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+
+
+#include "triestring.h"
+
+namespace KMPlayer {
+
+struct KMPLAYER_NO_EXPORT TrieNode {
+ TrieNode (const char * s);
+ ~TrieNode ();
+ void unref ();
+ void removeChild (TrieNode *);
+ void dump (int lvl) {
+ QString indent (QString ().fill (QChar ('.'), lvl));
+ printf("%s%s len:%4d rc:%4d\n", indent.ascii(), str, length, ref_count);
+ }
+ char * str;
+ unsigned short length;
+ unsigned short ref_count;
+ TrieNode * parent;
+ TrieNode * first_child;
+ TrieNode * next_sibling;
+};
+
+}
+
+using namespace KMPlayer;
+
+static TrieNode * root_trie;
+
+void dump (TrieNode * node, int lvl) {
+ if (!node)
+ return;
+ node->dump (lvl);
+ dump (node->first_child, lvl+2);
+ if (node->next_sibling)
+ dump (node->next_sibling, lvl);
+}
+
+KDE_NO_CDTOR_EXPORT TrieNode::TrieNode (const char * s)
+ : str (s ? strdup (s) : 0L),
+ length (s ? strlen (s) : 0),
+ ref_count (1),
+ parent (0L),
+ first_child (0L),
+ next_sibling (0L) {}
+
+KDE_NO_CDTOR_EXPORT TrieNode::~TrieNode () {
+ if (str)
+ free (str);
+}
+
+KDE_NO_EXPORT void TrieNode::unref () {
+ if (--ref_count <= 0 && !first_child)
+ parent->removeChild (this);
+}
+
+KDE_NO_EXPORT void TrieNode::removeChild (TrieNode * node) {
+ if (node == first_child) {
+ first_child = node->next_sibling;
+ } else {
+ for (TrieNode *tn = first_child; tn; tn = tn->next_sibling)
+ if (tn->next_sibling == node) {
+ tn->next_sibling = node->next_sibling;
+ break;
+ }
+ }
+ delete node;
+ if (!parent)
+ return;
+ if (!ref_count && !first_child)
+ parent->removeChild (this); // can this happen ?
+ else if (!ref_count && !first_child->next_sibling) { // merge with child
+ char * tmp = first_child->str;
+ first_child->length = first_child->length + length;
+ first_child->str = (char *) malloc (first_child->length + 1);
+ strcpy (first_child->str, str);
+ strcat (first_child->str, tmp);
+ free (tmp);
+ first_child->parent = parent;
+ first_child->next_sibling = next_sibling;
+ if (parent->first_child == this) {
+ parent->first_child = first_child;
+ } else {
+ for (TrieNode *n = parent->first_child; n; n = n->next_sibling)
+ if (n->next_sibling == this) {
+ n->next_sibling = first_child;
+ break;
+ }
+ }
+ delete this;
+ }
+}
+
+static char * trieRetrieveString (TrieNode * node, int &len) {
+ char *buf;
+ if (node->parent) {
+ len += node->length;
+ buf = trieRetrieveString (node->parent, len);
+ strcat (buf, node->str);
+ } else {
+ buf = (char *) malloc (len + 1);
+ *buf = 0;
+ }
+ return buf;
+}
+
+static int trieStringCompare (TrieNode * node, const char * s, int &len) {
+ int cmp = 0;
+ if (!node)
+ return !!s;
+ if (node->parent && node->parent != root_trie)
+ cmp = trieStringCompare (node->parent, s, len);
+ if (!cmp) {
+#ifdef TEST_TRIE
+ printf( "compare %s %s %d\n", node->str, s + len, node->length);
+#endif
+ cmp = s ? strncmp (node->str, s + len, node->length) : 1;
+ len += node->length;
+ }
+ return cmp;
+}
+
+static int trieStringCompare (TrieNode * n1, TrieNode * n2) {
+ // pre n1 && n2 on same depth and not NIL
+ int cmp = 0;
+ if (n1->parent && n1->parent != root_trie)
+ cmp = trieStringCompare (n1->parent, n2->parent);
+ if (!cmp && n1 != n2) {
+#ifdef TEST_TRIE
+ printf( "compare %s %s", n1->str, n2->str);
+#endif
+ if (!n1->str)
+ cmp = n2->str ? 1 : 0;
+ else if (!n2->str)
+ cmp = 1;
+ else
+ cmp = strcmp (n1->str, n2->str);
+#ifdef TEST_TRIE
+ printf( "=> %d\n", cmp);
+#endif
+ }
+ return cmp;
+}
+
+static int trieStringStarts (TrieNode * node, const char * s, int & pos) {
+ int cmp = -1; // -1 still matches, 0 no, 1 yes
+ if (node->parent && node->parent != root_trie)
+ cmp = trieStringStarts (node->parent, s, pos);
+ if (cmp == -1) {
+ for (int i = 0; i < node->length; i++)
+ if (node->str[i] != s[pos + i])
+ return !s[pos + i] ? 1 : 0;
+ pos += node->length;
+ }
+ return cmp;
+}
+
+static TrieNode * trieInsert (const char * s) {
+ if (!root_trie)
+ root_trie = new TrieNode (0L);
+ //printf("trieInsert %s\n", s);
+ //dumpTrie();
+ TrieNode * parent = root_trie;
+ for (TrieNode * c = parent->first_child; c; c = c->first_child) {
+ TrieNode * prev = c;
+ for (TrieNode * n = prev; n; n = n->next_sibling) {
+ if (n->str[0] == s[0]) { // insert here
+ int i = 1;
+ for (; i < n->length; i++) {
+ if (n->str[i] != s[i]) { // break here
+ // insert new node so strings to n remain valid
+ bool bigger = n->str[i] < s[i];
+ char *tmp = n->str;
+ n->str = strdup (tmp + i);
+ n->length -= i;
+ tmp[i] = 0;
+ TrieNode * node = new TrieNode (tmp);
+ free (tmp);
+ node->parent = parent;
+ node->next_sibling = n->next_sibling;
+ if (prev != n)
+ prev->next_sibling = node;
+ else
+ parent->first_child = node;
+ n->parent = node;
+ TrieNode * snode;
+ if (!s[i]) {
+ node->first_child = n;
+ n->next_sibling = 0L;
+ snode = node; // s is complete in node
+ } else {
+ snode = new TrieNode (s+i);
+ snode->parent = node;
+ if (bigger) { // set n before snode
+ node->first_child = n;
+ n->next_sibling = snode;
+ } else { // set snode before n
+ node->first_child = snode;
+ snode->next_sibling = n;
+ n->next_sibling = 0L;
+ }
+ node->ref_count--;
+ }
+ return snode;
+ }
+ }
+ if (s[i]) { // go one level deeper with s+i
+ s = s + i;
+ c = n;
+ prev = 0;
+ break;
+ } // else n and s are equal
+ n->ref_count++;
+ return n;
+ } else if (n->str[0] > s[0]) { // insert before
+ TrieNode * node = new TrieNode (s);
+ node->parent = parent;
+ node->next_sibling = n;
+ if (prev != n)
+ prev->next_sibling = node;
+ else
+ parent->first_child = node;
+ return node;
+ }
+ prev = n;
+ }
+ if (prev) { // insert after
+ TrieNode * node = new TrieNode (s);
+ node->parent = parent;
+ prev->next_sibling = node;
+ return node;
+ }
+ parent = c;
+ }
+ // hit an empty first_child, add s as first_child
+ TrieNode * node = new TrieNode (s);
+ parent->first_child = node;
+ node->parent = parent;
+ return node;
+}
+
+TrieString::TrieString (const QString & s)
+ : node (s.isEmpty () ? 0L : trieInsert (s.utf8 ().data ()))
+{}
+
+TrieString::TrieString (const char * utf8)
+ : node (!utf8 ? 0L : trieInsert (utf8))
+{}
+
+TrieString::TrieString (const TrieString & s) : node (s.node) {
+ if (node)
+ node->ref_count++;
+}
+
+TrieString::~TrieString () {
+ if (node)
+ node->unref ();
+}
+
+bool TrieString::startsWith (const TrieString & s) const {
+ for (TrieNode * n = node; n; n = n->parent)
+ if (n == s.node)
+ return true;
+ return s.node ? false : true;
+}
+
+bool TrieString::startsWith (const char * str) const {
+ if (!node)
+ return !str ? true : false;
+ if (!str)
+ return true;
+ int pos = 0;
+ return trieStringStarts (node, str, pos) != 0;
+}
+
+void TrieString::clear () {
+ if (node)
+ node->unref ();
+ node = 0L;
+}
+
+TrieString & TrieString::operator = (const TrieString & s) {
+ if (s.node != node) {
+ if (s.node)
+ s.node->ref_count++;
+ if (node)
+ node->unref ();
+ node = s.node;
+ }
+ return *this;
+}
+
+TrieString & TrieString::operator = (const char * utf8) {
+ if (node)
+ node->unref ();
+ node = !utf8 ? 0L : trieInsert (utf8);
+ return *this;
+}
+
+QString TrieString::toString () const {
+ QString s;
+ if (node) {
+ int len = 0;
+ char *utf8 = trieRetrieveString (node, len);
+ s = QString::fromUtf8 (utf8);
+ free (utf8);
+ }
+ return s;
+}
+
+bool TrieString::operator < (const TrieString & s) const {
+ if (node == s.node)
+ return false;
+ int depth1 = 0, depth2 = 0;
+ for (TrieNode * n = node; n; n = n->parent)
+ depth1++;
+ if (!depth1)
+ return s.node ? true : false;
+ for (TrieNode * n = s.node; n; n = n->parent)
+ depth2++;
+ if (!depth2)
+ return false;
+ TrieNode * n1 = node;
+ TrieNode * n2 = s.node;
+ while (depth1 > depth2) {
+ if (n1 == n2)
+ return false;
+ n1 = n1->parent;
+ depth1--;
+ }
+ while (depth2 > depth1) {
+ if (n1 == n2)
+ return true;
+ n2 = n2->parent;
+ depth2--;
+ }
+ int cmp = trieStringCompare (n1, n2);
+ if (cmp)
+ return cmp < 0;
+ return depth1 < depth2;
+}
+
+bool KMPlayer::operator == (const TrieString & s1, const char * s2) {
+ int len = 0;
+ return !trieStringCompare (s1.node, s2, len);
+}
+
+
+TrieString StringPool::attr_id;
+TrieString StringPool::attr_name;
+TrieString StringPool::attr_src;
+TrieString StringPool::attr_url;
+TrieString StringPool::attr_href;
+TrieString StringPool::attr_width;
+TrieString StringPool::attr_height;
+TrieString StringPool::attr_top;
+TrieString StringPool::attr_left;
+TrieString StringPool::attr_bottom;
+TrieString StringPool::attr_right;
+TrieString StringPool::attr_title;
+TrieString StringPool::attr_begin;
+TrieString StringPool::attr_dur;
+TrieString StringPool::attr_end;
+TrieString StringPool::attr_region;
+TrieString StringPool::attr_target;
+TrieString StringPool::attr_type;
+TrieString StringPool::attr_value;
+TrieString StringPool::attr_fill;
+
+void StringPool::init() {
+ attr_width = "width";
+ attr_value = "value";
+ attr_url = "url";
+ attr_type = "type";
+ attr_top = "top";
+ attr_title = "title";
+ attr_target = "target";
+ attr_src = "src";
+ attr_right = "right";
+ attr_region = "region";
+ attr_name = "name";
+ attr_left = "left";
+ attr_id = "id";
+ attr_href = "href";
+ attr_height = "height";
+ attr_fill = "fill";
+ attr_end = "end";
+ attr_dur = "dur";
+ attr_bottom = "bottom";
+ attr_begin = "begin";
+}
+
+void StringPool::reset() {
+ attr_id.clear ();
+ attr_name.clear ();
+ attr_src.clear ();
+ attr_url.clear ();
+ attr_href.clear ();
+ attr_width.clear ();
+ attr_height.clear ();
+ attr_top.clear ();
+ attr_left.clear ();
+ attr_bottom.clear ();
+ attr_right.clear ();
+ attr_title.clear ();
+ attr_begin.clear ();
+ attr_dur.clear ();
+ attr_end.clear ();
+ attr_region.clear ();
+ attr_target.clear ();
+ attr_type.clear ();
+ attr_value.clear ();
+ attr_fill.clear ();
+ if (root_trie->first_child) {
+ qWarning ("Trie not empty");
+ dumpTrie ();
+ } else {
+ delete root_trie;
+ root_trie = 0;
+ }
+}
+
+void KMPlayer::dumpTrie () {
+ dump (root_trie, 0);
+}
+
+#ifdef TEST_TRIE
+// g++ triestring.cpp -o triestring -I$QTDIR/include -L$QTDIR/lib -lqt-mt -g -DTEST_TRIE
+
+int main (int, char **) {
+ StringPool::init();
+ {
+ TrieString s1;
+ TrieString s1_1(QString ("region"));
+ s1 = s1_1;
+ TrieString s2 (QString ("regionName"));
+ TrieString s3 (QString ("regPoint"));
+ TrieString s4 (QString ("regAlign"));
+ TrieString s6 (QString ("freeze"));
+ TrieString s7 (QString ("fit"));
+ {
+ TrieString s7_1 (QString ("fit"));
+ TrieString s5 (QString ("fill"));
+ dump (root_trie, 0);
+ }
+ dump (root_trie, 0);
+ TrieString s5 (QString ("fill"));
+ TrieString s8 (QString ("fontPtSize"));
+ TrieString s9 (QString ("fontSize"));
+ TrieString s10 (QString ("fontFace"));
+ TrieString s11 (QString ("fontColor"));
+ TrieString s12 (QString ("hAlign"));
+ TrieString s13 (QString ("region"));
+ TrieString s14 (QString ("ref"));
+ TrieString s15 (QString ("head"));
+ dump (root_trie, 0);
+ QString qs1 = s1.toString ();
+ QString qs2 = s2.toString ();
+ printf ("%s\n%s\n", qs1.ascii(), qs2.ascii());
+ printf("equal %s %s %d\n", qs2.ascii(), "regionName", s2 == "regionName");
+ printf("equal %s %s %d\n", qs2.ascii(), "zegionName", s2 == "zegionName");
+ printf("equal %s %s %d\n", qs2.ascii(), "reqionName", s2 == "reqionName");
+ printf("equal %s %s %d\n", qs2.ascii(), "regiinName", s2 == "regiinName");
+ printf("equal %s %s %d\n", qs2.ascii(), "regionNeme", s2 == "regionNeme");
+ printf("%s < %s %d\n", qs2.ascii(), "regionName", s2 < TrieString("regionName"));
+ printf("%s < %s %d\n", qs2.ascii(), "zegion", s2 < TrieString("zegion"));
+ printf("%s < %s %d\n", qs2.ascii(), "req", s2 < TrieString("req"));
+ printf("%s < %s %d\n", qs2.ascii(), "regiinName", s2 < TrieString("regiinName"));
+ printf("%s < %s %d\n", qs2.ascii(), "regionNeme", s2 < TrieString("regionNeme"));
+ printf("%s startsWith %s %d\n", s1.toString().ascii(), "region", s1.startsWith ("region"));
+ printf("%s startsWith %s %d\n", qs2.ascii(), "region", s2.startsWith ("region"));
+ printf("%s startsWith %s %d\n", qs2.ascii(), "regi", s2.startsWith ("regi"));
+ printf("%s startsWith %s %d\n", qs2.ascii(), "regian", s2.startsWith ("regian"));
+ printf("%s startsWith %s %d\n", qs2.ascii(), "regio", s2.startsWith ("regio"));
+ printf("%s startsWith %s %d\n", qs2.ascii(), "zegio", s2.startsWith ("zegio"));
+ printf("%s startsWith %s %d\n", qs2.ascii(), "r", s2.startsWith ("r"));
+ printf("%s startsWith %s %d\n", qs2.ascii(), "q", s2.startsWith ("q"));
+ TrieString fnt ("font");
+ printf("%s startsWith %s %d\n", s8.toString().ascii(), fnt.toString().ascii(), s8.startsWith(fnt));
+ printf("%s startsWith %s %d\n", s8.toString().ascii(), s14.toString().ascii(), s8.startsWith(s14));
+ }
+ dump (root_trie, 0);
+ StringPool::reset();
+ return 0;
+}
+#endif
diff --git a/src/triestring.h b/src/triestring.h
new file mode 100644
index 0000000..84916d4
--- /dev/null
+++ b/src/triestring.h
@@ -0,0 +1,103 @@
+/**
+ This file belong to the KMPlayer project, a movie player plugin for Konqueror
+ Copyright (C) 2007 Koos Vriezen <koos.vriezen@gmail.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+**/
+
+#ifndef _TRIE_STRING_H_
+#define _TRIE_STRING_H_
+
+#include <qstring.h>
+
+namespace KMPlayer {
+
+class TrieNode;
+
+class KMPLAYER_EXPORT TrieString {
+ TrieNode * node;
+ friend bool operator == (const TrieString & s1, const TrieString & s2);
+ friend bool operator == (const TrieString & s, const char * utf8);
+ friend bool operator == (const char * utf8, const TrieString & s);
+ friend bool operator != (const TrieString & s1, const TrieString & s2);
+public:
+ TrieString ();
+ TrieString (const QString & s);
+ TrieString (const char * utf8);
+ TrieString (const TrieString & s);
+ ~TrieString ();
+
+ QString toString () const;
+ bool isNull () const;
+ void clear ();
+ bool startsWith (const TrieString & s) const;
+ bool startsWith (const char * str) const;
+ TrieString & operator = (const TrieString & s);
+ TrieString & operator = (const char * utf8);
+ bool operator < (const TrieString & s) const;
+};
+
+inline TrieString::TrieString () : node (0L) {}
+
+class KMPLAYER_EXPORT StringPool {
+public:
+ static void init();
+ static void reset();
+
+ static TrieString attr_id;
+ static TrieString attr_name;
+ static TrieString attr_src;
+ static TrieString attr_url;
+ static TrieString attr_href;
+ static TrieString attr_width;
+ static TrieString attr_height;
+ static TrieString attr_top;
+ static TrieString attr_left;
+ static TrieString attr_bottom;
+ static TrieString attr_right;
+ static TrieString attr_title;
+ static TrieString attr_begin;
+ static TrieString attr_dur;
+ static TrieString attr_end;
+ static TrieString attr_region;
+ static TrieString attr_target;
+ static TrieString attr_type;
+ static TrieString attr_value;
+ static TrieString attr_fill;
+};
+
+inline bool TrieString::isNull () const {
+ return !node;
+}
+
+inline bool operator == (const TrieString & s1, const TrieString & s2) {
+ return s1.node == s2.node;
+}
+
+bool operator == (const TrieString & s, const char * utf8);
+
+inline bool operator == (const char * utf8, const TrieString & s) {
+ return s == utf8;
+}
+
+inline bool operator != (const TrieString & s1, const TrieString & s2) {
+ return s1.node != s2.node;
+}
+
+void dumpTrie ();
+
+} // namespace
+
+#endif // _TRIE_STRING_H_
diff --git a/src/viewarea.cpp b/src/viewarea.cpp
new file mode 100644
index 0000000..de384d7
--- /dev/null
+++ b/src/viewarea.cpp
@@ -0,0 +1,1691 @@
+/**
+ This file belong to the KMPlayer project, a movie player plugin for Konqueror
+ Copyright (C) 2007 Koos Vriezen <koos.vriezen@gmail.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+**/
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <math.h>
+
+#include <qapplication.h>
+#include <qwidgetstack.h>
+#include <qslider.h>
+#include <qcursor.h>
+#include <qimage.h>
+#include <qmap.h>
+
+#include <kactioncollection.h>
+#include <kstaticdeleter.h>
+#include <kstatusbar.h>
+#include <kstdaction.h>
+#include <kshortcut.h>
+#include <klocale.h>
+#include <kdebug.h>
+
+#include "kmplayerview.h"
+#include "kmplayercontrolpanel.h"
+#include "playlistview.h"
+#include "viewarea.h"
+#ifdef HAVE_CAIRO
+# include <cairo-xlib.h>
+# include <cairo-xlib-xrender.h>
+#endif
+#include "kmplayer_smil.h"
+#include "kmplayer_rp.h"
+
+using namespace KMPlayer;
+
+extern const char * normal_window_xpm[];
+extern const char * playlist_xpm[];
+
+//-------------------------------------------------------------------------
+
+namespace KMPlayer {
+ typedef QMap <QString, ImageDataPtrW> ImageDataMap;
+ static KStaticDeleter <ImageDataMap> imageCacheDeleter;
+ static ImageDataMap * image_data_map;
+}
+
+ImageData::ImageData( const QString & img) :
+ image (0L),
+ url (img) {
+ //if (img.isEmpty ())
+ // //kdDebug() << "New ImageData for " << this << endl;
+ //else
+ // //kdDebug() << "New ImageData for " << img << endl;
+ }
+
+ImageData::~ImageData() {
+ if (!url.isEmpty ())
+ image_data_map->erase (url);
+ delete image;
+}
+
+#ifdef HAVE_CAIRO
+static void copyImage (Surface *s, int w, int h, QImage *img, cairo_surface_t *similar) {
+ int iw = img->width ();
+ int ih = img->height ();
+
+ if (img->depth () < 24) {
+ QImage qi = img->convertDepth (32, 0);
+ *img = qi;
+ }
+ cairo_surface_t *sf = cairo_image_surface_create_for_data (
+ img->bits (),
+ img->hasAlphaBuffer () ? CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24,
+ iw, ih, img->bytesPerLine ());
+ cairo_pattern_t *img_pat = cairo_pattern_create_for_surface (sf);
+ cairo_pattern_set_extend (img_pat, CAIRO_EXTEND_NONE);
+ if (w != iw && h != ih) {
+ cairo_matrix_t mat;
+ cairo_matrix_init_scale (&mat, 1.0 * iw/w, 1.0 * ih/h);
+ cairo_pattern_set_matrix (img_pat, &mat);
+ }
+ if (!s->surface)
+ s->surface = cairo_surface_create_similar (similar,
+ img->hasAlphaBuffer () ?
+ CAIRO_CONTENT_COLOR_ALPHA : CAIRO_CONTENT_COLOR, w, h);
+ cairo_t *cr = cairo_create (s->surface);
+ cairo_set_source (cr, img_pat);
+ cairo_paint (cr);
+ cairo_destroy (cr);
+
+ cairo_pattern_destroy (img_pat);
+ cairo_surface_destroy (sf);
+}
+#endif
+
+bool CachedImage::isEmpty () {
+ return !data || !data->image;
+}
+
+void CachedImage::setUrl (const QString & url) {
+ if (url.isEmpty ()) {
+ data = ImageDataPtr (new ImageData (url));
+ } else {
+ ImageDataMap::iterator i = image_data_map->find (url);
+ if (i == image_data_map->end ()) {
+ data = ImageDataPtr (new ImageData (url));
+ image_data_map->insert (url, ImageDataPtrW (data));
+ } else {
+ ImageDataPtr safe = i.data ();
+ data = safe;
+ }
+ }
+}
+
+//-------------------------------------------------------------------------
+
+namespace KMPlayer {
+
+class KMPLAYER_NO_EXPORT ViewSurface : public Surface {
+public:
+ ViewSurface (ViewArea * widget);
+ ViewSurface (ViewArea * widget, NodePtr owner, const SRect & rect);
+ ~ViewSurface ();
+
+ void clear () { m_first_child = 0L; }
+
+ SurfacePtr createSurface (NodePtr owner, const SRect & rect);
+ IRect toScreen (Single x, Single y, Single w, Single h);
+ void resize (const SRect & rect);
+ void repaint ();
+ void repaint (const SRect &rect);
+ void video ();
+
+ NodePtrW current_video;
+ ViewArea * view_widget;
+};
+
+} // namespace
+
+KDE_NO_CDTOR_EXPORT ViewSurface::ViewSurface (ViewArea * widget)
+ : Surface (NULL, SRect (0, 0, widget->width (), widget->height ())),
+ view_widget (widget)
+{}
+
+KDE_NO_CDTOR_EXPORT
+ViewSurface::ViewSurface (ViewArea * widget, NodePtr owner, const SRect & rect)
+ : Surface (owner, rect), view_widget (widget) {}
+
+KDE_NO_CDTOR_EXPORT ViewSurface::~ViewSurface() {
+ //kdDebug() << "~ViewSurface" << endl;
+}
+
+SurfacePtr ViewSurface::createSurface (NodePtr owner, const SRect & rect) {
+ SurfacePtr surface = new ViewSurface (view_widget, owner, rect);
+ appendChild (surface);
+ return surface;
+}
+
+KDE_NO_EXPORT void ViewSurface::resize (const SRect &r) {
+ bounds = r;
+#ifdef HAVE_CAIRO
+ if (surface)
+ cairo_xlib_surface_set_size (surface, (int)r.width(), (int)r.height ());
+#endif
+ /*if (rect == nrect)
+ ;//return;
+ SRect pr = rect.unite (nrect); // for repaint
+ rect = nrect;*/
+}
+
+KDE_NO_EXPORT IRect ViewSurface::toScreen (Single x, Single y, Single w, Single h) {
+ Matrix matrix (0, 0, xscale, yscale);
+ matrix.translate (bounds.x (), bounds.y ());
+ for (SurfacePtr s = parentNode(); s; s = s->parentNode()) {
+ matrix.transform(Matrix (0, 0, s->xscale, s->yscale));
+ matrix.translate (s->bounds.x (), s->bounds.y ());
+ }
+ matrix.getXYWH (x, y, w, h);
+ return IRect (x, y, w, h);
+}
+
+KDE_NO_EXPORT
+void ViewSurface::repaint (const SRect &r) {
+ markDirty ();
+ view_widget->scheduleRepaint (toScreen (r.x (), r.y (), r.width (), r.height ()));
+ //kdDebug() << "Surface::repaint x:" << (int)x << " y:" << (int)y << " w:" << (int)w << " h:" << (int)h << endl;
+}
+
+KDE_NO_EXPORT
+void ViewSurface::repaint () {
+ markDirty ();
+ view_widget->scheduleRepaint (toScreen (0, 0, bounds.width (), bounds.height ()));
+}
+
+KDE_NO_EXPORT void ViewSurface::video () {
+ view_widget->setAudioVideoNode (node);
+ kdDebug() << "Surface::video:" << background_color << " " << (background_color & 0xff000000) << endl;
+ xscale = yscale = 1; // either scale width/heigt or use bounds
+ view_widget->setAudioVideoGeometry (toScreen (0, 0, bounds.width(), bounds.height ()),
+ (background_color & 0xff000000 ? &background_color : 0));
+}
+
+//-------------------------------------------------------------------------
+
+#ifdef HAVE_CAIRO
+
+static cairo_surface_t * cairoCreateSurface (Window id, int w, int h) {
+ Display * display = qt_xdisplay ();
+ return cairo_xlib_surface_create (display, id,
+ DefaultVisual (display, DefaultScreen (display)), w, h);
+ /*return cairo_xlib_surface_create_with_xrender_format (
+ qt_xdisplay (),
+ id,
+ DefaultScreenOfDisplay (qt_xdisplay ()),
+ XRenderFindVisualFormat (qt_xdisplay (),
+ DefaultVisual (qt_xdisplay (),
+ DefaultScreen (qt_xdisplay ()))),
+ w, h);*/
+}
+
+# define CAIRO_SET_SOURCE_RGB(cr,c) \
+ cairo_set_source_rgb ((cr), \
+ 1.0 * (((c) >> 16) & 0xff) / 255, \
+ 1.0 * (((c) >> 8) & 0xff) / 255, \
+ 1.0 * (((c)) & 0xff) / 255)
+
+class KMPLAYER_NO_EXPORT CairoPaintVisitor : public Visitor {
+ IRect clip;
+ cairo_surface_t * cairo_surface;
+ Matrix matrix;
+ // stack vars need for transitions
+ SMIL::MediaType *cur_media;
+ cairo_pattern_t * cur_pat;
+ cairo_matrix_t cur_mat;
+ float opacity;
+ bool toplevel;
+
+ void traverseRegion (SMIL::RegionBase * reg);
+ void updateExternal (SMIL::MediaType *av, SurfacePtr s);
+ void paint(SMIL::MediaType *, Surface *, int x, int y, const IRect &);
+public:
+ cairo_t * cr;
+ CairoPaintVisitor (cairo_surface_t * cs, Matrix m,
+ const IRect & rect, QColor c=QColor(), bool toplevel=false);
+ ~CairoPaintVisitor ();
+ using Visitor::visit;
+ void visit (Node * n);
+ void visit (SMIL::Layout *);
+ void visit (SMIL::Region *);
+ void visit (SMIL::Transition *);
+ void visit (SMIL::ImageMediaType *);
+ void visit (SMIL::TextMediaType *);
+ void visit (SMIL::Brush *);
+ void visit (SMIL::RefMediaType *);
+ void visit (SMIL::AVMediaType *);
+ void visit (RP::Imfl *);
+ void visit (RP::Fill *);
+ void visit (RP::Fadein *);
+ void visit (RP::Fadeout *);
+ void visit (RP::Crossfade *);
+ void visit (RP::Wipe *);
+ void visit (RP::ViewChange *);
+};
+
+KDE_NO_CDTOR_EXPORT
+CairoPaintVisitor::CairoPaintVisitor (cairo_surface_t * cs, Matrix m,
+ const IRect & rect, QColor c, bool top)
+ : clip (rect), cairo_surface (cs), matrix (m), toplevel (top) {
+ cr = cairo_create (cs);
+ if (toplevel) {
+ cairo_rectangle (cr, rect.x, rect.y, rect.w, rect.h);
+ cairo_clip (cr);
+ //cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
+ cairo_set_tolerance (cr, 0.5 );
+ cairo_push_group (cr);
+ cairo_set_source_rgb (cr,
+ 1.0 * c.red () / 255, 1.0 * c.green () / 255, 1.0 * c.blue () / 255);
+ cairo_rectangle (cr, rect.x, rect.y, rect.w, rect.h);
+ cairo_fill (cr);
+ } else {
+ cairo_save (cr);
+ cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
+ cairo_rectangle (cr, rect.x, rect.y, rect.w, rect.h);
+ cairo_fill (cr);
+ cairo_restore (cr);
+ }
+}
+
+KDE_NO_CDTOR_EXPORT CairoPaintVisitor::~CairoPaintVisitor () {
+ if (toplevel) {
+ cairo_pattern_t * pat = cairo_pop_group (cr);
+ //cairo_pattern_set_extend (pat, CAIRO_EXTEND_NONE);
+ cairo_set_source (cr, pat);
+ cairo_rectangle (cr, clip.x, clip.y, clip.w, clip.h);
+ cairo_fill (cr);
+ cairo_pattern_destroy (pat);
+ }
+ cairo_destroy (cr);
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (Node * n) {
+ kdWarning() << "Paint called on " << n->nodeName() << endl;
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::traverseRegion (SMIL::RegionBase * reg) {
+ // next visit listeners
+ NodeRefListPtr nl = reg->listeners (mediatype_attached);
+ if (nl) {
+ for (NodeRefItemPtr c = nl->first(); c; c = c->nextSibling ())
+ if (c->data)
+ c->data->accept (this);
+ }
+ // finally visit children, accounting for z-order FIXME optimize
+ NodeRefList sorted;
+ for (NodePtr n = reg->firstChild (); n; n = n->nextSibling ()) {
+ if (n->id != SMIL::id_node_region)
+ continue;
+ SMIL::Region * r = static_cast <SMIL::Region *> (n.ptr ());
+ NodeRefItemPtr rn = sorted.first ();
+ for (; rn; rn = rn->nextSibling ())
+ if (r->z_order < convertNode <SMIL::Region> (rn->data)->z_order) {
+ sorted.insertBefore (new NodeRefItem (n), rn);
+ break;
+ }
+ if (!rn)
+ sorted.append (new NodeRefItem (n));
+ }
+ for (NodeRefItemPtr r = sorted.first (); r; r = r->nextSibling ())
+ r->data->accept (this);
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (SMIL::Layout * reg) {
+ //kdDebug() << "Visit " << reg->nodeName() << endl;
+ SMIL::RegionBase *rb = convertNode <SMIL::RegionBase> (reg->rootLayout);
+ if (reg->surface () && rb) {
+ //cairo_save (cr);
+ Matrix m = matrix;
+
+ SRect rect = reg->region_surface->bounds;
+ Single x, y, w = rect.width(), h = rect.height();
+ matrix.getXYWH (x, y, w, h);
+
+ IRect clip_save = clip;
+ clip = clip.intersect (IRect (x, y, w, h));
+
+ rb->region_surface = reg->region_surface;
+ rb->region_surface->background_color = rb->background_color;
+
+ if (reg->region_surface->background_color & 0xff000000) {
+ CAIRO_SET_SOURCE_RGB (cr, reg->region_surface->background_color);
+ cairo_rectangle (cr, clip.x, clip.y, clip.w, clip.h);
+ cairo_fill (cr);
+ }
+ //cairo_rectangle (cr, xoff, yoff, w, h);
+ //cairo_clip (cr);
+
+ matrix = Matrix (0, 0, reg->region_surface->xscale, reg->region_surface->yscale);
+ matrix.transform (m);
+ traverseRegion (reg);
+ //cairo_restore (cr);
+ matrix = m;
+ clip = clip_save;
+
+ rb->region_surface = 0L;
+ }
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (SMIL::Region * reg) {
+ Surface *s = reg->surface ();
+ if (s) {
+ SRect rect = s->bounds;
+
+ Matrix m = matrix;
+ Single x = rect.x(), y = rect.y(), w = rect.width(), h = rect.height();
+ matrix.getXYWH (x, y, w, h);
+ if (clip.intersect (IRect (x, y, w, h)).isEmpty ())
+ return;
+ matrix = Matrix (rect.x(), rect.y(), 1.0, 1.0);
+ matrix.transform (m);
+ IRect clip_save = clip;
+ clip = clip.intersect (IRect (x, y, w, h));
+ cairo_save (cr);
+ if ((SMIL::RegionBase::ShowAlways == reg->show_background ||
+ reg->m_AttachedMediaTypes->first ()) &&
+ (s->background_color & 0xff000000 ||
+ !reg->cached_img.isEmpty ())) {
+ cairo_save (cr);
+ if (s->background_color & 0xff000000) {
+ CAIRO_SET_SOURCE_RGB (cr, s->background_color);
+ cairo_rectangle (cr, clip.x, clip.y, clip.w, clip.h);
+ cairo_fill (cr);
+ }
+ if (!reg->cached_img.isEmpty ()) {
+ Single x1, y1;
+ Single w = reg->cached_img.data->image->width ();
+ Single h = reg->cached_img.data->image->height();
+ matrix.getXYWH (x1, y1, w, h);
+ if (!s->surface)
+ copyImage (s, w, h, reg->cached_img.data->image, cairo_surface);
+ cairo_pattern_t *pat = cairo_pattern_create_for_surface (s->surface);
+ cairo_pattern_set_extend (pat, CAIRO_EXTEND_REPEAT);
+ cairo_matrix_t mat;
+ cairo_matrix_init_translate (&mat, (int) -x, (int) -y);
+ cairo_pattern_set_matrix (pat, &mat);
+ cairo_set_source (cr, pat);
+ cairo_rectangle (cr, clip.x, clip.y, clip.w, clip.h);
+ cairo_fill (cr);
+ cairo_pattern_destroy (pat);
+ }
+ cairo_restore (cr);
+ }
+ traverseRegion (reg);
+ cairo_restore (cr);
+ matrix = m;
+ clip = clip_save;
+ }
+}
+
+#define CAIRO_SET_PATTERN_COND(cr,pat,mat) \
+ if (pat) { \
+ cairo_pattern_set_extend (cur_pat, CAIRO_EXTEND_NONE); \
+ cairo_pattern_set_matrix (pat, &mat); \
+ cairo_pattern_set_filter (pat, CAIRO_FILTER_FAST); \
+ cairo_set_source (cr, pat); \
+ }
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (SMIL::Transition *trans) {
+ float perc = trans->start_progress + (trans->end_progress - trans->start_progress)*cur_media->trans_step / cur_media->trans_steps;
+ if (cur_media->trans_out_active)
+ perc = 1.0 - perc;
+ if (SMIL::Transition::Fade == trans->type) {
+ CAIRO_SET_PATTERN_COND(cr, cur_pat, cur_mat)
+ cairo_rectangle (cr, clip.x, clip.y, clip.w, clip.h);
+ opacity = perc;
+ } else if (SMIL::Transition::BarWipe == trans->type) {
+ IRect rect;
+ if (SMIL::Transition::SubTopToBottom == trans->sub_type) {
+ if (SMIL::Transition::dir_reverse == trans->direction) {
+ int dy = (int) ((1.0 - perc) * clip.h);
+ rect = IRect (clip.x, clip.y + dy, clip.w, clip.h - dy);
+ } else {
+ rect = IRect (clip.x, clip.y, clip.w, (int) (perc * clip.h));
+ }
+ } else {
+ if (SMIL::Transition::dir_reverse == trans->direction) {
+ int dx = (int) ((1.0 - perc) * clip.w);
+ rect = IRect (clip.x + dx, clip.y, clip.w - dx, clip.h);
+ } else {
+ rect = IRect (clip.x, clip.y, (int) (perc * clip.w), clip.h);
+ }
+ }
+ cairo_rectangle (cr, rect.x, rect.y, rect.w, rect.h);
+ CAIRO_SET_PATTERN_COND(cr, cur_pat, cur_mat)
+ } else if (SMIL::Transition::PushWipe == trans->type) {
+ int dx = 0, dy = 0;
+ if (SMIL::Transition::SubFromTop == trans->sub_type)
+ dy = -(int) ((1.0 - perc) * clip.h);
+ else if (SMIL::Transition::SubFromRight == trans->sub_type)
+ dx = (int) ((1.0 - perc) * clip.w);
+ else if (SMIL::Transition::SubFromBottom == trans->sub_type)
+ dy = (int) ((1.0 - perc) * clip.h);
+ else //if (SMIL::Transition::SubFromLeft == trans->sub_type)
+ dx = -(int) ((1.0 - perc) * clip.w);
+ cairo_matrix_translate (&cur_mat, -dx, -dy);
+ IRect rect = clip.intersect (IRect (clip.x + dx, clip.y + dy,
+ clip.w - dx, clip.h - dy));
+ cairo_rectangle (cr, rect.x, rect.y, rect.w, rect.h);
+ CAIRO_SET_PATTERN_COND(cr, cur_pat, cur_mat)
+ } else if (SMIL::Transition::IrisWipe == trans->type) {
+ CAIRO_SET_PATTERN_COND(cr, cur_pat, cur_mat)
+ if (SMIL::Transition::SubDiamond == trans->sub_type) {
+ cairo_rectangle (cr, clip.x, clip.y, clip.w, clip.h);
+ cairo_clip (cr);
+ int dx = (int) (perc * clip.w);
+ int dy = (int) (perc * clip.h);
+ int mx = clip.x + clip.w/2;
+ int my = clip.y + clip.h/2;
+ cairo_new_path (cr);
+ cairo_move_to (cr, mx, my - dy);
+ cairo_line_to (cr, mx + dx, my);
+ cairo_line_to (cr, mx, my + dy);
+ cairo_line_to (cr, mx - dx, my);
+ cairo_close_path (cr);
+ } else { // SubRectangle
+ int dx = (int) (0.5 * (1 - perc) * clip.w);
+ int dy = (int) (0.5 * (1 - perc) * clip.h);
+ cairo_rectangle (cr, clip.x + dx, clip.y + dy,
+ clip.w - 2 * dx, clip.h -2 * dy);
+ }
+ } else if (SMIL::Transition::ClockWipe == trans->type) {
+ cairo_rectangle (cr, clip.x, clip.y, clip.w, clip.h);
+ cairo_clip (cr);
+ int mx = clip.x + clip.w/2;
+ int my = clip.y + clip.h/2;
+ cairo_new_path (cr);
+ cairo_move_to (cr, mx, my);
+ float hw = 1.0 * clip.w/2;
+ float hh = 1.0 * clip.h/2;
+ float radius = sqrtf (hw * hw + hh * hh);
+ float phi;
+ switch (trans->sub_type) {
+ case SMIL::Transition::SubClockwiseThree:
+ phi = 0;
+ break;
+ case SMIL::Transition::SubClockwiseSix:
+ phi = M_PI / 2;
+ break;
+ case SMIL::Transition::SubClockwiseNine:
+ phi = M_PI;
+ break;
+ default: // Twelve
+ phi = -M_PI / 2;
+ break;
+ }
+ if (SMIL::Transition::dir_reverse == trans->direction)
+ cairo_arc_negative (cr, mx, my, radius, phi, phi - 2 * M_PI * perc);
+ else
+ cairo_arc (cr, mx, my, radius, phi, phi + 2 * M_PI * perc);
+ cairo_close_path (cr);
+ CAIRO_SET_PATTERN_COND(cr, cur_pat, cur_mat)
+ } else if (SMIL::Transition::BowTieWipe == trans->type) {
+ cairo_rectangle (cr, clip.x, clip.y, clip.w, clip.h);
+ cairo_clip (cr);
+ int mx = clip.x + clip.w/2;
+ int my = clip.y + clip.h/2;
+ cairo_new_path (cr);
+ cairo_move_to (cr, mx, my);
+ float hw = 1.0 * clip.w/2;
+ float hh = 1.0 * clip.h/2;
+ float radius = sqrtf (hw * hw + hh * hh);
+ float phi;
+ switch (trans->sub_type) {
+ case SMIL::Transition::SubHorizontal:
+ phi = 0;
+ break;
+ default: // Vertical
+ phi = -M_PI / 2;
+ break;
+ }
+ float dphi = 0.5 * M_PI * perc;
+ cairo_arc (cr, mx, my, radius, phi - dphi, phi + dphi);
+ cairo_close_path (cr);
+ cairo_new_sub_path (cr);
+ cairo_move_to (cr, mx, my);
+ if (SMIL::Transition::SubHorizontal == trans->sub_type)
+ cairo_arc (cr, mx, my, radius, M_PI + phi - dphi, M_PI + phi +dphi);
+ else
+ cairo_arc (cr, mx, my, radius, -phi - dphi, -phi + dphi);
+ cairo_close_path (cr);
+ CAIRO_SET_PATTERN_COND(cr, cur_pat, cur_mat)
+ } else if (SMIL::Transition::EllipseWipe == trans->type) {
+ cairo_rectangle (cr, clip.x, clip.y, clip.w, clip.h);
+ cairo_clip (cr);
+ int mx = clip.x + clip.w/2;
+ int my = clip.y + clip.h/2;
+ float hw = (double) clip.w/2;
+ float hh = (double) clip.h/2;
+ float radius = sqrtf (hw * hw + hh * hh);
+ cairo_save (cr);
+ cairo_new_path (cr);
+ cairo_translate (cr, (int) mx, (int) my);
+ cairo_move_to (cr, - Single (radius), 0);
+ if (SMIL::Transition::SubHorizontal == trans->sub_type)
+ cairo_scale (cr, 1.0, 0.6);
+ else if (SMIL::Transition::SubVertical == trans->sub_type)
+ cairo_scale (cr, 0.6, 1.0);
+ cairo_arc (cr, 0, 0, perc * radius, 0, 2 * M_PI);
+ cairo_close_path (cr);
+ cairo_restore (cr);
+ CAIRO_SET_PATTERN_COND(cr, cur_pat, cur_mat)
+ }
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (SMIL::RefMediaType *ref) {
+ Surface *s = ref->surface ();
+ if (s) {
+ if (ref->external_tree)
+ updateExternal (ref, s);
+ else if (ref->needsVideoWidget ())
+ s->video ();
+ }
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::paint (SMIL::MediaType *mt, Surface *s,
+ int x, int y, const IRect &rect) {
+ cairo_save (cr);
+ opacity = 1.0;
+ cairo_matrix_init_translate (&cur_mat, -x, -y);
+ cur_pat = cairo_pattern_create_for_surface (s->surface);
+ if (mt->active_trans) {
+ IRect clip_save = clip;
+ clip = rect;
+ cur_media = mt;
+ mt->active_trans->accept (this);
+ clip = clip_save;
+ } else {
+ cairo_pattern_set_extend (cur_pat, CAIRO_EXTEND_NONE);
+ cairo_pattern_set_matrix (cur_pat, &cur_mat);
+ cairo_pattern_set_filter (cur_pat, CAIRO_FILTER_FAST);
+ cairo_set_source (cr, cur_pat);
+ cairo_rectangle (cr, rect.x, rect.y, rect.w, rect.h);
+ }
+ opacity *= mt->opacity / 100.0;
+ if (opacity < 0.99) {
+ cairo_clip (cr);
+ cairo_paint_with_alpha (cr, opacity);
+ } else {
+ cairo_fill (cr);
+ }
+ cairo_pattern_destroy (cur_pat);
+ cairo_restore (cr);
+}
+
+KDE_NO_EXPORT
+void CairoPaintVisitor::updateExternal (SMIL::MediaType *av, SurfacePtr s) {
+ SRect rect = s->bounds;
+ Single x = rect.x ();
+ Single y = rect.y ();
+ Single w = rect.width();
+ Single h = rect.height();
+ matrix.getXYWH (x, y, w, h);
+ IRect clip_rect = clip.intersect (IRect (x, y, w, h));
+ if (!clip_rect.isValid ())
+ return;
+ if (!s->surface || s->dirty) {
+ Matrix m = matrix;
+ m.translate (-x, -y);
+ IRect r (clip_rect.x - (int) x - 1, clip_rect.y - (int) y - 1,
+ clip_rect.w + 3, clip_rect.h + 3);
+ if (!s->surface) {
+ s->surface = cairo_surface_create_similar (cairo_surface,
+ CAIRO_CONTENT_COLOR_ALPHA, (int) w, (int) h);
+ r = IRect (0, 0, w, h);
+ }
+ CairoPaintVisitor visitor (s->surface, m, r);
+ av->external_tree->accept (&visitor);
+ s->dirty = false;
+ }
+ paint (av, s.ptr (), x, y, clip_rect);
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (SMIL::AVMediaType *av) {
+ Surface *s = av->surface ();
+ if (s) {
+ if (av->external_tree)
+ updateExternal (av, s);
+ else if (av->needsVideoWidget ())
+ s->video ();
+ }
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (SMIL::ImageMediaType * img) {
+ //kdDebug() << "Visit " << img->nodeName() << " " << img->src << endl;
+ Surface *s = img->surface ();
+ if (!s)
+ return;
+ if (img->external_tree) {
+ updateExternal (img, s);
+ return;
+ }
+ ImageRuntime * ir = static_cast <ImageRuntime *> (img->runtime ());
+ ImageData * id = ir->cached_img.data.ptr ();
+ if (!id || !id->image || img->width <= 0 || img->height <= 0) {
+ s->remove();
+ return;
+ }
+ SRect rect = s->bounds;
+ Single x = rect.x ();
+ Single y = rect.y ();
+ Single w = rect.width();
+ Single h = rect.height();
+ matrix.getXYWH (x, y, w, h);
+ IRect clip_rect = clip.intersect (IRect (x, y, w, h));
+ if (clip_rect.isEmpty ())
+ return;
+ if (!s->surface || s->dirty)
+ copyImage (s, w, h, id->image, cairo_surface);
+ paint (img, s, x, y, clip_rect);
+ s->dirty = false;
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (SMIL::TextMediaType * txt) {
+ TextRuntime * td = static_cast <TextRuntime *> (txt->runtime ());
+ Surface *s = txt->surface ();
+ //kdDebug() << "Visit " << txt->nodeName() << " " << td->text << endl;
+ if (!s)
+ return;
+ SRect rect = s->bounds;
+ Single x = rect.x (), y = rect.y(), w = rect.width(), h = rect.height();
+ matrix.getXYWH (x, y, w, h);
+ if (!s->surface) {
+ //kdDebug() << "new txt surface " << td->text << endl;
+ /* QTextEdit * edit = new QTextEdit;
+ edit->setReadOnly (true);
+ edit->setHScrollBarMode (QScrollView::AlwaysOff);
+ edit->setVScrollBarMode (QScrollView::AlwaysOff);
+ edit->setFrameShape (QFrame::NoFrame);
+ edit->setFrameShadow (QFrame::Plain);
+ edit->setGeometry (0, 0, w, h);
+ if (edit->length () == 0)
+ edit->setText (text);
+ if (w0 > 0)
+ font.setPointSize (int (1.0 * w * font_size / w0));
+ edit->setFont (font);
+ QRect rect = p.clipRegion (QPainter::CoordPainter).boundingRect ();
+ rect = rect.intersect (QRect (xoff, yoff, w, h));
+ QPixmap pix = QPixmap::grabWidget (edit, rect.x () - (int) xoff,
+ rect.y () - (int) yoff, rect.width (), rect.height ());*/
+
+ float scale = 1.0 * w / rect.width (); // TODO: make an image
+ cairo_set_font_size (cr, scale * td->font_size);
+ cairo_font_extents_t txt_fnt;
+ cairo_font_extents (cr, &txt_fnt);
+ QString str = td->text;
+ struct Line {
+ Line (const QString & ln) : txt (ln), next(0) {}
+ QString txt;
+ cairo_text_extents_t txt_ext;
+ Single xoff;
+ Line * next;
+ } *lines = 0, *last_line = 0;
+ Single y1 = y;
+ Single max_width;
+ int line_count = 0;
+ Single min_xoff = w;
+ while (!str.isEmpty ()) {
+ int len = str.find (QChar ('\n'));
+ bool skip_cr = false;
+ if (len > 1 && str[len-1] == QChar ('\r')) {
+ --len;
+ skip_cr = true;
+ }
+ QString para = len > -1 ? str.left (len) : str;
+ Line * line = new Line (para);
+ ++line_count;
+ if (!lines)
+ lines = line;
+ else
+ last_line->next = line;
+ last_line = line;
+ int ppos = 0;
+ while (true) {
+ cairo_text_extents (cr, line->txt.utf8 ().data (), &line->txt_ext);
+ float frag = line->txt_ext.width > 0.1
+ ? w / line->txt_ext.width : 1.1;
+ if (frag < 1.0) {
+ int br_pos = int (line->txt.length () * frag); //educated guess
+ while (br_pos > 0) {
+ line->txt.truncate (br_pos);
+ br_pos = line->txt.findRev (QChar (' '));
+ if (br_pos < 1)
+ break;
+ line->txt.truncate (br_pos);
+ cairo_text_extents (cr, line->txt.utf8 ().data (), &line->txt_ext);
+ if (line->txt_ext.width < (double)w)
+ break;
+ }
+ }
+ if (line->txt_ext.width > (double)max_width)
+ max_width = line->txt_ext.width;
+
+ if (td->halign == TextRuntime::align_center)
+ line->xoff = (w - Single (line->txt_ext.width)) / 2;
+ else if (td->halign == TextRuntime::align_right)
+ line->xoff = w - Single (line->txt_ext.width);
+ if (line->xoff < min_xoff)
+ min_xoff = line->xoff;
+
+ y1 += Single (txt_fnt.height);
+ ppos += line->txt.length () + 1;
+ if (ppos >= para.length ())
+ break;
+
+ line->next = new Line (para.mid (ppos));
+ ++line_count;
+ line = line->next;
+ last_line = line;
+ }
+ if (len < 0)
+ break;
+ str = str.mid (len + (skip_cr ? 2 : 1));
+ }
+ // new coord in screen space
+ x += min_xoff;
+ w = (double)max_width + txt_fnt.max_x_advance / 2;
+ h = y1 - y /*txt_fnt.height + txt_fnt.descent*/;
+
+ s->surface = cairo_surface_create_similar (cairo_surface,
+ CAIRO_CONTENT_COLOR, (int) w, (int) h);
+ cairo_t * cr_txt = cairo_create (s->surface);
+ cairo_set_font_size (cr_txt, scale * td->font_size);
+ if (td->bg_opacity) { // TODO real alpha
+ CAIRO_SET_SOURCE_RGB (cr_txt, td->background_color);
+ cairo_paint (cr_txt);
+ }
+ CAIRO_SET_SOURCE_RGB (cr_txt, td->font_color);
+ y1 = 0;
+ while (lines) {
+ Line * line = lines;
+ line->xoff += Single (txt_fnt.max_x_advance / 4);
+ cairo_move_to (cr_txt, line->xoff - min_xoff, y1 + Single (txt_fnt.ascent));
+ cairo_show_text (cr_txt, line->txt.utf8 ().data ());
+ y1 += Single (txt_fnt.height);
+ lines = lines->next;
+ delete line;
+ }
+ //cairo_stroke (cr);
+ cairo_destroy (cr_txt);
+
+ // update bounds rect
+ Single sx = x, sy = y, sw = w, sh = h;
+ matrix.invXYWH (sx, sy, sw, sh);
+ txt->width = sw;
+ txt->height = sh;
+ s->bounds = txt->calculateBounds ();
+
+ // update coord. for painting below
+ x = s->bounds.x ();
+ y = s->bounds.y();
+ w = s->bounds.width();
+ h = s->bounds.height();
+ matrix.getXYWH (x, y, w, h);
+ }
+ IRect clip_rect = clip.intersect (IRect (x, y, w, h));
+ if (!clip_rect.isEmpty ())
+ paint (txt, s, x, y, clip_rect);
+ s->dirty = false;
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (SMIL::Brush * brush) {
+ //kdDebug() << "Visit " << brush->nodeName() << endl;
+ Surface *s = brush->surface ();
+ if (s) {
+ cairo_save (cr);
+ opacity = 1.0;
+ SRect rect = s->bounds;
+ Single x, y, w = rect.width(), h = rect.height();
+ matrix.getXYWH (x, y, w, h);
+ unsigned int color = QColor (brush->param ("color")).rgb ();
+ if (brush->active_trans) {
+ cur_media = brush;
+ cur_pat = NULL;
+ brush->active_trans->accept (this);
+ } else {
+ cairo_rectangle (cr, (int) x, (int) y, (int) w, (int) h);
+ }
+ opacity *= brush->opacity / 100.0;
+ if (opacity < 0.99)
+ cairo_set_source_rgba (cr,
+ 1.0 * ((color >> 16) & 0xff) / 255,
+ 1.0 * ((color >> 8) & 0xff) / 255,
+ 1.0 * (color & 0xff) / 255,
+ opacity);
+ else
+ CAIRO_SET_SOURCE_RGB (cr, color);
+ cairo_fill (cr);
+ s->dirty = false;
+ cairo_restore (cr);
+ }
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (RP::Imfl * imfl) {
+ if (imfl->surface ()) {
+ cairo_save (cr);
+ Matrix m = matrix;
+ Single x, y;
+ Single w = imfl->rp_surface->bounds.width();
+ Single h = imfl->rp_surface->bounds.height();
+ matrix.getXYWH (x, y, w, h);
+ cairo_rectangle (cr, x, y, w, h);
+ //cairo_clip (cr);
+ cairo_translate (cr, x, y);
+ cairo_scale (cr, w/imfl->width, h/imfl->height);
+ if (imfl->needs_scene_img)
+ cairo_push_group (cr);
+ for (NodePtr n = imfl->firstChild (); n; n = n->nextSibling ())
+ if (n->state >= Node::state_began &&
+ n->state < Node::state_deactivated) {
+ RP::TimingsBase * tb = convertNode<RP::TimingsBase>(n);
+ switch (n->id) {
+ case RP::id_node_viewchange:
+ if (!(int)tb->srcw)
+ tb->srcw = imfl->width;
+ if (!(int)tb->srch)
+ tb->srch = imfl->height;
+ // fall through
+ case RP::id_node_crossfade:
+ case RP::id_node_fadein:
+ case RP::id_node_fadeout:
+ case RP::id_node_fill:
+ case RP::id_node_wipe:
+ if (!(int)tb->w)
+ tb->w = imfl->width;
+ if (!(int)tb->h)
+ tb->h = imfl->height;
+ n->accept (this);
+ break;
+ }
+ }
+ if (imfl->needs_scene_img) {
+ cairo_pattern_t * pat = cairo_pop_group (cr);
+ cairo_pattern_set_extend (pat, CAIRO_EXTEND_NONE);
+ cairo_set_source (cr, pat);
+ cairo_paint (cr);
+ cairo_pattern_destroy (pat);
+ }
+ cairo_restore (cr);
+ matrix = m;
+ }
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (RP::Fill * fi) {
+ //kdDebug() << "Visit " << fi->nodeName() << endl;
+ CAIRO_SET_SOURCE_RGB (cr, fi->color);
+ if ((int)fi->w && (int)fi->h) {
+ cairo_rectangle (cr, fi->x, fi->y, fi->w, fi->h);
+ cairo_fill (cr);
+ }
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (RP::Fadein * fi) {
+ //kdDebug() << "Visit " << fi->nodeName() << endl;
+ if (fi->target && fi->target->id == RP::id_node_image) {
+ RP::Image *img = convertNode <RP::Image> (fi->target);
+ if (img->surface ()) {
+ Single sx = fi->srcx, sy = fi->srcy, sw = fi->srcw, sh = fi->srch;
+ if (!(int)sw)
+ sw = img->width;
+ if (!(int)sh)
+ sh = img->height;
+ if ((int)fi->w && (int)fi->h && (int)sw && (int)sh) {
+ if (!img->img_surface->surface)
+ copyImage (img->img_surface, img->width, img->height, img->cached_img.data->image, cairo_surface);
+ cairo_matrix_t matrix;
+ cairo_matrix_init_identity (&matrix);
+ float scalex = 1.0 * sw / fi->w;
+ float scaley = 1.0 * sh / fi->h;
+ cairo_matrix_scale (&matrix, scalex, scaley);
+ cairo_matrix_translate (&matrix,
+ 1.0*sx/scalex - (double)fi->x,
+ 1.0*sy/scaley - (double)fi->y);
+ cairo_save (cr);
+ cairo_rectangle (cr, fi->x, fi->y, fi->w, fi->h);
+ cairo_pattern_t *pat = cairo_pattern_create_for_surface (img->img_surface->surface);
+ cairo_pattern_set_extend (pat, CAIRO_EXTEND_NONE);
+ cairo_pattern_set_matrix (pat, &matrix);
+ cairo_set_source (cr, pat);
+ cairo_clip (cr);
+ cairo_paint_with_alpha (cr, 1.0 * fi->progress / 100);
+ cairo_restore (cr);
+ cairo_pattern_destroy (pat);
+ }
+ }
+ }
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (RP::Fadeout * fo) {
+ //kdDebug() << "Visit " << fo->nodeName() << endl;
+ if (fo->progress > 0) {
+ CAIRO_SET_SOURCE_RGB (cr, fo->to_color);
+ if ((int)fo->w && (int)fo->h) {
+ cairo_save (cr);
+ cairo_rectangle (cr, fo->x, fo->y, fo->w, fo->h);
+ cairo_clip (cr);
+ cairo_paint_with_alpha (cr, 1.0 * fo->progress / 100);
+ cairo_restore (cr);
+ }
+ }
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (RP::Crossfade * cf) {
+ //kdDebug() << "Visit " << cf->nodeName() << endl;
+ if (cf->target && cf->target->id == RP::id_node_image) {
+ RP::Image *img = convertNode <RP::Image> (cf->target);
+ if (img->surface ()) {
+ Single sx = cf->srcx, sy = cf->srcy, sw = cf->srcw, sh = cf->srch;
+ if (!(int)sw)
+ sw = img->width;
+ if (!(int)sh)
+ sh = img->height;
+ if ((int)cf->w && (int)cf->h && (int)sw && (int)sh) {
+ if (!img->img_surface->surface)
+ copyImage (img->img_surface, img->width, img->height, img->cached_img.data->image, cairo_surface);
+ cairo_save (cr);
+ cairo_matrix_t matrix;
+ cairo_matrix_init_identity (&matrix);
+ float scalex = 1.0 * sw / cf->w;
+ float scaley = 1.0 * sh / cf->h;
+ cairo_matrix_scale (&matrix, scalex, scaley);
+ cairo_matrix_translate (&matrix,
+ 1.0*sx/scalex - (double)cf->x,
+ 1.0*sy/scaley - (double)cf->y);
+ cairo_rectangle (cr, cf->x, cf->y, cf->w, cf->h);
+ cairo_pattern_t *pat = cairo_pattern_create_for_surface (img->img_surface->surface);
+ cairo_pattern_set_extend (pat, CAIRO_EXTEND_NONE);
+ cairo_pattern_set_matrix (pat, &matrix);
+ cairo_set_source (cr, pat);
+ cairo_clip (cr);
+ cairo_paint_with_alpha (cr, 1.0 * cf->progress / 100);
+ cairo_restore (cr);
+ cairo_pattern_destroy (pat);
+ }
+ }
+ }
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (RP::Wipe * wipe) {
+ //kdDebug() << "Visit " << wipe->nodeName() << endl;
+ if (wipe->target && wipe->target->id == RP::id_node_image) {
+ RP::Image *img = convertNode <RP::Image> (wipe->target);
+ if (img->surface ()) {
+ Single x = wipe->x, y = wipe->y;
+ Single tx = x, ty = y;
+ Single w = wipe->w, h = wipe->h;
+ Single sx = wipe->srcx, sy = wipe->srcy, sw = wipe->srcw, sh = wipe->srch;
+ if (!(int)sw)
+ sw = img->width;
+ if (!(int)sh)
+ sh = img->height;
+ if (wipe->direction == RP::Wipe::dir_right) {
+ Single dx = w * 1.0 * wipe->progress / 100;
+ tx = x -w + dx;
+ w = dx;
+ } else if (wipe->direction == RP::Wipe::dir_left) {
+ Single dx = w * 1.0 * wipe->progress / 100;
+ tx = x + w - dx;
+ x = tx;
+ w = dx;
+ } else if (wipe->direction == RP::Wipe::dir_down) {
+ Single dy = h * 1.0 * wipe->progress / 100;
+ ty = y - h + dy;
+ h = dy;
+ } else if (wipe->direction == RP::Wipe::dir_up) {
+ Single dy = h * 1.0 * wipe->progress / 100;
+ ty = y + h - dy;
+ y = ty;
+ h = dy;
+ }
+
+ if ((int)w && (int)h) {
+ if (!img->img_surface->surface)
+ copyImage (img->img_surface, img->width, img->height, img->cached_img.data->image, cairo_surface);
+ cairo_matrix_t matrix;
+ cairo_matrix_init_identity (&matrix);
+ float scalex = 1.0 * sw / wipe->w;
+ float scaley = 1.0 * sh / wipe->h;
+ cairo_matrix_scale (&matrix, scalex, scaley);
+ cairo_matrix_translate (&matrix,
+ 1.0*sx/scalex - (double)tx,
+ 1.0*sy/scaley - (double)ty);
+ cairo_pattern_t *pat = cairo_pattern_create_for_surface (img->img_surface->surface);
+ cairo_pattern_set_extend (pat, CAIRO_EXTEND_NONE);
+ cairo_pattern_set_matrix (pat, &matrix);
+ cairo_set_source (cr, pat);
+ cairo_rectangle (cr, x, y, w, h);
+ cairo_fill (cr);
+ cairo_pattern_destroy (pat);
+ }
+ }
+ }
+}
+
+KDE_NO_EXPORT void CairoPaintVisitor::visit (RP::ViewChange * vc) {
+ //kdDebug() << "Visit " << vc->nodeName() << endl;
+ if (vc->unfinished () || vc->progress < 100) {
+ cairo_pattern_t * pat = cairo_pop_group (cr); // from imfl
+ cairo_pattern_set_extend (pat, CAIRO_EXTEND_NONE);
+ cairo_push_group (cr);
+ cairo_save (cr);
+ cairo_set_source (cr, pat);
+ cairo_paint (cr);
+ if ((int)vc->w && (int)vc->h && (int)vc->srcw && (int)vc->srch) {
+ cairo_matrix_t matrix;
+ cairo_matrix_init_identity (&matrix);
+ float scalex = 1.0 * vc->srcw / vc->w;
+ float scaley = 1.0 * vc->srch / vc->h;
+ cairo_matrix_scale (&matrix, scalex, scaley);
+ cairo_matrix_translate (&matrix,
+ 1.0*vc->srcx/scalex - (double)vc->x,
+ 1.0*vc->srcy/scaley - (double)vc->y);
+ cairo_pattern_set_matrix (pat, &matrix);
+ cairo_set_source (cr, pat);
+ cairo_rectangle (cr, vc->x, vc->y, vc->w, vc->h);
+ cairo_fill (cr);
+ }
+ cairo_pattern_destroy (pat);
+ cairo_restore (cr);
+ }
+}
+
+#endif
+
+//-----------------------------------------------------------------------------
+
+namespace KMPlayer {
+
+class KMPLAYER_NO_EXPORT MouseVisitor : public Visitor {
+ Matrix matrix;
+ NodePtr node;
+ unsigned int event;
+ int x, y;
+ bool handled;
+ bool bubble_up;
+public:
+ MouseVisitor (unsigned int evt, int x, int y);
+ KDE_NO_CDTOR_EXPORT ~MouseVisitor () {}
+ using Visitor::visit;
+ void visit (Node * n);
+ void visit (SMIL::Layout *);
+ void visit (SMIL::Region *);
+ void visit (SMIL::TimedMrl * n);
+ void visit (SMIL::MediaType * n);
+ void visit (SMIL::Anchor *);
+ void visit (SMIL::Area *);
+ QCursor cursor;
+};
+
+} // namespace
+
+KDE_NO_CDTOR_EXPORT
+MouseVisitor::MouseVisitor (unsigned int evt, int a, int b)
+ : event (evt), x (a), y (b), handled (false), bubble_up (false) {
+}
+
+KDE_NO_EXPORT void MouseVisitor::visit (Node * n) {
+ kdDebug () << "Mouse event ignored for " << n->nodeName () << endl;
+}
+
+KDE_NO_EXPORT void MouseVisitor::visit (SMIL::Layout * layout) {
+ if (layout->surface ()) {
+ Matrix m = matrix;
+ SRect rect = layout->region_surface->bounds;
+ matrix = Matrix (rect.x(), rect.y(),
+ layout->region_surface->xscale, layout->region_surface->yscale);
+ matrix.transform (m);
+
+ NodePtr node_save = node;
+ node = layout;
+ for (NodePtr r = layout->firstChild (); r; r = r->nextSibling ()) {
+ if (r->id == SMIL::id_node_region)
+ r->accept (this);
+ if (!node->active ())
+ break;
+ }
+ node = node_save;
+
+ matrix = m;
+ }
+}
+
+KDE_NO_EXPORT void MouseVisitor::visit (SMIL::Region * region) {
+ if (region->surface ()) {
+ SRect rect = region->region_surface->bounds;
+ Single rx = rect.x(), ry = rect.y(), rw = rect.width(), rh = rect.height();
+ matrix.getXYWH (rx, ry, rw, rh);
+ handled = false;
+ bool inside = x > rx && x < rx+rw && y > ry && y< ry+rh;
+ if (!inside && (event == event_pointer_clicked || !region->has_mouse))
+ return;
+ Matrix m = matrix;
+ matrix = Matrix (rect.x(), rect.y(), 1.0, 1.0);
+ matrix.transform (m);
+ bubble_up = false;
+
+ bool child_handled = false;
+ if (inside)
+ for (NodePtr r = region->firstChild (); r; r = r->nextSibling ()) {
+ r->accept (this);
+ child_handled |= handled;
+ if (!node->active ())
+ break;
+ }
+ child_handled &= !bubble_up;
+ bubble_up = false;
+
+ int saved_event = event;
+ if (node->active ()) {
+ bool propagate_listeners = !child_handled;
+ if (event == event_pointer_moved) {
+ propagate_listeners = true; // always pass move events
+ if (region->has_mouse && (!inside || child_handled)) {
+ region->has_mouse = false;
+ event = event_outbounds;
+ } else if (inside && !child_handled && !region->has_mouse) {
+ region->has_mouse = true;
+ event = event_inbounds;
+ }
+ }// else // event_pointer_clicked
+ if (propagate_listeners) {
+ NodeRefListPtr nl = region->listeners (
+ event == event_pointer_moved ? mediatype_attached : event);
+ if (nl) {
+ for (NodeRefItemPtr c = nl->first(); c; c = c->nextSibling ()) {
+ if (c->data)
+ c->data->accept (this);
+ if (!node->active ())
+ break;
+ }
+ }
+ }
+ }
+ event = saved_event;
+ handled = inside;
+ matrix = m;
+ }
+}
+
+static void followLink (SMIL::LinkingBase * link) {
+ kdDebug() << "link to " << link->href << " clicked" << endl;
+ NodePtr n = link;
+ if (link->href.startsWith ("#")) {
+ SMIL::Smil * s = SMIL::Smil::findSmilNode (link);
+ if (s)
+ s->jump (link->href.mid (1));
+ else
+ kdError() << "In document jumps smil not found" << endl;
+ } else
+ for (NodePtr p = link->parentNode (); p; p = p->parentNode ()) {
+ if (n->mrl () && n->mrl ()->opener == p) {
+ p->setState (Node::state_deferred);
+ p->mrl ()->setParam (StringPool::attr_src, link->href, 0L);
+ p->activate ();
+ break;
+ }
+ n = p;
+ }
+}
+
+KDE_NO_EXPORT void MouseVisitor::visit (SMIL::Anchor * anchor) {
+ if (event == event_pointer_moved)
+ cursor.setShape (Qt::PointingHandCursor);
+ else if (event == event_pointer_clicked)
+ followLink (anchor);
+}
+
+KDE_NO_EXPORT void MouseVisitor::visit (SMIL::Area * area) {
+ NodePtr n = area->parentNode ();
+ if (n->id >= SMIL::id_node_first_mediatype &&
+ n->id < SMIL::id_node_last_mediatype) {
+ SMIL::MediaType * mt = convertNode <SMIL::MediaType> (n);
+ Surface *s = mt->surface ();
+ if (s) {
+ SRect rect = s->bounds;
+ Single x1 = rect.x (), x2 = rect.y ();
+ Single w = rect.width (), h = rect.height ();
+ matrix.getXYWH (x1, x2, w, h);
+ if (area->nr_coords > 1) {
+ Single left = area->coords[0].size (rect.width ());
+ Single top = area->coords[1].size (rect.height ());
+ matrix.getXY (left, top);
+ if (x < left || x > left + w || y < top || y > top + h)
+ return;
+ if (area->nr_coords > 3) {
+ Single right = area->coords[2].size (rect.width ());
+ Single bottom = area->coords[3].size (rect.height ());
+ matrix.getXY (right, bottom);
+ if (x > right || y > bottom)
+ return;
+ }
+ }
+ if (event == event_pointer_moved)
+ cursor.setShape (Qt::PointingHandCursor);
+ else {
+ NodeRefListPtr nl = area->listeners (event);
+ if (nl)
+ for (NodeRefItemPtr c = nl->first(); c; c = c->nextSibling ()) {
+ if (c->data)
+ c->data->accept (this);
+ if (!node->active ())
+ return;
+ }
+ if (event == event_pointer_clicked && !area->href.isEmpty ())
+ followLink (area);
+ }
+ }
+ }
+}
+
+KDE_NO_EXPORT void MouseVisitor::visit (SMIL::TimedMrl * timedmrl) {
+ timedmrl->runtime ()->processEvent (event);
+}
+
+KDE_NO_EXPORT void MouseVisitor::visit (SMIL::MediaType * mediatype) {
+ if (mediatype->sensitivity == SMIL::MediaType::sens_transparent) {
+ bubble_up = true;
+ return;
+ }
+ Surface *s = mediatype->surface ();
+ if (!s)
+ return;
+ if (s->node && s->node.ptr () != mediatype) {
+ s->node->accept (this);
+ return;
+ }
+ SRect rect = s->bounds;
+ Single rx = rect.x(), ry = rect.y(), rw = rect.width(), rh = rect.height();
+ matrix.getXYWH (rx, ry, rw, rh);
+ bool inside = x > rx && x < rx+rw && y > ry && y< ry+rh;
+ if (!inside && event == event_pointer_clicked)
+ return; // FIXME, also in/outbounds are bounds related
+
+ NodeRefListPtr nl = mediatype->listeners (
+ event == event_pointer_moved ? mediatype_attached : event);
+ if (nl)
+ for (NodeRefItemPtr c = nl->first(); c; c = c->nextSibling ()) {
+ if (c->data)
+ c->data->accept (this);
+ if (!node->active ())
+ return;
+ }
+ if (event != event_pointer_moved)
+ visit (static_cast <SMIL::TimedMrl *> (mediatype));
+ if (event != event_inbounds && event != event_outbounds) {
+ SMIL::RegionBase *r=convertNode<SMIL::RegionBase>(mediatype->region_node);
+ if (r && r->surface () &&
+ r->id != SMIL::id_node_smil &&
+ r->region_surface->node && r != r->region_surface->node.ptr ())
+ return r->region_surface->node->accept (this);
+ }
+}
+
+//-----------------------------------------------------------------------------
+
+KDE_NO_CDTOR_EXPORT ViewArea::ViewArea (QWidget * parent, View * view)
+ : QWidget (parent, "kde_kmplayer_viewarea", WResizeNoErase | WRepaintNoErase),
+ m_parent (parent),
+ m_view (view),
+ m_collection (new KActionCollection (this)),
+ surface (new ViewSurface (this)),
+ m_mouse_invisible_timer (0),
+ m_repaint_timer (0),
+ m_fullscreen_scale (100),
+ scale_lbl_id (-1),
+ scale_slider_id (-1),
+ m_fullscreen (false),
+ m_minimal (false) {
+ setEraseColor (QColor (0, 0, 0));
+ setAcceptDrops (true);
+ new KAction (i18n ("Fullscreen"), KShortcut (Qt::Key_F), this, SLOT (accelActivated ()), m_collection, "view_fullscreen_toggle");
+ setMouseTracking (true);
+ if (!image_data_map)
+ imageCacheDeleter.setObject (image_data_map, new ImageDataMap);
+}
+
+KDE_NO_CDTOR_EXPORT ViewArea::~ViewArea () {
+}
+
+KDE_NO_EXPORT void ViewArea::fullScreen () {
+ killTimers ();
+ m_mouse_invisible_timer = m_repaint_timer = 0;
+ if (m_fullscreen) {
+ showNormal ();
+ reparent (m_parent, 0, QPoint (0, 0), true);
+ static_cast <KDockWidget *> (m_parent)->setWidget (this);
+ for (unsigned i = 0; i < m_collection->count (); ++i)
+ m_collection->action (i)->setEnabled (false);
+ if (scale_lbl_id != -1) {
+ m_view->controlPanel ()->popupMenu ()->removeItem (scale_lbl_id);
+ m_view->controlPanel ()->popupMenu ()->removeItem (scale_slider_id);
+ scale_lbl_id = scale_slider_id = -1;
+ }
+ m_view->controlPanel ()->button (ControlPanel::button_playlist)->setIconSet (QIconSet (QPixmap (playlist_xpm)));
+ } else {
+ m_topwindow_rect = topLevelWidget ()->geometry ();
+ reparent (0L, 0, qApp->desktop()->screenGeometry(this).topLeft(), true);
+ showFullScreen ();
+ for (unsigned i = 0; i < m_collection->count (); ++i)
+ m_collection->action (i)->setEnabled (true);
+ QPopupMenu * menu = m_view->controlPanel ()->popupMenu ();
+ QLabel * lbl = new QLabel (i18n ("Scale:"), menu);
+ scale_lbl_id = menu->insertItem (lbl, -1, 4);
+ QSlider * slider = new QSlider (50, 150, 10, m_fullscreen_scale, Qt::Horizontal, menu);
+ connect (slider, SIGNAL (valueChanged (int)), this, SLOT (scale (int)));
+ scale_slider_id = menu->insertItem (slider, -1, 5);
+ m_view->controlPanel ()->button (ControlPanel::button_playlist)->setIconSet (QIconSet (QPixmap (normal_window_xpm)));
+ }
+ m_fullscreen = !m_fullscreen;
+ m_view->controlPanel()->popupMenu ()->setItemChecked (ControlPanel::menu_fullscreen, m_fullscreen);
+
+#ifdef HAVE_CAIRO
+ if (surface->surface) {
+ cairo_surface_destroy (surface->surface);
+ surface->surface = 0L;
+ }
+#endif
+ if (m_fullscreen) {
+ m_mouse_invisible_timer = startTimer(MOUSE_INVISIBLE_DELAY);
+ } else {
+ if (m_mouse_invisible_timer) {
+ killTimer (m_mouse_invisible_timer);
+ m_mouse_invisible_timer = 0;
+ }
+ unsetCursor();
+ }
+}
+
+void ViewArea::minimalMode () {
+ m_minimal = !m_minimal;
+ killTimers ();
+ m_mouse_invisible_timer = m_repaint_timer = 0;
+ if (m_minimal) {
+ m_view->setViewOnly ();
+ m_view->setControlPanelMode (KMPlayer::View::CP_AutoHide);
+ m_view->setNoInfoMessages (true);
+ m_view->controlPanel ()->button (ControlPanel::button_playlist)->setIconSet (QIconSet (QPixmap (normal_window_xpm)));
+ } else {
+ m_view->setControlPanelMode (KMPlayer::View::CP_Show);
+ m_view->setNoInfoMessages (false);
+ m_view->controlPanel ()->button (ControlPanel::button_playlist)->setIconSet (QIconSet (QPixmap (playlist_xpm)));
+ }
+ m_topwindow_rect = topLevelWidget ()->geometry ();
+}
+
+KDE_NO_EXPORT void ViewArea::accelActivated () {
+ m_view->controlPanel()->popupMenu ()->activateItemAt (m_view->controlPanel()->popupMenu ()->indexOf (ControlPanel::menu_fullscreen));
+}
+
+KDE_NO_EXPORT void ViewArea::mousePressEvent (QMouseEvent * e) {
+ if (surface->node) {
+ MouseVisitor visitor (event_pointer_clicked, e->x(), e->y());
+ surface->node->accept (&visitor);
+ }
+ e->accept ();
+}
+
+KDE_NO_EXPORT void ViewArea::mouseDoubleClickEvent (QMouseEvent *) {
+ m_view->fullScreen (); // screensaver stuff
+}
+
+KDE_NO_EXPORT void ViewArea::mouseMoveEvent (QMouseEvent * e) {
+ if (e->state () == Qt::NoButton) {
+ int vert_buttons_pos = height () - m_view->statusBarHeight ();
+ int cp_height = m_view->controlPanel ()->maximumSize ().height ();
+ m_view->delayedShowButtons (e->y() > vert_buttons_pos-cp_height &&
+ e->y() < vert_buttons_pos);
+ }
+ if (surface->node) {
+ MouseVisitor visitor (event_pointer_moved, e->x(), e->y());
+ surface->node->accept (&visitor);
+ setCursor (visitor.cursor);
+ }
+ e->accept ();
+ mouseMoved (); // for m_mouse_invisible_timer
+}
+
+KDE_NO_EXPORT void ViewArea::syncVisual (const IRect & rect) {
+#ifdef HAVE_CAIRO
+ int ex = rect.x;
+ if (ex > 0)
+ ex--;
+ int ey = rect.y;
+ if (ey > 0)
+ ey--;
+ int ew = rect.w + 2;
+ int eh = rect.h + 2;
+ if (!surface->surface)
+ surface->surface = cairoCreateSurface (winId (), width (), height ());
+ if (surface->node && (!video_node ||
+ !convertNode <SMIL::MediaType> (video_node)->needsVideoWidget()))
+ setAudioVideoGeometry (IRect (), NULL);
+ CairoPaintVisitor visitor (surface->surface,
+ Matrix (surface->bounds.x(), surface->bounds.y(), 1.0, 1.0),
+ IRect (ex, ey, ew, eh), paletteBackgroundColor (), true);
+ if (surface->node)
+ surface->node->accept (&visitor);
+#else
+ repaint (QRect(rect.x, rect.y, rect.w, rect.h), false);
+#endif
+ if (m_repaint_timer) {
+ killTimer (m_repaint_timer);
+ m_repaint_timer = 0;
+ }
+ //XFlush (qt_xdisplay ());
+}
+
+KDE_NO_EXPORT void ViewArea::paintEvent (QPaintEvent * pe) {
+#ifdef HAVE_CAIRO
+ if (surface->node)
+ scheduleRepaint (IRect (pe->rect ().x (), pe->rect ().y (), pe->rect ().width (), pe->rect ().height ()));
+ else
+#endif
+ QWidget::paintEvent (pe);
+}
+
+KDE_NO_EXPORT void ViewArea::scale (int val) {
+ m_fullscreen_scale = val;
+ resizeEvent (0L);
+}
+
+KDE_NO_EXPORT void ViewArea::updateSurfaceBounds () {
+ Single x, y, w = width (), h = height ();
+ h -= m_view->statusBarHeight ();
+ h -= m_view->controlPanel ()->isVisible ()
+ ? (m_view->controlPanelMode () == View::CP_Only
+ ? h
+ : (Single) m_view->controlPanel()->maximumSize ().height ())
+ : Single (0);
+ surface->resize (SRect (x, y, w, h));
+ Mrl *mrl = surface->node ? surface->node->mrl () : NULL;
+ if (m_view->keepSizeRatio () &&
+ w > 0 && h > 0 &&
+ mrl && mrl->width > 0 && mrl->height > 0) {
+ double wasp = (double) w / h;
+ double masp = (double) mrl->width / mrl->height;
+ if (wasp > masp) {
+ Single tmp = w;
+ w = masp * h;
+ x += (tmp - w) / 2;
+ } else {
+ Single tmp = h;
+ h = Single (w / masp);
+ y += (tmp - h) / 2;
+ }
+ surface->xscale = 1.0 * w / mrl->width;
+ surface->yscale = 1.0 * h / mrl->height;
+ } else {
+ surface->xscale = 1.0;
+ surface->yscale = 1.0;
+ }
+ surface->bounds = SRect (x, y, w, h);
+ scheduleRepaint (IRect (0, 0, width (), height ()));
+}
+
+KDE_NO_EXPORT void ViewArea::resizeEvent (QResizeEvent *) {
+ if (!m_view->controlPanel ()) return;
+ Single x, y, w = width (), h = height ();
+ Single hsb = m_view->statusBarHeight ();
+ Single hcp = m_view->controlPanel ()->isVisible ()
+ ? (m_view->controlPanelMode () == View::CP_Only
+ ? h-hsb
+ : (Single) m_view->controlPanel()->maximumSize ().height ())
+ : Single (0);
+ Single wws = w;
+ // move controlpanel over video when autohiding and playing
+ Single hws = h - (m_view->controlPanelMode () == View::CP_AutoHide &&
+ m_view->widgetStack ()->visibleWidget () == m_view->viewer ()
+ ? Single (0)
+ : hcp) - hsb;
+ // now scale the regions and check if video region is already sized
+ if (surface->node) {
+ NodePtr n = surface->node;
+ surface = new ViewSurface (this);
+ surface->node = n;
+ }
+ updateSurfaceBounds ();
+
+ // finally resize controlpanel and video widget
+ if (m_view->controlPanel ()->isVisible ())
+ m_view->controlPanel ()->setGeometry (0, h-hcp-hsb, w, hcp);
+ if (m_view->statusBar ()->isVisible ())
+ m_view->statusBar ()->setGeometry (0, h-hsb, w, hsb);
+ if (m_fullscreen && wws == w && hws == h) {
+ wws = wws * m_fullscreen_scale / 100;
+ hws = hws * m_fullscreen_scale / 100;
+ x += (w - wws) / 2;
+ y += (h - hws) / 2;
+ }
+ if (!surface->node)
+ setAudioVideoGeometry (IRect (x, y, wws, hws), 0L);
+}
+
+KDE_NO_EXPORT
+void ViewArea::setAudioVideoGeometry (const IRect &rect, unsigned int * bg_color) {
+ int x = rect.x, y = rect.y, w = rect.w, h = rect.h;
+ if (m_view->controlPanelMode() == View::CP_Only) {
+ w = h = 0;
+ } else if (!surface->node && m_view->keepSizeRatio ()) { // scale video widget inside region
+ int hfw = m_view->viewer ()->heightForWidth (w);
+ if (hfw > 0)
+ if (hfw > h) {
+ int old_w = w;
+ w = int ((1.0 * h * w)/(1.0 * hfw));
+ x += (old_w - w) / 2;
+ } else {
+ y += (h - hfw) / 2;
+ h = hfw;
+ }
+ }
+ m_av_geometry = QRect (x, y, w, h);
+ QRect wrect = m_view->widgetStack ()->geometry ();
+ if (m_av_geometry != wrect &&
+ !(m_av_geometry.width() <= 0 &&
+ wrect.width() <= 1 && wrect.height() <= 1)) {
+ m_view->widgetStack ()->setGeometry (x, y, w, h);
+ wrect.unite (m_av_geometry);
+ scheduleRepaint (IRect (wrect.x (), wrect.y (), wrect.width (), wrect.height ()));
+ }
+ if (bg_color)
+ if (QColor (QRgb (*bg_color)) != (m_view->viewer ()->paletteBackgroundColor ())) {
+ m_view->viewer()->setCurrentBackgroundColor (QColor (QRgb (*bg_color)));
+ scheduleRepaint (IRect (x, y, w, h));
+ }
+}
+
+KDE_NO_EXPORT void ViewArea::setAudioVideoNode (NodePtr n) {
+ video_node = n;
+}
+
+KDE_NO_EXPORT SurfacePtr ViewArea::getSurface (NodePtr node) {
+ static_cast <ViewSurface *> (surface.ptr ())->clear ();
+ surface->node = node;
+ m_view->viewer()->resetBackgroundColor ();
+ if (node) {
+ updateSurfaceBounds ();
+ return surface;
+ }
+ scheduleRepaint (IRect (0, 0, width (), height ()));
+ return 0L;
+}
+
+KDE_NO_EXPORT void ViewArea::showEvent (QShowEvent *) {
+ resizeEvent (0L);
+}
+
+KDE_NO_EXPORT void ViewArea::dropEvent (QDropEvent * de) {
+ m_view->dropEvent (de);
+}
+
+KDE_NO_EXPORT void ViewArea::dragEnterEvent (QDragEnterEvent* dee) {
+ m_view->dragEnterEvent (dee);
+}
+
+KDE_NO_EXPORT void ViewArea::contextMenuEvent (QContextMenuEvent * e) {
+ m_view->controlPanel ()->popupMenu ()->exec (e->globalPos ());
+}
+
+KDE_NO_EXPORT void ViewArea::mouseMoved () {
+ if (m_fullscreen) {
+ if (m_mouse_invisible_timer)
+ killTimer (m_mouse_invisible_timer);
+ unsetCursor ();
+ m_mouse_invisible_timer = startTimer (MOUSE_INVISIBLE_DELAY);
+ }
+}
+
+KDE_NO_EXPORT void ViewArea::scheduleRepaint (const IRect &rect) {
+ if (m_repaint_timer) {
+ m_repaint_rect = m_repaint_rect.unite (rect);
+ } else {
+ m_repaint_rect = rect;
+ m_repaint_timer = startTimer (10); // 100 per sec should do
+ }
+}
+
+KDE_NO_EXPORT void ViewArea::timerEvent (QTimerEvent * e) {
+ if (e->timerId () == m_mouse_invisible_timer) {
+ killTimer (m_mouse_invisible_timer);
+ m_mouse_invisible_timer = 0;
+ if (m_fullscreen)
+ setCursor (BlankCursor);
+ } else if (e->timerId () == m_repaint_timer) {
+ killTimer (m_repaint_timer);
+ m_repaint_timer = 0;
+ //repaint (m_repaint_rect, false);
+ syncVisual (m_repaint_rect.intersect (IRect (0, 0, width (), height ())));
+ } else {
+ kdError () << "unknown timer " << e->timerId () << " " << m_repaint_timer << endl;
+ killTimer (e->timerId ());
+ }
+}
+
+KDE_NO_EXPORT void ViewArea::closeEvent (QCloseEvent * e) {
+ //kdDebug () << "closeEvent" << endl;
+ if (m_fullscreen) {
+ fullScreen ();
+ if (!m_parent->topLevelWidget ()->isVisible ())
+ m_parent->topLevelWidget ()->show ();
+ e->ignore ();
+ } else
+ QWidget::closeEvent (e);
+}
+
+
+#include "viewarea.moc"
diff --git a/src/viewarea.h b/src/viewarea.h
new file mode 100644
index 0000000..6277b6e
--- /dev/null
+++ b/src/viewarea.h
@@ -0,0 +1,89 @@
+/**
+ This file belong to the KMPlayer project, a movie player plugin for Konqueror
+ Copyright (C) 2007 Koos Vriezen <koos.vriezen@gmail.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+**/
+
+#ifndef KMPLAYER_VIEW_AREA_H
+#define KMPLAYER_VIEW_AREA_H
+
+#include <qwidget.h>
+
+class KActionCollection;
+
+namespace KMPlayer {
+
+class View;
+class ViewAreaPrivate;
+
+/*
+ * The area in which the video widget and controlpanel are laid out
+ */
+class KMPLAYER_EXPORT ViewArea : public QWidget {
+ Q_OBJECT
+public:
+ ViewArea (QWidget * parent, View * view);
+ ~ViewArea ();
+ KDE_NO_EXPORT bool isFullScreen () const { return m_fullscreen; }
+ KDE_NO_EXPORT bool isMinimalMode () const { return m_minimal; }
+ KDE_NO_EXPORT KActionCollection * actionCollection () const { return m_collection; }
+ KDE_NO_EXPORT QRect topWindowRect () const { return m_topwindow_rect; }
+ SurfacePtr getSurface (NodePtr node);
+ void setAudioVideoGeometry (const IRect &rect, unsigned int * bg);
+ void setAudioVideoNode (NodePtr n);
+ void mouseMoved ();
+ void scheduleRepaint (const IRect &rect);
+ void resizeEvent (QResizeEvent *);
+ void minimalMode ();
+public slots:
+ void fullScreen ();
+ void accelActivated ();
+ void scale (int);
+protected:
+ void showEvent (QShowEvent *);
+ void mouseMoveEvent (QMouseEvent *);
+ void mousePressEvent (QMouseEvent *);
+ void mouseDoubleClickEvent (QMouseEvent *);
+ void dragEnterEvent (QDragEnterEvent *);
+ void dropEvent (QDropEvent *);
+ void contextMenuEvent (QContextMenuEvent * e);
+ void paintEvent (QPaintEvent *);
+ void timerEvent (QTimerEvent * e);
+ void closeEvent (QCloseEvent * e);
+private:
+ void syncVisual (const IRect & rect);
+ void updateSurfaceBounds ();
+ ViewAreaPrivate * d;
+ QWidget * m_parent;
+ View * m_view;
+ KActionCollection * m_collection;
+ SurfacePtr surface;
+ NodePtrW video_node;
+ QRect m_av_geometry;
+ IRect m_repaint_rect;
+ QRect m_topwindow_rect;
+ int m_mouse_invisible_timer;
+ int m_repaint_timer;
+ int m_fullscreen_scale;
+ int scale_lbl_id;
+ int scale_slider_id;
+ bool m_fullscreen;
+ bool m_minimal;
+};
+
+} // namespace KMPlayer
+
+#endif
diff --git a/src/xineplayer.cpp b/src/xineplayer.cpp
new file mode 100644
index 0000000..17e6fd2
--- /dev/null
+++ b/src/xineplayer.cpp
@@ -0,0 +1,1239 @@
+/* This file is part of the KMPlayer application
+ Copyright (C) 2003 Koos Vriezen <koos.vriezen@xs4all.nl>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <config.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <libgen.h>
+#include <dcopclient.h>
+#include <qcstring.h>
+#include <qtimer.h>
+#include <qfile.h>
+#include <qurl.h>
+#include <qthread.h>
+#include <qmutex.h>
+#include <qdom.h>
+#include "kmplayer_backend.h"
+#include "kmplayer_callback_stub.h"
+#include "kmplayer_callback.h"
+#include "xineplayer.h"
+#include <X11/X.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/keysym.h>
+#include <X11/Xatom.h>
+#include <X11/Xutil.h>
+#include <X11/extensions/XShm.h>
+
+#include <xine.h>
+#include <xine/xineutils.h>
+
+#ifndef XShmGetEventBase
+extern int XShmGetEventBase(Display *);
+#endif
+
+#define MWM_HINTS_DECORATIONS (1L << 1)
+#define PROP_MWM_HINTS_ELEMENTS 5
+typedef struct {
+ uint32_t flags;
+ uint32_t functions;
+ uint32_t decorations;
+ int32_t input_mode;
+ uint32_t status;
+} MWMHints;
+
+
+static KXinePlayer * xineapp;
+static KMPlayer::Callback_stub * callback;
+static QMutex mutex (true);
+
+static xine_t *xine;
+static xine_stream_t *stream;
+static xine_stream_t *sub_stream;
+static xine_video_port_t *vo_port;
+static xine_audio_port_t *ao_port;
+static xine_post_t *post_plugin;
+static xine_event_queue_t *event_queue;
+static xine_cfg_entry_t audio_vis_cfg_entry;
+static x11_visual_t vis;
+static char configfile[2048];
+static Atom quit_atom;
+
+static Display *display;
+static Window wid;
+static bool window_created;
+static bool xine_verbose;
+static bool xine_vverbose;
+static bool wants_config;
+static bool audio_vis;
+static int screen;
+static int completion_event;
+static int repeat_count;
+static int xpos, ypos, width, height;
+static int movie_width, movie_height, movie_length, movie_pos;
+static int movie_brightness = 32767;
+static int movie_contrast = 32767;
+static int movie_hue = 32767;
+static int movie_saturation = 32767;
+static int movie_volume = 32767;
+static double pixel_aspect;
+
+static int running = 0;
+static volatile int firstframe = 0;
+static const int event_finished = QEvent::User;
+static const int event_progress = QEvent::User + 2;
+static const int event_url = QEvent::User + 3;
+static const int event_size = QEvent::User + 4;
+static const int event_title = QEvent::User + 5;
+static const int event_video = QEvent::User + 6;
+static QString mrl;
+static QString sub_mrl;
+static QString rec_mrl;
+static QString alang, slang;
+static QStringList alanglist, slanglist;
+
+static QString elmentry ("entry");
+static QString elmitem ("item");
+static QString attname ("name");
+static QString atttype ("type");
+static QString attdefault ("DEFAULT");
+static QString attvalue ("value");
+static QString attstart ("START");
+static QString attend ("end");
+static QString valrange ("range");
+static QString valnum ("num");
+static QString valbool ("bool");
+static QString valenum ("enum");
+static QString valstring ("string");
+
+extern "C" {
+
+static void dest_size_cb(void * /*data*/, int /*video_width*/, int /*video_height*/, double /*video_pixel_aspect*/,
+ int *dest_width, int *dest_height, double *dest_pixel_aspect) {
+
+ *dest_width = width;
+ *dest_height = height;
+ *dest_pixel_aspect = pixel_aspect;
+}
+
+static void frame_output_cb(void * /*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) {
+ if (running && firstframe) {
+ firstframe = 0;
+ int pos;
+ fprintf(stderr, "first frame\n");
+ mutex.lock ();
+ xine_get_pos_length (stream, 0, &pos, &movie_length);
+ movie_width = xine_get_stream_info(stream, XINE_STREAM_INFO_VIDEO_WIDTH);
+ movie_height = xine_get_stream_info(stream, XINE_STREAM_INFO_VIDEO_HEIGHT);
+ mutex.unlock ();
+ QApplication::postEvent (xineapp, new XineMovieParamEvent (movie_length, movie_width, movie_height, alanglist, slanglist, true));
+
+ }
+
+ *dest_x = 0;
+ *dest_y = 0;
+ *win_x = xpos;
+ *win_y = ypos;
+ *dest_width = width;
+ *dest_height = height;
+ *dest_pixel_aspect = pixel_aspect;
+}
+
+static void xine_config_cb (void * /*user_data*/, xine_cfg_entry_t * entry) {
+ fprintf (stderr, "xine_config_cb %s\n", entry->enum_values[entry->num_value]);
+ if (!stream)
+ return;
+ mutex.lock ();
+ if (post_plugin) {
+ xine_post_wire_audio_port (xine_get_audio_source (stream), ao_port);
+ xine_post_dispose (xine, post_plugin);
+ post_plugin = 0L;
+ }
+ if (audio_vis && strcmp (entry->enum_values[entry->num_value], "none")) {
+ post_plugin = xine_post_init (xine, entry->enum_values[entry->num_value], 0, &ao_port, &vo_port);
+ xine_post_wire (xine_get_audio_source (stream), (xine_post_in_t *) xine_post_input (post_plugin, (char *) "audio in"));
+ }
+ mutex.unlock ();
+}
+
+static void event_listener(void * /*user_data*/, const xine_event_t *event) {
+ if (event->stream != stream)
+ return; // not interested in sub_stream events
+ switch(event->type) {
+ case XINE_EVENT_UI_PLAYBACK_FINISHED:
+ fprintf (stderr, "XINE_EVENT_UI_PLAYBACK_FINISHED\n");
+ if (repeat_count-- > 0)
+ xine_play (stream, 0, 0);
+ else
+ QApplication::postEvent (xineapp, new QEvent ((QEvent::Type) event_finished));
+ break;
+ case XINE_EVENT_PROGRESS:
+ QApplication::postEvent (xineapp, new XineProgressEvent (((xine_progress_data_t *) event->data)->percent));
+ break;
+ case XINE_EVENT_MRL_REFERENCE:
+ fprintf(stderr, "XINE_EVENT_MRL_REFERENCE %s\n",
+ ((xine_mrl_reference_data_t*)event->data)->mrl);
+ QApplication::postEvent (xineapp, new XineURLEvent (QString::fromLocal8Bit (((xine_mrl_reference_data_t*)event->data)->mrl)));
+ break;
+ case XINE_EVENT_FRAME_FORMAT_CHANGE:
+ fprintf (stderr, "XINE_EVENT_FRAME_FORMAT_CHANGE\n");
+ break;
+ case XINE_EVENT_UI_SET_TITLE:
+ {
+ xine_ui_data_t * data = (xine_ui_data_t *) event->data;
+ QApplication::postEvent(xineapp, new XineTitleEvent(data->str));
+ fprintf (stderr, "Set title event %s\n", data->str);
+ }
+ break;
+ case XINE_EVENT_UI_CHANNELS_CHANGED: {
+ fprintf (stderr, "Channel changed event %d\n", firstframe);
+ mutex.lock ();
+ int w = xine_get_stream_info(stream, XINE_STREAM_INFO_VIDEO_WIDTH);
+ int h = xine_get_stream_info(stream, XINE_STREAM_INFO_VIDEO_HEIGHT);
+ int pos, l, nr;
+ xine_get_pos_length (stream, 0, &pos, &l);
+ char * langstr = new char [66];
+ alanglist.clear ();
+ slanglist.clear ();
+
+ nr =xine_get_stream_info(stream,XINE_STREAM_INFO_MAX_AUDIO_CHANNEL);
+ // if nrch > 25) nrch = 25
+ for (int i = 0; i < nr; ++i) {
+ if (!xine_get_audio_lang (stream, i, langstr))
+ continue;
+ QString ls = QString::fromLocal8Bit (langstr).stripWhiteSpace();
+ if (ls.isEmpty ())
+ continue;
+ if (!slang.isEmpty () && alang == ls)
+ xine_set_param(stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL, i);
+ alanglist.push_back (ls);
+ fprintf (stderr, "alang %s\n", langstr);
+ }
+ nr = xine_get_stream_info(stream, XINE_STREAM_INFO_MAX_SPU_CHANNEL);
+ // if nrch > 25) nrch = 25
+ for (int i = 0; i < nr; ++i) {
+ if (!xine_get_spu_lang (stream, i, langstr))
+ continue;
+ QString ls = QString::fromLocal8Bit (langstr).stripWhiteSpace();
+ if (ls.isEmpty ())
+ continue;
+ if (!slang.isEmpty () && slang == ls)
+ xine_set_param (stream, XINE_PARAM_SPU_CHANNEL, i);
+ slanglist.push_back (ls);
+ fprintf (stderr, "slang %s\n", langstr);
+ }
+ delete langstr;
+ mutex.unlock ();
+ movie_width = w;
+ movie_height = h;
+ movie_length = l;
+ QApplication::postEvent (xineapp, new XineMovieParamEvent (l, w, h, alanglist, slanglist, firstframe));
+ if (running && firstframe)
+ firstframe = 0;
+ if (window_created && w > 0 && h > 0) {
+ XLockDisplay (display);
+ XResizeWindow (display, wid, movie_width, movie_height);
+ XFlush (display);
+ XUnlockDisplay (display);
+ }
+ break;
+ }
+ case XINE_EVENT_INPUT_MOUSE_MOVE:
+ break;
+ default:
+ fprintf (stderr, "event_listener %d\n", event->type);
+
+ }
+}
+
+} // extern "C"
+
+using namespace KMPlayer;
+
+Backend::Backend ()
+ : DCOPObject (QCString ("Backend")) {
+}
+
+Backend::~Backend () {}
+
+void Backend::setURL (QString url) {
+ mrl = url;
+}
+
+void Backend::setSubTitleURL (QString url) {
+ sub_mrl = url;
+}
+
+void Backend::play (int repeat_count) {
+ xineapp->play (repeat_count);
+}
+
+void Backend::stop () {
+ QTimer::singleShot (0, xineapp, SLOT (stop ()));
+}
+
+void Backend::pause () {
+ xineapp->pause ();
+}
+
+void Backend::seek (int pos, bool /*absolute*/) {
+ xineapp->seek (pos);
+}
+
+void Backend::hue (int h, bool) {
+ xineapp->hue (65535 * (h + 100) / 200);
+}
+
+void Backend::saturation (int s, bool) {
+ xineapp->saturation (65535 * (s + 100) / 200);
+}
+
+void Backend::contrast (int c, bool) {
+ xineapp->contrast (65535 * (c + 100) / 200);
+}
+
+void Backend::brightness (int b, bool) {
+ xineapp->brightness (65535 * (b + 100) / 200);
+}
+
+void Backend::volume (int v, bool) {
+ xineapp->volume (v);
+}
+
+void Backend::frequency (int) {
+}
+
+void Backend::setAudioLang (int id, QString al) {
+ xineapp->setAudioLang (id, al);
+}
+
+void Backend::setSubtitle (int id, QString sl) {
+ xineapp->setSubtitle (id, sl);
+}
+
+void Backend::quit () {
+ delete callback;
+ callback = 0L;
+ if (running)
+ stop ();
+ else
+ QTimer::singleShot (0, qApp, SLOT (quit ()));
+}
+
+bool updateConfigEntry (const QString & name, const QString & value) {
+ fprintf (stderr, "%s=%s\n", name.ascii (), (const char *) value.local8Bit ());
+ bool changed = false;
+ xine_cfg_entry_t cfg_entry;
+ if (!xine_config_lookup_entry (xine, name.ascii (), &cfg_entry))
+ return false;
+ if (cfg_entry.type == XINE_CONFIG_TYPE_STRING ||
+ cfg_entry.type == XINE_CONFIG_TYPE_UNKNOWN) {
+ changed = strcmp (cfg_entry.str_value, value.ascii ());
+ cfg_entry.str_value = (char *) value.ascii ();
+ } else {
+ changed = cfg_entry.num_value != value.toInt ();
+ cfg_entry.num_value = value.toInt ();
+ }
+ xine_config_update_entry (xine, &cfg_entry);
+ return changed;
+}
+
+void Backend::setConfig (QByteArray data) {
+ QString err;
+ int line, column;
+ QDomDocument dom;
+ if (dom.setContent (data, false, &err, &line, &column)) {
+ if (dom.childNodes().length() == 1) {
+ for (QDomNode node = dom.firstChild().firstChild();
+ !node.isNull ();
+ node = node.nextSibling ()) {
+ QDomNamedNodeMap attr = node.attributes ();
+ updateConfigEntry (attr.namedItem (attname).nodeValue (),
+ attr.namedItem (attvalue).nodeValue ());
+ }
+ xine_config_save (xine, configfile);
+ } else
+ err = QString ("invalid data");
+ }
+ if (callback)
+ callback->errorMessage (0, err);
+}
+
+bool Backend::isPlaying () {
+ mutex.lock ();
+ bool b = running &&
+ (xine_get_status (stream) == XINE_STATUS_PLAY) &&
+ (xine_get_param (stream, XINE_PARAM_SPEED) != XINE_SPEED_PAUSE);
+ mutex.unlock ();
+ return b;
+}
+
+KXinePlayer::KXinePlayer (int _argc, char ** _argv)
+ : QApplication (_argc, _argv, false) {
+}
+
+void KXinePlayer::init () {
+ xpos = 0;
+ ypos = 0;
+ width = 320;
+ height = 200;
+
+ XLockDisplay(display);
+ if (window_created)
+ wid = XCreateSimpleWindow(display, XDefaultRootWindow(display),
+ xpos, ypos, width, height, 1, 0, 0);
+ XSelectInput (display, wid,
+ (PointerMotionMask | ExposureMask | KeyPressMask | ButtonPressMask | StructureNotifyMask)); // | SubstructureNotifyMask));
+ XWindowAttributes attr;
+ XGetWindowAttributes(display, wid, &attr);
+ width = attr.width;
+ height = attr.height;
+ if (XShmQueryExtension(display) == True)
+ completion_event = XShmGetEventBase(display) + ShmCompletion;
+ else
+ completion_event = -1;
+ if (window_created) {
+ fprintf (stderr, "map %lu\n", wid);
+ XMapRaised(display, wid);
+ XSync(display, False);
+ }
+ //double d->res_h = 1.0 * DisplayWidth(display, screen) / DisplayWidthMM(display, screen);
+ //double d->res_v = 1.0 * DisplayHeight(display, screen) / DisplayHeightMM(display, screen);
+ XUnlockDisplay(display);
+ vis.display = display;
+ vis.screen = screen;
+ vis.d = wid;
+ vis.dest_size_cb = dest_size_cb;
+ vis.frame_output_cb = frame_output_cb;
+ vis.user_data = NULL;
+ //pixel_aspect = d->res_v / d->res_h;
+
+ //if(fabs(pixel_aspect - 1.0) < 0.01)
+ pixel_aspect = 1.0;
+
+ const char *const * pp = xine_list_post_plugins_typed (xine, XINE_POST_TYPE_AUDIO_VISUALIZATION);
+ int i;
+ for (i = 0; pp[i]; i++);
+ const char ** options = new const char * [i+2];
+ options[0] = "none";
+ for (i = 0; pp[i]; i++)
+ options[i+1] = pp[i];
+ options[i+1] = 0L;
+ xine_config_register_enum (xine, "audio.visualization", 0, (char ** ) options, 0L, 0L, 0, xine_config_cb, 0L);
+ if (!callback)
+ QTimer::singleShot (10, this, SLOT (play ()));
+}
+
+KXinePlayer::~KXinePlayer () {
+ if (window_created) {
+ XLockDisplay (display);
+ fprintf (stderr, "unmap %lu\n", wid);
+ XUnmapWindow (display, wid);
+ XDestroyWindow(display, wid);
+ XSync (display, False);
+ XUnlockDisplay (display);
+ }
+ xineapp = 0L;
+}
+
+void getConfigEntries (QByteArray & buf) {
+ xine_cfg_entry_t entry;
+ QDomDocument doc;
+ QDomElement root = doc.createElement (QString ("document"));
+ for (int i = xine_config_get_first_entry (xine, &entry);
+ i;
+ i = xine_config_get_next_entry (xine, &entry)) {
+ QDomElement elm = doc.createElement (elmentry);
+ elm.setAttribute (attname, QString (entry.key));
+ if (entry.type == XINE_CONFIG_TYPE_STRING || entry.type == XINE_CONFIG_TYPE_UNKNOWN) {
+ elm.setAttribute (atttype, valstring);
+ elm.setAttribute (attvalue, QString (entry.str_value));
+ } else {
+ elm.setAttribute (attdefault, QString::number (entry.num_default));
+ elm.setAttribute (attvalue, QString::number (entry.num_value));
+ switch (entry.type) {
+ case XINE_CONFIG_TYPE_RANGE:
+ elm.setAttribute (atttype, valrange);
+ elm.setAttribute (attstart, QString::number (entry.range_min));
+ elm.setAttribute (attend, QString::number (entry.range_max));
+ break;
+ case XINE_CONFIG_TYPE_ENUM:
+ elm.setAttribute (atttype, valenum);
+ for (int i = 0; entry.enum_values[i]; i++) {
+ QDomElement item = doc.createElement (elmitem);
+ item.setAttribute (attvalue, QString (entry.enum_values[i]));
+ elm.appendChild (item);
+ }
+ break;
+ case XINE_CONFIG_TYPE_NUM:
+ elm.setAttribute (atttype, valnum);
+ break;
+ case XINE_CONFIG_TYPE_BOOL:
+ elm.setAttribute (atttype, valbool);
+ break;
+ default:
+ fprintf (stderr, "unhandled config type: %d\n", entry.type);
+ }
+ }
+ if (entry.help)
+ elm.appendChild (doc.createTextNode (QString::fromUtf8 (entry.help)));
+ root.appendChild (elm);
+ }
+ doc.appendChild (root);
+ QString exp = doc.toString ();
+ QCString cexp = exp.utf8 ();
+ buf.duplicate (cexp);
+ buf.resize (cexp.length ()); // strip terminating \0
+}
+
+void KXinePlayer::play (int repeat) {
+ fprintf (stderr, "play mrl: '%s'\n", (const char *) mrl.local8Bit ());
+ mutex.lock ();
+ repeat_count = repeat;
+ if (running) {
+ if (xine_get_status (stream) == XINE_STATUS_PLAY &&
+ xine_get_param (stream, XINE_PARAM_SPEED) == XINE_SPEED_PAUSE)
+ xine_set_param( stream, XINE_PARAM_SPEED, XINE_SPEED_NORMAL);
+ mutex.unlock ();
+ return;
+ }
+ movie_pos = 0;
+ movie_width = 0;
+ movie_height = 0;
+
+ if (mrl.startsWith ("cdda://"))
+ mrl = QString ("cdda:/") + mrl.mid (7);
+ stream = xine_stream_new (xine, ao_port, vo_port);
+ event_queue = xine_event_new_queue (stream);
+ xine_event_create_listener_thread (event_queue, event_listener, NULL);
+ if (mrl == "cdda:/") {
+ int nr;
+ char ** mrls = xine_get_autoplay_mrls (xine, "CD", &nr);
+ running = 1;
+ for (int i = 0; i < nr; i++) {
+ QString m (mrls[i]);
+ QString title;
+ if (xine_open (stream, mrls[i])) {
+ const char * t = xine_get_meta_info (stream, XINE_META_INFO_TITLE);
+ if (t && t[0])
+ title = QString::fromUtf8 (t);
+ xine_close (stream);
+ }
+ if (callback)
+ callback->subMrl (m, title);
+ else
+ printf ("track %s\n", m.utf8 ().data ());
+ }
+ mutex.unlock ();
+ finished ();
+ return;
+ }
+
+ xine_gui_send_vo_data(stream, XINE_GUI_SEND_VIDEOWIN_VISIBLE, (void *) 1);
+
+ running = 1;
+ QString mrlsetup = mrl;
+ if (!rec_mrl.isEmpty ()) {
+ char * rm = strdup (rec_mrl.local8Bit ());
+ char *bn = basename (rm);
+ char *dn = dirname (rm);
+ if (bn)
+ updateConfigEntry (QString ("media.capture.save_dir"), QString::fromLocal8Bit (dn));
+ mrlsetup += QString ("#save:") + QString::fromLocal8Bit (bn);
+ free (rm);
+ }
+ if (!xine_open (stream, (const char *) mrlsetup.local8Bit ())) {
+ fprintf(stderr, "Unable to open mrl '%s'\n", (const char *) mrl.local8Bit ());
+ mutex.unlock ();
+ finished ();
+ return;
+ }
+ xine_set_param (stream, XINE_PARAM_VO_SATURATION, movie_saturation);
+ xine_set_param (stream, XINE_PARAM_VO_BRIGHTNESS, movie_brightness);
+ xine_set_param (stream, XINE_PARAM_VO_CONTRAST, movie_contrast);
+ xine_set_param (stream, XINE_PARAM_VO_HUE, movie_hue);
+
+ if (!sub_mrl.isEmpty ()) {
+ fprintf(stderr, "Using subtitles from '%s'\n", (const char *) sub_mrl.local8Bit ());
+ sub_stream = xine_stream_new (xine, NULL, vo_port);
+ if (xine_open (sub_stream, (const char *) sub_mrl.local8Bit ())) {
+ xine_stream_master_slave (stream, sub_stream,
+ XINE_MASTER_SLAVE_PLAY | XINE_MASTER_SLAVE_STOP);
+ } else {
+ fprintf(stderr, "Unable to open subtitles from '%s'\n", (const char *) sub_mrl.local8Bit ());
+ xine_dispose (sub_stream);
+ sub_stream = 0L;
+ }
+ }
+ if (!xine_play (stream, 0, 0)) {
+ fprintf(stderr, "Unable to play mrl '%s'\n", (const char *) mrl.local8Bit ());
+ mutex.unlock ();
+ finished ();
+ return;
+ }
+ audio_vis = false;
+ if (xine_get_stream_info (stream, XINE_STREAM_INFO_HAS_VIDEO))
+ QApplication::postEvent(xineapp, new QEvent((QEvent::Type)event_video));
+ else
+ audio_vis = xine_config_lookup_entry
+ (xine, "audio.visualization", &audio_vis_cfg_entry);
+ mutex.unlock ();
+ if (audio_vis)
+ xine_config_cb (0L, &audio_vis_cfg_entry);
+ if (callback)
+ firstframe = 1;
+}
+
+void KXinePlayer::stop () {
+ if (!running) return;
+ fprintf(stderr, "stop\n");
+ mutex.lock ();
+ repeat_count = 0;
+ if (sub_stream)
+ xine_stop (sub_stream);
+ xine_stop (stream);
+ mutex.unlock ();
+ QTimer::singleShot (10, this, SLOT (postFinished ()));
+}
+
+void KXinePlayer::postFinished () {
+ QApplication::postEvent (xineapp, new QEvent ((QEvent::Type) event_finished));
+}
+
+void KXinePlayer::pause () {
+ if (!running) return;
+ mutex.lock ();
+ if (xine_get_status (stream) == XINE_STATUS_PLAY) {
+ if (xine_get_param (stream, XINE_PARAM_SPEED) == XINE_SPEED_PAUSE)
+ xine_set_param (stream, XINE_PARAM_SPEED, XINE_SPEED_NORMAL);
+ else
+ xine_set_param (stream, XINE_PARAM_SPEED, XINE_SPEED_PAUSE);
+ }
+ mutex.unlock ();
+}
+
+void KXinePlayer::finished () {
+ QTimer::singleShot (10, this, SLOT (stop ()));
+}
+
+void KXinePlayer::setAudioLang (int id, const QString & al) {
+ alang = al;
+ mutex.lock ();
+ if (xine_get_status (stream) == XINE_STATUS_PLAY)
+ xine_set_param(stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL, id);
+ mutex.unlock ();
+}
+
+void KXinePlayer::setSubtitle (int id, const QString & sl) {
+ slang = sl;
+ mutex.lock ();
+ if (xine_get_status (stream) == XINE_STATUS_PLAY)
+ xine_set_param (stream, XINE_PARAM_SPU_CHANNEL, id);
+ mutex.unlock ();
+}
+
+void KXinePlayer::updatePosition () {
+ if (!running || !callback) return;
+ int pos;
+ mutex.lock ();
+ xine_get_pos_length (stream, 0, &pos, &movie_length);
+ mutex.unlock ();
+ if (movie_pos != pos) {
+ movie_pos = pos;
+ callback->moviePosition (pos/100);
+ }
+ QTimer::singleShot (500, this, SLOT (updatePosition ()));
+}
+
+void KXinePlayer::saturation (int val) {
+ movie_saturation = val;
+ if (running) {
+ mutex.lock ();
+ xine_set_param (stream, XINE_PARAM_VO_SATURATION, val);
+ mutex.unlock ();
+ }
+}
+
+void KXinePlayer::hue (int val) {
+ movie_hue = val;
+ if (running) {
+ mutex.lock ();
+ xine_set_param (stream, XINE_PARAM_VO_HUE, val);
+ mutex.unlock ();
+ }
+}
+
+void KXinePlayer::contrast (int val) {
+ movie_contrast = val;
+ if (running) {
+ mutex.lock ();
+ xine_set_param (stream, XINE_PARAM_VO_CONTRAST, val);
+ mutex.unlock ();
+ }
+}
+
+void KXinePlayer::brightness (int val) {
+ movie_brightness = val;
+ if (running) {
+ mutex.lock ();
+ xine_set_param (stream, XINE_PARAM_VO_BRIGHTNESS, val);
+ mutex.unlock ();
+ }
+}
+
+void KXinePlayer::volume (int val) {
+ movie_volume = val;
+ if (running) {
+ mutex.lock ();
+ xine_set_param( stream, XINE_PARAM_AUDIO_VOLUME, val);
+ mutex.unlock ();
+ }
+}
+
+void KXinePlayer::seek (int val) {
+ if (running) {
+ fprintf(stderr, "seek %d\n", val);
+ mutex.lock ();
+ if (!xine_play (stream, 0, val * 100)) {
+ fprintf(stderr, "Unable to seek to %d :-(\n", val);
+ }
+ mutex.unlock ();
+ }
+}
+
+bool KXinePlayer::event (QEvent * e) {
+ switch (e->type()) {
+ case event_finished: {
+ fprintf (stderr, "event_finished\n");
+ if (audio_vis) {
+ audio_vis_cfg_entry.num_value = 0;
+ xine_config_cb (0L, &audio_vis_cfg_entry);
+ }
+ mutex.lock ();
+ running = 0;
+ firstframe = 0;
+ if (sub_stream) {
+ xine_dispose (sub_stream);
+ sub_stream = 0L;
+ }
+ if (stream) {
+ xine_event_dispose_queue (event_queue);
+ xine_dispose (stream);
+ stream = 0L;
+ }
+ mutex.unlock ();
+ //XLockDisplay (display);
+ //XClearWindow (display, wid);
+ //XUnlockDisplay (display);
+ if (callback)
+ callback->finished ();
+ else
+ QTimer::singleShot (0, this, SLOT (quit ()));
+ break;
+ }
+ case event_size: {
+ if (callback) {
+ XineMovieParamEvent * se = static_cast <XineMovieParamEvent *> (e);
+ if (se->length < 0) se->length = 0;
+ callback->movieParams (se->length/100, se->width, se->height, se->height ? 1.0*se->width/se->height : 1.0, se->alang, se->slang);
+ if (se->first_frame) {
+ callback->playing ();
+ QTimer::singleShot (500, this, SLOT (updatePosition ()));
+ }
+ }
+ break;
+ }
+ case event_progress: {
+ XineProgressEvent * pe = static_cast <XineProgressEvent *> (e);
+ if (callback)
+ callback->loadingProgress (pe->progress);
+ break;
+ }
+ case event_url: {
+ XineURLEvent * ue = static_cast <XineURLEvent *> (e);
+ if (callback)
+ callback->subMrl (ue->url, QString ());
+ break;
+ }
+ case event_title: {
+ XineTitleEvent * ue = static_cast <XineTitleEvent *> (e);
+ if (callback)
+ callback->statusMessage ((int) KMPlayer::Callback::stat_newtitle, ue->title);
+ break;
+ }
+ case event_video:
+ if (callback)
+ callback->statusMessage ((int) KMPlayer::Callback::stat_hasvideo, QString ());
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+void KXinePlayer::saveState (QSessionManager & sm) {
+ if (callback)
+ sm.setRestartHint (QSessionManager::RestartNever);
+}
+
+XineMovieParamEvent::XineMovieParamEvent(int l, int w, int h, const QStringList & a, const QStringList & s, bool ff)
+ : QEvent ((QEvent::Type) event_size),
+ length (l), width (w), height (h), alang (a), slang (s) , first_frame (ff)
+{}
+
+XineURLEvent::XineURLEvent (const QString & u)
+ : QEvent ((QEvent::Type) event_url), url (u)
+{}
+
+XineTitleEvent::XineTitleEvent (const char * t)
+ : QEvent ((QEvent::Type) event_title), title (QString::fromUtf8 (t))
+{
+ QUrl::decode (title);
+}
+
+XineProgressEvent::XineProgressEvent (const int p)
+ : QEvent ((QEvent::Type) event_progress), progress (p)
+{}
+
+//static bool translateCoordinates (int wx, int wy, int mx, int my) {
+// movie_width
+class XEventThread : public QThread {
+protected:
+ void run () {
+ Time prev_click_time = 0;
+ int prev_click_x = 0;
+ int prev_click_y = 0;
+ while (true) {
+ XEvent xevent;
+ XNextEvent(display, &xevent);
+ switch(xevent.type) {
+ case ClientMessage:
+ if (xevent.xclient.message_type == quit_atom) {
+ fprintf(stderr, "request quit\n");
+ return;
+ }
+ break;
+ case KeyPress:
+ {
+ XKeyEvent kevent;
+ KeySym ksym;
+ char kbuf[256];
+ int len;
+
+ kevent = xevent.xkey;
+
+ XLockDisplay(display);
+ len = XLookupString(&kevent, kbuf, sizeof(kbuf), &ksym, NULL);
+ XUnlockDisplay(display);
+ fprintf(stderr, "keypressed 0x%x 0x%x\n", kevent.keycode, ksym);
+
+ switch (ksym) {
+
+ case XK_q:
+ case XK_Q:
+ xineapp->lock ();
+ xineapp->stop ();
+ xineapp->unlock ();
+ break;
+
+ case XK_p: // previous
+ mutex.lock ();
+ if (stream) {
+ xine_event_t xine_event = {
+ XINE_EVENT_INPUT_PREVIOUS,
+ stream, 0L, 0, { 0, 0 }
+ };
+ xine_event_send (stream, &xine_event);
+ }
+ mutex.unlock ();
+ break;
+
+ case XK_n: // next
+ mutex.lock ();
+ if (stream) {
+ xine_event_t xine_event = {
+ XINE_EVENT_INPUT_NEXT,
+ stream, 0L, 0, { 0, 0 }
+ };
+ xine_event_send (stream, &xine_event);
+ }
+ mutex.unlock ();
+ break;
+
+ case XK_u: // up menu
+ mutex.lock ();
+ if (stream) {
+ xine_event_t xine_event = {
+ XINE_EVENT_INPUT_MENU1,
+ stream, 0L, 0, { 0, 0 }
+ };
+ xine_event_send (stream, &xine_event);
+ }
+ mutex.unlock ();
+ break;
+
+ case XK_r: // root menu
+ mutex.lock ();
+ if (stream) {
+ xine_event_t xine_event = {
+ XINE_EVENT_INPUT_MENU3,
+ stream, 0L, 0, { 0, 0 }
+ };
+ xine_event_send (stream, &xine_event);
+ }
+ mutex.unlock ();
+ break;
+
+ case XK_Up:
+ xine_set_param(stream, XINE_PARAM_AUDIO_VOLUME,
+ (xine_get_param(stream, XINE_PARAM_AUDIO_VOLUME) + 1));
+ break;
+
+ case XK_Down:
+ xine_set_param(stream, XINE_PARAM_AUDIO_VOLUME,
+ (xine_get_param(stream, XINE_PARAM_AUDIO_VOLUME) - 1));
+ break;
+
+ case XK_plus:
+ xine_set_param(stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL,
+ (xine_get_param(stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL) + 1));
+ break;
+
+ case XK_minus:
+ xine_set_param(stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL,
+ (xine_get_param(stream, XINE_PARAM_AUDIO_CHANNEL_LOGICAL) - 1));
+ break;
+
+ case XK_space:
+ if(xine_get_param(stream, XINE_PARAM_SPEED) != XINE_SPEED_PAUSE)
+ xine_set_param(stream, XINE_PARAM_SPEED, XINE_SPEED_PAUSE);
+ else
+ xine_set_param(stream, XINE_PARAM_SPEED, XINE_SPEED_NORMAL);
+ break;
+
+ }
+ }
+ break;
+
+ case Expose:
+ if(xevent.xexpose.count != 0 || !stream || xevent.xexpose.window != wid)
+ break;
+ mutex.lock ();
+ xine_gui_send_vo_data(stream, XINE_GUI_SEND_EXPOSE_EVENT, &xevent);
+ mutex.unlock ();
+ break;
+
+ case ConfigureNotify:
+ {
+ Window tmp_win;
+
+ width = xevent.xconfigure.width;
+ height = xevent.xconfigure.height;
+ if((xevent.xconfigure.x == 0) && (xevent.xconfigure.y == 0)) {
+ XLockDisplay(display);
+ XTranslateCoordinates(display, xevent.xconfigure.window,
+ DefaultRootWindow(xevent.xconfigure.display),
+ 0, 0, &xpos, &ypos, &tmp_win);
+ XUnlockDisplay(display);
+ }
+ else {
+ xpos = xevent.xconfigure.x;
+ ypos = xevent.xconfigure.y;
+ }
+ }
+
+ break;
+ case MotionNotify:
+ if (stream) {
+ XMotionEvent *mev = (XMotionEvent *) &xevent;
+ x11_rectangle_t rect = { mev->x, mev->y, 0, 0 };
+ if (xine_gui_send_vo_data (stream, XINE_GUI_SEND_TRANSLATE_GUI_TO_VIDEO, (void*) &rect) == -1)
+ break;
+ xine_input_data_t data;
+ data.x = rect.x;
+ data.y = rect.y;
+ data.button = 0;
+ xine_event_t xine_event = {
+ XINE_EVENT_INPUT_MOUSE_MOVE,
+ stream, &data, sizeof (xine_input_data_t),
+ { 0 , 0 }
+ };
+ mutex.lock ();
+ xine_event_send (stream, &xine_event);
+ mutex.unlock ();
+ }
+ break;
+ case ButtonPress: {
+ XButtonEvent *bev = (XButtonEvent *) &xevent;
+ int dx = prev_click_x - bev->x;
+ int dy = prev_click_y - bev->y;
+ if (bev->time - prev_click_time < 400 &&
+ (dx * dx + dy * dy) < 25) {
+ xineapp->lock ();
+ if (callback)
+ callback->toggleFullScreen ();
+ xineapp->unlock ();
+ }
+ prev_click_time = bev->time;
+ prev_click_x = bev->x;
+ prev_click_y = bev->y;
+ if (stream) {
+ fprintf(stderr, "ButtonPress\n");
+ XButtonEvent *bev = (XButtonEvent *) &xevent;
+ x11_rectangle_t rect = { bev->x, bev->y, 0, 0 };
+ if (xine_gui_send_vo_data (stream, XINE_GUI_SEND_TRANSLATE_GUI_TO_VIDEO, (void*) &rect) == -1)
+ break;
+ xine_input_data_t data;
+ data.x = rect.x;
+ data.y = rect.y;
+ data.button = 1;
+ xine_event_t xine_event = {
+ XINE_EVENT_INPUT_MOUSE_BUTTON,
+ stream, &data, sizeof (xine_input_data_t),
+ { 0, 0 }
+ };
+ mutex.lock ();
+ xine_event_send (stream, &xine_event);
+ mutex.unlock ();
+ }
+ break;
+ }
+ case NoExpose:
+ //fprintf (stderr, "NoExpose %lu\n", xevent.xnoexpose.drawable);
+ break;
+ case CreateNotify:
+ fprintf (stderr, "CreateNotify: %lu %lu %d,%d %dx%d\n",
+ xevent.xcreatewindow.window, xevent.xcreatewindow.parent,
+ xevent.xcreatewindow.x, xevent.xcreatewindow.y,
+ xevent.xcreatewindow.width, xevent.xcreatewindow.height);
+ break;
+ case DestroyNotify:
+ fprintf (stderr, "DestroyNotify: %lu\n", xevent.xdestroywindow.window);
+ break;
+ default:
+ if (xevent.type < LASTEvent)
+ fprintf (stderr, "event %d\n", xevent.type);
+ }
+
+ if(xevent.type == completion_event && stream)
+ xine_gui_send_vo_data(stream, XINE_GUI_SEND_COMPLETION_EVENT, &xevent);
+ }
+ }
+};
+
+int main(int argc, char **argv) {
+ const char *dvd_device = 0L;
+ const char *vcd_device = 0L;
+ const char *grab_device = 0L;
+ if (!XInitThreads ()) {
+ fprintf (stderr, "XInitThreads () failed\n");
+ return 1;
+ }
+ display = XOpenDisplay(NULL);
+ screen = XDefaultScreen(display);
+ quit_atom = XInternAtom (display, "kxineplayer_quit", false);
+
+ snprintf(configfile, sizeof (configfile), "%s%s", xine_get_homedir(), "/.xine/config2");
+ xineapp = new KXinePlayer (argc, argv);
+ window_created = true;
+ QString vo_driver ("auto");
+ QString ao_driver ("auto");
+ for (int i = 1; i < argc; i++) {
+ if (!strcmp (argv [i], "-vo") && ++i < argc) {
+ vo_driver = argv [i];
+ } else if (!strcmp (argv [i], "-ao") && ++i < argc) {
+ ao_driver = argv [i];
+ } else if (!strcmp (argv [i], "-dvd-device") && ++i < argc) {
+ dvd_device = argv [i];
+ } else if (!strcmp (argv [i], "-vcd-device") && ++i < argc) {
+ vcd_device = argv [i];
+ } else if (!strcmp (argv [i], "-vd") && ++i < argc) {
+ grab_device = argv [i];
+ } else if ((!strcmp (argv [i], "-wid") ||
+ !strcmp (argv [i], "-window-id")) && ++i < argc) {
+ wid = atol (argv [i]);
+ window_created = false;
+ } else if (!strcmp (argv [i], "-root")) {
+ wid = XDefaultRootWindow (display);
+ window_created = false;
+ } else if (!strcmp (argv [i], "-window")) {
+ ;
+ } else if (!strcmp (argv [i], "-sub") && ++i < argc) {
+ sub_mrl = QString (argv [i]);
+ } else if (!strcmp (argv [i], "-lang") && ++i < argc) {
+ slang = alang = QString (argv [i]);
+ } else if (!strcmp (argv [i], "-v")) {
+ xine_verbose = true;
+ } else if (!strcmp (argv [i], "-vv")) {
+ xine_verbose = xine_vverbose = true;
+ } else if (!strcmp (argv [i], "-c")) {
+ wants_config = true;
+ } else if (!strcmp (argv [i], "-f") && ++i < argc) {
+ strncpy (configfile, argv [i], sizeof (configfile));
+ configfile[sizeof (configfile) - 1] = 0;
+ } else if (!strcmp (argv [i], "-cb") && ++i < argc) {
+ QString str = argv [i];
+ int pos = str.find ('/');
+ if (pos > -1) {
+ fprintf (stderr, "callback is %s %s\n", str.left (pos).ascii (), str.mid (pos + 1).ascii ());
+ callback = new KMPlayer::Callback_stub
+ (str.left (pos).ascii (), str.mid (pos + 1).ascii ());
+ }
+ } else if (!strcmp (argv [i], "-rec") && i < argc - 1) {
+ rec_mrl = QString::fromLocal8Bit (argv [++i]);
+ } else if (!strcmp (argv [i], "-loop") && i < argc - 1) {
+ repeat_count = atol (argv [++i]);
+ } else {
+ if (mrl.startsWith ("-session")) {
+ delete xineapp;
+ return 1;
+ }
+ mrl = QString::fromLocal8Bit (argv [i]);
+ }
+ }
+ bool config_changed = !QFile (configfile).exists ();
+
+ if (!callback && mrl.isEmpty ()) {
+ fprintf (stderr, "usage: %s [-vo (xv|xshm)] [-ao (arts|esd|..)] "
+ "[-f <xine config file>] [-dvd-device <device>] "
+ "[-vcd-device <device>] [-vd <video device>] "
+ "[-wid <X11 Window>|-window-id <X11 Window>|-root] "
+ "[-sub <subtitle url>] [-lang <lang>] [(-v|-vv)] "
+ "[-cb <DCOP callback name> [-c]] "
+ "[-loop <repeat>] [<url>]\n", argv[0]);
+ delete xineapp;
+ return 1;
+ }
+
+ XEventThread * eventThread = new XEventThread;
+ eventThread->start ();
+
+ DCOPClient dcopclient;
+ dcopclient.registerAs ("kxineplayer");
+ Backend player;
+
+ xine = xine_new();
+ if (xine_verbose)
+ xine_engine_set_param (xine, XINE_ENGINE_PARAM_VERBOSITY, xine_vverbose ? XINE_VERBOSITY_DEBUG : XINE_VERBOSITY_LOG);
+ xine_config_load(xine, configfile);
+ xine_init(xine);
+
+ xineapp->init ();
+
+ if (dvd_device)
+ config_changed |= updateConfigEntry (QString ("input.dvd_device"), QString (dvd_device));
+ if (vcd_device)
+ config_changed |= updateConfigEntry (QString ("input.vcd_device"), QString (vcd_device));
+ if (grab_device)
+ config_changed |= updateConfigEntry (QString ("media.video4linux.video_device"), QString (grab_device));
+
+ if (config_changed)
+ xine_config_save (xine, configfile);
+
+ QStringList vos = QStringList::split (',', vo_driver);
+ for (int i = 0; i < vos.size (); i++) {
+ if (vos[i] == "x11")
+ vos[i] = "xshm";
+ else if (vos[i] == "gl")
+ vos[i] = "opengl";
+ fprintf (stderr, "trying video driver %s ..\n", vos[i].ascii ());
+ vo_port = xine_open_video_driver(xine, vos[i].ascii (),
+ XINE_VISUAL_TYPE_X11, (void *) &vis);
+ if (vo_port)
+ break;
+ }
+ if (!vo_port)
+ fprintf (stderr, "no video driver found\n");
+ QStringList aos = QStringList::split (',', ao_driver);
+ for (int i = 0; i < aos.size (); i++) {
+ fprintf (stderr, "trying audio driver %s ..\n", aos[i].ascii ());
+ ao_port = xine_open_audio_driver (xine, aos[i].ascii (), NULL);
+ if (ao_port)
+ break;
+ }
+ if (!ao_port)
+ fprintf (stderr, "audio driver initialisation failed\n");
+ stream = xine_stream_new (xine, ao_port, vo_port);
+
+ QByteArray buf;
+ if (wants_config) {
+ /* TODO? Opening the output drivers in front, will add more config
+ settings. Unfortunately, that also adds a second in startup..
+ const char *const * aops = xine_list_audio_output_plugins (xine);
+ for (const char *const* aop = aops; *aop; aop++) {
+ xine_audio_port_t * ap = xine_open_audio_driver (xine, *aop, 0L);
+ xine_close_audio_driver (xine, ap);
+ fprintf (stderr, "audio output: %s\n", *aop);
+ }
+ const char *const * vops = xine_list_video_output_plugins (xine);
+ for (const char *const* vop = vops; *vop; vop++) {
+ xine_video_port_t * vp = xine_open_video_driver (xine, *vop, XINE_VISUAL_TYPE_NONE, 0L);
+ xine_close_video_driver (xine, vp);
+ fprintf (stderr, "vidio output: %s\n", *vop);
+ }*/
+ getConfigEntries (buf);
+ }
+ if (callback)
+ callback->started (dcopclient.appId (), buf);
+ else
+ ;//printf ("%s\n", QString (buf).ascii ());
+ xineapp->exec ();
+
+ if (sub_stream)
+ xine_dispose (sub_stream);
+ if (stream) {
+ xine_event_dispose_queue (event_queue);
+ xine_dispose (stream);
+ }
+ if (ao_port)
+ xine_close_audio_driver (xine, ao_port);
+ if (vo_port)
+ xine_close_video_driver (xine, vo_port);
+ XLockDisplay(display);
+ XEvent ev;
+ ev.xclient.type = ClientMessage;
+ ev.xclient.serial = 0;
+ ev.xclient.send_event = true;
+ ev.xclient.display = display;
+ ev.xclient.window = wid;
+ ev.xclient.message_type = quit_atom;
+ ev.xclient.format = 8;
+ ev.xclient.data.b[0] = 0;
+ XSendEvent (display, wid, false, StructureNotifyMask, &ev);
+ XFlush (display);
+ XUnlockDisplay(display);
+ eventThread->wait (500);
+ delete eventThread;
+
+ xineapp->stop ();
+ delete xineapp;
+
+ xine_exit (xine);
+
+ fprintf (stderr, "closing display\n");
+ XCloseDisplay (display);
+ fprintf (stderr, "done\n");
+ return 0;
+}
+
+#include "xineplayer.moc"
diff --git a/src/xineplayer.h b/src/xineplayer.h
new file mode 100644
index 0000000..fe7a785
--- /dev/null
+++ b/src/xineplayer.h
@@ -0,0 +1,79 @@
+/**
+ * Copyright (C) 2003 by Koos Vriezen <koos.vriezen@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License version 2 as published by the Free Software Foundation.
+ *
+ * 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; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ **/
+
+#ifndef _KXINEPLAYER_H_
+#define _KXINEPLAYER_H_
+
+#include <qapplication.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qsessionmanager.h>
+
+struct XineMovieParamEvent : public QEvent {
+ XineMovieParamEvent (int l, int w, int h, const QStringList & al, const QStringList & sl, bool ff=false);
+ int length;
+ int width;
+ int height;
+ QStringList alang;
+ QStringList slang;
+ bool first_frame;
+};
+
+struct XineURLEvent : public QEvent {
+ XineURLEvent (const QString & u);
+ QString url;
+};
+
+struct XineTitleEvent : public QEvent {
+ XineTitleEvent (const char *);
+ QString title;
+};
+
+struct XineProgressEvent : public QEvent {
+ XineProgressEvent (int p);
+ int progress;
+};
+
+class KXinePlayer : public QApplication {
+ Q_OBJECT
+public:
+ KXinePlayer (int argc, char ** argv);
+ ~KXinePlayer ();
+
+ void init ();
+ void finished ();
+ void saturation (int val);
+ void hue (int val);
+ void contrast (int val);
+ void brightness (int val);
+ void volume (int val);
+ void seek (int val);
+ bool event (QEvent * e);
+ void setAudioLang (int, const QString &);
+ void setSubtitle (int, const QString &);
+public slots:
+ void play (int repeat_count);
+ void stop ();
+ void pause ();
+ void updatePosition ();
+ void postFinished ();
+protected:
+ void saveState (QSessionManager & sm);
+};
+
+#endif //_KXINEPLAYER_H_
diff --git a/src/xvplayer.cpp b/src/xvplayer.cpp
new file mode 100644
index 0000000..7c773c3
--- /dev/null
+++ b/src/xvplayer.cpp
@@ -0,0 +1,704 @@
+/* This file is part of the KMPlayer application
+ Copyright (C) 2004 Koos Vriezen <koos.vriezen@xs4all.nl>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <config.h>
+#include <dcopclient.h>
+#include <qcstring.h>
+#include <qtimer.h>
+#include <qfile.h>
+#include <qurl.h>
+#include <qthread.h>
+#include <qmutex.h>
+#include <qdom.h>
+#include "kmplayer_backend.h"
+#include "kmplayer_callback_stub.h"
+#include "kmplayer_callback.h"
+#include "xvplayer.h"
+#include <X11/X.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/keysym.h>
+#include <X11/Xatom.h>
+#include <X11/Xutil.h>
+#include <X11/extensions/XShm.h>
+#include <X11/extensions/Xvlib.h>
+
+
+static char configfile[2048];
+
+static Display *display;
+static KXVideoPlayer *xvapp;
+static KMPlayer::Callback_stub * callback;
+static Window wid;
+static GC gc;
+static bool window_created = true;
+static bool wants_config;
+static bool verbose;
+static bool running;
+static bool have_freq;
+static bool xv_success;
+static bool reset_xv_autopaint_colorkey;
+static bool reset_xv_mute;
+static int xvport;
+static int xv_encoding = -1;
+static QString xv_norm;
+static int xv_frequency;
+static int screen;
+static int movie_width;
+static int movie_height;
+static int current_volume;
+static int tmp_volume;
+static const int start_vol_timeout = 100;
+static const int inc_vol_timeout = 20;
+Atom xv_enc_atom;
+Atom xv_hue_atom;
+Atom xv_saturation_atom;
+Atom xv_brightness_atom;
+Atom xv_contrast_atom;
+Atom xv_freq_atom;
+Atom xv_volume_atom;
+Atom xv_mute_atom;
+Atom xv_autopaint_colorkey_atom;
+enum {
+ limit_volume = 0,
+ limit_hue, limit_contrast, limit_brightness, limit_saturation,
+ limit_last
+};
+static struct Limit { int min; int max; } xv_limits [limit_last];
+static QString elmentry ("entry");
+static QString elmitem ("item");
+static QString attname ("name");
+static QString atttype ("type");
+static QString attdefault ("DEFAULT");
+static QString attvalue ("value");
+//static QString attstart ("START");
+//static QString attend ("END");
+//static QString valrange ("range");
+//static QString valnum ("num");
+//static QString valbool ("bool");
+//static QString valenum ("enum");
+//static QString valstring ("string");
+static QString valtree ("tree");
+static QByteArray config_buf;
+
+extern "C" {
+
+} // extern "C"
+
+static void putVideo () {
+ XWindowAttributes attr;
+ XGetWindowAttributes (display, wid, &attr);
+ XvPutVideo (display, xvport, wid, gc, 0, 0, attr.width, attr.height, 0, 0, attr.width, attr.height);
+}
+
+using namespace KMPlayer;
+
+Backend::Backend ()
+ : DCOPObject (QCString ("Backend")) {
+}
+
+Backend::~Backend () {}
+
+void Backend::setURL (QString) {
+}
+
+void Backend::setSubTitleURL (QString) {
+}
+
+void Backend::play (int) {
+ xvapp->play ();
+}
+
+void Backend::stop () {
+ QTimer::singleShot (0, xvapp, SLOT (stop ()));
+}
+
+void Backend::pause () {
+}
+
+void Backend::seek (int, bool /*absolute*/) {
+}
+
+void Backend::hue (int h, bool) {
+ if (xv_limits[limit_hue].max > xv_limits[limit_hue].min)
+ xvapp->hue ((h + 100) * (xv_limits[limit_hue].max - xv_limits[limit_hue].min)/200 + xv_limits[limit_hue].min);
+}
+
+void Backend::saturation (int s, bool) {
+ if (xv_limits[limit_saturation].max > xv_limits[limit_saturation].min)
+ xvapp->saturation ((s + 100) * (xv_limits[limit_saturation].max - xv_limits[limit_saturation].min)/200 + xv_limits[limit_saturation].min);
+}
+
+void Backend::contrast (int c, bool) {
+ if (xv_limits[limit_contrast].max > xv_limits[limit_contrast].min)
+ xvapp->contrast ((c + 100)*(xv_limits[limit_contrast].max - xv_limits[limit_contrast].min)/200 + xv_limits[limit_contrast].min);
+}
+
+void Backend::brightness (int b, bool) {
+ if (xv_limits[limit_brightness].max > xv_limits[limit_brightness].min)
+ xvapp->brightness ((b + 100)*(xv_limits[limit_brightness].max - xv_limits[limit_brightness].min)/200 + xv_limits[limit_brightness].min);
+}
+
+void Backend::volume (int v, bool) {
+ if (xv_limits[limit_volume].max > xv_limits[limit_volume].min)
+ xvapp->volume (v*(xv_limits[limit_volume].max - xv_limits[limit_volume].min)/100 + xv_limits[limit_volume].min);
+}
+
+void Backend::frequency (int f) {
+ xvapp->frequency (f);
+}
+
+void Backend::setAudioLang (int, QString) {
+}
+
+void Backend::setSubtitle (int, QString) {
+}
+
+void Backend::quit () {
+ delete callback;
+ callback = 0L;
+ if (running)
+ stop ();
+ else
+ QTimer::singleShot (0, qApp, SLOT (quit ()));
+}
+
+bool updateConfigEntry (const QString & name, const QString & value) {
+ fprintf (stderr, "%s=%s\n", name.ascii (), (const char *) value.local8Bit ());
+ return true;
+}
+
+void Backend::setConfig (QByteArray data) {
+ QString err;
+ int line, column;
+ QDomDocument dom;
+ if (dom.setContent (data, false, &err, &line, &column)) {
+ if (dom.childNodes().length() == 1) {
+ for (QDomNode node = dom.firstChild().firstChild();
+ !node.isNull ();
+ node = node.nextSibling ()) {
+ QDomNamedNodeMap attr = node.attributes ();
+ updateConfigEntry (attr.namedItem (attname).nodeValue (),
+ attr.namedItem (attvalue).nodeValue ());
+ }
+ } else
+ err = QString ("invalid data");
+ }
+ if (callback)
+ callback->errorMessage (0, err);
+}
+
+bool Backend::isPlaying () {
+ return running;
+}
+
+KXVideoPlayer::KXVideoPlayer (int _argc, char ** _argv)
+ : QApplication (_argc, _argv, false), mute_timer (0) {
+}
+
+void KXVideoPlayer::init () {
+ int xpos = 0;
+ int ypos = 0;
+ int width = 320;
+ int height = 200;
+
+ XLockDisplay(display);
+ if (window_created)
+ wid = XCreateSimpleWindow(display, XDefaultRootWindow(display),
+ xpos, ypos, width, height, 1, 0, 0);
+ if (!callback)
+ QTimer::singleShot (10, this, SLOT (play ()));
+ XSelectInput (display, wid,
+ (PointerMotionMask | ExposureMask | KeyPressMask | ButtonPressMask | StructureNotifyMask)); // | SubstructureNotifyMask));
+ XvAdaptorInfo * ai;
+ unsigned int adaptors;
+ xv_success = true;
+ QDomDocument doc;
+ QDomElement root = doc.createElement (QString ("document"));
+ if (XvQueryAdaptors (display, XDefaultRootWindow (display), &adaptors, &ai) == Success) {
+ QDomElement elm = doc.createElement (elmentry);
+ elm.setAttribute (attname, QString ("XVideo"));
+ elm.setAttribute (atttype, valtree);
+ for (unsigned i = 0; i < adaptors; i++) {
+ if ((ai[i].type & XvInputMask) &&
+ (ai[i].type & XvVideoMask) &&
+ ai[i].base_id > 0) {
+ int port = ai[i].base_id;
+ fprintf (stderr, "xvport %d\n", port);
+ bool freq_found = false;
+ XvAttribute *attributes = 0L;
+ int nr_attr, cur_val;
+ attributes = XvQueryPortAttributes (display, port, &nr_attr);
+ if (attributes) {
+ for (int i = 0; i < nr_attr; i++) {
+ if (!strcmp (attributes[i].name, "XV_FREQ"))
+ freq_found = true;
+ Atom atom = XInternAtom (display, attributes[i].name, false);
+ fprintf (stderr, "%s[%d] (%d .. %d)", attributes[i].name, ( int ) atom, attributes[i].min_value, attributes[i].max_value);
+ if ((attributes[i].flags & XvGettable) && XvGetPortAttribute (display, port, atom, &cur_val) == Success)
+ fprintf (stderr, " current: %d", cur_val);
+ fprintf (stderr, "\n");
+ }
+ XFree(attributes);
+ }
+ if (!xvport && ((xv_frequency > 0) == freq_found)) {
+ fprintf (stderr, "using xvport %d\n", port);
+ xvport = port;
+ }
+ if (xvport == port)
+ have_freq = freq_found;
+ XvEncodingInfo * encodings = 0L;
+ unsigned nr_encode;
+ XvQueryEncodings (display, port, &nr_encode, &encodings);
+ if (encodings) {
+ QDomElement port_item = doc.createElement (QString("Port"));
+ port_item.setAttribute (attvalue, QString::number (port));
+ if (freq_found)
+ port_item.setAttribute (QString("FREQ"), QString("1"));
+ for (unsigned i = 0; i < nr_encode; i++) {
+ if (strcmp (encodings[i].name, "XV_IMAGE")) {
+ if (xvport == port && xv_encoding < 0 && !xv_norm.isEmpty () && QString (encodings[i].name).lower ().startsWith(xv_norm.lower ()))
+ xv_encoding = encodings[i].encoding_id;
+ if (port == xvport && encodings[i].encoding_id == xv_encoding) {
+ movie_width = encodings[i].width;
+ movie_height = encodings[i].height;
+ }
+ QDomElement item = doc.createElement (QString ("Input"));
+ item.setAttribute (attvalue, QString::number (encodings[i].encoding_id));
+ item.setAttribute (attname, QString (encodings[i].name));
+ port_item.appendChild (item);
+ fprintf (stderr, " encoding: %d %s\n", ( int ) encodings[i].encoding_id, encodings[i].name);
+ }
+ }
+ elm.appendChild (port_item);
+ XvFreeEncodingInfo (encodings);
+ }
+ }
+ }
+ root.appendChild (elm);
+ XvFreeAdaptorInfo(ai);
+ }
+ doc.appendChild (root);
+ QCString exp = doc.toCString ();
+ config_buf = exp;
+ //fprintf (stderr, "%s\n", (const char *)exp);
+ config_buf.resize (exp.length ()); // strip terminating \0
+
+ if (xvport <= 0) {
+ fprintf (stderr, "no valid xvport found\n");
+ xv_success = false;
+ return;
+ }
+ if (window_created) {
+ fprintf (stderr, "map %lu\n", wid);
+ if (movie_width > 0 && movie_height > 0)
+ XResizeWindow (display, wid, movie_width, movie_height);
+ XMapRaised(display, wid);
+ XSync(display, False);
+ }
+ XUnlockDisplay(display);
+ if (!xv_success)
+ fprintf (stderr, "Failed to init %d port\n", xvport);
+}
+
+KXVideoPlayer::~KXVideoPlayer () {
+ if (window_created) {
+ XLockDisplay (display);
+ fprintf (stderr, "unmap %lu\n", wid);
+ XUnmapWindow (display, wid);
+ XDestroyWindow(display, wid);
+ XSync (display, False);
+ XUnlockDisplay (display);
+ }
+ xvapp = 0L;
+}
+
+void getConfigEntries (QByteArray & buf) {
+ QDomDocument doc;
+ QDomElement root = doc.createElement (QString ("document"));
+ doc.appendChild (root);
+ QCString exp = doc.toCString ();
+ buf = exp;
+ buf.resize (exp.length ()); // strip terminating \0
+}
+
+void KXVideoPlayer::play () {
+ fprintf (stderr, "play xv://%d:%d/%d\n", xvport, xv_encoding, xv_frequency);
+ if (!xv_success)
+ return;
+ if (callback && movie_width > 0 && movie_height > 0)
+ callback->movieParams (0, movie_width, movie_height, 1.0*movie_width/movie_height, QStringList (), QStringList ());
+ XLockDisplay (display);
+ if (!running && XvGrabPort (display, xvport, CurrentTime) == Success) {
+ gc = XCreateGC (display, wid, 0, NULL);
+ XvSelectPortNotify (display, xvport, 1);
+ XvSelectVideoNotify (display, wid, 1);
+ int nr, cur_val;
+ if (XvGetPortAttribute (display, xvport, xv_autopaint_colorkey_atom, &cur_val) == Success && cur_val == 0) {
+ fprintf (stderr, "XV_AUTOPAINT_COLORKEY is 0\n");
+ XvSetPortAttribute (display, xvport, xv_autopaint_colorkey_atom, 1);
+ reset_xv_autopaint_colorkey = true;
+ }
+ XvAttribute *attributes = XvQueryPortAttributes (display, xvport, &nr);
+ if (attributes) {
+ for (int i = 0; i < nr; i++) {
+ Limit * limit = 0;
+ Atom atom = XInternAtom (display, attributes[i].name, false);
+ if (atom == xv_volume_atom) {
+ limit = xv_limits + limit_volume;
+ XvGetPortAttribute (display, xvport,
+ xv_volume_atom, &current_volume);
+ } else if (atom == xv_hue_atom) {
+ limit = xv_limits + limit_hue;
+ } else if (atom == xv_saturation_atom) {
+ limit = xv_limits + limit_saturation;
+ } else if (atom == xv_brightness_atom) {
+ limit = xv_limits + limit_brightness;
+ } else if (atom == xv_contrast_atom) {
+ limit = xv_limits + limit_contrast;
+ } else
+ continue;
+ limit->min = attributes[i].min_value;
+ limit->max = attributes[i].max_value;
+ }
+ XFree (attributes);
+ }
+ if (xv_frequency > 0)
+ XvSetPortAttribute (display, xvport, xv_freq_atom, int (1.0*xv_frequency/62.5));
+ if (xv_encoding >= 0)
+ XvSetPortAttribute (display, xvport, xv_enc_atom, xv_encoding);
+ if (XvGetPortAttribute (display, xvport, xv_mute_atom, &cur_val) ==
+ Success && cur_val == 1) {
+ fprintf (stderr, "XV_MUTE is 1\n");
+ if (xv_limits[limit_volume].min != xv_limits[limit_volume].max) {
+ tmp_volume = xv_limits[limit_volume].min;
+ XvSetPortAttribute(display, xvport, xv_volume_atom, tmp_volume);
+ mute_timer = startTimer (start_vol_timeout);
+ }
+ XvSetPortAttribute (display, xvport, xv_mute_atom, 0);
+ reset_xv_mute = true;
+ }
+ //XvGetVideo (..
+ running = true;
+ }
+ if (running) {
+ putVideo ();
+ if (callback) {
+ callback->playing ();
+ callback->statusMessage ((int) KMPlayer::Callback::stat_hasvideo, QString ());
+ }
+ }
+ XUnlockDisplay (display);
+}
+
+void KXVideoPlayer::stop () {
+ if (mute_timer) {
+ killTimer (mute_timer);
+ mute_timer = 0;
+ }
+ if (running) {
+ running = false;
+ XLockDisplay (display);
+ XvStopVideo (display, xvport, wid);
+ if (reset_xv_autopaint_colorkey) {
+ XvSetPortAttribute (display, xvport, xv_autopaint_colorkey_atom, 0);
+ reset_xv_autopaint_colorkey = false;
+ }
+ if (reset_xv_mute) {
+ XvSetPortAttribute (display, xvport, xv_mute_atom, 1);
+ reset_xv_mute = false;
+ }
+ XvUngrabPort (display, xvport, CurrentTime);
+ XFreeGC (display, gc);
+ XClearArea (display, wid, 0, 0, 0, 0, true);
+ XUnlockDisplay (display);
+ }
+ if (callback)
+ callback->finished ();
+ else
+ QTimer::singleShot (0, qApp, SLOT (quit ()));
+}
+
+void KXVideoPlayer::finished () {
+ QTimer::singleShot (10, this, SLOT (stop ()));
+}
+
+void KXVideoPlayer::saturation (int val) {
+ XLockDisplay(display);
+ XvSetPortAttribute (display, xvport, xv_saturation_atom, val);
+ XFlush (display);
+ XUnlockDisplay(display);
+}
+
+void KXVideoPlayer::hue (int val) {
+ XLockDisplay(display);
+ XvSetPortAttribute (display, xvport, xv_hue_atom, val);
+ XFlush (display);
+ XUnlockDisplay(display);
+}
+
+void KXVideoPlayer::contrast (int val) {
+ XLockDisplay(display);
+ XvSetPortAttribute (display, xvport, xv_contrast_atom, val);
+ XFlush (display);
+ XUnlockDisplay(display);
+}
+
+void KXVideoPlayer::brightness (int val) {
+ XLockDisplay(display);
+ XvSetPortAttribute (display, xvport, xv_brightness_atom, val);
+ XFlush (display);
+ XUnlockDisplay(display);
+}
+
+void KXVideoPlayer::volume (int val) {
+ current_volume = val;
+ if (mute_timer)
+ return;
+ XLockDisplay(display);
+ XvSetPortAttribute (display, xvport, xv_volume_atom, val);
+ XFlush (display);
+ XUnlockDisplay(display);
+}
+
+void KXVideoPlayer::frequency (int val) {
+ // this doesn't work, changing frequency kills audio for me
+ if (mute_timer) {
+ killTimer (mute_timer);
+ mute_timer = 0;
+ }
+ xv_frequency = val;
+ if (running && have_freq) {
+ XLockDisplay(display);
+ if (xv_limits[limit_volume].min != xv_limits[limit_volume].max) {
+ tmp_volume = xv_limits[limit_volume].min;
+ XvSetPortAttribute (display, xvport, xv_volume_atom, tmp_volume);
+ mute_timer = startTimer (start_vol_timeout);
+ XFlush (display);
+ XvSetPortAttribute (display, xvport, xv_mute_atom, 0);
+ }
+ XvSetPortAttribute (display, xvport, xv_freq_atom, int (1.0*val/6.25));
+ XFlush (display);
+ XUnlockDisplay(display);
+ }
+}
+
+void KXVideoPlayer::saveState (QSessionManager & sm) {
+ if (callback)
+ sm.setRestartHint (QSessionManager::RestartNever);
+}
+
+void KXVideoPlayer::timerEvent (QTimerEvent * e) {
+ if (e->timerId () == mute_timer) {
+ int step = (current_volume - xv_limits[limit_volume].min) / 20;
+ if (step > 0 && tmp_volume == xv_limits[limit_volume].min) {
+ killTimer (mute_timer);
+ mute_timer = startTimer (inc_vol_timeout);
+ }
+ tmp_volume += step;
+ if (tmp_volume >= current_volume || step <= 0) {
+ tmp_volume = current_volume;
+ killTimer (mute_timer);
+ mute_timer = 0;
+ }
+ XLockDisplay(display);
+ XvSetPortAttribute (display, xvport, xv_volume_atom, tmp_volume);
+ XFlush (display);
+ XUnlockDisplay(display);
+ } else
+ killTimer (e->timerId ());
+}
+
+class XEventThread : public QThread {
+protected:
+ void run () {
+ Time prev_click_time = 0;
+ int prev_click_x = 0;
+ int prev_click_y = 0;
+ while (true) {
+ XEvent xevent;
+ XNextEvent(display, &xevent);
+ switch(xevent.type) {
+ case ClientMessage:
+ if (xevent.xclient.format == 8 &&
+ !strncmp(xevent.xclient.data.b, "quit_now", 8)) {
+ fprintf(stderr, "request quit\n");
+ return;
+ }
+ break;
+ case KeyPress: {
+ XKeyEvent kevent;
+ KeySym ksym;
+ char kbuf[256];
+ int len;
+ kevent = xevent.xkey;
+ XLockDisplay(display);
+ len = XLookupString(&kevent, kbuf, sizeof(kbuf), &ksym, NULL);
+ XUnlockDisplay(display);
+ fprintf(stderr, "keypressed 0x%x 0x%x\n", ( int ) kevent.keycode, ( int ) ksym);
+ switch (ksym) {
+ case XK_q:
+ case XK_Q:
+ xvapp->lock ();
+ xvapp->stop ();
+ xvapp->unlock ();
+ break;
+ }
+ break;
+ }
+ case Expose:
+ if(xevent.xexpose.count != 0 || xevent.xexpose.window != wid)
+ break;
+ break;
+
+ case ConfigureNotify:
+ if (::running)
+ putVideo ();
+ break;
+ case XvVideoNotify:
+ fprintf (stderr, "xvevent %lu\n", ((XvEvent*)&xevent)->xvvideo.reason);
+ break;
+ case ButtonPress: {
+ XButtonEvent *bev = (XButtonEvent *) &xevent;
+ int dx = prev_click_x - bev->x;
+ int dy = prev_click_y - bev->y;
+ if (bev->time - prev_click_time < 400 &&
+ (dx * dx + dy * dy) < 25) {
+ xvapp->lock ();
+ if (callback)
+ callback->toggleFullScreen ();
+ xvapp->unlock ();
+ }
+ prev_click_time = bev->time;
+ prev_click_x = bev->x;
+ prev_click_y = bev->y;
+ break;
+ }
+ default:
+ if (xevent.type < LASTEvent) {
+ //fprintf (stderr, "event %d\n", xevent.type);
+ }
+ }
+ }
+ }
+};
+
+int main(int argc, char **argv) {
+ if (!XInitThreads ()) {
+ fprintf (stderr, "XInitThreads () failed\n");
+ return 1;
+ }
+ display = XOpenDisplay(NULL);
+ screen = XDefaultScreen(display);
+
+ unsigned int ver, rel, req, evb, err;
+ if (XvQueryExtension (display, &ver, &rel, &req, &evb, &err) != Success) {
+ fprintf (stderr, "XVideo not supported on display\n");
+ XCloseDisplay (display);
+ return 1;
+ }
+ xv_enc_atom = XInternAtom (display, "XV_ENCODING", false);
+ xv_hue_atom = XInternAtom (display, "XV_HUE", false);
+ xv_saturation_atom = XInternAtom (display, "XV_SATURATION", false);
+ xv_brightness_atom = XInternAtom (display, "XV_BRIGHTNESS", false);
+ xv_contrast_atom = XInternAtom (display, "XV_CONTRAST", false);
+ xv_freq_atom = XInternAtom (display, "XV_FREQ", false);
+ xv_volume_atom = XInternAtom (display, "XV_VOLUME", false);
+ xv_mute_atom = XInternAtom (display, "XV_MUTE", false);
+ xv_autopaint_colorkey_atom = XInternAtom (display, "XV_AUTOPAINT_COLORKEY", false);
+
+ xvapp = new KXVideoPlayer (argc, argv);
+
+ for(int i = 1; i < argc; i++) {
+ if (!strcmp (argv [i], "-port")) {
+ xvport = strtol (argv [++i], 0L, 10);
+ } else if (!strcmp (argv [i], "-wid") || !strcmp (argv [i], "-window-id")) {
+ wid = atol (argv [++i]);
+ window_created = false;
+ } else if (!strcmp (argv [i], "-root")) {
+ wid = XDefaultRootWindow (display);
+ window_created = false;
+ } else if (!strcmp (argv [i], "-window")) {
+ ;
+ } else if (!strcmp (argv [i], "-v")) {
+ verbose = true;
+ } else if (!strcmp (argv [i], "-c")) {
+ wants_config = true;
+ } else if (!strcmp (argv [i], "-f") && i < argc - 1) {
+ strncpy (configfile, argv [++i], sizeof (configfile));
+ configfile[sizeof (configfile) - 1] = 0;
+ } else if (!strcmp (argv [i], "-cb")) {
+ QString str = argv [++i];
+ int pos = str.find ('/');
+ if (pos > -1) {
+ fprintf (stderr, "callback is %s %s\n", str.left (pos).ascii (), str.mid (pos + 1).ascii ());
+ callback = new KMPlayer::Callback_stub
+ (str.left (pos).ascii (), str.mid (pos + 1).ascii ());
+ }
+ } else if (!strcmp (argv [i], "-enc")) {
+ xv_encoding = strtol (argv [++i], 0L, 10);
+ } else if (!strcmp (argv [i], "-norm")) {
+ xv_norm = argv [++i];
+ } else if (!strcmp (argv [i], "-freq")) {
+ xv_frequency = strtol (argv [++i], 0L, 10);
+ } else {
+ fprintf (stderr, "usage: %s [-port <xv port>] [-enc <encoding>] [-freq <frequency>] [-f <config file>] [-v] [(-wid|-window-id) <window>] [(-root|-window)] [-cb <DCOP callback name> [-c]]\n", argv[0]);
+ delete xvapp;
+ return 1;
+ }
+ }
+
+ DCOPClient dcopclient;
+ dcopclient.registerAs ("kxvideoplayer");
+ Backend player;
+
+ XEventThread * eventThread = new XEventThread;
+ eventThread->start ();
+
+ xvapp->init ();
+
+ if (callback)
+ callback->started (dcopclient.appId (), config_buf);
+
+ xvapp->exec ();
+
+ XLockDisplay(display);
+ XClientMessageEvent ev = {
+ ClientMessage, 0, true, display, wid,
+ XInternAtom (display, "XVIDEO", false), 8, {"quit_now"}
+ };
+ XSendEvent (display, wid, false, StructureNotifyMask, (XEvent *) & ev);
+ XFlush (display);
+ XUnlockDisplay(display);
+ eventThread->wait (500);
+ delete eventThread;
+
+ xvapp->stop ();
+ delete xvapp;
+
+ fprintf (stderr, "closing display\n");
+ XCloseDisplay (display);
+ fprintf (stderr, "done\n");
+ return 0;
+}
+
+#include "xvplayer.moc"
diff --git a/src/xvplayer.h b/src/xvplayer.h
new file mode 100644
index 0000000..9782fc6
--- /dev/null
+++ b/src/xvplayer.h
@@ -0,0 +1,56 @@
+/* This file is part of the KMPlayer application
+ Copyright (C) 2004 Koos Vriezen <koos.vriezen@xs4all.nl>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef _K_XV_PLAYER_H_
+#define _K_XV_PLAYER_H_
+
+#include <qapplication.h>
+#include <qstring.h>
+#include <qsessionmanager.h>
+
+class KXVideoPlayer : public QApplication {
+ Q_OBJECT
+public:
+ KXVideoPlayer (int argc, char ** argv);
+ ~KXVideoPlayer ();
+
+ void init ();
+ void finished ();
+ void saturation (int val);
+ void hue (int val);
+ void contrast (int val);
+ void brightness (int val);
+ void volume (int val);
+ void frequency (int val);
+ //void seek (int val);
+ //bool event (QEvent * e);
+public slots:
+ void play ();
+ void stop ();
+ //void pause ();
+ //void updatePosition ();
+ //void postFinished ();
+protected:
+ void saveState (QSessionManager & sm);
+ void timerEvent (QTimerEvent *);
+private:
+ int mute_timer;
+};
+
+#endif //_K_XV_PLAYER_H_
diff --git a/stamp-h.in b/stamp-h.in
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/stamp-h.in
diff --git a/subdirs b/subdirs
new file mode 100644
index 0000000..147dbf6
--- /dev/null
+++ b/subdirs
@@ -0,0 +1,6 @@
+doc
+icons
+mimetypes
+po
+protocols
+src
diff --git a/tests/animate.smil b/tests/animate.smil
new file mode 100644
index 0000000..df4a330
--- /dev/null
+++ b/tests/animate.smil
@@ -0,0 +1,107 @@
+<!-- test for moving a region with the animate element -->
+<smil>
+ <head>
+ <layout>
+ <root-layout width="400" height="300" background-color="green"/>
+ <region id="region1" left="5%" top="10%" right="5%" bottom="10%"/>
+ <region id="region2" left="5%" top="10%" width="20%" height="20%"
+ background-color="yellow" showBackground="whenActive"/>
+ <region id="regimg1"/>
+ </layout>
+ <transition id="fade1" dur="1" type="fade"/>
+ </head>
+ <body>
+ <par>
+ <img dur="40" id="img" src="../icons/hi48-app-kmplayer.png"
+ region="regimg1" left="25" top="10" rn:mediaOpacity="40%"
+ transIn="fade1" transOut="fade1"/>
+ <animateMotion target="img" dur="20" calcMode="spline" repeat="1"
+ values="25,10;300,45;25,85;300,125;25,165;300,205;25,80;25,10"
+ keyTimes="0;.1;.2;.4;.6;.8;.9;1"
+ keySplines=".5 0 .5 1;0 .75 .25 1;0 .75 .25 1;.5 0 .5 1;.5 0 .5 1;0 .75 .25 1;.5 0 .5 1"/>
+ <par begin="2">
+ <img dur="40" id="img2" src="../icons/hi48-app-kmplayer.png"
+ region="regimg1" left="25" top="10" rn:mediaOpacity="40%"
+ transIn="fade1" transOut="fade1"/>
+ <animateMotion target="img2" dur="20" calcMode="spline" repeat="1"
+ values="25,10;300,45;25,85;300,125;25,165;300,205;25,80;25,10"
+ keyTimes="0;.1;.2;.4;.6;.8;.9;1"
+ keySplines=".5 0 .5 1;0 .75 .25 1;0 .75 .25 1;.5 0 .5 1;.5 0 .5 1;0 .75 .25 1;.5 0 .5 1"/>
+ </par>
+ <par begin="4">
+ <img dur="40" id="img3" src="../icons/hi48-app-kmplayer.png"
+ region="regimg1" left="25" top="10" rn:mediaOpacity="40%"
+ transIn="fade1" transOut="fade1"/>
+ <animateMotion target="img3" dur="20" calcMode="spline" repeat="1"
+ values="25,10;300,45;25,85;300,125;25,165;300,205;25,80;25,10"
+ keyTimes="0;.1;.2;.4;.6;.8;.9;1"
+ keySplines=".5 0 .5 1;0 .75 .25 1;0 .75 .25 1;.5 0 .5 1;.5 0 .5 1;0 .75 .25 1;.5 0 .5 1"/>
+ </par>
+ <seq>
+ <par>
+ <text id="text1" src="data:,8,8%20animateMotion%20by%2032x32%20and%20back"
+ region="region1" left="8" top="8" dur="5"/>
+ <animateMotion target="text1" begin="1" dur=".5" by="32,32"/>
+ <animateMotion target="text1" begin="3" dur=".5" by="-32,-32"/>
+ </par>
+ <par>
+ <text id="text2" src="data:,20%25,75%25%0AanimateMotion%0Ato%2040%25,20%25%0Aback%20to%20150,20"
+ region="region1" left="20%" top="75%" dur="5"/>
+ <animateMotion target="text2" begin="1" dur=".5" to="40%,20%"/>
+ <animateMotion target="text2" begin="3" dur=".5" to="150,20"/>
+ </par>
+ <par>
+ <text id="text3" src="data:,8,8%0AanimateMotion%0Afrom%2040%25,20%25%0Aby%2040%25,-20%25"
+ region="region1" left="8" top="8" dur="3"/>
+ <animateMotion target="text3" begin="1" dur=".5"
+ from="20%,75%" by="40%,-20%"/>
+ </par>
+ <par>
+ <text id="text4" src="data:,8,8%0AanimateMotion%0Afrom%2010,150%0Ato%20150,10"
+ region="region1" left="8" top="8" dur="3"/>
+ <animateMotion target="text4" begin="1" dur=".5"
+ from="10,150" to="150,10"/>
+ </par>
+ <par>
+ <text id="text6" src="data:,lineair%20animateMotion%0Avalues%2020,20;150,5;160,160"
+ region="region1" left="8" top="8" dur="5"/>
+ <animateMotion target="text6" begin="2" dur="2"
+ values="20,20;150,5;160,170"/>
+ </par>
+ <par>
+ <text id="text7" src="data:,lineair%20animateMotion%0Avalues%2020,20;160,35;140,160%0AkeyTimes0;0.8;1"
+ region="region1" left="8" top="8" dur="5"/>
+ <animateMotion target="text7" begin="2" dur="2"
+ values="20,20;160,35;140,160" keyTimes="0;0.8;1"/>
+ </par>
+ <par>
+ <text id="text8" src="data:,spline%20animateMotion%0Avalues%2020,20;160,35;140,160%0AkeyTimes0;0.5;1%0AkeySplines%20.5%200%20.5%201;0%20.75%20.25%201"
+ region="region1" left="8" top="8" dur="5"/>
+ <animateMotion target="text8" begin="1" dur="3" calcMode="spline"
+ values="20,20;160,35;140,160"
+ keyTimes="0;0.5;1"
+ keySplines=".5 0 .5 1;0 .75 .25 1"/>
+ </par>
+ <par>
+ <text id="text9" src="data:,discrete%20animateMotion%0Avalues%2020,20;160,35;140,160%0AkeyTimes0;0.5;1"
+ region="region1" left="8" top="8" dur="5"/>
+ <animateMotion target="text9" begin="1" dur="3" calcMode="discrete"
+ values="20,20;160,35;140,160"
+ keyTimes="0;0.5;1"/>
+ </par>
+ <par>
+ <text regPoint="center" regAlign="center" id="text5" src="data:,animateMotion%20on%20region"
+ region="region2" dur="10"/>
+ <animateMotion target="region2" begin="1" dur="2" calcMode="spline"
+ from="5%,10%" to="55%, 15%" keySplines=".5 0 .5 1"/>
+ <animateMotion target="region2" begin="3" dur="2" calcMode="spline"
+ to="65%,60%" keySplines=".5 0 .5 1"/>
+ <animateMotion target="region2" begin="5" dur="2" calcMode="spline"
+ by="-45%,10%" keySplines=".5 0 .5 1"/>
+ <animateMotion target="region2" begin="7" dur="2" calcMode="spline"
+ from="20%,70%" by="-15%,-60%" keySplines="1 0 0 1"/>
+ </par>
+ </seq>
+ </par>
+ </body>
+</smil>
diff --git a/tests/controls.html b/tests/controls.html
new file mode 100644
index 0000000..c18bcc5
--- /dev/null
+++ b/tests/controls.html
@@ -0,0 +1,29 @@
+<html>
+ <body>
+ <table>
+ <tr>
+ <td COLSPAN=2>
+ <embed SRC="excl_timings.smil" TYPE="audio/x-pn-realaudio" WIDTH=320 HEIGHT=240 CONTROLS=ImageWindow CONSOLE=one AUTOSTART=true></embed>
+ </td>
+ <td>
+ <embed WIDTH=240 HEIGHT=240 TYPE="audio/x-pn-realaudio" CONTROLS=PlayList CONSOLE=one AUTOSTART=true></embed>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <embed WIDTH=160 HEIGHT=16 TYPE="audio/x-pn-realaudio" CONTROLS=PlayButton CONSOLE=one AUTOSTART=true></embed>
+ </td>
+ <td>
+ <embed WIDTH=160 HEIGHT=16 TYPE="audio/x-pn-realaudio" CONTROLS=VolumeSlider CONSOLE=one AUTOSTART=true></embed>
+ </td>
+ <td>
+ <embed WIDTH=240 HEIGHT=55 TYPE="audio/x-pn-realaudio" CONTROLS=InfoPanel CONSOLE=one AUTOSTART=true></embed>
+ </td>
+ </tr>
+ <tr>
+ <td COLSPAN=3>
+ <embed WIDTH=560 HEIGHT=16 TYPE="audio/x-pn-realaudio" CONTROLS=StatusBar CONSOLE=one AUTOSTART=true></embed>
+ </table>
+ <embed SRC="img_scale.smil" WIDTH=320 HEIGHT=240 TYPE="audio/x-pn-realaudio" CONTROLS=All CONSOLE=two AUTOSTART=true></embed>
+ </body>
+</html>
diff --git a/tests/excl_timings.smil b/tests/excl_timings.smil
new file mode 100644
index 0000000..5e8f66e
--- /dev/null
+++ b/tests/excl_timings.smil
@@ -0,0 +1,84 @@
+<smil>
+ <head>
+ <meta name="title" content="excl group test"/>
+ <layout>
+ <root-layout width="320" height="240" background-color="yellow"/>
+ <region id="reg_but1" left="5" top="15" width="80" height="30" background-color="red"/>
+ <region id="reg_but2" left="5" top="55" width="80" height="30" background-color="red"/>
+ <region id="reg_but3" left="5" top="95" width="80" height="30" background-color="red"/>
+ <region left="5" top="135" width="80" height="40">
+ <region id="reg_text" left="5" top="0" width="70" height="18""/>
+ <region id="reg_ext" left="5" top="22" width="30" height="18""/>
+ <region id="reg_int" left="45" top="22" width="30" height="18"/>
+ </region>
+ <region id="reg_but4" left="5" top="185" width="80" height="30" background-color="red"/>
+ <region left="95" top="15" width="210" height="210" background-color="blue">
+ <region id="reg_img" left="5" top="5" width="64" height="24" background-color="orange"/>
+ </region>
+ </layout>
+ </head>
+ <body>
+ <par end="but4.activateEvent">
+ <text src="data:,Horizontal" id="but1" region="reg_but1" fill="freeze">
+ <param name="fontColor" value="yellow"/>
+ <param name="fontSize" value="+1"/>
+ <param name="backgroundColor" value="blue"/>
+ </text>
+ <set targetElement="but1" attributeName="backgroundColor" to="red" begin="but1.activateEvent" dur="0.1"/>
+ <text src="data:,Vertical" id="but2" region="reg_but2" fill="freeze">
+ <param name="fontColor" value="yellow"/>
+ <param name="fontSize" value="+1"/>
+ <param name="backgroundColor" value="blue"/>
+ </text>
+ <set targetElement="but2" attributeName="backgroundColor" to="red" begin="but2.activateEvent" dur="0.1"/>
+ <text src="data:,Diagonal" id="but3" region="reg_but3" fill="freeze">
+ <param name="fontColor" value="yellow"/>
+ <param name="fontSize" value="+1"/>
+ <param name="backgroundColor" value="blue"/>
+ </text>
+ <set targetElement="but3" attributeName="backgroundColor" to="red" begin="but3.activateEvent" dur="0.1"/>
+ <text src="data:,Repeat" id="but_rep" region="reg_text" fill="freeze">
+ <param name="backgroundColor" value="cyan"/>
+ </text>
+ <text src="data:,Ext" id="but_ext" region="reg_ext" fill="freeze">
+ <param name="backgroundColor" value="green"/>
+ <param name="fontColor" value="white"/>
+ </text>
+ <text src="data:,Int" id="but_int" region="reg_int" fill="freeze">
+ <param name="backgroundColor" value="green"/>
+ <param name="fontColor" value="white"/>
+ </text>
+ <excl>
+ <set targetElement="but_ext" attributeName="backgroundColor" to="red"
+ begin="0" dur="indefinite"/>
+ <set targetElement="but_ext" attributeName="backgroundColor" to="red"
+ begin="but_ext.activateEvent" dur="indefinite"/>
+ <set targetElement="but_int" attributeName="backgroundColor" to="red"
+ begin="but_int.activateEvent" dur="indefinite"/>
+ </excl>
+ <excl>
+ <set targetElement="vid" attributeName="src" to="img_scale_rep.smil"
+ begin="but_ext.activateEvent" dur="indefinite"/>
+ <set targetElement="vid" attributeName="src" to="img_scale.smil"
+ begin="but_int.activateEvent" dur="indefinite"/>
+ </excl>
+ <text src="data:,Stop" id="but4" region="reg_but4" fill="freeze">
+ <param name="fontColor" value="green"/>
+ <param name="fontSize" value="+1"/>
+ <param name="backgroundColor" value="red"/>
+ </text>
+ <video src="img_scale_rep.smil" id="vid" region="reg_img" fill="freeze" fit="meet" repeatCount="indefinite"/>
+ <excl dur="indefinite">
+ <animateMotion targetElement="reg_img" from="5,5" to="140,5"
+ begin="but1.activateEvent" dur="2" fill="freeze"
+ calcMode="spline" keySplines="0 .75 .25 1"/>
+ <animateMotion targetElement="reg_img" from="5,5" to="5,180"
+ begin="reg_but2.activateEvent" dur="2" fill="freeze"
+ calcMode="spline" keySplines="0.75 0 1 0.25"/>
+ <animateMotion targetElement="reg_img" from="5,5" to="140,180"
+ begin="reg_but3.activateEvent" dur="2" fill="freeze"
+ calcMode="spline" keySplines=".5 0 .5 1"/>
+ </excl>
+ </par>
+ </body>
+</smil>
diff --git a/tests/fade.rp b/tests/fade.rp
new file mode 100644
index 0000000..160c582
--- /dev/null
+++ b/tests/fade.rp
@@ -0,0 +1,8 @@
+<imfl>
+ <head duration="10" width="320" height="240"/>
+ <image handle="1" name="../icons/hi128-app-kmplayer.png"/>
+ <fill start="0" color="yellow"/>
+ <fadein start="1" duration="1" target="1" dstx="96" dsty="56"
+ dstw="128" dsth="128"/>
+ <fadeout start="4" duration="1" color="yellow"/>
+</imfl>
diff --git a/tests/img_scale.smil b/tests/img_scale.smil
new file mode 100644
index 0000000..1ae1c28
--- /dev/null
+++ b/tests/img_scale.smil
@@ -0,0 +1,27 @@
+<smil>
+ <head>
+ <layout>
+ <root-layout width="640" height="240" background-color="yellow"/>
+ <region id="reg_img1" left="5" top="15" width="150" height="210" background-color="red"/>
+ <region id="reg_img2" left="165" top="15" width="150" height="210" background-color="white"/>
+ <region id="reg_img3" left="325" top="15" width="150" height="210" background-color="blue"/>
+ <region id="reg_img4" left="485" top="15" width="150" height="210" background-color="orange"/>
+ </layout>
+ </head>
+ <body>
+ <par dur="2.5">
+ <img src="../icons/hi128-app-kmplayer.png" region="reg_img1" fit="fill" fill="freeze"/>
+ <img src="../icons/hi128-app-kmplayer.png" region="reg_img2" fit="hidden" fill="freeze"/>
+ <img src="../icons/hi128-app-kmplayer.png" region="reg_img3" fit="meet" fill="freeze"/>
+ <img src="../icons/hi128-app-kmplayer.png" region="reg_img4" fit="slice" fill="freeze"/>
+ <set targetElement="reg_img1" attributeName="width" to="75" begin="0.5s" dur="1s"/>
+ <set targetElement="reg_img2" attributeName="width" to="75" begin="0.5s" dur="1s"/>
+ <set targetElement="reg_img3" attributeName="width" to="75" begin="0.5s" dur="1s"/>
+ <set targetElement="reg_img4" attributeName="width" to="75" begin="0.5s" dur="1s"/>
+ <set targetElement="reg_img1" attributeName="height" to="75" begin="1s" dur="1s"/>
+ <set targetElement="reg_img2" attributeName="height" to="75" begin="1s" dur="1s"/>
+ <set targetElement="reg_img3" attributeName="height" to="75" begin="1s" dur="1s"/>
+ <set targetElement="reg_img4" attributeName="height" to="75" begin="1s" dur="1s"/>
+ </par>
+ </body>
+</smil>
diff --git a/tests/img_scale_rep.smil b/tests/img_scale_rep.smil
new file mode 100644
index 0000000..5a8d821
--- /dev/null
+++ b/tests/img_scale_rep.smil
@@ -0,0 +1,27 @@
+<smil>
+ <head>
+ <layout>
+ <root-layout width="640" height="240" background-color="yellow"/>
+ <region id="reg_img1" left="5" top="15" width="150" height="210" background-color="green"/>
+ <region id="reg_img2" left="165" top="15" width="150" height="210" background-color="grey"/>
+ <region id="reg_img3" left="325" top="15" width="150" height="210" background-color="yellow"/>
+ <region id="reg_img4" left="485" top="15" width="150" height="210" background-color="purple"/>
+ </layout>
+ </head>
+ <body>
+ <par dur="2.5" repeatCount="indefinite">
+ <img src="../icons/hi64-app-kmplayer.png" region="reg_img1" fit="fill" fill="freeze"/>
+ <img src="../icons/hi64-app-kmplayer.png" region="reg_img2" fit="hidden" fill="freeze"/>
+ <img src="../icons/hi64-app-kmplayer.png" region="reg_img3" fit="meet" fill="freeze"/>
+ <img src="../icons/hi64-app-kmplayer.png" region="reg_img4" fit="slice" fill="freeze"/>
+ <set targetElement="reg_img1" attributeName="width" to="75" begin="0.5s" dur="1s"/>
+ <set targetElement="reg_img2" attributeName="width" to="75" begin="0.5s" dur="1s"/>
+ <set targetElement="reg_img3" attributeName="width" to="75" begin="0.5s" dur="1s"/>
+ <set targetElement="reg_img4" attributeName="width" to="75" begin="0.5s" dur="1s"/>
+ <set targetElement="reg_img1" attributeName="height" to="75" begin="1s" dur="1s"/>
+ <set targetElement="reg_img2" attributeName="height" to="75" begin="1s" dur="1s"/>
+ <set targetElement="reg_img3" attributeName="height" to="75" begin="1s" dur="1s"/>
+ <set targetElement="reg_img4" attributeName="height" to="75" begin="1s" dur="1s"/>
+ </par>
+ </body>
+</smil>
diff --git a/tests/img_video_text.smil b/tests/img_video_text.smil
new file mode 100644
index 0000000..cf1adcb
--- /dev/null
+++ b/tests/img_video_text.smil
@@ -0,0 +1,32 @@
+<smil>
+ <head>
+ <layout>
+ <root-layout width="640" height="240"/>
+ <region id="reg_img" >
+ <region id="reg_text1" left="10%" top="25%" right="60%" bottom="25%"/>
+ <region id="reg_vid" left="55%" top="5%" right="5%" bottom="60%" background-color="DarkBlue"/>
+ <region id="reg_button1" left="446" top="202" width="130" height="26" z-index="2" background-color="LightGray"/>
+ <region id="reg_button2" left="446" top="202" width="132" height="28" z-index="1" background-color="DarkGray"/>
+ <region id="reg_text2" left="448" top="204" width="128" height="24" z-index="3"/>
+ </region>
+ </layout>
+ </head>
+ <body>
+ <par end="text2.activateEvent">
+ <img src="../icons/hi128-app-kmplayer.png" region="reg_img" fit="fill" fill="freeze"/>
+ <text src="some_text.html" region="reg_text1" begin="3" dur="5">
+ <param name="charset" value="iso-8859-1"/>
+ <param name="fontFace" value="System"/>
+ <param name="fontColor" value="yellow"/>
+ <param name="fontSize" value="+1"/>
+ <param name="backgroundColor" value="blue"/>
+ </text>
+ <video src="file:///home/koos/doc/example.avi" fit="meet" id="video1" region="reg_vid" begin="3"/>
+ <text src="data:,Stop" id="text2" region="reg_text2" fill="freeze">
+ <param name="backgroundColor" value="gray"/>
+ </text>
+ <set targetElement="reg_button1" attributeName="background-color" to="DarkGray" begin="reg_text2.inBoundsEvent" end="reg_text2.outOfBoundsEvent"/>
+ <set targetElement="reg_button2" attributeName="background-color" to="LightGray" begin="reg_text2.inBoundsEvent" end="reg_text2.outOfBoundsEvent"/>
+ </par>
+ </body>
+</smil>
diff --git a/tests/nested_smil.smil b/tests/nested_smil.smil
new file mode 100644
index 0000000..01f0417
--- /dev/null
+++ b/tests/nested_smil.smil
@@ -0,0 +1,25 @@
+<smil>
+ <head>
+ <layout>
+ <root-layout width="320" height="260"/>
+ <region id="nested_smil" left="0" top="0" right="0" height="240"/>
+ <region id="nested_but1" left="0" top="240" width="160" height="20" background-color="LightGray"/>
+ <region id="nested_but2" left="160" top="240" width="160" height="20" background-color="Orange"/>
+ </layout>
+ </head>
+ <body>
+ <par>
+ <excl>
+ <text src="data:,Start" id="text1" region="nested_but1" dur="indefinite" fill="freeze">
+ </text>
+ <video src="excl_timings.smil" id="video1" region="nested_smil" begin="nested_but1.activateEvent"/>
+ </excl>
+ <text src="data:,Change%20Source" id="text2" region="nested_but2" dur="indefinite" fill="freeze">
+ <param name="backgroundColor" value="orange"/>
+ <param name="fontColor" value="black"/>
+ </text>
+ <set target="video1" attribute="src" to="img_scale.smil" begin="nested_but2.activateEvent" dur="15"/>
+ <set target="text2" attribute="fontColor" to="gray" begin="nested_but2.activateEvent" dur="15"/>
+ </par>
+ </body>
+</smil>
diff --git a/tests/par_timings.smil b/tests/par_timings.smil
new file mode 100644
index 0000000..f2f64f1
--- /dev/null
+++ b/tests/par_timings.smil
@@ -0,0 +1,37 @@
+<!-- test for timing for 'par' tags -->
+<smil>
+ <head>
+ <layout>
+ <root-layout width="320" height="240" background-color="green"/>
+ <region id="region1" left="5%" top="10%" right="5%" bottom="50%" z-index="2"/>
+ <region id="region2" left="25%" top="60%" right="10%" bottom="5%" z-index="3" background-color="red"/>
+ <region id="region3" z-index="4"/>
+ </layout>
+ </head>
+ <body>
+ <par id="par1" end="text1.inBoundsEvent">
+ <set target="par1" attribute="title" to="Mouse Inbound" fill="freeze"/>
+ <text id="text1" src="data:,par%20end%3Dtext1.inBoundsEvent%0D%0Atext%20dur%3Dindefinite%0D%0Amove%20here%20to%20end%20'par'" region="region1" dur="indefinite"/>
+ <text src="data:,dur%3D5s" region="region2" dur="5"/>
+ </par>
+ <par endsync="text2">
+ <text id="text2" src="data:,par%20endsync%3Dtext2%0D%0Atext%20dur%3D7s" region="region1" dur="7s"/>
+ <text src="data:,dur%3D5" region="region2" dur="5"/>
+ </par>
+ <par dur="7s">
+ <text src="data:,par%20dur%3D7s%0D%0Atext%20dur%3Dindefinite" region="region1" dur="indefinite"/>
+ <par begin="1">
+ <text src="data:,nested%20par%20begin%3D1%0D%0Atext%20dur%3D5" region="region2" dur="5"/>
+ </par>
+ </par>
+ <par end="7s">
+ <text src="data:,par%20end%3D7s%0D%0Atext%20dur%3Dindefinite" region="region1" dur="indefinite"/>
+ <text src="data:,dur%3D5" region="region2" dur="5"/>
+ </par>
+ <par>
+ <text src="data:,par%20no%20dur%20set%0D%0Atext%20dur%3D7" region="region1" dur="7"/>
+ <text src="data:,dur%3D5" region="region2" dur="5"/>
+ </par>
+ <text src="data:,that's%20all%20folks" title="Carrot time" region="region3" dur="2s" backgroundColor="black" fontColor="white"/>
+ </body>
+</smil>
diff --git a/tests/region_animate.smil b/tests/region_animate.smil
new file mode 100644
index 0000000..699d5dc
--- /dev/null
+++ b/tests/region_animate.smil
@@ -0,0 +1,40 @@
+<!-- test for moving a region with the animate element -->
+<smil>
+ <head>
+ <layout>
+ <root-layout width="320" height="240" background-color="green"/>
+ <region id="region1" left="5%" top="10%" right="30%" bottom="50%" z-index="2"/>
+ <region id="region2" left="240" top="140" width="64" height="64" z-index="3" background-color="red"/>
+ <region id="region3" z-index="1"/>
+ </layout>
+ </head>
+ <body>
+ <par>
+ <text id="text1" src="data:,I'm%20a%20region" region="region1">
+ <param name="fontColor" value="yellow"/>
+ <param name="fontPtSize" value="10"/>
+ <param name="backgroundColor" value="blue"/>
+ <animate target="text1" attributeName="fontPtSize" calcMode="discrete" values="10;12;14;16;18;20;22;24;26;28;300" begin="5" dur="6"/>
+ </text>
+ <img id="image1" src="../icons/hi48-app-kmplayer.png" region="region2" left="8">
+ <animate target="region2" attributeName="background-color" values="red;white;blue" repeatCount="10" calcMode="discrete" dur="1.5"/>
+ </img>
+ <text src="data:,Move%20a%20region" region="region2" fill="freeze" top="48">
+ <param name="fontPtSize" value="6"/>
+ </text>
+ <animate target="region2" attributeName="left" from="240" to="10" begin="5" dur="5"/>
+ </par>
+ <par>
+ <set target="region2" attributeName="z-index" to="6" fill="freeze"/>
+ <set target="region2" attributeName="left" to="20" fill="freeze"/>
+ <set target="region2" attributeName="width" to="200" fill="freeze"/>
+ <set target="region3" attributeName="background-color" to="black" fill="freeze"/>
+ <set target="region3" attributeName="z-index" to="5" fill="freeze"/>
+ <text src="data:,that's%20all%20folks" region="region2" dur="2">
+ <param name="fontColor" value="green"/>
+ <param name="fontSize" value="+2"/>
+ <param name="backgroundColor" value="black"/>
+ </text>
+ </par>
+ </body>
+</smil>
diff --git a/tests/region_mouse_events.smil b/tests/region_mouse_events.smil
new file mode 100644
index 0000000..8962c74
--- /dev/null
+++ b/tests/region_mouse_events.smil
@@ -0,0 +1,115 @@
+<!-- test for mouse events -->
+<smil>
+ <head>
+ <layout>
+ <root-layout width="320" height="240" background-color="orange"/>
+ <region id="reg1" left="5%" top="10%" right="60%" bottom="50%"
+ background-color="blue">
+ <region id="reg1_1" left="10%" top="30%" right="10%" bottom="30%"/>
+ </region>
+ <region id="reg2" left="60%" top="10%" right="5%" bottom="50%"
+ background-color="blue">
+ <region id="reg2_1" left="5%" top="30%" right="10%" bottom="30%"/>
+ </region>
+ <region id="reg1_txt" left="5%" top="55%" width="15%" bottom="35%"/>
+ <region id="reg1_click" left="5%" top="65%" width="15%" bottom="25%"
+ background-color="red"/>
+ <region id="reg1_enter" left="5%" top="75%" width="15%" bottom="15%"
+ background-color="red"/>
+ <region id="reg1_leave" left="5%" top="85%" width="15%" bottom="5%"
+ background-color="red"/>
+ <region id="reg1_1_txt" left="25%" top="55%" width="15%" bottom="35%"/>
+ <region id="reg1_1_click" left="25%" top="65%" width="15%" bottom="25%"
+ background-color="red"/>
+ <region id="reg1_1_enter" left="25%" top="75%" width="15%" bottom="15%"
+ background-color="red"/>
+ <region id="reg1_1_leave" left="25%" top="85%" width="15%" bottom="5%"
+ background-color="red"/>
+ <region id="reg2_txt" left="60%" top="55%" width="15%" bottom="35%"/>
+ <region id="reg2_click" left="60%" top="65%" width="15%" bottom="25%"
+ background-color="red"/>
+ <region id="reg2_enter" left="60%" top="75%" width="15%" bottom="15%"
+ background-color="red"/>
+ <region id="reg2_leave" left="60%" top="85%" width="15%" bottom="5%"
+ background-color="red"/>
+ <region id="reg2_1_txt" left="80%" top="55%" width="15%" bottom="35%"/>
+ <region id="reg2_1_click" left="80%" top="65%" width="15%" bottom="25%"
+ background-color="red"/>
+ <region id="reg2_1_enter" left="80%" top="75%" width="15%" bottom="15%"
+ background-color="red"/>
+ <region id="reg2_1_leave" left="80%" top="85%" width="15%" bottom="5%"
+ background-color="red"/>
+ </layout>
+ </head>
+ <body>
+ <par dur="50">
+ <text id="text1" src="data:,Opaque%20child" region="reg1_1" fill="freeze">
+ <param name="backgroundColor" value="yellow"/>
+ </text>
+ <text id="text2" src="data:,Transparent%20child" region="reg2_1"
+ fill="freeze" sensitivity="transparent">
+ <param name="backgroundColor" value="yellow"/>
+ </text>
+ <text src="data:,Outer" region="reg1_txt" fill="freeze"
+ rn:backgroundOpacity="0%"/>
+ <text id="text1_click" src="data:,Clicked" region="reg1_click"
+ fill="freeze" rn:backgroundOpacity="0%"/>
+ <text id="text1_enter" src="data:,Entered" region="reg1_enter"
+ fill="freeze" rn:backgroundOpacity="0%"/>
+ <text id="text1_leave" src="data:,Leaved" region="reg1_leave"
+ fill="freeze" rn:backgroundOpacity="0%"/>
+ <text src="data:,Inner" region="reg1_1_txt" fill="freeze"
+ rn:backgroundOpacity="0%"/>
+ <text id="text1_1_click" src="data:,Clicked" region="reg1_1_click"
+ fill="freeze" rn:backgroundOpacity="0%"/>
+ <text id="text1_1_enter" src="data:,Entered" region="reg1_1_enter"
+ fill="freeze" rn:backgroundOpacity="0%"/>
+ <text id="text1_1_leave" src="data:,Leaved" region="reg1_1_leave"
+ fill="freeze" rn:backgroundOpacity="0%"/>
+ <text src="data:,Outer" region="reg2_txt" fill="freeze"
+ rn:backgroundOpacity="0%"/>
+ <text id="text2_click" src="data:,Clicked" region="reg2_click"
+ fill="freeze" rn:backgroundOpacity="0%"/>
+ <text id="text2_enter" src="data:,Entered" region="reg2_enter"
+ fill="freeze" rn:backgroundOpacity="0%"/>
+ <text id="text2_leave" src="data:,Leaved" region="reg2_leave"
+ fill="freeze" rn:backgroundOpacity="0%"/>
+ <text src="data:,Inner" region="reg2_1_txt" fill="freeze"
+ rn:backgroundOpacity="0%"/>
+ <text id="text2_1_click" src="data:,Clicked" region="reg2_1_click"
+ fill="freeze" rn:backgroundOpacity="0%"/>
+ <text id="text2_1_enter" src="data:,Entered" region="reg2_1_enter"
+ fill="freeze" rn:backgroundOpacity="0%"/>
+ <text id="text2_1_leave" src="data:,Leaved" region="reg2_1_leave"
+ fill="freeze" rn:backgroundOpacity="0%"/>
+
+ <set target="reg1_click" attribute="background-color" to="green"
+ begin="reg1.activateEvent" dur="1"/>
+ <set target="reg1_enter" attribute="background-color" to="green"
+ begin="reg1.inBoundsEvent" end="reg1.outOfBoundsEvent"/>
+ <set target="reg1_leave" attribute="background-color" to="green"
+ end="reg1.inBoundsEvent" begin="reg1.outOfBoundsEvent"/>
+
+ <set target="reg1_1_click" attribute="background-color" to="green"
+ begin="reg1_1.activateEvent" dur="1"/>
+ <set target="reg1_1_enter" attribute="background-color" to="green"
+ begin="reg1_1.inBoundsEvent" end="reg1_1.outOfBoundsEvent"/>
+ <set target="reg1_1_leave" attribute="background-color" to="green"
+ end="reg1_1.inBoundsEvent" begin="reg1_1.outOfBoundsEvent"/>
+
+ <set target="reg2_click" attribute="background-color" to="green"
+ begin="reg2.activateEvent" dur="1"/>
+ <set target="reg2_enter" attribute="background-color" to="green"
+ begin="reg2.inBoundsEvent" end="reg2.outOfBoundsEvent"/>
+ <set target="reg2_leave" attribute="background-color" to="green"
+ end="reg2.inBoundsEvent" begin="reg2.outOfBoundsEvent"/>
+
+ <set target="reg2_1_click" attribute="background-color" to="green"
+ begin="reg2_1.activateEvent" dur="1"/>
+ <set target="reg2_1_enter" attribute="background-color" to="green"
+ begin="reg2_1.inBoundsEvent" end="reg2_1.outOfBoundsEvent"/>
+ <set target="reg2_1_leave" attribute="background-color" to="green"
+ end="reg2_1.inBoundsEvent" begin="reg2_1.outOfBoundsEvent"/>
+ </par>
+ </body>
+</smil>
diff --git a/tests/regpoint.smil b/tests/regpoint.smil
new file mode 100644
index 0000000..0b36c73
--- /dev/null
+++ b/tests/regpoint.smil
@@ -0,0 +1,53 @@
+<smil>
+ <head>
+ <layout>
+ <region id="img1" left="0" top="5" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img2" left="50" top="5" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img3" left="100" top="5" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img4" left="150" top="5" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img5" left="200" top="5" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img6" left="250" top="5" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img7" left="300" top="5" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img8" left="350" top="5" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img9" left="400" top="5" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img10" left="0" top="55" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img11" left="50" top="55" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img12" left="100" top="55" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img13" left="150" top="55" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img14" left="200" top="55" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img15" left="250" top="55" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img16" left="300" top="55" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img17" left="350" top="55" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="img18" left="400" top="55" width="48" height="48" background-color="blue" z-index="2" />
+ <region id="region_end" z-index="1"/>
+ <regPoint id="north_north_west" top="20" left="40"/>
+ <regPoint id="north_west" top="20" left="20" regAlign="midLeft"/>
+ <root-layout background-color="white" width="450" height="240"/>
+ </layout>
+ </head>
+ <body>
+ <par dur="10">
+ <img src="../icons/hi48-app-kmplayer.png" region="img1" regPoint="center" regAlign="topLeft" fill="freeze"/>
+ <img src="../icons/hi48-app-kmplayer.png" region="img2" regPoint="center" regAlign="midLeft" fill="freeze"/>
+ <img src="../icons/hi48-app-kmplayer.png" region="img3" regPoint="center" regAlign="bottomLeft" fill="freeze"/>
+ <img src="../icons/hi48-app-kmplayer.png" region="img4" regPoint="center" regAlign="topMid" fill="freeze"/>
+ <img src="../icons/hi48-app-kmplayer.png" region="img5" regPoint="center" regAlign="center" fill="freeze"/>
+ <img src="../icons/hi48-app-kmplayer.png" region="img6" regPoint="center" regAlign="bottomMid" fill="freeze"/>
+ <img src="../icons/hi48-app-kmplayer.png" region="img7" regPoint="center" regAlign="topRight" fill="freeze"/>
+ <img src="../icons/hi48-app-kmplayer.png" region="img8" regPoint="center" regAlign="midRight" fill="freeze"/>
+ <img src="../icons/hi48-app-kmplayer.png" region="img9" regPoint="center" regAlign="bottomRight" fill="freeze"/>
+ <img src="../icons/hi48-app-kmplayer.png" region="img10" regPoint="north_north_west" regAlign="topLeft" fill="freeze"/>
+ <img src="../icons/hi48-app-kmplayer.png" region="img11" regPoint="north_west" fill="freeze"/>
+ <img src="../icons/hi48-app-kmplayer.png" region="img12" regPoint="north_west" regAlign="topLeft" fill="freeze"/>
+ </par>
+ <par>
+ <set target="region_end" attributeName="background-color" to="black" fill="freeze"/>
+ <set target="region_end" attributeName="z-index" to="3" fill="freeze"/>
+ <text src="data:,that's%20all%20folks" region="region_end" dur="2" left="20%" top="40%">
+ <param name="fontColor" value="green"/>
+ <param name="fontSize" value="+2"/>
+ <param name="backgroundColor" value="black"/>
+ </text>
+ </par>
+ </body>
+</smil>
diff --git a/tests/rp.smil b/tests/rp.smil
new file mode 100644
index 0000000..7364a06
--- /dev/null
+++ b/tests/rp.smil
@@ -0,0 +1,13 @@
+<smil>
+ <head>
+ <layout>
+ <root-layout width="320" height="240" background-color="red"/>
+ <region left="5" top="15" width="160" height="120" background-color="blue">
+ <region id="img1" left="5" top="5" right="5" bottom="5"/>
+ </region>
+ </layout>
+ </head>
+ <body>
+ <img region="img1" fit="meet" src="fade.rp"/>
+ </body>
+</smil>
diff --git a/tests/smil_files.m3u b/tests/smil_files.m3u
new file mode 100644
index 0000000..b58fb0c
--- /dev/null
+++ b/tests/smil_files.m3u
@@ -0,0 +1,6 @@
+excl_timings.smil
+img_scale.smil
+img_video_text.smil
+par_timings.smil
+region_animate.smil
+region_mouse_events.smil
diff --git a/tests/some_text.html b/tests/some_text.html
new file mode 100644
index 0000000..a960054
--- /dev/null
+++ b/tests/some_text.html
@@ -0,0 +1,6 @@
+<html>
+ <body>
+ <h1>Title</h1>
+ Some <font color="red">text</font> for <b>reading</b>
+ </body>
+</html>
diff --git a/tests/text.smil b/tests/text.smil
new file mode 100644
index 0000000..901a126
--- /dev/null
+++ b/tests/text.smil
@@ -0,0 +1,40 @@
+<!-- test for moving a region with the animate element -->
+<smil>
+ <head>
+ <layout>
+ <root-layout width="640" height="480" background-color="green"/>
+ <region id="region1" left="7%" top="10%" width="24%" height="10%" z-index="1" background-color="pink" showBackground="whenActive"/>
+ <region id="region2" left="38%" top="10%" width="24%" height="10%" z-index="2" background-color="yellow" showBackground="whenActive"/>
+ <region id="region3" left="69%" top="10%" width="24%" height="10%" z-index="3" background-color="cyan" showBackground="whenActive"/>
+ <region id="region4" left="25%" top="10%" width="50%" height="80%" z-index="4"/>
+ </layout>
+ </head>
+ <body>
+ <par dur="5">
+ <text id="text1" src="data:,Left Align" region="region1">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="12"/>
+ </text>
+ <text id="text2" src="data:,Center Align" region="region2">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="12"/>
+ <param name="hAlign" value="center"/>
+ </text>
+ <text id="text3" src="data:,Right Align" region="region3">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="12"/>
+ <param name="hAlign" value="right"/>
+ </text>
+ <animate target="region1" attributeName="left" from="7%" to="69%" begin="2" dur="1.5" fill="freeze"/>
+ <animate target="region3" attributeName="left" from="69%" to="7%" begin="2" dur="1.5" fill="freeze"/>
+ <animate target="text3" attributeName="top" from="0%" to="-50%" begin="3.5" dur="1.5" fill="freeze"/>
+ </par>
+ <par dur="5">
+ <text id="text4" src="chapter2.txt" region="region4">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="11"/>
+ </text>
+ <animate target="text4" attributeName="top" from="0%" to="-170%" begin=".5" dur="4" fill="freeze"/>
+ </par>
+ </body>
+</smil>
diff --git a/tests/timings.smil b/tests/timings.smil
new file mode 100644
index 0000000..3db0120
--- /dev/null
+++ b/tests/timings.smil
@@ -0,0 +1,57 @@
+<smil>
+ <head>
+ <layout>
+ <root-layout width="320" height="240"/>
+ <region id="reg1" left="5%" right="5%" top="5%" height="10%"/>
+ <region id="reg2" left="5%" right="5%" top="25%" height="10%"/>
+ <region id="reg3" left="5%" right="5%" top="45%" height="10%"/>
+ <region left="5%" right="5%" bottom="5%" height="10%"
+ background-color="gray">
+ <region id="but_rec" left="10%" width="30%" />
+ <region id="but_dep" right="10%" width="30%" />
+ </region>
+ </layout>
+ </head>
+ <body>
+ <par>
+ <a href="#rec">
+ <text id="rec_txt" src="data:,Recommended" region="but_rec"
+ fill="freeze"/>
+ </a>
+ <a href="#dep">
+ <text id="dep_txt" src="data:,Deprecated" region="but_dep"
+ fill="freeze"/>
+ </a>
+ <seq>
+ <par id="rec">
+ <text id="rtext1" src="data:,id=rtext1%20begin=2%20dur=2"
+ region="reg1" begin="2" dur="2"/>
+ <text src="data:,begin=rtext1.begin+1%20dur=2" region="reg2"
+ begin="rtext1.begin +1" dur="2"/>
+ <text src="data:,begin=rtext1.end%20dur=2" region="reg3"
+ begin="rtext1.end" dur="2"/>
+ <set target="rec_txt" attribute="background-color" to="green"
+ fill="freeze"/>
+ <set target="reg1" attribute="background-color" to="pink"
+ fill="freeze"/>
+ <set target="reg2" attribute="background-color" to="pink"
+ fill="freeze"/>
+ <set target="reg3" attribute="background-color" to="pink"
+ fill="freeze"/>
+ </par>
+ <par id="dep">
+ <text id="dtext1" src="data:,id=dtext1%20begin=2%20dur=2"
+ region="reg1" begin="2" dur="2"/>
+ <text src="data:,id(dtext1)(1)" region="reg2"
+ begin="id(dtext1)(1)" dur="2"/>
+ <set target="dep_txt" attribute="background-color" to="green"
+ fill="freeze"/>
+ <set target="reg1" attribute="background-color" to="red"
+ fill="freeze"/>
+ <set target="reg2" attribute="background-color" to="red"
+ fill="freeze"/>
+ </par>
+ </seq>
+ </par>
+ </body>
+</smil>
diff --git a/tests/transition.smil b/tests/transition.smil
new file mode 100644
index 0000000..3f35fff
--- /dev/null
+++ b/tests/transition.smil
@@ -0,0 +1,181 @@
+<smil>
+ <head>
+ <layout>
+ <root-layout width="160" height="120" background-color="green"/>
+ <region id="region1" left="25%" top="10%" right="25%" bottom="30%"/>
+ <region id="region2" left="5%" top="75%" right="5%" bottom="5%"
+ background-color="white"/>
+ <region id="region3" z-index="2"/>
+ </layout>
+ <transition id="pushwipe1" dur="1" subtype="fromTop" type="pushWipe"/>
+ <transition id="pushwipe2" dur="1" subtype="fromBottom" type="pushWipe"/>
+ <transition id="iriswipe1" dur="1" type="irisWipe"/>
+ <transition id="iriswipe2" dur="1" subtype="diamond" type="irisWipe"/>
+ <transition id="barwipe1" dur="1" type="barWipe"/>
+ <transition id="barwipe2" dur="1" direction="reverse" type="barWipe"/>
+ <transition id="barwipe4" dur="1" type="barWipe"
+ startProgress=".4" endProgress="0.6"/>
+ <transition id="barwipe5" dur="1" type="barWipe" endProgress="0.5"/>
+ <transition id="barwipe3" dur="0.3" type="barWipe"/>
+ <transition id="clockwipe1" dur="1" type="clockWipe"/>
+ <transition id="clockwipe2" dur="1" type="clockWipe"
+ subtype="clockwiseThree" direction="reverse"/>
+ <transition id="bowtiewipe1" dur="1" type="bowTieWipe"/>
+ <transition id="bowtiewipe2" dur="1" type="bowTieWipe" subtype="horizontal"/>
+ <transition id="ellipsewipe1" dur="1" type="ellipseWipe"/>
+ <transition id="ellipsewipe2" dur="1" type="ellipseWipe"
+ subtype="vertical"/>
+ <transition id="fade1" dur="1" type="fade"/>
+ <transition id="fade2" dur="0.3" type="fade"/>
+ </head>
+ <body>
+ <seq>
+ <brush region="region3" dur="1.5" color="gray" transOut="ellipsewipe1" />
+ <par>
+ <img src="../icons/hi64-app-kmplayer.png" dur="3" region="region1"
+ transIn="bowtiewipe1" transOut="bowtiewipe2" fit="tile"/>
+ <seq>
+ <text src="data:,bowTieWipe%20vertical" region="region2"
+ dur="1.5" transIn="fade2" transOut="barwipe3">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ <text src="data:,bowTieWipe%20horizontal"
+ region="region2" dur="1.5" transIn="barwipe3" transOut="fade2">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ </seq>
+ </par>
+ <par>
+ <img src="../icons/hi64-app-kmplayer.png" dur="3" region="region1"
+ transIn="clockwipe1" transOut="clockwipe2"/>
+ <seq>
+ <text src="data:,clockWipe%20clockwiseTwelve" region="region2"
+ dur="1.5" transIn="fade2" transOut="barwipe3">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ <text src="data:,clockWipe%20clockwiseThree%20reversed"
+ region="region2" dur="1.5" transIn="barwipe3" transOut="fade2">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ </seq>
+ </par>
+ <par>
+ <img src="../icons/hi64-app-kmplayer.png" dur="3" region="region1"
+ transIn="pushwipe1" transOut="pushwipe2"/>
+ <seq>
+ <text src="data:,pushWipe%20fromTop" region="region2" dur="1.5"
+ transIn="fade2" transOut="barwipe3">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ <text src="data:,pushWipe%20fromBottom" region="region2" dur="1.5"
+ transIn="barwipe3" transOut="fade2">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ </seq>
+ </par>
+ <par>
+ <img src="../icons/hi64-app-kmplayer.png" dur="3" region="region1"
+ transIn="iriswipe1" transOut="iriswipe2"/>
+ <seq>
+ <text src="data:,irishWipe%20rectangle" region="region2" dur="1.5"
+ transIn="fade2" transOut="barwipe3">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ <text src="data:,irishWipe%20diamond" region="region2" dur="1.5"
+ transIn="barwipe3" transOut="fade2">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ </seq>
+ </par>
+ <par>
+ <img src="../icons/hi64-app-kmplayer.png" dur="3" region="region1"
+ transIn="barwipe1" transOut="barwipe2"/>
+ <seq>
+ <text src="data:,barWipe%20leftToRight" region="region2" dur="1.5"
+ transIn="fade2" transOut="barwipe3">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ <text src="data:,irishWipe%20leftToRight%20reversed"
+ region="region2" dur="1.5" transIn="barwipe3" transOut="fade2">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ </seq>
+ </par>
+ <par>
+ <img src="../icons/hi64-app-kmplayer.png" dur="3" region="region1"
+ transIn="barwipe4" transOut="barwipe5"/>
+ <seq>
+ <text src="data:,barWipe%20leftToRight%2040-60" region="region2"
+ dur="1.5" transIn="fade2" transOut="barwipe3">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ <text src="data:,irishWipe%20leftToRight%200-50%20reversed"
+ region="region2" dur="1.5" transIn="barwipe3" transOut="fade2">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ </seq>
+ </par>
+ <par>
+ <img src="../icons/hi64-app-kmplayer.png" dur="3" region="region1"
+ transIn="fade1" transOut="fade1"/>
+ <seq>
+ <text src="data:,fade" region="region2" dur="1.5"
+ transIn="fade2" transOut="barwipe3">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ <text src="data:,fade" region="region2" dur="1.5"
+ transIn="fade2" transOut="fade2">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ </seq>
+ </par>
+ <par>
+ <img src="../icons/hi64-app-kmplayer.png" dur="3" region="region1"
+ transIn="ellipsewipe1" transOut="ellipsewipe2"/>
+ <seq>
+ <text src="data:,ellipseWipe%20vertical" region="region2"
+ dur="1.5" transIn="fade2" transOut="barwipe3">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ <text src="data:,ellipseWipe%20vertical"
+ region="region2" dur="1.5" transIn="barwipe3" transOut="fade2">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ </seq>
+ </par>
+ <par>
+ <video src="rp.smil" dur="6" region="region1" fit="meet"
+ transIn="clockwipe1" transOut="ellipsewipe1"/>
+ <seq>
+ <text src="data:,nested rp.smil%20clockWipe" region="region2"
+ dur="3" transIn="fade2" transOut="barwipe3">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ <text src="data:,ellipseWipe%20circle"
+ region="region2" dur="3" transIn="barwipe3" transOut="fade2">
+ <param name="fontColor" value="blue"/>
+ <param name="fontPtSize" value="10"/>
+ </text>
+ </seq>
+ </par>
+ <brush region="region3" dur="2" color="gray" transIn="ellipsewipe1" />
+ </seq>
+ </body>
+</smil>